Skip to content

Commit 833cdd8

Browse files
committed
[FEATURE][ux] Use a filter line edit in symbol list tag combo
This allows both filtering by selecting existing tags, and also free-form text searches
1 parent e4fc420 commit 833cdd8

File tree

3 files changed

+83
-55
lines changed

3 files changed

+83
-55
lines changed

src/gui/symbology/qgssymbolslistwidget.cpp

Lines changed: 26 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,6 @@ QgsSymbolsListWidget::QgsSymbolsListWidget( QgsSymbol *symbol, QgsStyle *style,
8888
{
8989
setupUi( this );
9090
connect( mSymbolUnitWidget, &QgsUnitSelectionWidget::changed, this, &QgsSymbolsListWidget::mSymbolUnitWidget_changed );
91-
connect( groupsCombo, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, &QgsSymbolsListWidget::groupsCombo_currentIndexChanged );
9291
spinAngle->setClearValue( 0 );
9392

9493
mSymbolUnitWidget->setUnits( QgsUnitTypes::RenderUnitList() << QgsUnitTypes::RenderMillimeters << QgsUnitTypes::RenderMetersInMapUnits << QgsUnitTypes::RenderMapUnits << QgsUnitTypes::RenderPixels
@@ -173,8 +172,14 @@ QgsSymbolsListWidget::QgsSymbolsListWidget( QgsSymbol *symbol, QgsStyle *style,
173172
QgsSettings().setValue( QStringLiteral( "UI/symbolsList/treeState" ), mSymbolTreeView->header()->saveState(), QgsSettings::Gui );
174173
} );
175174

176-
175+
QgsFilterLineEdit *groupEdit = new QgsFilterLineEdit();
176+
groupEdit->setShowSearchIcon( true );
177+
groupEdit->setShowClearButton( true );
178+
groupEdit->setPlaceholderText( tr( "Filter symbols" ) );
179+
groupsCombo->setLineEdit( groupEdit );
177180
populateGroups();
181+
connect( groupsCombo, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, &QgsSymbolsListWidget::groupsCombo_currentIndexChanged );
182+
connect( groupsCombo, &QComboBox::currentTextChanged, this, &QgsSymbolsListWidget::updateModelFilters );
178183

179184
if ( mSymbol )
180185
{
@@ -309,6 +314,7 @@ QgsSymbolWidgetContext QgsSymbolsListWidget::context() const
309314

310315
void QgsSymbolsListWidget::populateGroups()
311316
{
317+
mUpdatingGroups = true;
312318
groupsCombo->blockSignals( true );
313319
groupsCombo->clear();
314320

@@ -344,36 +350,53 @@ void QgsSymbolsListWidget::populateGroups()
344350
index = settings.value( QStringLiteral( "qgis/symbolsListGroupsIndex" ), 0 ).toInt();
345351
groupsCombo->setCurrentIndex( index );
346352

353+
mUpdatingGroups = false;
354+
347355
updateModelFilters();
348356
}
349357

350358
void QgsSymbolsListWidget::updateModelFilters()
351359
{
360+
if ( mUpdatingGroups )
361+
return;
362+
352363
const QString text = groupsCombo->currentText();
364+
const bool isFreeText = text != groupsCombo->itemText( groupsCombo->currentIndex() );
353365

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" ) )
355374
{
356375
mModel->setFavoritesOnly( true );
357376
mModel->setTagId( -1 );
358377
mModel->setSmartGroupId( -1 );
378+
mModel->setFilterString( QString() );
359379
}
360380
else if ( groupsCombo->currentData().toString() == QLatin1String( "all" ) )
361381
{
362382
mModel->setFavoritesOnly( false );
363383
mModel->setTagId( -1 );
364384
mModel->setSmartGroupId( -1 );
385+
mModel->setFilterString( QString() );
365386
}
366387
else if ( groupsCombo->currentData().toString() == QLatin1String( "smartgroup" ) )
367388
{
368389
mModel->setFavoritesOnly( false );
369390
mModel->setTagId( -1 );
370391
mModel->setSmartGroupId( mStyle->smartgroupId( text ) );
392+
mModel->setFilterString( QString() );
371393
}
372394
else
373395
{
374396
mModel->setFavoritesOnly( false );
375397
mModel->setTagId( mStyle->tagId( text ) );
376398
mModel->setSmartGroupId( -1 );
399+
mModel->setFilterString( QString() );
377400
}
378401
}
379402

@@ -709,6 +732,4 @@ void QgsSymbolsListWidget::groupsCombo_currentIndexChanged( int index )
709732
{
710733
QgsSettings settings;
711734
settings.setValue( QStringLiteral( "qgis/symbolsListGroupsIndex" ), index );
712-
713-
updateModelFilters();
714735
}

src/gui/symbology/qgssymbolslistwidget.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,7 @@ class GUI_EXPORT QgsSymbolsListWidget : public QWidget, private Ui::SymbolsListW
128128
QgsVectorLayer *mLayer = nullptr;
129129
QgsMapCanvas *mMapCanvas = nullptr;
130130
QgsStyleProxyModel *mModel = nullptr;
131+
bool mUpdatingGroups = false;
131132

132133
void updateSymbolColor();
133134
void updateSymbolInfo();

src/ui/symbollayer/widget_symbolslist.ui

Lines changed: 56 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -41,13 +41,6 @@
4141
<property name="spacing">
4242
<number>6</number>
4343
</property>
44-
<item>
45-
<widget class="QLabel" name="label">
46-
<property name="text">
47-
<string>Symbols in</string>
48-
</property>
49-
</widget>
50-
</item>
5144
<item>
5245
<widget class="QComboBox" name="groupsCombo">
5346
<property name="sizePolicy">
@@ -62,8 +55,11 @@
6255
<height>0</height>
6356
</size>
6457
</property>
58+
<property name="toolTip">
59+
<string>Filter Symbols</string>
60+
</property>
6561
<property name="editable">
66-
<bool>false</bool>
62+
<bool>true</bool>
6763
</property>
6864
</widget>
6965
</item>
@@ -164,50 +160,60 @@
164160
<number>2</number>
165161
</property>
166162
<item>
167-
<widget class="QToolButton" name="mButtonIconView">
168-
<property name="toolTip">
169-
<string>Icon View</string>
170-
</property>
171-
<property name="text">
172-
<string>PushButton</string>
173-
</property>
174-
<property name="icon">
175-
<iconset resource="../../../images/images.qrc">
176-
<normaloff>:/images/themes/default/mActionFilterTableFields.svg</normaloff>:/images/themes/default/mActionFilterTableFields.svg</iconset>
177-
</property>
178-
<property name="checkable">
179-
<bool>true</bool>
180-
</property>
181-
<property name="autoRaise">
182-
<bool>true</bool>
183-
</property>
184-
<attribute name="buttonGroup">
185-
<string notr="true">buttonGroup</string>
186-
</attribute>
187-
</widget>
188-
</item>
189-
<item>
190-
<widget class="QToolButton" name="mButtonListView">
191-
<property name="toolTip">
192-
<string>List View</string>
193-
</property>
194-
<property name="text">
195-
<string>PushButton</string>
196-
</property>
197-
<property name="icon">
198-
<iconset resource="../../../images/images.qrc">
199-
<normaloff>:/images/themes/default/mActionOpenTable.svg</normaloff>:/images/themes/default/mActionOpenTable.svg</iconset>
200-
</property>
201-
<property name="checkable">
202-
<bool>true</bool>
163+
<layout class="QHBoxLayout" name="horizontalLayout_7">
164+
<property name="spacing">
165+
<number>0</number>
203166
</property>
204-
<property name="autoRaise">
205-
<bool>true</bool>
167+
<property name="rightMargin">
168+
<number>0</number>
206169
</property>
207-
<attribute name="buttonGroup">
208-
<string notr="true">buttonGroup</string>
209-
</attribute>
210-
</widget>
170+
<item>
171+
<widget class="QToolButton" name="mButtonIconView">
172+
<property name="toolTip">
173+
<string>Icon View</string>
174+
</property>
175+
<property name="text">
176+
<string>PushButton</string>
177+
</property>
178+
<property name="icon">
179+
<iconset resource="../../../images/images.qrc">
180+
<normaloff>:/images/themes/default/mActionFilterTableFields.svg</normaloff>:/images/themes/default/mActionFilterTableFields.svg</iconset>
181+
</property>
182+
<property name="checkable">
183+
<bool>true</bool>
184+
</property>
185+
<property name="autoRaise">
186+
<bool>true</bool>
187+
</property>
188+
<attribute name="buttonGroup">
189+
<string notr="true">buttonGroup</string>
190+
</attribute>
191+
</widget>
192+
</item>
193+
<item>
194+
<widget class="QToolButton" name="mButtonListView">
195+
<property name="toolTip">
196+
<string>List View</string>
197+
</property>
198+
<property name="text">
199+
<string>PushButton</string>
200+
</property>
201+
<property name="icon">
202+
<iconset resource="../../../images/images.qrc">
203+
<normaloff>:/images/themes/default/mActionOpenTable.svg</normaloff>:/images/themes/default/mActionOpenTable.svg</iconset>
204+
</property>
205+
<property name="checkable">
206+
<bool>true</bool>
207+
</property>
208+
<property name="autoRaise">
209+
<bool>true</bool>
210+
</property>
211+
<attribute name="buttonGroup">
212+
<string notr="true">buttonGroup</string>
213+
</attribute>
214+
</widget>
215+
</item>
216+
</layout>
211217
</item>
212218
<item>
213219
<widget class="QLabel" name="lblSymbolName">

0 commit comments

Comments
 (0)