[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