Skip to content

Commit

Permalink
Merge pull request #33012 from elpaso/bugfix-gh-33000-time-support
Browse files Browse the repository at this point in the history
Fix time (and date) fields editing in forms
  • Loading branch information
elpaso committed Nov 22, 2019
2 parents 5706a9f + 2c61eb3 commit 22a72be
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 6 deletions.
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( 0, 0, 0 ) );
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
45 changes: 40 additions & 5 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 @@ -112,26 +121,26 @@ void TestQgsDateTimeEdit::nullValues()
void TestQgsDateTimeEdit::focus()
{
QgsApplication::setNullRepresentation( QString( "nope" ) );
QWidget *w = new QWidget(); //required for focus events
QApplication::setActiveWindow( w );
QWidget w; //required for focus events
QApplication::setActiveWindow( &w );

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

widget1->setConfig( cfg );
QgsDateTimeEdit *dateedit1 = qobject_cast<QgsDateTimeEdit *>( widget1->createWidget( w ) );
QgsDateTimeEdit *dateedit1 = qobject_cast<QgsDateTimeEdit *>( widget1->createWidget( &w ) );
QVERIFY( dateedit1 );
widget1->initWidget( dateedit1 );
widget1->setValue( QVariant::Date );

widget2->setConfig( cfg );
QgsDateTimeEdit *dateedit2 = qobject_cast<QgsDateTimeEdit *>( widget2->createWidget( w ) );
QgsDateTimeEdit *dateedit2 = qobject_cast<QgsDateTimeEdit *>( widget2->createWidget( &w ) );
QVERIFY( dateedit2 );
widget2->initWidget( dateedit2 );
widget2->setValue( QVariant::Date );

widget3->setConfig( cfg );
QgsDateTimeEdit *dateedit3 = qobject_cast<QgsDateTimeEdit *>( widget3->createWidget( w ) );
QgsDateTimeEdit *dateedit3 = qobject_cast<QgsDateTimeEdit *>( widget3->createWidget( &w ) );
QVERIFY( dateedit3 );
widget3->initWidget( dateedit3 );
widget3->setValue( QVariant::Date );
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;
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 22a72be

Please sign in to comment.