Skip to content

Commit 5eb70d3

Browse files
author
Patrick Valsecchi
committed
Fix auto conf of QgsDateTimeEditWrapper
1 parent 8d9cf9d commit 5eb70d3

File tree

5 files changed

+39
-11
lines changed

5 files changed

+39
-11
lines changed

src/gui/editorwidgets/qgsdatetimeeditconfig.cpp

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515

1616
#include "qgsdatetimeeditconfig.h"
1717
#include "qgsdatetimeeditfactory.h"
18+
#include "qgsvectorlayer.h"
1819

1920
QgsDateTimeEditConfig::QgsDateTimeEditConfig( QgsVectorLayer* vl, int fieldIdx, QWidget* parent )
2021
: QgsEditorConfigWidget( vl, fieldIdx, parent )
@@ -119,9 +120,26 @@ QgsEditorWidgetConfig QgsDateTimeEditConfig::config()
119120
}
120121

121122

123+
QString QgsDateTimeEditConfig::defaultFormat( const QVariant::Type type )
124+
{
125+
switch ( type )
126+
{
127+
case QVariant::DateTime:
128+
return QGSDATETIMEEDIT_DATETIMEFORMAT;
129+
break;
130+
case QVariant::Time:
131+
return QGSDATETIMEEDIT_TIMEFORMAT;
132+
break;
133+
default:
134+
return QGSDATETIMEEDIT_DATEFORMAT;
135+
}
136+
}
137+
138+
122139
void QgsDateTimeEditConfig::setConfig( const QgsEditorWidgetConfig &config )
123140
{
124-
const QString fieldFormat = config.value( "field_format", QGSDATETIMEEDIT_DATEFORMAT ).toString();
141+
const QgsField fieldDef = layer()->fields().at( field() );
142+
const QString fieldFormat = config.value( "field_format", defaultFormat( fieldDef.type() ) ).toString();
125143
mFieldFormatEdit->setText( fieldFormat );
126144

127145
if ( fieldFormat == QGSDATETIMEEDIT_DATEFORMAT )
@@ -133,7 +151,7 @@ void QgsDateTimeEditConfig::setConfig( const QgsEditorWidgetConfig &config )
133151
else
134152
mFieldFormatComboBox->setCurrentIndex( 3 );
135153

136-
QString displayFormat = config.value( "display_format", QGSDATETIMEEDIT_DATEFORMAT ).toString();
154+
QString displayFormat = config.value( "display_format", defaultFormat( fieldDef.type() ) ).toString();
137155
mDisplayFormatEdit->setText( displayFormat );
138156
if ( displayFormat == mFieldFormatEdit->text() )
139157
{

src/gui/editorwidgets/qgsdatetimeeditconfig.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,13 @@ class GUI_EXPORT QgsDateTimeEditConfig : public QgsEditorConfigWidget, private U
4141
public:
4242
QgsEditorWidgetConfig config() override;
4343
void setConfig( const QgsEditorWidgetConfig &config ) override;
44+
45+
/**
46+
* Get the default format in fonction of the type
47+
* @param type the field type
48+
* @return the date/time format
49+
*/
50+
static QString defaultFormat( const QVariant::Type type );
4451
};
4552

4653
#endif // QGSDATETIMEEDITCONFIG_H

src/gui/editorwidgets/qgsdatetimeeditfactory.cpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -81,8 +81,9 @@ QString QgsDateTimeEditFactory::representValue( QgsVectorLayer* vl, int fieldIdx
8181
return settings.value( "qgis/nullValue", "NULL" ).toString();
8282
}
8383

84-
const QString displayFormat = config.value( "display_format", QGSDATETIMEEDIT_DATEFORMAT ).toString();
85-
const QString fieldFormat = config.value( "field_format", QGSDATETIMEEDIT_DATEFORMAT ).toString();
84+
const QgsField field = vl->fields().at( fieldIdx );
85+
const QString displayFormat = config.value( "display_format", QgsDateTimeEditConfig::defaultFormat( field.type() ) ).toString();
86+
const QString fieldFormat = config.value( "field_format", QgsDateTimeEditConfig::defaultFormat( field.type() ) ).toString();
8687

8788
QDateTime date = QDateTime::fromString( value.toString(), fieldFormat );
8889

@@ -120,7 +121,7 @@ unsigned int QgsDateTimeEditFactory::fieldScore( const QgsVectorLayer* vl, int f
120121
const QgsField field = vl->fields().field( fieldIdx );
121122
const QVariant::Type type = field.type();
122123
const QgsEditorWidgetConfig config = vl->editFormConfig().widgetConfig( field.name() );
123-
if ( type == QVariant::DateTime || config.contains( "field_format" ) )
124+
if ( type == QVariant::DateTime || type == QVariant::Date || type == QVariant::Time || config.contains( "field_format" ) )
124125
{
125126
return 20;
126127
}

src/gui/editorwidgets/qgsdatetimeeditwrapper.cpp

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
#include "qgsmessagelog.h"
1919
#include "qgslogger.h"
2020
#include "qgsdatetimeedit.h"
21+
#include "qgsdatetimeeditconfig.h"
2122

2223
#include <QDateTimeEdit>
2324
#include <QDateEdit>
@@ -62,7 +63,7 @@ void QgsDateTimeEditWrapper::initWidget( QWidget *editor )
6263
return;
6364
}
6465

65-
const QString displayFormat = config( "display_format", QGSDATETIMEEDIT_DATEFORMAT ).toString();
66+
const QString displayFormat = config( "display_format", QgsDateTimeEditConfig::defaultFormat( field().type() ) ).toString();
6667
mQDateTimeEdit->setDisplayFormat( displayFormat );
6768

6869
const bool calendar = config( "calendar_popup", false ).toBool();
@@ -110,7 +111,7 @@ void QgsDateTimeEditWrapper::showIndeterminateState()
110111

111112
void QgsDateTimeEditWrapper::dateTimeChanged( const QDateTime& dateTime )
112113
{
113-
const QString fieldFormat = config( "field_format", QGSDATETIMEEDIT_DATEFORMAT ).toString();
114+
const QString fieldFormat = config( "field_format", QgsDateTimeEditConfig::defaultFormat( field().type() ) ).toString();
114115
emit valueChanged( dateTime.toString( fieldFormat ) );
115116
}
116117

@@ -131,7 +132,7 @@ QVariant QgsDateTimeEditWrapper::value() const
131132
}
132133
}
133134

134-
const QString fieldFormat = config( "field_format", QGSDATETIMEEDIT_DATEFORMAT ).toString();
135+
const QString fieldFormat = config( "field_format", QgsDateTimeEditConfig::defaultFormat( field().type() ) ).toString();
135136

136137
if ( mQgsDateTimeEdit )
137138
{
@@ -148,7 +149,7 @@ void QgsDateTimeEditWrapper::setValue( const QVariant &value )
148149
if ( !mQDateTimeEdit )
149150
return;
150151

151-
const QString fieldFormat = config( "field_format", QGSDATETIMEEDIT_DATEFORMAT ).toString();
152+
const QString fieldFormat = config( "field_format", QgsDateTimeEditConfig::defaultFormat( field().type() ) ).toString();
152153
const QDateTime date = field().type() == QVariant::DateTime ? value.toDateTime() : QDateTime::fromString( value.toString(), fieldFormat );
153154

154155
if ( mQgsDateTimeEdit )

src/gui/editorwidgets/qgsdatetimesearchwidgetwrapper.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
#include "qgsvectorlayer.h"
2121
#include "qgsdatetimeedit.h"
2222
#include "qcalendarwidget.h"
23+
#include "qgsdatetimeeditconfig.h"
2324

2425
#include <QSettings>
2526

@@ -45,7 +46,7 @@ QVariant QgsDateTimeSearchWidgetWrapper::value() const
4546
if ( ! mDateTimeEdit )
4647
return QDateTime();
4748

48-
const QString fieldFormat = config( "field_format", QGSDATETIMEEDIT_DATEFORMAT ).toString();
49+
const QString fieldFormat = config( "field_format", QgsDateTimeEditConfig::defaultFormat( layer()->fields().at( mFieldIdx ).type() ) ).toString();
4950
return mDateTimeEdit->dateTime().toString( fieldFormat );
5051
}
5152

@@ -151,7 +152,7 @@ void QgsDateTimeSearchWidgetWrapper::initWidget( QWidget* editor )
151152
{
152153
mDateTimeEdit->setAllowNull( false );
153154

154-
const QString displayFormat = config( "display_format", QGSDATETIMEEDIT_DATEFORMAT ).toString();
155+
const QString displayFormat = config( "display_format", QgsDateTimeEditConfig::defaultFormat( layer()->fields().at( mFieldIdx ).type() ) ).toString();
155156
mDateTimeEdit->setDisplayFormat( displayFormat );
156157

157158
const bool calendar = config( "calendar_popup", false ).toBool();

0 commit comments

Comments
 (0)