Skip to content

Commit a022ad2

Browse files
committed
Fix handling of "hide deprecated" in projection selector widget
Fixes #18896
1 parent f48aaea commit a022ad2

File tree

2 files changed

+51
-78
lines changed

2 files changed

+51
-78
lines changed

src/gui/qgsprojectionselectiontreewidget.cpp

Lines changed: 44 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -37,12 +37,14 @@ QgsProjectionSelectionTreeWidget::QgsProjectionSelectionTreeWidget( QWidget *par
3737
{
3838
setupUi( this );
3939

40+
leSearch->setShowSearchIcon( true );
41+
4042
connect( lstCoordinateSystems, &QTreeWidget::itemDoubleClicked, this, &QgsProjectionSelectionTreeWidget::lstCoordinateSystems_itemDoubleClicked );
4143
connect( lstRecent, &QTreeWidget::itemDoubleClicked, this, &QgsProjectionSelectionTreeWidget::lstRecent_itemDoubleClicked );
4244
connect( lstCoordinateSystems, &QTreeWidget::currentItemChanged, this, &QgsProjectionSelectionTreeWidget::lstCoordinateSystems_currentItemChanged );
4345
connect( lstRecent, &QTreeWidget::currentItemChanged, this, &QgsProjectionSelectionTreeWidget::lstRecent_currentItemChanged );
44-
connect( cbxHideDeprecated, &QCheckBox::stateChanged, this, &QgsProjectionSelectionTreeWidget::cbxHideDeprecated_stateChanged );
45-
connect( leSearch, &QgsFilterLineEdit::textChanged, this, &QgsProjectionSelectionTreeWidget::leSearch_textChanged );
46+
connect( cbxHideDeprecated, &QCheckBox::stateChanged, this, &QgsProjectionSelectionTreeWidget::updateFilter );
47+
connect( leSearch, &QgsFilterLineEdit::textChanged, this, &QgsProjectionSelectionTreeWidget::updateFilter );
4648

4749
mPreviewBand = new QgsRubberBand( mAreaCanvas, QgsWkbTypes::PolygonGeometry );
4850
mPreviewBand->setWidth( 4 );
@@ -736,7 +738,7 @@ void QgsProjectionSelectionTreeWidget::loadCrsList( QSet<QString> *crsFilter )
736738
}
737739

738740
// display the qgis deprecated in the user data of the item
739-
newItem->setData( 0, Qt::UserRole, QString::fromUtf8( ( char * )sqlite3_column_text( stmt, 6 ) ) );
741+
newItem->setData( 0, RoleDeprecated, QString::fromUtf8( ( char * )sqlite3_column_text( stmt, 6 ) ) );
740742
newItem->setHidden( cbxHideDeprecated->isChecked() );
741743
}
742744
mProjList->setExpanded( true );
@@ -848,96 +850,62 @@ void QgsProjectionSelectionTreeWidget::lstRecent_itemDoubleClicked( QTreeWidgetI
848850
emit projectionDoubleClicked();
849851
}
850852

851-
void QgsProjectionSelectionTreeWidget::hideDeprecated( QTreeWidgetItem *item )
852-
{
853-
if ( item->data( 0, Qt::UserRole ).toBool() )
854-
{
855-
item->setHidden( cbxHideDeprecated->isChecked() );
856-
if ( item->isSelected() && item->isHidden() )
857-
{
858-
item->setSelected( false );
859-
teProjection->clear();
860-
teSelected->clear();
861-
}
862-
}
863-
864-
for ( int i = 0; i < item->childCount(); i++ )
865-
hideDeprecated( item->child( i ) );
866-
}
867-
868-
void QgsProjectionSelectionTreeWidget::cbxHideDeprecated_stateChanged()
869-
{
870-
for ( int i = 0; i < lstCoordinateSystems->topLevelItemCount(); i++ )
871-
hideDeprecated( lstCoordinateSystems->topLevelItem( i ) );
872-
}
873-
874-
void QgsProjectionSelectionTreeWidget::leSearch_textChanged( const QString &filterTxt )
853+
void QgsProjectionSelectionTreeWidget::updateFilter()
875854
{
876-
QString filterTxtCopy = filterTxt;
855+
QString filterTxtCopy = leSearch->text();
877856
filterTxtCopy.replace( QRegExp( "\\s+" ), QStringLiteral( ".*" ) );
878857
QRegExp re( filterTxtCopy, Qt::CaseInsensitive );
879858

880-
// filter recent crs's
881-
QTreeWidgetItemIterator itr( lstRecent );
882-
while ( *itr )
859+
const bool hideDeprecated = cbxHideDeprecated->isChecked();
860+
861+
auto filterTreeWidget = [ = ]( QTreeWidget * tree )
883862
{
884-
if ( ( *itr )->childCount() == 0 ) // it's an end node aka a projection
863+
QTreeWidgetItemIterator itr( tree );
864+
while ( *itr )
885865
{
886-
if ( ( *itr )->text( NameColumn ).contains( re )
887-
|| ( *itr )->text( AuthidColumn ).contains( re )
888-
)
866+
if ( ( *itr )->childCount() == 0 ) // it's an end node aka a projection
889867
{
890-
( *itr )->setHidden( false );
891-
QTreeWidgetItem *parent = ( *itr )->parent();
892-
while ( parent )
868+
if ( hideDeprecated && ( *itr )->data( 0, RoleDeprecated ).toBool() )
893869
{
894-
parent->setExpanded( true );
895-
parent->setHidden( false );
896-
parent = parent->parent();
870+
( *itr )->setHidden( true );
871+
if ( ( *itr )->isSelected() )
872+
{
873+
( *itr )->setSelected( false );
874+
teProjection->clear();
875+
teSelected->clear();
876+
}
877+
}
878+
else if ( ( *itr )->text( NameColumn ).contains( re )
879+
|| ( *itr )->text( AuthidColumn ).contains( re )
880+
)
881+
{
882+
( *itr )->setHidden( false );
883+
QTreeWidgetItem *parent = ( *itr )->parent();
884+
while ( parent )
885+
{
886+
parent->setExpanded( true );
887+
parent->setHidden( false );
888+
parent = parent->parent();
889+
}
890+
}
891+
else
892+
{
893+
( *itr )->setHidden( true );
897894
}
898895
}
899896
else
900897
{
901898
( *itr )->setHidden( true );
902899
}
900+
++itr;
903901
}
904-
else
905-
{
906-
( *itr )->setHidden( true );
907-
}
908-
++itr;
909-
}
902+
};
903+
904+
// filter recent crs's
905+
filterTreeWidget( lstRecent );
910906

911907
// filter crs's
912-
QTreeWidgetItemIterator it( lstCoordinateSystems );
913-
while ( *it )
914-
{
915-
if ( ( *it )->childCount() == 0 ) // it's an end node aka a projection
916-
{
917-
if ( ( *it )->text( NameColumn ).contains( re )
918-
|| ( *it )->text( AuthidColumn ).contains( re )
919-
)
920-
{
921-
( *it )->setHidden( false );
922-
QTreeWidgetItem *parent = ( *it )->parent();
923-
while ( parent )
924-
{
925-
parent->setExpanded( true );
926-
parent->setHidden( false );
927-
parent = parent->parent();
928-
}
929-
}
930-
else
931-
{
932-
( *it )->setHidden( true );
933-
}
934-
}
935-
else
936-
{
937-
( *it )->setHidden( true );
938-
}
939-
++it;
940-
}
908+
filterTreeWidget( lstCoordinateSystems );
941909
}
942910

943911

src/gui/qgsprojectionselectiontreewidget.h

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -235,6 +235,12 @@ class GUI_EXPORT QgsProjectionSelectionTreeWidget : public QWidget, private Ui::
235235

236236
//! Show the user a warning if the srs database could not be found
237237
void showDBMissingWarning( const QString &fileName );
238+
239+
enum Roles
240+
{
241+
RoleDeprecated = Qt::UserRole,
242+
};
243+
238244
// List view nodes for the tree view of projections
239245
//! User defined projections node
240246
QTreeWidgetItem *mUserProjList = nullptr;
@@ -302,8 +308,7 @@ class GUI_EXPORT QgsProjectionSelectionTreeWidget : public QWidget, private Ui::
302308
void lstRecent_itemDoubleClicked( QTreeWidgetItem *current, int column );
303309
void lstCoordinateSystems_currentItemChanged( QTreeWidgetItem *current, QTreeWidgetItem *prev );
304310
void lstRecent_currentItemChanged( QTreeWidgetItem *current, QTreeWidgetItem *prev );
305-
void cbxHideDeprecated_stateChanged();
306-
void leSearch_textChanged( const QString & );
311+
void updateFilter();
307312
};
308313

309314
#endif

0 commit comments

Comments
 (0)