@@ -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
0 commit comments