diff --git a/python/gui/qgsfieldvalidator.sip b/python/gui/qgsfieldvalidator.sip index ab9dae42da0..5d5de300498 100644 --- a/python/gui/qgsfieldvalidator.sip +++ b/python/gui/qgsfieldvalidator.sip @@ -6,7 +6,7 @@ class QgsFieldValidator : QValidator %End public: - QgsFieldValidator( QObject *parent, const QgsField &field ); + QgsFieldValidator( QObject *parent, const QgsField &field, QString dateFormat = "yyyy-MM-dd" ); ~QgsFieldValidator(); virtual State validate( QString &, int & ) const; diff --git a/src/app/qgsattributetypedialog.cpp b/src/app/qgsattributetypedialog.cpp index 701b1a94220..c755e009731 100644 --- a/src/app/qgsattributetypedialog.cpp +++ b/src/app/qgsattributetypedialog.cpp @@ -79,6 +79,11 @@ QgsVectorLayer::ValueRelationData QgsAttributeTypeDialog::valueRelationData() return mValueRelationData; } +QString QgsAttributeTypeDialog::dateFormat() +{ + return mDateFormat; +} + QMap &QgsAttributeTypeDialog::valueMap() { return mValueMap; @@ -89,7 +94,7 @@ bool QgsAttributeTypeDialog::fieldEditable() return isFieldEditableCheckBox->isChecked(); } -void QgsAttributeTypeDialog::setFieldEditable(bool editable) +void QgsAttributeTypeDialog::setFieldEditable( bool editable ) { isFieldEditableCheckBox->setChecked( editable ); } @@ -338,6 +343,11 @@ void QgsAttributeTypeDialog::setValueRelation( QgsVectorLayer::ValueRelationData mValueRelationData = valueRelation; } +void QgsAttributeTypeDialog::setDateFormat( QString dateFormat ) +{ + mDateFormat = dateFormat; +} + void QgsAttributeTypeDialog::setIndex( int index, QgsVectorLayer::EditType editType ) { mIndex = index; @@ -446,6 +456,7 @@ void QgsAttributeTypeDialog::setIndex( int index, QgsVectorLayer::EditType editT maximumDoubleSpinBox->setValue( mRangeData.mMax.toDouble() ); stepDoubleSpinBox->setValue( mRangeData.mStep.toDouble() ); } + if ( editType == QgsVectorLayer::EditRange ) { rangeWidget->setCurrentIndex( 0 ); @@ -475,6 +486,10 @@ void QgsAttributeTypeDialog::setIndex( int index, QgsVectorLayer::EditType editT valueRelationFilterExpression->setText( mValueRelationData.mFilterExpression ); break; + case QgsVectorLayer::Calendar: + leDateFormat->setText( mDateFormat ); + break; + case QgsVectorLayer::LineEdit: case QgsVectorLayer::UniqueValues: case QgsVectorLayer::Classification: @@ -484,13 +499,11 @@ void QgsAttributeTypeDialog::setIndex( int index, QgsVectorLayer::EditType editT case QgsVectorLayer::Immutable: case QgsVectorLayer::Hidden: case QgsVectorLayer::TextEdit: - case QgsVectorLayer::Calendar: case QgsVectorLayer::UuidGenerator: break; } } - void QgsAttributeTypeDialog::setPage( int index ) { selectionListWidget->setCurrentRow( index ); @@ -639,6 +652,7 @@ void QgsAttributeTypeDialog::accept() break; case 11: mEditType = QgsVectorLayer::Calendar; + mDateFormat = leDateFormat->text(); break; case 12: mEditType = QgsVectorLayer::ValueRelation; diff --git a/src/app/qgsattributetypedialog.h b/src/app/qgsattributetypedialog.h index 42b17c89105..783258ee71f 100644 --- a/src/app/qgsattributetypedialog.h +++ b/src/app/qgsattributetypedialog.h @@ -82,6 +82,12 @@ class QgsAttributeTypeDialog: public QDialog, private Ui::QgsAttributeTypeDialog */ void setValueRelation( QgsVectorLayer::ValueRelationData valueRelationData ); + /** + * Setter to date format + * @param dateFormat date format + */ + void setDateFormat( QString dateFormat ); + /** * Setter for checkbox for editable state of field * @param bool editable @@ -111,6 +117,11 @@ class QgsAttributeTypeDialog: public QDialog, private Ui::QgsAttributeTypeDialog */ QgsVectorLayer::ValueRelationData valueRelationData(); + /** + * Getter for date format + */ + QString dateFormat(); + /** * Getter for checkbox for editable state of field */ @@ -181,6 +192,7 @@ class QgsAttributeTypeDialog: public QDialog, private Ui::QgsAttributeTypeDialog QgsVectorLayer::RangeData mRangeData; QgsVectorLayer::ValueRelationData mValueRelationData; QgsVectorLayer::EditType mEditType; + QString mDateFormat; }; #endif diff --git a/src/app/qgsfieldsproperties.cpp b/src/app/qgsfieldsproperties.cpp index c11b2ef6c99..9b444f0c051 100644 --- a/src/app/qgsfieldsproperties.cpp +++ b/src/app/qgsfieldsproperties.cpp @@ -487,6 +487,8 @@ void QgsFieldsProperties::attributeTypeDialog() QPair checkStates = mCheckedStates.value( index, mLayer->checkedState( index ) ); attributeTypeDialog.setCheckedState( checkStates.first, checkStates.second ); + attributeTypeDialog.setDateFormat( mLayer->dateFormat( index ) ); + attributeTypeDialog.setIndex( index, mEditTypeMap.value( index, mLayer->editType( index ) ) ); attributeTypeDialog.setFieldEditable( mLayer->fieldEditable( index ) ); @@ -517,6 +519,9 @@ void QgsFieldsProperties::attributeTypeDialog() case QgsVectorLayer::ValueRelation: mValueRelationData.insert( index, attributeTypeDialog.valueRelationData() ); break; + case QgsVectorLayer::Calendar: + mDateFormat.insert( index, attributeTypeDialog.dateFormat() ); + break; case QgsVectorLayer::LineEdit: case QgsVectorLayer::TextEdit: case QgsVectorLayer::UniqueValues: @@ -526,7 +531,6 @@ void QgsFieldsProperties::attributeTypeDialog() case QgsVectorLayer::Enumeration: case QgsVectorLayer::Immutable: case QgsVectorLayer::Hidden: - case QgsVectorLayer::Calendar: case QgsVectorLayer::UuidGenerator: break; } @@ -820,7 +824,7 @@ void QgsFieldsProperties::apply() QgsVectorLayer::EditType editType = editTypeFromButtonText( pb->text() ); mLayer->setEditType( idx, editType ); - mLayer->setFieldEditable( idx, mFieldEditables.value( idx, true )); + mLayer->setFieldEditable( idx, mFieldEditables.value( idx, true ) ); switch ( editType ) { @@ -856,6 +860,13 @@ void QgsFieldsProperties::apply() } break; + case QgsVectorLayer::Calendar: + if ( mDateFormat.contains( idx ) ) + { + mLayer->dateFormat( idx ) = mDateFormat[idx]; + } + break; + case QgsVectorLayer::LineEdit: case QgsVectorLayer::UniqueValues: case QgsVectorLayer::UniqueValuesEditable: @@ -865,7 +876,6 @@ void QgsFieldsProperties::apply() case QgsVectorLayer::Immutable: case QgsVectorLayer::Hidden: case QgsVectorLayer::TextEdit: - case QgsVectorLayer::Calendar: case QgsVectorLayer::UuidGenerator: break; } diff --git a/src/app/qgsfieldsproperties.h b/src/app/qgsfieldsproperties.h index 4869a2070d6..7b9e5945384 100644 --- a/src/app/qgsfieldsproperties.h +++ b/src/app/qgsfieldsproperties.h @@ -130,6 +130,7 @@ class QgsFieldsProperties : public QWidget, private Ui_QgsFieldsPropertiesBase QMap > mCheckedStates; QMap mEditTypeMap; QMap mButtonMap; + QMap mDateFormat; enum attrColumns { diff --git a/src/app/qgsidentifyresultsdialog.cpp b/src/app/qgsidentifyresultsdialog.cpp index 86e3539d366..3a788f67073 100644 --- a/src/app/qgsidentifyresultsdialog.cpp +++ b/src/app/qgsidentifyresultsdialog.cpp @@ -361,6 +361,11 @@ void QgsIdentifyResultsDialog::addFeature( QgsVectorLayer *vlayer, const QgsFeat value = vlayer->valueMap( i ).key( value.toString(), QString( "(%1)" ).arg( value.toString() ) ); break; + case QgsVectorLayer::Calendar: + if ( value.canConvert( QVariant::Date ) ) + value = value.toDate().toString( vlayer->dateFormat( i ) ); + break; + default: break; } diff --git a/src/core/qgsvectorlayer.cpp b/src/core/qgsvectorlayer.cpp index 3ae5bd0f497..9f9b4c51389 100644 --- a/src/core/qgsvectorlayer.cpp +++ b/src/core/qgsvectorlayer.cpp @@ -2678,13 +2678,16 @@ bool QgsVectorLayer::readSymbology( const QDomNode& node, QString& errorMessage } break; + case Calendar: + mDateFormats[ name ] = editTypeElement.attribute( "dateFormat" ); + break; + case Classification: case FileName: case Immutable: case Hidden: case LineEdit: case TextEdit: - case Calendar: case Enumeration: case UniqueValues: case UniqueValuesEditable: @@ -2988,6 +2991,10 @@ bool QgsVectorLayer::writeSymbology( QDomNode& node, QDomDocument& doc, QString& } break; + case Calendar: + editTypeElement.setAttribute( "dateFormat", mDateFormats[ it.key()] ); + break; + case LineEdit: case UniqueValues: case UniqueValuesEditable: @@ -2995,7 +3002,6 @@ bool QgsVectorLayer::writeSymbology( QDomNode& node, QDomDocument& doc, QString& case FileName: case Hidden: case TextEdit: - case Calendar: case Enumeration: case Immutable: case UuidGenerator: @@ -3898,6 +3904,18 @@ QgsVectorLayer::RangeData &QgsVectorLayer::range( int idx ) return mRanges[fieldName]; } +QString &QgsVectorLayer::dateFormat( int idx ) +{ + const QgsFields &fields = pendingFields(); + + QString fieldName = fields[idx].name(); + + if ( !mDateFormats.contains( fieldName ) ) + mDateFormats[fieldName] = "yyyy-MM-dd"; + + return mDateFormats[fieldName]; +} + bool QgsVectorLayer::fieldEditable( int idx ) { const QgsFields &fields = pendingFields(); diff --git a/src/core/qgsvectorlayer.h b/src/core/qgsvectorlayer.h index 523c1a9d07e..e4cdd9ea692 100644 --- a/src/core/qgsvectorlayer.h +++ b/src/core/qgsvectorlayer.h @@ -767,6 +767,11 @@ class CORE_EXPORT QgsVectorLayer : public QgsMapLayer **/ ValueRelationData &valueRelation( int idx ); + /**access date format + * @note added in 1.9 + */ + QString &dateFormat( int idx ); + /**is edit widget editable * @note added in 1.9 **/ @@ -1074,6 +1079,7 @@ class CORE_EXPORT QgsVectorLayer : public QgsMapLayer QMap< QString, RangeData > mRanges; QMap< QString, QPair > mCheckedStates; QMap< QString, ValueRelationData > mValueRelations; + QMap< QString, QString> mDateFormats; /** Defines the default layout to use for the attribute editor (Drag and drop, UI File, Generated) */ EditorLayout mEditorLayout; diff --git a/src/gui/attributetable/qgsattributetablemodel.cpp b/src/gui/attributetable/qgsattributetablemodel.cpp index 164859ca80a..164be9cd65c 100644 --- a/src/gui/attributetable/qgsattributetablemodel.cpp +++ b/src/gui/attributetable/qgsattributetablemodel.cpp @@ -643,11 +643,20 @@ QVariant QgsAttributeTableModel::data( const QModelIndex &index, int role ) cons } } - if ( role == Qt::DisplayRole && mValueMaps.contains( fieldId ) ) + if ( role == Qt::DisplayRole ) { - return mValueMaps[ fieldId ]->key( val.toString(), QString( "(%1)" ).arg( val.toString() ) ); + if ( mValueMaps.contains( fieldId ) ) + { + return mValueMaps[ fieldId ]->key( val.toString(), QString( "(%1)" ).arg( val.toString() ) ); + } + + if ( mLayer->editType( fieldId ) == QgsVectorLayer::Calendar && val.canConvert( QVariant::Date ) ) + { + return val.toDate().toString( mLayer->dateFormat( fieldId ) ); + } } + return val.toString(); } diff --git a/src/gui/qgsattributeeditor.cpp b/src/gui/qgsattributeeditor.cpp index 49d45953719..1fc2cd5f8c6 100644 --- a/src/gui/qgsattributeeditor.cpp +++ b/src/gui/qgsattributeeditor.cpp @@ -26,6 +26,7 @@ #include #include #include +#include #include #include @@ -87,8 +88,12 @@ void QgsAttributeEditor::selectDate() dlg->setWindowTitle( tr( "Select a date" ) ); QVBoxLayout *vl = new QVBoxLayout( dlg ); + const QgsFieldValidator *v = dynamic_cast( le->validator() ); + QString dateFormat = v ? v->dateFormat() : "yyyy-MM-dd"; + QCalendarWidget *cw = new QCalendarWidget( dlg ); - cw->setSelectedDate( QDate::fromString( le->text(), Qt::ISODate ) ); + QString prevValue = le->text(); + cw->setSelectedDate( QDate::fromString( prevValue, dateFormat ) ); vl->addWidget( cw ); QDialogButtonBox *buttonBox = new QDialogButtonBox( dlg ); @@ -101,7 +106,9 @@ void QgsAttributeEditor::selectDate() if ( dlg->exec() == QDialog::Accepted ) { - le->setText( cw->selectedDate().toString( Qt::ISODate ) ); + QString newValue = cw->selectedDate().toString( dateFormat ); + le->setText( newValue ); + le->setModified( newValue != prevValue ); } } @@ -483,7 +490,7 @@ QWidget *QgsAttributeEditor::createAttributeEditor( QWidget *parent, QWidget *ed } else { - le = new QLineEdit( parent ); + le = new QgsFilterLineEdit( parent ); } if ( le ) @@ -507,7 +514,7 @@ QWidget *QgsAttributeEditor::createAttributeEditor( QWidget *parent, QWidget *ed le->setReadOnly( true ); } - le->setValidator( new QgsFieldValidator( le, field ) ); + le->setValidator( new QgsFieldValidator( le, field, vl->dateFormat( idx ) ) ); myWidget = le; } @@ -526,13 +533,13 @@ QWidget *QgsAttributeEditor::createAttributeEditor( QWidget *parent, QWidget *ed if ( cb ) { if ( cb->isEditable() ) - cb->setValidator( new QgsFieldValidator( cb, field ) ); + cb->setValidator( new QgsFieldValidator( cb, field, vl->dateFormat( idx ) ) ); myWidget = cb; } if ( myWidget ) { - if (editType == QgsVectorLayer::Immutable) + if ( editType == QgsVectorLayer::Immutable ) myWidget->setDisabled( true ); QgsStringRelay* relay = NULL; @@ -611,7 +618,7 @@ QWidget *QgsAttributeEditor::createAttributeEditor( QWidget *parent, QWidget *ed } else { - le = new QLineEdit(); + le = new QgsFilterLineEdit(); pb = new QPushButton( tr( "..." ) ); @@ -625,6 +632,9 @@ QWidget *QgsAttributeEditor::createAttributeEditor( QWidget *parent, QWidget *ed myWidget->setLayout( hbl ); } + if ( le ) + le->setValidator( new QgsFieldValidator( le, field, vl->dateFormat( idx ) ) ); + if ( pb ) { if ( editType == QgsVectorLayer::FileName ) @@ -783,7 +793,7 @@ bool QgsAttributeEditor::retrieveValue( QWidget *widget, QgsVectorLayer *vl, int QCalendarWidget *cw = qobject_cast( widget ); if ( cw ) { - text = cw->selectedDate().toString( Qt::ISODate ); + text = cw->selectedDate().toString( vl->dateFormat( idx ) ); } le = widget->findChild(); @@ -792,6 +802,11 @@ bool QgsAttributeEditor::retrieveValue( QWidget *widget, QgsVectorLayer *vl, int if ( !cw && !gb && le ) { text = le->text(); + modified = le->isModified(); + if ( text == nullValue ) + { + text = QString::null; + } } switch ( theField.type() ) @@ -842,7 +857,7 @@ bool QgsAttributeEditor::retrieveValue( QWidget *widget, QgsVectorLayer *vl, int break; case QVariant::Date: { - QDate myDateValue = QDate::fromString( text, Qt::ISODate ); + QDate myDateValue = QDate::fromString( text, vl->dateFormat( idx ) ); if ( myDateValue.isValid() && !text.isEmpty() ) { value = myDateValue; @@ -856,7 +871,10 @@ bool QgsAttributeEditor::retrieveValue( QWidget *widget, QgsVectorLayer *vl, int break; default: //string modified = true; - value = QVariant( text ); + if ( text.isNull() ) + value = QVariant(); + else + value = QVariant( text ); break; } @@ -957,8 +975,9 @@ bool QgsAttributeEditor::setValue( QWidget *editor, QgsVectorLayer *vl, int idx, case QgsVectorLayer::UniqueValuesEditable: case QgsVectorLayer::Immutable: case QgsVectorLayer::UuidGenerator: - default: + case QgsVectorLayer::TextEdit: { + QgsFilterLineEdit *fle = qobject_cast( editor ); QLineEdit *le = qobject_cast( editor ); QComboBox *cb = qobject_cast( editor ); QTextEdit *te = qobject_cast( editor ); @@ -966,10 +985,15 @@ bool QgsAttributeEditor::setValue( QWidget *editor, QgsVectorLayer *vl, int idx, if ( !le && ! cb && !te && !pte ) return false; + if ( fle && !( myFieldType == QVariant::Int || myFieldType == QVariant::Double || myFieldType == QVariant::LongLong || myFieldType == QVariant::Date ) ) + { + fle->setNullValue( nullValue ); + } + QString text; if ( value.isNull() ) { - if ( myFieldType == QVariant::Int || myFieldType == QVariant::Double || myFieldType == QVariant::LongLong ) + if ( myFieldType == QVariant::Int || myFieldType == QVariant::Double || myFieldType == QVariant::LongLong || myFieldType == QVariant::Date ) text = ""; else if ( editType == QgsVectorLayer::UuidGenerator ) text = QUuid::createUuid().toString(); @@ -1002,18 +1026,47 @@ bool QgsAttributeEditor::setValue( QWidget *editor, QgsVectorLayer *vl, int idx, break; } - QLineEdit* le = qobject_cast( editor ); + QgsFilterLineEdit *fle = qobject_cast( editor ); + QLineEdit *le = qobject_cast( editor ); if ( !le ) { le = editor->findChild(); + fle = qobject_cast( le ); } if ( !le ) { return false; } - le->setText( value.toString() ); + + if ( fle && !( myFieldType == QVariant::Int || myFieldType == QVariant::Double || myFieldType == QVariant::LongLong || myFieldType == QVariant::Date ) ) + { + fle->setNullValue( nullValue ); + } + + QString text; + if ( value.isNull() ) + { + if ( myFieldType == QVariant::Int || myFieldType == QVariant::Double || myFieldType == QVariant::LongLong || myFieldType == QVariant::Date ) + text = ""; + else + text = nullValue; + } + else if ( editType == QgsVectorLayer::Calendar && value.canConvert( QVariant::Date ) ) + { + text = value.toDate().toString( vl->dateFormat( idx ) ); + } + else + { + text = value.toString(); + } + + + le->setText( text ); } break; + + case QgsVectorLayer::Hidden: + break; } return true; @@ -1030,7 +1083,6 @@ QWidget* QgsAttributeEditor::createWidgetFromDef( const QgsAttributeEditorElemen const QgsAttributeEditorField* fieldDef = dynamic_cast( widgetDef ); newWidget = createAttributeEditor( parent, 0, vl, fieldDef->idx(), attrs.value( fieldDef->idx(), QVariant() ), proxyWidgets ); - if ( vl->editType( fieldDef->idx() ) != QgsVectorLayer::Immutable ) { newWidget->setEnabled( newWidget->isEnabled() && vl->isEditable() ); diff --git a/src/gui/qgsfieldvalidator.cpp b/src/gui/qgsfieldvalidator.cpp index 73d9c814dcd..9c583ed4a90 100644 --- a/src/gui/qgsfieldvalidator.cpp +++ b/src/gui/qgsfieldvalidator.cpp @@ -29,9 +29,10 @@ #include "qgslonglongvalidator.h" #include "qgsfield.h" -QgsFieldValidator::QgsFieldValidator( QObject *parent, const QgsField &field ) +QgsFieldValidator::QgsFieldValidator( QObject *parent, const QgsField &field, QString dateFormat ) : QValidator( parent ) , mField( field ) + , mDateFormat( dateFormat ) { switch ( mField.type() ) { @@ -128,7 +129,7 @@ QValidator::State QgsFieldValidator::validate( QString &s, int &i ) const } else if ( mField.type() == QVariant::Date ) { - return QDate::fromString( s ).isValid() ? Acceptable : Intermediate; + return QDate::fromString( s, mDateFormat ).isValid() ? Acceptable : Intermediate; } else { diff --git a/src/gui/qgsfieldvalidator.h b/src/gui/qgsfieldvalidator.h index ab433193cad..e248c61a38b 100644 --- a/src/gui/qgsfieldvalidator.h +++ b/src/gui/qgsfieldvalidator.h @@ -31,12 +31,14 @@ class GUI_EXPORT QgsFieldValidator : public QValidator Q_OBJECT public: - QgsFieldValidator( QObject *parent, const QgsField &field ); + QgsFieldValidator( QObject *parent, const QgsField &field, QString dateFormat ); ~QgsFieldValidator(); virtual State validate( QString &, int & ) const; virtual void fixup( QString & ) const; + QString dateFormat() const { return mDateFormat; } + private: // Disables copy constructing Q_DISABLE_COPY( QgsFieldValidator ) @@ -44,6 +46,7 @@ class GUI_EXPORT QgsFieldValidator : public QValidator QValidator *mValidator; QgsField mField; QString mNullValue; + QString mDateFormat; }; #endif // QGSFIELDVALIDATOR_H diff --git a/src/gui/qgsfilterlineedit.cpp b/src/gui/qgsfilterlineedit.cpp index d7f97d852f4..cf253830ace 100644 --- a/src/gui/qgsfilterlineedit.cpp +++ b/src/gui/qgsfilterlineedit.cpp @@ -21,7 +21,9 @@ #include #include -QgsFilterLineEdit::QgsFilterLineEdit( QWidget* parent ) : QLineEdit( parent ) +QgsFilterLineEdit::QgsFilterLineEdit( QWidget* parent, QString nullValue ) + : QLineEdit( parent ) + , mNullValue( nullValue ) { btnClear = new QToolButton( this ); btnClear->setIcon( QgsApplication::getThemeIcon( "/mIconClear.png" ) ); @@ -51,7 +53,13 @@ void QgsFilterLineEdit::resizeEvent( QResizeEvent * ) ( rect().bottom() + 1 - sz.height() ) / 2 ); } +void QgsFilterLineEdit::clear() +{ + setText( mNullValue ); + setModified( true ); +} + void QgsFilterLineEdit::toggleClearButton( const QString &text ) { - btnClear->setVisible( !text.isEmpty() ); + btnClear->setVisible( !isReadOnly() && text != mNullValue ); } diff --git a/src/gui/qgsfilterlineedit.h b/src/gui/qgsfilterlineedit.h index 6bdbbd30532..3d0ef9dda45 100644 --- a/src/gui/qgsfilterlineedit.h +++ b/src/gui/qgsfilterlineedit.h @@ -29,7 +29,9 @@ class GUI_EXPORT QgsFilterLineEdit : public QLineEdit { Q_OBJECT public: - QgsFilterLineEdit( QWidget* parent = 0 ); + QgsFilterLineEdit( QWidget* parent = 0, QString nullValue = QString::null ); + + void setNullValue( QString nullValue ) { mNullValue = nullValue; } signals: void cleared(); @@ -38,9 +40,11 @@ class GUI_EXPORT QgsFilterLineEdit : public QLineEdit void resizeEvent( QResizeEvent * ); private slots: + void clear(); void toggleClearButton( const QString &text ); private: + QString mNullValue; QToolButton *btnClear; }; diff --git a/src/providers/postgres/qgspostgresprovider.cpp b/src/providers/postgres/qgspostgresprovider.cpp index 2d656806819..36ca074d9ef 100644 --- a/src/providers/postgres/qgspostgresprovider.cpp +++ b/src/providers/postgres/qgspostgresprovider.cpp @@ -168,6 +168,9 @@ QgsPostgresProvider::QgsPostgresProvider( QString const & uri ) << QgsVectorDataProvider::NativeType( tr( "Text, fixed length (char)" ), "char", QVariant::String, 1, 255 ) << QgsVectorDataProvider::NativeType( tr( "Text, limited variable length (varchar)" ), "varchar", QVariant::String, 1, 255 ) << QgsVectorDataProvider::NativeType( tr( "Text, unlimited length (text)" ), "text", QVariant::String ) + + // date type + << QgsVectorDataProvider::NativeType( tr( "Date" ), "date", QVariant::Date ) ; QString key; @@ -708,6 +711,11 @@ bool QgsPostgresProvider::loadFields() fieldSize = -1; } } + else if ( fieldTypeName == "date" ) + { + fieldType = QVariant::Date; + fieldSize = -1; + } else if ( fieldTypeName == "text" || fieldTypeName == "bpchar" || fieldTypeName == "bool" || @@ -2777,6 +2785,11 @@ bool QgsPostgresProvider::convertField( QgsField &field ) fieldPrec = 0; break; + case QVariant::Date: + fieldType = "numeric"; + fieldSize = -1; + break; + case QVariant::Double: if ( fieldSize > 18 ) { diff --git a/src/ui/qgsattributetypeedit.ui b/src/ui/qgsattributetypeedit.ui index cac84967c07..34e99dc9356 100644 --- a/src/ui/qgsattributetypeedit.ui +++ b/src/ui/qgsattributetypeedit.ui @@ -504,15 +504,8 @@ - - - - - A calendar widget to enter a date. - - - - + + Qt::Vertical @@ -525,6 +518,23 @@ + + + + Date format + + + + + + + A calendar widget to enter a date. + + + + + +