@@ -88,7 +88,6 @@ QgsSymbolsListWidget::QgsSymbolsListWidget( QgsSymbol *symbol, QgsStyle *style,
88
88
{
89
89
setupUi ( this );
90
90
connect ( mSymbolUnitWidget , &QgsUnitSelectionWidget::changed, this , &QgsSymbolsListWidget::mSymbolUnitWidget_changed );
91
- connect ( groupsCombo, static_cast <void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this , &QgsSymbolsListWidget::groupsCombo_currentIndexChanged );
92
91
spinAngle->setClearValue ( 0 );
93
92
94
93
mSymbolUnitWidget ->setUnits ( QgsUnitTypes::RenderUnitList () << QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderMetersInMapUnits << QgsUnitTypes::RenderMapUnits << QgsUnitTypes::RenderPixels
@@ -173,8 +172,14 @@ QgsSymbolsListWidget::QgsSymbolsListWidget( QgsSymbol *symbol, QgsStyle *style,
173
172
QgsSettings ().setValue ( QStringLiteral ( " UI/symbolsList/treeState" ), mSymbolTreeView ->header ()->saveState (), QgsSettings::Gui );
174
173
} );
175
174
176
-
175
+ QgsFilterLineEdit *groupEdit = new QgsFilterLineEdit ();
176
+ groupEdit->setShowSearchIcon ( true );
177
+ groupEdit->setShowClearButton ( true );
178
+ groupEdit->setPlaceholderText ( tr ( " Filter symbols" ) );
179
+ groupsCombo->setLineEdit ( groupEdit );
177
180
populateGroups ();
181
+ connect ( groupsCombo, static_cast <void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this , &QgsSymbolsListWidget::groupsCombo_currentIndexChanged );
182
+ connect ( groupsCombo, &QComboBox::currentTextChanged, this , &QgsSymbolsListWidget::updateModelFilters );
178
183
179
184
if ( mSymbol )
180
185
{
@@ -309,6 +314,7 @@ QgsSymbolWidgetContext QgsSymbolsListWidget::context() const
309
314
310
315
void QgsSymbolsListWidget::populateGroups ()
311
316
{
317
+ mUpdatingGroups = true ;
312
318
groupsCombo->blockSignals ( true );
313
319
groupsCombo->clear ();
314
320
@@ -344,36 +350,53 @@ void QgsSymbolsListWidget::populateGroups()
344
350
index = settings.value ( QStringLiteral ( " qgis/symbolsListGroupsIndex" ), 0 ).toInt ();
345
351
groupsCombo->setCurrentIndex ( index );
346
352
353
+ mUpdatingGroups = false ;
354
+
347
355
updateModelFilters ();
348
356
}
349
357
350
358
void QgsSymbolsListWidget::updateModelFilters ()
351
359
{
360
+ if ( mUpdatingGroups )
361
+ return ;
362
+
352
363
const QString text = groupsCombo->currentText ();
364
+ const bool isFreeText = text != groupsCombo->itemText ( groupsCombo->currentIndex () );
353
365
354
- if ( groupsCombo->currentData ().toString () == QLatin1String ( " favorite" ) )
366
+ if ( isFreeText )
367
+ {
368
+ mModel ->setFavoritesOnly ( false );
369
+ mModel ->setTagId ( -1 );
370
+ mModel ->setSmartGroupId ( -1 );
371
+ mModel ->setFilterString ( groupsCombo->currentText () );
372
+ }
373
+ else if ( groupsCombo->currentData ().toString () == QLatin1String ( " favorite" ) )
355
374
{
356
375
mModel ->setFavoritesOnly ( true );
357
376
mModel ->setTagId ( -1 );
358
377
mModel ->setSmartGroupId ( -1 );
378
+ mModel ->setFilterString ( QString () );
359
379
}
360
380
else if ( groupsCombo->currentData ().toString () == QLatin1String ( " all" ) )
361
381
{
362
382
mModel ->setFavoritesOnly ( false );
363
383
mModel ->setTagId ( -1 );
364
384
mModel ->setSmartGroupId ( -1 );
385
+ mModel ->setFilterString ( QString () );
365
386
}
366
387
else if ( groupsCombo->currentData ().toString () == QLatin1String ( " smartgroup" ) )
367
388
{
368
389
mModel ->setFavoritesOnly ( false );
369
390
mModel ->setTagId ( -1 );
370
391
mModel ->setSmartGroupId ( mStyle ->smartgroupId ( text ) );
392
+ mModel ->setFilterString ( QString () );
371
393
}
372
394
else
373
395
{
374
396
mModel ->setFavoritesOnly ( false );
375
397
mModel ->setTagId ( mStyle ->tagId ( text ) );
376
398
mModel ->setSmartGroupId ( -1 );
399
+ mModel ->setFilterString ( QString () );
377
400
}
378
401
}
379
402
@@ -709,6 +732,4 @@ void QgsSymbolsListWidget::groupsCombo_currentIndexChanged( int index )
709
732
{
710
733
QgsSettings settings;
711
734
settings.setValue ( QStringLiteral ( " qgis/symbolsListGroupsIndex" ), index );
712
-
713
- updateModelFilters ();
714
735
}
0 commit comments