[QGIS Commit] r13185 - in trunk/qgis/src: gui ui

svn_qgis at osgeo.org svn_qgis at osgeo.org
Sun Mar 28 16:20:58 EDT 2010


Author: jef
Date: 2010-03-28 16:20:55 -0400 (Sun, 28 Mar 2010)
New Revision: 13185

Modified:
   trunk/qgis/src/gui/qgsprojectionselector.cpp
   trunk/qgis/src/gui/qgsprojectionselector.h
   trunk/qgis/src/ui/qgsprojectionselectorbase.ui
Log:
projection search improvements (fixes #2602)

Modified: trunk/qgis/src/gui/qgsprojectionselector.cpp
===================================================================
--- trunk/qgis/src/gui/qgsprojectionselector.cpp	2010-03-28 20:18:07 UTC (rev 13184)
+++ trunk/qgis/src/gui/qgsprojectionselector.cpp	2010-03-28 20:20:55 UTC (rev 13185)
@@ -55,6 +55,9 @@
   lstCoordinateSystems->header()->resizeSection( QGIS_CRS_ID_COLUMN, 0 );
   lstCoordinateSystems->header()->setResizeMode( QGIS_CRS_ID_COLUMN, QHeaderView::Fixed );
 
+  cbxAuthority->addItem( tr( "All" ) );
+  cbxAuthority->addItems( authorities() );
+
   // Read settings from persistent storage
   QSettings settings;
   mRecentProjections = settings.value( "/UI/recentProjections" ).toStringList();
@@ -723,7 +726,7 @@
   mUserProjListDone = true;
 }
 
-void QgsProjectionSelector::loadCrsList( QSet<QString> * crsFilter )
+void QgsProjectionSelector::loadCrsList( QSet<QString> *crsFilter )
 {
   // convert our Coordinate Reference System filter into the SQL expression
   QString sqlFilter = ogcWmsCrsFilterAsSqlExpression( crsFilter );
@@ -942,39 +945,40 @@
   QgsDebugMsg( "pbnFind..." );
 
   QString mySearchString( sqlSafeString( leSearch->text() ) );
+
   // Set up the query to retrieve the projection information needed to populate the list
-  QString mySql;
-  if ( radAuthId->isChecked() )
+  QString mySql = "select srs_id from tbl_srs where ";
+  if ( cbxAuthority->currentIndex() > 0 )
   {
-    mySql = QString( "select srs_id from tbl_srs where upper(auth_name||':'||auth_id)='%1'" ).arg( mySearchString.toUpper() );
+    mySql += QString( "auth_name='%1' AND " ).arg( cbxAuthority->currentText() );
   }
-  else if ( radName->isChecked() ) //name search
+
+  if ( cbxHideDeprecated->isChecked() )
   {
-    //we need to find what the largest srsid matching our query so we know whether to
-    //loop backto the beginning
-    mySql = "select srs_id from tbl_srs where upper(description) like '%" + mySearchString.toUpper() + "%'";
-    if ( cbxHideDeprecated->isChecked() )
-      mySql += " and not deprecated";
-    mySql += " order by srs_id desc limit 1";
-    long myLargestSrsId = getLargestCRSIDMatch( mySql );
+    mySql += "not deprecated AND ";
+  }
+
+  if ( cbxMode->currentIndex() == 0 )
+  {
+    mySql += QString( "auth_id='%1'" ).arg( mySearchString );
+  }
+  else
+  {
+    mySql += "upper(description) like '%" + mySearchString.toUpper() + "%' ";
+
+    long myLargestSrsId = getLargestCRSIDMatch( QString( "%1 order by srs_id desc limit 1" ).arg( mySql ) );
     QgsDebugMsg( QString( "Largest CRSID%1" ).arg( myLargestSrsId ) );
-    //a name search is ambiguous, so we find the first srsid after the current seelcted srsid
+
+    //a name search is ambiguous, so we find the first srsid after the current selected srsid
     // each time the find button is pressed. This means we can loop through all matches.
     if ( myLargestSrsId <= selectedCrsId() )
     {
-      //roll search around to the beginning
-      mySql = "select srs_id from tbl_srs where upper(description) like '%" + mySearchString.toUpper() + "%'";
-      if ( cbxHideDeprecated->isChecked() )
-        mySql += " and not deprecated";
-      mySql += " order by srs_id limit 1";
+      mySql = QString( "%1 order by srs_id limit 1" ).arg( mySql );
     }
     else
     {
       // search ahead of the current position
-      mySql = "select srs_id from tbl_srs where upper(description) like '%" + mySearchString.toUpper() + "%'";
-      if ( cbxHideDeprecated->isChecked() )
-        mySql += " and not deprecated";
-      mySql += " and srs_id > " + QString::number( selectedCrsId() ) + " order by srs_id limit 1";
+      mySql = QString( "%1 and srs_id > %2 order by srs_id limit 1" ).arg( mySql ).arg( selectedCrsId() );
     }
   }
   QgsDebugMsg( QString( " Search sql: %1" ).arg( mySql ) );
@@ -1128,6 +1132,42 @@
   }
   return mySrsId;
 }
+
+QStringList QgsProjectionSelector::authorities()
+{
+  sqlite3      *myDatabase;
+  const char   *myTail;
+  sqlite3_stmt *myPreparedStatement;
+  int           myResult;
+
+  myResult = sqlite3_open( mSrsDatabaseFileName.toUtf8().data(), &myDatabase );
+  if ( myResult )
+  {
+    QgsDebugMsg( QString( "Can't open * user * database: %1" ).arg( sqlite3_errmsg( myDatabase ) ) );
+    //no need for assert because user db may not have been created yet
+    return QStringList();
+  }
+
+  QString theSql = "select distinct auth_name from tbl_srs";
+  myResult = sqlite3_prepare( myDatabase, theSql.toUtf8(), theSql.toUtf8().length(), &myPreparedStatement, &myTail );
+
+  QStringList authorities;
+
+  if ( myResult == SQLITE_OK )
+  {
+    while ( sqlite3_step( myPreparedStatement ) == SQLITE_ROW )
+    {
+      authorities << QString::fromUtf8(( char * )sqlite3_column_text( myPreparedStatement, 0 ) );
+    }
+
+    // close the sqlite3 statement
+    sqlite3_finalize( myPreparedStatement );
+    sqlite3_close( myDatabase );
+  }
+
+  return authorities;
+}
+
 /*!
 * \brief Make the string safe for use in SQL statements.
 *  This involves escaping single quotes, double quotes, backslashes,

Modified: trunk/qgis/src/gui/qgsprojectionselector.h
===================================================================
--- trunk/qgis/src/gui/qgsprojectionselector.h	2010-03-28 20:18:07 UTC (rev 13184)
+++ trunk/qgis/src/gui/qgsprojectionselector.h	2010-03-28 20:20:55 UTC (rev 13185)
@@ -243,6 +243,9 @@
      */
     void coordinateSystemSelected( QTreeWidgetItem* );
 
+    //! get list of authorities
+    QStringList authorities();
+
   signals:
     void sridSelected( QString theSRID );
     //! Refresh any listening canvases

Modified: trunk/qgis/src/ui/qgsprojectionselectorbase.ui
===================================================================
--- trunk/qgis/src/ui/qgsprojectionselectorbase.ui	2010-03-28 20:18:07 UTC (rev 13184)
+++ trunk/qgis/src/ui/qgsprojectionselectorbase.ui	2010-03-28 20:20:55 UTC (rev 13185)
@@ -6,8 +6,8 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>428</width>
-    <height>316</height>
+    <width>374</width>
+    <height>464</height>
    </rect>
   </property>
   <property name="sizePolicy">
@@ -31,34 +31,6 @@
    <property name="margin">
     <number>3</number>
    </property>
-   <item row="0" column="0">
-    <widget class="QTreeWidget" name="lstCoordinateSystems">
-     <property name="alternatingRowColors">
-      <bool>true</bool>
-     </property>
-     <property name="uniformRowHeights">
-      <bool>true</bool>
-     </property>
-     <property name="columnCount">
-      <number>3</number>
-     </property>
-     <column>
-      <property name="text">
-       <string>Coordinate Reference System</string>
-      </property>
-     </column>
-     <column>
-      <property name="text">
-       <string>Authority ID</string>
-      </property>
-     </column>
-     <column>
-      <property name="text">
-       <string>ID</string>
-      </property>
-     </column>
-    </widget>
-   </item>
    <item row="1" column="0">
     <widget class="QTextEdit" name="teProjection">
      <property name="sizePolicy">
@@ -93,6 +65,46 @@
      </property>
     </widget>
    </item>
+   <item row="3" column="0">
+    <widget class="QPushButton" name="pbnPopular1"/>
+   </item>
+   <item row="4" column="0">
+    <widget class="QPushButton" name="pbnPopular2"/>
+   </item>
+   <item row="5" column="0">
+    <widget class="QPushButton" name="pbnPopular3"/>
+   </item>
+   <item row="6" column="0">
+    <widget class="QPushButton" name="pbnPopular4"/>
+   </item>
+   <item row="0" column="0">
+    <widget class="QTreeWidget" name="lstCoordinateSystems">
+     <property name="alternatingRowColors">
+      <bool>true</bool>
+     </property>
+     <property name="uniformRowHeights">
+      <bool>true</bool>
+     </property>
+     <property name="columnCount">
+      <number>3</number>
+     </property>
+     <column>
+      <property name="text">
+       <string>Coordinate Reference System</string>
+      </property>
+     </column>
+     <column>
+      <property name="text">
+       <string>Authority ID</string>
+      </property>
+     </column>
+     <column>
+      <property name="text">
+       <string>ID</string>
+      </property>
+     </column>
+    </widget>
+   </item>
    <item row="2" column="0">
     <widget class="QGroupBox" name="groupBox">
      <property name="sizePolicy">
@@ -105,33 +117,35 @@
       <string>Search</string>
      </property>
      <layout class="QGridLayout">
+      <item row="1" column="1">
+       <widget class="QComboBox" name="cbxMode">
+        <item>
+         <property name="text">
+          <string>ID</string>
+         </property>
+        </item>
+        <item>
+         <property name="text">
+          <string>Name</string>
+         </property>
+        </item>
+       </widget>
+      </item>
       <item row="0" column="0">
-       <widget class="QRadioButton" name="radAuthId">
+       <widget class="QLabel" name="label">
         <property name="text">
-         <string>AuthorityID</string>
+         <string>Authority</string>
         </property>
-        <property name="iconSize">
-         <size>
-          <width>16</width>
-          <height>10</height>
-         </size>
-        </property>
-        <property name="checked">
-         <bool>true</bool>
-        </property>
        </widget>
       </item>
       <item row="0" column="1">
-       <widget class="QRadioButton" name="radName">
+       <widget class="QComboBox" name="cbxAuthority"/>
+      </item>
+      <item row="1" column="0">
+       <widget class="QLabel" name="label_2">
         <property name="text">
-         <string>Name</string>
+         <string>Search for</string>
         </property>
-        <property name="iconSize">
-         <size>
-          <width>16</width>
-          <height>10</height>
-         </size>
-        </property>
        </widget>
       </item>
       <item row="0" column="2">
@@ -153,7 +167,7 @@
         </property>
        </widget>
       </item>
-      <item row="1" column="0" colspan="4">
+      <item row="1" column="2" colspan="2">
        <widget class="QCheckBox" name="cbxHideDeprecated">
         <property name="text">
          <string>Hide deprecated CRSs</string>
@@ -163,18 +177,6 @@
      </layout>
     </widget>
    </item>
-   <item row="3" column="0">
-    <widget class="QPushButton" name="pbnPopular1"/>
-   </item>
-   <item row="4" column="0">
-    <widget class="QPushButton" name="pbnPopular2"/>
-   </item>
-   <item row="5" column="0">
-    <widget class="QPushButton" name="pbnPopular3"/>
-   </item>
-   <item row="6" column="0">
-    <widget class="QPushButton" name="pbnPopular4"/>
-   </item>
   </layout>
  </widget>
  <layoutdefault spacing="6" margin="11"/>



More information about the QGIS-commit mailing list