Skip to content

Commit 538e294

Browse files
committedJun 24, 2019
Fix preferred fields storage
1 parent 5c6223c commit 538e294

File tree

3 files changed

+42
-23
lines changed

3 files changed

+42
-23
lines changed
 

‎src/app/gps/qgsgpsinformationwidget.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -311,7 +311,7 @@ QgsGpsInformationWidget::QgsGpsInformationWidget( QgsMapCanvas *mapCanvas, QWidg
311311
mCbxLeapSeconds->setEnabled( enabled );
312312
mLeapSeconds->setEnabled( enabled );
313313
QgsVectorLayer *vlayer = qobject_cast<QgsVectorLayer *>( mMapCanvas->currentLayer() );
314-
if ( vlayer )
314+
if ( vlayer && ! mPopulatingFields )
315315
{
316316
mPreferredTimestampFields[ vlayer->id() ] = mCboTimestampField->currentText();
317317
}
@@ -1396,6 +1396,7 @@ void QgsGpsInformationWidget::timestampFormatChanged( int index )
13961396

13971397
void QgsGpsInformationWidget::updateTimestampDestinationFields( QgsMapLayer *mapLayer )
13981398
{
1399+
mPopulatingFields = true;
13991400
QgsVectorLayer *vlayer = qobject_cast<QgsVectorLayer *>( mapLayer );
14001401
mGboxTimestamp->setEnabled( false );
14011402
mCboTimestampField->clear();
@@ -1415,7 +1416,7 @@ void QgsGpsInformationWidget::updateTimestampDestinationFields( QgsMapLayer *map
14151416
if ( mCboTimestampField->count() > 1 )
14161417
{
14171418
mGboxTimestamp->setEnabled( true );
1418-
// Set default if stored
1419+
// Set preferred if stored
14191420
if ( mPreferredTimestampFields.contains( vlayer->id( ) ) )
14201421
{
14211422
int idx { mCboTimestampField->findText( mPreferredTimestampFields[ vlayer->id( ) ] ) };
@@ -1435,6 +1436,7 @@ void QgsGpsInformationWidget::updateTimestampDestinationFields( QgsMapLayer *map
14351436
}
14361437
}
14371438
}
1439+
mPopulatingFields = false;
14381440
}
14391441

14401442
void QgsGpsInformationWidget::switchAcquisition()

‎src/app/gps/qgsgpsinformationwidget.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,8 @@ class APP_EXPORT QgsGpsInformationWidget: public QWidget, private Ui::QgsGpsInfo
131131
unsigned int mDistanceThreshold = 0;
132132
//! Temporary storage of preferred fields
133133
QMap<QString, QString> mPreferredTimestampFields;
134-
134+
//! Flag when updating fields
135+
bool mPopulatingFields = false;
135136
friend class TestQgsGpsInformationWidget;
136137
};
137138

‎tests/src/app/testqgsgpsinformationwidget.cpp

Lines changed: 36 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -65,27 +65,30 @@ void TestQgsGpsInformationWidget::testTimestamp()
6565
{
6666

6767
//create a temporary layer
68-
std::unique_ptr< QgsVectorLayer> tempLayer( new QgsVectorLayer( QStringLiteral( "Point?crs=epsg:4326&field=intf:int" ),
69-
QStringLiteral( "vl" ),
70-
QStringLiteral( "memory" ) ) );
71-
std::unique_ptr< QgsVectorLayer> tempLayerString( new QgsVectorLayer( QStringLiteral( "Point?crs=epsg:4326&field=stringf:string&field=intf:int" ),
72-
QStringLiteral( "vl" ),
73-
QStringLiteral( "memory" ) ) );
74-
std::unique_ptr< QgsVectorLayer> tempLayerDateTime( new QgsVectorLayer( QStringLiteral( "Point?crs=epsg:4326&field=datetimef:datetime&field=intf:int" ),
75-
QStringLiteral( "vl" ),
76-
QStringLiteral( "memory" ) ) );
68+
QgsVectorLayer *tempLayer( new QgsVectorLayer( QStringLiteral( "Point?crs=epsg:4326&field=intf:int" ),
69+
QStringLiteral( "vl" ),
70+
QStringLiteral( "memory" ) ) );
71+
QgsVectorLayer *tempLayerString( new QgsVectorLayer( QStringLiteral( "Point?crs=epsg:4326&field=stringf:string&field=intf:int" ),
72+
QStringLiteral( "vl" ),
73+
QStringLiteral( "memory" ) ) );
74+
QgsVectorLayer *tempLayerDateTime( new QgsVectorLayer( QStringLiteral( "Point?crs=epsg:4326&field=datetimef:datetime&field=intf:int" ),
75+
QStringLiteral( "vl" ),
76+
QStringLiteral( "memory" ) ) );
77+
78+
QgsProject::instance()->addMapLayers( { tempLayer, tempLayerString, tempLayerDateTime } );
79+
7780
QVERIFY( tempLayer->isValid() );
7881
QgsMapCanvas *canvas = mQgisApp->mapCanvas();
7982
QgsGpsInformationWidget widget( canvas );
80-
canvas->setCurrentLayer( tempLayer.get() );
83+
canvas->setCurrentLayer( tempLayer );
8184
QVERIFY( ! widget.mGboxTimestamp->isEnabled() );
8285

83-
canvas->setCurrentLayer( tempLayerString.get() );
86+
canvas->setCurrentLayer( tempLayerString );
8487
QVERIFY( widget.mGboxTimestamp->isEnabled() );
8588
QVERIFY( widget.mCboTimestampField->findText( QStringLiteral( "stringf" ) ) != -1 );
8689
QVERIFY( widget.mCboTimestampField->findText( QStringLiteral( "intf" ) ) == -1 );
8790

88-
canvas->setCurrentLayer( tempLayerDateTime.get() );
91+
canvas->setCurrentLayer( tempLayerDateTime );
8992
QVERIFY( widget.mGboxTimestamp->isEnabled() );
9093
QVERIFY( widget.mCboTimestampField->findText( QStringLiteral( "datetimef" ) ) != -1 );
9194
QVERIFY( widget.mCboTimestampField->findText( QStringLiteral( "intf" ) ) == -1 );
@@ -98,11 +101,11 @@ void TestQgsGpsInformationWidget::testTimestamp()
98101
widget.mCboTimestampFormat->setCurrentIndex( widget.mCboTimestampFormat->findData( Qt::TimeSpec::TimeZone ) );
99102
QVERIFY( widget.mCboTimeZones->isEnabled() );
100103

101-
canvas->setCurrentLayer( tempLayer.get() );
104+
canvas->setCurrentLayer( tempLayer );
102105
QVERIFY( ! widget.mGboxTimestamp->isEnabled() );
103106

104107
// Test timestamp conversions
105-
canvas->setCurrentLayer( tempLayerDateTime.get() );
108+
canvas->setCurrentLayer( tempLayerDateTime );
106109
// 2019/06/19 12:27:34.543[UTC]
107110
widget.mLastNmeaTime = { 119, 5, 19, 12, 27, 34, 543 };
108111
QDateTime dateTime( QDate( 2019, 6, 19 ), QTime( 12, 27, 34, 543 ) );
@@ -116,30 +119,43 @@ void TestQgsGpsInformationWidget::testTimestamp()
116119
QVERIFY( fieldIdx != -1 );
117120
// UTC
118121
widget.mCboTimestampFormat->setCurrentIndex( widget.mCboTimestampFormat->findData( Qt::TimeSpec::UTC ) );
119-
QVariant dt { widget.timestamp( tempLayerDateTime.get(), fieldIdx ) };
122+
QVariant dt { widget.timestamp( tempLayerDateTime, fieldIdx ) };
120123
QCOMPARE( dt.toDateTime(), dateTime );
124+
QVERIFY( widget.mPreferredTimestampFields.contains( tempLayerDateTime->id() ) );
125+
QCOMPARE( widget.mPreferredTimestampFields[ tempLayerDateTime->id() ], QStringLiteral( "datetimef" ) );
121126

122-
// Test string
123-
canvas->setCurrentLayer( tempLayerString.get() );
127+
// Test store preferred fields
128+
canvas->setCurrentLayer( tempLayerString );
124129
fieldIdx = tempLayerString->fields().indexOf( QStringLiteral( "stringf" ) );
125130
QVERIFY( fieldIdx != -1 );
126131
widget.mCboTimestampField->setCurrentIndex( widget.mCboTimestampField->findText( QStringLiteral( "stringf" ) ) );
132+
canvas->setCurrentLayer( tempLayerDateTime );
133+
QVERIFY( widget.mPreferredTimestampFields.contains( tempLayerDateTime->id() ) );
134+
QCOMPARE( widget.mPreferredTimestampFields[ tempLayerString->id() ], QStringLiteral( "stringf" ) );
135+
QVERIFY( widget.mPreferredTimestampFields.contains( tempLayerDateTime->id() ) );
136+
QCOMPARE( widget.mPreferredTimestampFields[ tempLayerDateTime->id() ], QStringLiteral( "datetimef" ) );
137+
138+
// Test string
139+
canvas->setCurrentLayer( tempLayerString );
127140
// UTC
128141
widget.mCboTimestampFormat->setCurrentIndex( widget.mCboTimestampFormat->findData( Qt::TimeSpec::UTC ) );
129-
dt = widget.timestamp( tempLayerString.get(), fieldIdx );
142+
dt = widget.timestamp( tempLayerString, fieldIdx );
130143
QCOMPARE( dt.toString(), dateTime.toString( Qt::DateFormat::ISODate ) );
131144
// Local Time (not very robust because we cannot change the system timezone and it may be GMT)
132145
widget.mCboTimestampFormat->setCurrentIndex( widget.mCboTimestampFormat->findData( Qt::TimeSpec::LocalTime ) );
133-
dt = widget.timestamp( tempLayerString.get(), fieldIdx );
146+
dt = widget.timestamp( tempLayerString, fieldIdx );
134147
QDateTime localTime( dateTime.toLocalTime() );
135148
QCOMPARE( dt.toString(), localTime.toString( Qt::DateFormat::ISODate ) );
136149
// Timezone
137150
widget.mCboTimestampFormat->setCurrentIndex( widget.mCboTimestampFormat->findData( Qt::TimeSpec::TimeZone ) );
138151
widget.mCboTimeZones->setCurrentIndex( widget.mCboTimeZones->findText( QStringLiteral( "Asia/Colombo" ) ) ) ;
139152
QDateTime tzTime( dateTime.toTimeZone( QTimeZone( QStringLiteral( "Asia/Colombo" ).toUtf8() ) ) );
140-
dt = widget.timestamp( tempLayerString.get(), fieldIdx );
153+
dt = widget.timestamp( tempLayerString, fieldIdx );
141154
QCOMPARE( dt.toString(), tzTime.toString( Qt::DateFormat::ISODate ) );
142155

156+
// Test that preferred field is stored
157+
canvas->setCurrentLayer( tempLayerDateTime );
158+
QCOMPARE( widget.mCboTimestampField->currentText(), QStringLiteral( "datetimef" ) );
143159
}
144160

145161
QGSTEST_MAIN( TestQgsGpsInformationWidget )

0 commit comments

Comments
 (0)
Please sign in to comment.