Skip to content

Commit d08a4c1

Browse files
committedMay 8, 2020
Allow skipping setting either the start of end time fields
Result is features which start at -eternity and end at the selected end field time, or which start at the selected start field time and end at +eternity
1 parent 3994da6 commit d08a4c1

File tree

5 files changed

+57
-10
lines changed

5 files changed

+57
-10
lines changed
 

‎src/core/qgstemporalutils.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,16 @@ QgsDateTimeRange QgsTemporalUtils::calculateTemporalRangeForProject( QgsProject
8989
std::max( vectorLayer->maximumValue( startFieldIndex ).toDateTime(),
9090
vectorLayer->maximumValue( endFieldIndex ).toDateTime() ) );
9191
}
92+
else if ( startFieldIndex >= 0 )
93+
{
94+
layerRange = QgsDateTimeRange( vectorLayer->minimumValue( startFieldIndex ).toDateTime(),
95+
vectorLayer->maximumValue( startFieldIndex ).toDateTime() );
96+
}
97+
else if ( endFieldIndex >= 0 )
98+
{
99+
layerRange = QgsDateTimeRange( vectorLayer->minimumValue( endFieldIndex ).toDateTime(),
100+
vectorLayer->maximumValue( endFieldIndex ).toDateTime() );
101+
}
92102
break;
93103
}
94104
}

‎src/core/qgsvectorlayertemporalproperties.cpp

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -193,12 +193,30 @@ QString QgsVectorLayerTemporalProperties::createFilterString( QgsVectorLayer *,
193193
dateTimeExpressionLiteral( range.end() ) );
194194

195195
case ModeFeatureDateTimeStartAndEndFromFields:
196-
return QStringLiteral( "%1 %2 %3 AND %4 %5 %6" ).arg( QgsExpression::quotedColumnRef( mStartFieldName ),
197-
range.includeEnd() ? QStringLiteral( "<=" ) : QStringLiteral( "<" ),
198-
dateTimeExpressionLiteral( range.end() ),
199-
QgsExpression::quotedColumnRef( mEndFieldName ),
200-
range.includeBeginning() ? QStringLiteral( ">=" ) : QStringLiteral( ">" ),
201-
dateTimeExpressionLiteral( range.begin() ) );
196+
{
197+
if ( !mStartFieldName.isEmpty() && !mEndFieldName.isEmpty() )
198+
{
199+
return QStringLiteral( "%1 %2 %3 AND %4 %5 %6" ).arg( QgsExpression::quotedColumnRef( mStartFieldName ),
200+
range.includeEnd() ? QStringLiteral( "<=" ) : QStringLiteral( "<" ),
201+
dateTimeExpressionLiteral( range.end() ),
202+
QgsExpression::quotedColumnRef( mEndFieldName ),
203+
range.includeBeginning() ? QStringLiteral( ">=" ) : QStringLiteral( ">" ),
204+
dateTimeExpressionLiteral( range.begin() ) );
205+
}
206+
else if ( !mStartFieldName.isEmpty() )
207+
{
208+
return QStringLiteral( "%1 %2 %3" ).arg( QgsExpression::quotedColumnRef( mStartFieldName ),
209+
range.includeBeginning() ? QStringLiteral( "<=" ) : QStringLiteral( "<" ),
210+
dateTimeExpressionLiteral( range.end() ) );
211+
}
212+
else if ( !mEndFieldName.isEmpty() )
213+
{
214+
return QStringLiteral( "%1 %2 %3" ).arg( QgsExpression::quotedColumnRef( mEndFieldName ),
215+
range.includeBeginning() ? QStringLiteral( ">=" ) : QStringLiteral( ">" ),
216+
dateTimeExpressionLiteral( range.begin() ) );
217+
}
218+
break;
219+
}
202220
}
203221

204222
return QString();

‎src/gui/layout/qgslayoutattributeselectiondialog.cpp

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -214,10 +214,8 @@ QVariant QgsLayoutAttributeTableColumnModelBase::headerData( int section, Qt::Or
214214
}
215215
}
216216
}
217-
else
218-
{
219-
return QVariant();
220-
}
217+
218+
return QVariant();
221219
}
222220

223221
bool QgsLayoutAttributeTableColumnModelBase::setData( const QModelIndex &index, const QVariant &value, int role )

‎src/gui/qgsvectorlayertemporalpropertieswidget.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,9 @@ QgsVectorLayerTemporalPropertiesWidget::QgsVectorLayerTemporalPropertiesWidget(
5555
mEndFieldComboBox->setLayer( layer );
5656
mSingleFieldComboBox->setFilters( QgsFieldProxyModel::DateTime | QgsFieldProxyModel::Date );
5757
mStartFieldComboBox->setFilters( QgsFieldProxyModel::DateTime | QgsFieldProxyModel::Date );
58+
mStartFieldComboBox->setAllowEmptyFieldName( true );
5859
mEndFieldComboBox->setFilters( QgsFieldProxyModel::DateTime | QgsFieldProxyModel::Date );
60+
mEndFieldComboBox->setAllowEmptyFieldName( true );
5961

6062
if ( !properties->startField().isEmpty() )
6163
{

‎tests/src/python/test_qgsvectorlayertemporalproperties.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,25 @@ def testDualFieldMode(self):
142142
range = QgsDateTimeRange(QDateTime(QDate(2019, 3, 4), QTime(11, 12, 13)), QDateTime(QDate(2020, 5, 6), QTime(8, 9, 10)), includeEnd=False)
143143
self.assertEqual(props.createFilterString(layer, range), '"start_field" < make_datetime(2020,5,6,8,9,10) AND "end_field" >= make_datetime(2019,3,4,11,12,13)')
144144

145+
props.setEndField('')
146+
self.assertEqual(props.createFilterString(layer, range), '"start_field" <= make_datetime(2020,5,6,8,9,10)')
147+
148+
range = QgsDateTimeRange(QDateTime(QDate(2019, 3, 4), QTime(11, 12, 13)), QDateTime(QDate(2020, 5, 6), QTime(8, 9, 10)), includeBeginning=False)
149+
self.assertEqual(props.createFilterString(layer, range), '"start_field" < make_datetime(2020,5,6,8,9,10)')
150+
151+
range = QgsDateTimeRange(QDateTime(QDate(2019, 3, 4), QTime(11, 12, 13)), QDateTime(QDate(2020, 5, 6), QTime(8, 9, 10)), includeEnd=False)
152+
self.assertEqual(props.createFilterString(layer, range), '"start_field" <= make_datetime(2020,5,6,8,9,10)')
153+
154+
props.setStartField('')
155+
props.setEndField('end_field')
156+
self.assertEqual(props.createFilterString(layer, range), '"end_field" >= make_datetime(2019,3,4,11,12,13)')
157+
158+
range = QgsDateTimeRange(QDateTime(QDate(2019, 3, 4), QTime(11, 12, 13)), QDateTime(QDate(2020, 5, 6), QTime(8, 9, 10)), includeBeginning=False)
159+
self.assertEqual(props.createFilterString(layer, range), '"end_field" > make_datetime(2019,3,4,11,12,13)')
160+
161+
range = QgsDateTimeRange(QDateTime(QDate(2019, 3, 4), QTime(11, 12, 13)), QDateTime(QDate(2020, 5, 6), QTime(8, 9, 10)), includeEnd=False)
162+
self.assertEqual(props.createFilterString(layer, range), '"end_field" >= make_datetime(2019,3,4,11,12,13)')
163+
145164

146165
if __name__ == '__main__':
147166
unittest.main()

0 commit comments

Comments
 (0)
Please sign in to comment.