[QGIS Commit] r11729 - in trunk/qgis: python/core src/app src/core src/providers/spatialite src/ui

svn_qgis at osgeo.org svn_qgis at osgeo.org
Mon Sep 28 17:38:26 EDT 2009


Author: jef
Date: 2009-09-28 17:38:25 -0400 (Mon, 28 Sep 2009)
New Revision: 11729

Modified:
   trunk/qgis/python/core/qgsdatasourceuri.sip
   trunk/qgis/src/app/qgsprojectproperties.cpp
   trunk/qgis/src/core/qgsdatasourceuri.cpp
   trunk/qgis/src/core/qgsdatasourceuri.h
   trunk/qgis/src/core/qgsmaplayer.cpp
   trunk/qgis/src/core/qgsproject.cpp
   trunk/qgis/src/providers/spatialite/qgsspatialiteprovider.cpp
   trunk/qgis/src/ui/qgsprojectpropertiesbase.ui
Log:
- fix load of layers saved with relative paths on *x
- also save relative paths to spatialite databases
- show path mode as combobox
- add QgsDataSourceURI::setDatabase()


Modified: trunk/qgis/python/core/qgsdatasourceuri.sip
===================================================================
--- trunk/qgis/python/core/qgsdatasourceuri.sip	2009-09-28 18:44:31 UTC (rev 11728)
+++ trunk/qgis/python/core/qgsdatasourceuri.sip	2009-09-28 21:38:25 UTC (rev 11729)
@@ -38,6 +38,10 @@
                      const QString& aUsername,
                      const QString& aPassword,
                      SSLmode sslmode = SSLprefer );
+
+  //! Set database
+  //! \note added in 1.4
+  void setDatabase( const QString &database );
   
   //! Set all data source related members at once
   void setDataSource(const QString& aSchema,

Modified: trunk/qgis/src/app/qgsprojectproperties.cpp
===================================================================
--- trunk/qgis/src/app/qgsprojectproperties.cpp	2009-09-28 18:44:31 UTC (rev 11728)
+++ trunk/qgis/src/app/qgsprojectproperties.cpp	2009-09-28 21:38:25 UTC (rev 11729)
@@ -83,7 +83,7 @@
     radManual->setChecked( true );
   }
 
-  cbxAbsolutePath->setChecked( QgsProject::instance()->readBoolEntry( "Paths", "/Absolute", true ) );
+  cbxAbsolutePath->setCurrentIndex( QgsProject::instance()->readBoolEntry( "Paths", "/Absolute", true ) ? 0 : 1 );
 
   int dp = QgsProject::instance()->readNumEntry( "PositionPrecision", "/DecimalPlaces" );
   spinBoxDP->setValue( dp );
@@ -373,7 +373,7 @@
   // Announce that we may have a new display precision setting
   emit displayPrecisionChanged();
 
-  QgsProject::instance()->writeEntry( "Paths", "/Absolute", cbxAbsolutePath->isChecked() );
+  QgsProject::instance()->writeEntry( "Paths", "/Absolute", cbxAbsolutePath->currentIndex()==0 );
 
   //set the colour for selections
   QColor myColour = pbnSelectionColour->color();

Modified: trunk/qgis/src/core/qgsdatasourceuri.cpp
===================================================================
--- trunk/qgis/src/core/qgsdatasourceuri.cpp	2009-09-28 18:44:31 UTC (rev 11728)
+++ trunk/qgis/src/core/qgsdatasourceuri.cpp	2009-09-28 21:38:25 UTC (rev 11729)
@@ -432,3 +432,8 @@
   mSql = sql;
   mKeyColumn = keyColumn;
 }
+
+void QgsDataSourceURI::setDatabase( const QString &database )
+{
+  mDatabase = database;
+}

Modified: trunk/qgis/src/core/qgsdatasourceuri.h
===================================================================
--- trunk/qgis/src/core/qgsdatasourceuri.h	2009-09-28 18:44:31 UTC (rev 11728)
+++ trunk/qgis/src/core/qgsdatasourceuri.h	2009-09-28 21:38:25 UTC (rev 11729)
@@ -57,6 +57,10 @@
                         const QString& aPassword,
                         SSLmode sslmode = SSLprefer );
 
+    //! Set database
+    // \note added in 1.4
+    void setDatabase( const QString &database );
+
     //! Set all data source related members at once
     void setDataSource( const QString& aSchema,
                         const QString& aTable,

Modified: trunk/qgis/src/core/qgsmaplayer.cpp
===================================================================
--- trunk/qgis/src/core/qgsmaplayer.cpp	2009-09-28 18:44:31 UTC (rev 11728)
+++ trunk/qgis/src/core/qgsmaplayer.cpp	2009-09-28 21:38:25 UTC (rev 11729)
@@ -40,6 +40,7 @@
 #include "qgsproject.h"
 #include "qgslogger.h"
 #include "qgsdatasourceuri.h"
+#include "qgsvectorlayer.h"
 
 QgsMapLayer::QgsMapLayer( QgsMapLayer::LayerType type,
                           QString lyrname,
@@ -145,14 +146,30 @@
 
   QDomElement element = layer_node.toElement();
 
-  // XXX not needed? QString type = element.attribute("type");
+  QDomNode mnl;
+  QDomElement mne;
 
+  // read provider
+  QString provider;
+  mnl = layer_node.namedItem( "provider" );
+  mne = mnl.toElement();
+  provider = mne.text();
+
   // set data source
-  QDomNode mnl = layer_node.namedItem( "datasource" );
-  QDomElement mne = mnl.toElement();
+  mnl = layer_node.namedItem( "datasource" );
+  mne = mnl.toElement();
   mDataSource = mne.text();
 
-  mDataSource = QgsProject::instance()->readPath( mDataSource );
+  if ( provider == "spatialite" )
+  {
+    QgsDataSourceURI uri( mDataSource );
+    uri.setDatabase( QgsProject::instance()->readPath( uri.database() ) );
+    mDataSource = uri.uri();
+  }
+  else
+  {
+    mDataSource = QgsProject::instance()->readPath( mDataSource );
+  }
 
   // Set the CRS from project file, asking the user if necessary.
   // Make it the saved CRS to have WMS layer projected correctly.
@@ -268,7 +285,18 @@
 
   QString src = source();
 
-  src = QgsProject::instance()->writePath( src );
+  QgsVectorLayer *vlayer = dynamic_cast<QgsVectorLayer *>( this );
+  if ( vlayer && vlayer->providerType() == "spatialite" )
+  {
+    QgsDataSourceURI uri( src );
+    QString database = QgsProject::instance()->writePath( uri.database() );
+    uri.setConnection( uri.host(), uri.port(), database, uri.username(), uri.password() );
+    src = uri.uri();
+  }
+  else
+  {
+    src = QgsProject::instance()->writePath( src );
+  }
 
   QDomText dataSourceText = document.createTextNode( src );
   dataSource.appendChild( dataSourceText );

Modified: trunk/qgis/src/core/qgsproject.cpp
===================================================================
--- trunk/qgis/src/core/qgsproject.cpp	2009-09-28 18:44:31 UTC (rev 11728)
+++ trunk/qgis/src/core/qgsproject.cpp	2009-09-28 21:38:25 UTC (rev 11729)
@@ -1373,6 +1373,11 @@
     projElems.removeAt( pos - 1 );
   }
 
+#if !defined(Q_OS_WIN)
+  // make path absolute
+  projElems.prepend( "" );
+#endif
+
   return projElems.join( "/" );
 }
 

Modified: trunk/qgis/src/providers/spatialite/qgsspatialiteprovider.cpp
===================================================================
--- trunk/qgis/src/providers/spatialite/qgsspatialiteprovider.cpp	2009-09-28 18:44:31 UTC (rev 11728)
+++ trunk/qgis/src/providers/spatialite/qgsspatialiteprovider.cpp	2009-09-28 21:38:25 UTC (rev 11729)
@@ -49,17 +49,8 @@
   // parsing members from the uri structure
   mTableName = mUri.table();
   geometryColumn = mUri.geometryColumn();
+  mSqlitePath = mUri.database();
 
-  // extracting the DB path
-  int idx = uri.indexOf( "dbname='" );
-  if ( idx >= 0 )
-    mSqlitePath = uri.mid( idx + 8 );
-  else
-    mSqlitePath = uri;
-  idx = mSqlitePath.indexOf( "' table=" );
-  if ( idx > 0 )
-    mSqlitePath.truncate( idx );
-
   // trying to open the SQLite DB
   spatialite_init( 0 );
   valid = true;

Modified: trunk/qgis/src/ui/qgsprojectpropertiesbase.ui
===================================================================
--- trunk/qgis/src/ui/qgsprojectpropertiesbase.ui	2009-09-28 18:44:31 UTC (rev 11728)
+++ trunk/qgis/src/ui/qgsprojectpropertiesbase.ui	2009-09-28 21:38:25 UTC (rev 11729)
@@ -138,13 +138,40 @@
             </property>
            </widget>
           </item>
-          <item row="3" column="0" colspan="4">
-           <widget class="QCheckBox" name="cbxAbsolutePath">
+          <item row="3" column="3">
+           <widget class="QComboBox" name="cbxAbsolutePath">
+            <item>
+             <property name="text">
+              <string>absolute</string>
+             </property>
+            </item>
+            <item>
+             <property name="text">
+              <string>relative</string>
+             </property>
+            </item>
+           </widget>
+          </item>
+          <item row="3" column="0">
+           <widget class="QLabel" name="label_3">
             <property name="text">
-             <string>Save absolute paths</string>
+             <string>Save paths</string>
             </property>
            </widget>
           </item>
+          <item row="3" column="2">
+           <spacer name="horizontalSpacer">
+            <property name="orientation">
+             <enum>Qt::Horizontal</enum>
+            </property>
+            <property name="sizeHint" stdset="0">
+             <size>
+              <width>40</width>
+              <height>20</height>
+             </size>
+            </property>
+           </spacer>
+          </item>
          </layout>
         </widget>
        </item>
@@ -331,9 +358,6 @@
          <attribute name="horizontalHeaderStretchLastSection">
           <bool>true</bool>
          </attribute>
-         <attribute name="horizontalHeaderVisible">
-          <bool>false</bool>
-         </attribute>
          <column>
           <property name="text">
            <string>Layer</string>



More information about the QGIS-commit mailing list