Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Fix time (and date) fields editing in forms
Fixes #33000

(cherry picked from commit 17a700b)
  • Loading branch information
elpaso authored and nyalldawson committed Nov 25, 2019
1 parent 023e8d2 commit 2d4c8bf
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 1 deletion.
9 changes: 8 additions & 1 deletion src/gui/editorwidgets/qgsdatetimeeditwrapper.cpp
Expand Up @@ -212,12 +212,19 @@ void QgsDateTimeEditWrapper::updateValues( const QVariant &value, const QVariant
return;

QDateTime dateTime;

switch ( field().type() )
{
case QVariant::DateTime:
dateTime = value.toDateTime();
break;
case QVariant::Date:
dateTime.setDate( value.toDate() );
dateTime.setTime( QTime::currentTime() );
break;
case QVariant::Time:
dateTime = value.toDateTime();
dateTime.setDate( QDate::currentDate() );
dateTime.setTime( value.toTime() );
break;
default:
const bool fieldIsoFormat = config( QStringLiteral( "field_iso_format" ), false ).toBool();
Expand Down
35 changes: 35 additions & 0 deletions tests/src/gui/testqgsdatetimeedit.cpp
Expand Up @@ -32,11 +32,14 @@ class TestQgsDateTimeEdit: public QObject

void nullValues();
void focus();
void testDateTime();

private:
std::unique_ptr<QgsDateTimeEditWrapper> widget1; // For field 0
std::unique_ptr<QgsDateTimeEditWrapper> widget2; // For field 1
std::unique_ptr<QgsDateTimeEditWrapper> widget3; // For field 2
std::unique_ptr<QgsDateTimeEditWrapper> widget4; // For field 3
std::unique_ptr<QgsDateTimeEditWrapper> widget5; // For field 4
std::unique_ptr<QgsVectorLayer> vl;

};
Expand All @@ -61,6 +64,8 @@ void TestQgsDateTimeEdit::init()
fields.append( QgsField( "date1", QVariant::Date ) );
fields.append( QgsField( "date2", QVariant::Date ) );
fields.append( QgsField( "date3", QVariant::Date ) );
fields.append( QgsField( "time", QVariant::Time ) );
fields.append( QgsField( "datetime", QVariant::DateTime ) );
vl->dataProvider()->addAttributes( fields );
vl->updateFields();
QVERIFY( vl.get() );
Expand All @@ -69,9 +74,13 @@ void TestQgsDateTimeEdit::init()
widget1 = qgis::make_unique<QgsDateTimeEditWrapper>( vl.get(), 0, nullptr, nullptr );
widget2 = qgis::make_unique<QgsDateTimeEditWrapper>( vl.get(), 1, nullptr, nullptr );
widget3 = qgis::make_unique<QgsDateTimeEditWrapper>( vl.get(), 2, nullptr, nullptr );
widget4 = qgis::make_unique<QgsDateTimeEditWrapper>( vl.get(), 3, nullptr, nullptr );
widget5 = qgis::make_unique<QgsDateTimeEditWrapper>( vl.get(), 4, nullptr, nullptr );
QVERIFY( widget1.get() );
QVERIFY( widget2.get() );
QVERIFY( widget3.get() );
QVERIFY( widget4.get() );
QVERIFY( widget5.get() );
}

void TestQgsDateTimeEdit::cleanup()
Expand Down Expand Up @@ -226,5 +235,31 @@ void TestQgsDateTimeEdit::focus()
QCOMPARE( dateedit3->text(), QStringLiteral( "nope" ) );
}

void TestQgsDateTimeEdit::testDateTime()
{
QgsApplication::setNullRepresentation( QString( "nope" ) );
QWidget *w = new QWidget(); //required for focus events
QApplication::setActiveWindow( w );

QVariantMap cfg;
cfg.insert( QStringLiteral( "AllowNull" ), true );

widget4->setConfig( cfg );
QgsDateTimeEdit *dateedit4 = qobject_cast<QgsDateTimeEdit *>( widget4->createWidget( w ) );
QVERIFY( dateedit4 );
widget4->initWidget( dateedit4 );
widget4->setValue( QTime( 23, 10, 57 ) );
QTime value { widget4->value().toTime() };
QCOMPARE( value, QTime( 23, 10, 57 ) );

widget5->setConfig( cfg );
QgsDateTimeEdit *dateedit5 = qobject_cast<QgsDateTimeEdit *>( widget5->createWidget( w ) );
QVERIFY( dateedit5 );
widget5->initWidget( dateedit5 );
widget5->setValue( QDate( 1966, 11, 25 ) );
QDate value5 { widget5->value().toDate() };
QCOMPARE( value5, QDate( 1966, 11, 25 ) );
}

QGSTEST_MAIN( TestQgsDateTimeEdit )
#include "testqgsdatetimeedit.moc"

0 comments on commit 2d4c8bf

Please sign in to comment.