[QGIS Commit] r15165 - in trunk/qgis/src: app/ogr core providers/ogr

svn_qgis at osgeo.org svn_qgis at osgeo.org
Sun Feb 13 12:20:42 EST 2011


Author: jef
Date: 2011-02-13 09:20:42 -0800 (Sun, 13 Feb 2011)
New Revision: 15165

Modified:
   trunk/qgis/src/app/ogr/qgsopenvectorlayerdialog.cpp
   trunk/qgis/src/app/ogr/qgsvectorlayersaveasdialog.cpp
   trunk/qgis/src/core/qgsvectorfilewriter.cpp
   trunk/qgis/src/core/qgsvectorfilewriter.h
   trunk/qgis/src/providers/ogr/qgsogrprovider.cpp
Log:
fix #3477 & #3778

Modified: trunk/qgis/src/app/ogr/qgsopenvectorlayerdialog.cpp
===================================================================
--- trunk/qgis/src/app/ogr/qgsopenvectorlayerdialog.cpp	2011-02-13 11:39:26 UTC (rev 15164)
+++ trunk/qgis/src/app/ogr/qgsopenvectorlayerdialog.cpp	2011-02-13 17:20:42 UTC (rev 15165)
@@ -98,13 +98,11 @@
 
 QStringList QgsOpenVectorLayerDialog::openFile()
 {
-
   QStringList selectedFiles;
   QgsDebugMsg( "Vector file filters: " + mVectorFileFilter );
   QString enc = encoding();
   QString title = tr( "Open an OGR Supported Vector Layer" );
-  QgisGui::openFilesRememberingFilter( "lastVectorFileFilter", mVectorFileFilter, selectedFiles, enc,
-                                       title );
+  QgisGui::openFilesRememberingFilter( "lastVectorFileFilter", mVectorFileFilter, selectedFiles, enc, title );
 
   return selectedFiles;
 }

Modified: trunk/qgis/src/app/ogr/qgsvectorlayersaveasdialog.cpp
===================================================================
--- trunk/qgis/src/app/ogr/qgsvectorlayersaveasdialog.cpp	2011-02-13 11:39:26 UTC (rev 15164)
+++ trunk/qgis/src/app/ogr/qgsvectorlayersaveasdialog.cpp	2011-02-13 17:20:42 UTC (rev 15165)
@@ -26,15 +26,15 @@
 #include <QTextCodec>
 
 QgsVectorLayerSaveAsDialog::QgsVectorLayerSaveAsDialog( QWidget* parent, Qt::WFlags fl )
-  : QDialog( parent, fl )
-  , mCRS( -1 )
+    : QDialog( parent, fl )
+    , mCRS( -1 )
 {
   setupUi( this );
 
   QSettings settings;
   QMap<QString, QString> map = QgsVectorFileWriter::ogrDriverList();
   mFormatComboBox->blockSignals( true );
-  for( QMap< QString, QString>::const_iterator it = map.constBegin(); it != map.constEnd(); ++it )
+  for ( QMap< QString, QString>::const_iterator it = map.constBegin(); it != map.constEnd(); ++it )
   {
     mFormatComboBox->addItem( it.key(), it.value() );
   }
@@ -47,7 +47,7 @@
 
   QString enc = settings.value( "/UI/encoding", QString( "System" ) ).toString();
   int idx = mEncodingComboBox->findText( enc );
-  if( idx < 0 )
+  if ( idx < 0 )
   {
     mEncodingComboBox->insertItem( 0, enc );
     idx = 0;
@@ -77,14 +77,21 @@
   browseFilename->setEnabled( true );
   leFilename->setEnabled( true );
 
-  if( format() == "KML" )
+  if ( format() == "KML" )
   {
     mEncodingComboBox->setCurrentIndex( mEncodingComboBox->findText( "UTF-8" ) );
     mEncodingComboBox->setDisabled( true );
+    mSkipAttributeCreation->setEnabled( true );
   }
+  else if ( format() == "DXF" )
+  {
+    mSkipAttributeCreation->setChecked( true );
+    mSkipAttributeCreation->setDisabled( true );
+  }
   else
   {
     mEncodingComboBox->setEnabled( true );
+    mSkipAttributeCreation->setEnabled( true );
   }
 }
 
@@ -94,7 +101,7 @@
   QString dirName = leFilename->text().isEmpty() ? settings.value( "/UI/lastVectorFileFilterDir", "." ).toString() : leFilename->text();
   QString filterString = QgsVectorFileWriter::filterForDriver( format() );
   QString outputFile = QFileDialog::getSaveFileName( 0, tr( "Save layer as..." ), dirName, filterString );
-  if( !outputFile.isNull() )
+  if ( !outputFile.isNull() )
   {
     leFilename->setText( outputFile );
   }
@@ -103,12 +110,12 @@
 void QgsVectorLayerSaveAsDialog::on_browseCRS_clicked()
 {
   QgsGenericProjectionSelector * mySelector = new QgsGenericProjectionSelector();
-  if( mCRS >= 0 )
+  if ( mCRS >= 0 )
     mySelector->setSelectedCrsId( mCRS );
   mySelector->setMessage( tr( "Select the coordinate reference system for the vector file. "
                               "The data points will be transformed from the layer coordinate reference system." ) );
 
-  if( mySelector->exec() )
+  if ( mySelector->exec() )
   {
     QgsCoordinateReferenceSystem srs( mySelector->selectedCrsId(), QgsCoordinateReferenceSystem::InternalCrsId );
     mCRS = srs.srsid();

Modified: trunk/qgis/src/core/qgsvectorfilewriter.cpp
===================================================================
--- trunk/qgis/src/core/qgsvectorfilewriter.cpp	2011-02-13 11:39:26 UTC (rev 15164)
+++ trunk/qgis/src/core/qgsvectorfilewriter.cpp	2011-02-13 17:20:42 UTC (rev 15165)
@@ -117,6 +117,18 @@
   }
   else
   {
+    QString longName;
+    QString trLongName;
+    QString glob;
+    QString ext;
+    if ( QgsVectorFileWriter::driverMetadata( driverName, longName, trLongName, glob, ext ) )
+    {
+      if ( !vectorFileName.endsWith( "." + ext, Qt::CaseInsensitive ) )
+      {
+        vectorFileName += "." + ext;
+      }
+    }
+
     QFile::remove( vectorFileName );
   }
 
@@ -730,11 +742,14 @@
       QString drvName = OGR_Dr_GetName( drv );
       if ( OGR_Dr_TestCapability( drv, "CreateDataSource" ) != 0 )
       {
-        QPair<QString, QString> p = nameAndGlob( drvName );
-        if ( p.first.isEmpty() )
-          continue;
-
-        resultMap.insert( p.first, drvName );
+        QString longName;
+        QString trLongName;
+        QString glob;
+        QString ext;
+        if ( QgsVectorFileWriter::driverMetadata( drvName, longName, trLongName, glob, ext ) && !trLongName.isEmpty() )
+        {
+          resultMap.insert( trLongName, drvName );
+        }
       }
     }
   }
@@ -759,119 +774,165 @@
 
 QString QgsVectorFileWriter::filterForDriver( const QString& driverName )
 {
-  QPair<QString, QString> p = nameAndGlob( driverName );
-
-  if ( p.first.isEmpty() || p.second.isEmpty() )
+  QString longName;
+  QString trLongName;
+  QString glob;
+  QString ext;
+  if ( !QgsVectorFileWriter::driverMetadata( driverName, longName, trLongName, glob, ext )
+       || trLongName.isEmpty()
+       || glob.isEmpty()
+     )
     return "";
 
-  return "[OGR] " + p.first + " (" + p.second.toLower() + " " + p.second.toUpper() + ")";
+  return trLongName + " [OGR] (" + glob.toLower() + " " + glob.toUpper() + ")";
 }
 
-QPair<QString, QString> QgsVectorFileWriter::nameAndGlob( QString driverName )
+bool QgsVectorFileWriter::driverMetadata( QString driverName, QString &longName, QString &trLongName, QString &glob, QString &ext )
 {
-  QString longName;
-  QString glob;
-
   if ( driverName.startsWith( "AVCE00" ) )
   {
     longName = "Arc/Info ASCII Coverage";
+    trLongName = QObject::tr( "Arc/Info ASCII Coverage" );
     glob = "*.e00";
+    ext = "e00";
   }
   else if ( driverName.startsWith( "BNA" ) )
   {
     longName = "Atlas BNA";
+    trLongName = QObject::tr( "Atlas BNA" );
     glob = "*.bna";
+    ext = "bna";
   }
   else if ( driverName.startsWith( "CSV" ) )
   {
     longName = "Comma Separated Value";
+    trLongName = QObject::tr( "Comma Separated Value" );
     glob = "*.csv";
+    ext = "*.bna";
   }
   else if ( driverName.startsWith( "ESRI" ) )
   {
     longName = "ESRI Shapefile";
+    trLongName = QObject::tr( "ESRI Shapefile" );
     glob = "*.shp";
+    ext = "shp";
   }
   else if ( driverName.startsWith( "FMEObjects Gateway" ) )
   {
     longName = "FMEObjects Gateway";
+    trLongName = QObject::tr( "FMEObjects Gateway" );
     glob = "*.fdd";
+    ext = "fdd";
   }
   else if ( driverName.startsWith( "GeoJSON" ) )
   {
     longName = "GeoJSON";
+    trLongName = QObject::tr( "GeoJSON" );
     glob = "*.geojson";
+    ext = "geojson";
   }
   else if ( driverName.startsWith( "GeoRSS" ) )
   {
     longName = "GeoRSS";
+    trLongName = QObject::tr( "GeoRSS" );
     glob = "*.xml";
+    ext = "xml";
   }
   else if ( driverName.startsWith( "GML" ) )
   {
     longName = "Geography Markup Language (GML)";
+    trLongName = QObject::tr( "Geography Markup Language (GML)" );
     glob = "*.gml";
+    ext = "gml";
   }
   else if ( driverName.startsWith( "GMT" ) )
   {
     longName = "Generic Mapping Tools (GMT)";
+    trLongName = QObject::tr( "Generic Mapping Tools (GMT)" );
     glob = "*.gmt";
+    ext = "gmt";
   }
   else if ( driverName.startsWith( "GPX" ) )
   {
     longName = "GPS eXchange Format";
+    trLongName = QObject::tr( "GPS eXchange Format" );
     glob = "*.gpx";
+    ext = "gpx";
   }
   else if ( driverName.startsWith( "Interlis 1" ) )
   {
     longName = "INTERLIS 1";
+    trLongName = QObject::tr( "INTERLIS 1" );
     glob = "*.itf *.xml *.ili";
+    ext = "ili";
   }
   else if ( driverName.startsWith( "Interlis 2" ) )
   {
     longName = "INTERLIS 2";
+    trLongName = QObject::tr( "INTERLIS 2" );
     glob = "*.itf *.xml *.ili";
+    ext = "ili";
   }
   else if ( driverName.startsWith( "KML" ) )
   {
     longName = "Keyhole Markup Language (KML)";
+    trLongName = QObject::tr( "Keyhole Markup Language (KML)" );
     glob = "*.kml" ;
+    ext = "kml" ;
   }
   else if ( driverName.startsWith( "MapInfo File" ) )
   {
     longName = "Mapinfo File";
+    trLongName = QObject::tr( "Mapinfo File" );
     glob = "*.mif *.tab";
+    ext = "mif" ;
   }
   else if ( driverName.startsWith( "DGN" ) )
   {
     longName = "Microstation DGN";
+    trLongName = QObject::tr( "Microstation DGN" );
     glob = "*.dgn";
+    ext = "dgn";
   }
   else if ( driverName.startsWith( "S57" ) )
   {
     longName = "S-57 Base file";
+    trLongName = QObject::tr( "S-57 Base file" );
     glob = "*.000";
+    ext = "000";
   }
   else if ( driverName.startsWith( "SDTS" ) )
   {
     longName = "Spatial Data Transfer Standard (SDTS)";
+    trLongName = QObject::tr( "Spatial Data Transfer Standard (SDTS)" );
     glob = "*catd.ddf";
+    ext = "ddf";
   }
   else if ( driverName.startsWith( "SQLite" ) )
   {
     longName = "SQLite";
+    trLongName = QObject::tr( "SQLite" );
     glob = "*.sqlite";
+    ext = "sqlite";
   }
   else if ( driverName.startsWith( "DXF" ) )
   {
     longName = "AutoCAD DXF";
+    trLongName = QObject::tr( "AutoCAD DXF" );
     glob = "*.dxf";
+    ext = "dxf";
   }
   else if ( driverName.startsWith( "Geoconcept" ) )
   {
     longName = "Geoconcept";
+    trLongName = QObject::tr( "Geoconcept" );
     glob = "*.gxt *.txt";
+    ext = "gxt";
   }
+  else
+  {
+    return false;
+  }
 
-  return QPair<QString, QString>( longName, glob );
+  return true;
 }

Modified: trunk/qgis/src/core/qgsvectorfilewriter.h
===================================================================
--- trunk/qgis/src/core/qgsvectorfilewriter.h	2011-02-13 11:39:26 UTC (rev 15164)
+++ trunk/qgis/src/core/qgsvectorfilewriter.h	2011-02-13 17:20:42 UTC (rev 15165)
@@ -148,7 +148,7 @@
     QMap<int, int> mAttrIdxToOgrIdx;
 
   private:
-    static QPair<QString, QString> nameAndGlob( QString driverName );
+    static bool driverMetadata( QString driverName, QString &longName, QString &trLongName, QString &glob, QString &ext );
 };
 
 #endif

Modified: trunk/qgis/src/providers/ogr/qgsogrprovider.cpp
===================================================================
--- trunk/qgis/src/providers/ogr/qgsogrprovider.cpp	2011-02-13 11:39:26 UTC (rev 15164)
+++ trunk/qgis/src/providers/ogr/qgsogrprovider.cpp	2011-02-13 17:20:42 UTC (rev 15165)
@@ -1250,8 +1250,7 @@
 */
 static QString createFileFilter_( QString const &longName, QString const &glob )
 {
-  return "[OGR] " +
-         longName + " (" + glob.toLower() + " " + glob.toUpper() + ");;";
+  return longName + " [OGR] (" + glob.toLower() + " " + glob.toUpper() + ");;";
 } // createFileFilter_
 
 
@@ -1272,16 +1271,11 @@
 
   if ( myFileFilters.isEmpty() || myFileFilters.isNull() )
   {
-
-
-
     // register ogr plugins
     QgsApplication::registerOgrDrivers();
 
     // first get the GDAL driver manager
-
     OGRSFDriverH driver;          // current driver
-
     QString driverName;           // current driver name
 
     // Grind through all the drivers and their respective metadata.
@@ -1308,156 +1302,156 @@
 
       if ( driverName.startsWith( "AVCBin" ) )
       {
-        myDirectoryDrivers += "Arc/Info Binary Coverage,AVCBin;";
+        myDirectoryDrivers += QObject::tr( "Arc/Info Binary Coverage" ) + ",AVCBin;";
       }
       else if ( driverName.startsWith( "AVCE00" ) )
       {
-        myFileFilters += createFileFilter_( "Arc/Info ASCII Coverage", "*.e00" );
+        myFileFilters += createFileFilter_( QObject::tr( "Arc/Info ASCII Coverage" ), "*.e00" );
       }
       else if ( driverName.startsWith( "BNA" ) )
       {
-        myFileFilters += createFileFilter_( "Atlas BNA", "*.bna" );
+        myFileFilters += createFileFilter_( QObject::tr( "Atlas BNA" ), "*.bna" );
       }
       else if ( driverName.startsWith( "CSV" ) )
       {
-        myFileFilters += createFileFilter_( "Comma Separated Value", "*.csv" );
+        myFileFilters += createFileFilter_( QObject::tr( "Comma Separated Value" ), "*.csv" );
       }
-      else if ( driverName.startsWith( "DODS" ) )
+      else if ( driverName.startsWith( QObject::tr( "DODS" ) ) )
       {
         myProtocolDrivers += "DODS/OPeNDAP,DODS;";
       }
       else if ( driverName.startsWith( "PGeo" ) )
       {
-        myDatabaseDrivers += "ESRI Personal GeoDatabase,PGeo;";
+        myDatabaseDrivers += QObject::tr( "ESRI Personal GeoDatabase" ) + ",PGeo;";
 #ifdef WIN32
-        myFileFilters += createFileFilter_( "ESRI Personal GeoDatabase", "*.mdb" );
+        myFileFilters += createFileFilter_( QObject::tr( "ESRI Personal GeoDatabase" ), "*.mdb" );
 #endif
       }
       else if ( driverName.startsWith( "SDE" ) )
       {
-        myDatabaseDrivers += "ESRI ArcSDE,SDE;";
+        myDatabaseDrivers += QObject::tr( "ESRI ArcSDE" ) + ",SDE;";
       }
       else if ( driverName.startsWith( "ESRI" ) )
       {
-        myFileFilters += createFileFilter_( "ESRI Shapefiles", "*.shp" );
+        myFileFilters += createFileFilter_( QObject::tr( "ESRI Shapefiles" ), "*.shp" );
       }
-      else if ( driverName.startsWith( "FMEObjects Gateway" ) )
+      else if ( driverName.startsWith( QObject::tr( "FMEObjects Gateway" ) ) )
       {
-        myFileFilters += createFileFilter_( "FMEObjects Gateway", "*.fdd" );
+        myFileFilters += createFileFilter_( QObject::tr( "FMEObjects Gateway" ), "*.fdd" );
       }
       else if ( driverName.startsWith( "GeoJSON" ) )
       {
         myProtocolDrivers += "GeoJSON,GeoJSON;";
-        myFileFilters += createFileFilter_( "GeoJSON", "*.geojson" );
+        myFileFilters += createFileFilter_( QObject::tr( "GeoJSON" ), "*.geojson" );
       }
       else if ( driverName.startsWith( "GeoRSS" ) )
       {
-        myFileFilters += createFileFilter_( "GeoRSS", "*.xml" );
+        myFileFilters += createFileFilter_( QObject::tr( "GeoRSS" ), "*.xml" );
       }
       else if ( driverName.startsWith( "GML" ) )
       {
-        myFileFilters += createFileFilter_( "Geography Markup Language", "*.gml" );
+        myFileFilters += createFileFilter_( QObject::tr( "Geography Markup Language (GML)" ), "*.gml" );
       }
       else if ( driverName.startsWith( "GMT" ) )
       {
-        myFileFilters += createFileFilter_( "GMT", "*.gmt" );
+        myFileFilters += createFileFilter_( QObject::tr( "GMT" ), "*.gmt" );
       }
       else if ( driverName.startsWith( "GPX" ) )
       {
-        myFileFilters += createFileFilter_( "GPX", "*.gpx" );
+        myFileFilters += createFileFilter_( QObject::tr( "GPX" ), "*.gpx" );
       }
       else if ( driverName.startsWith( "GRASS" ) )
       {
-        myDirectoryDrivers += "Grass Vector,GRASS;";
+        myDirectoryDrivers += QObject::tr( "Grass Vector" ) + ",GRASS;";
       }
       else if ( driverName.startsWith( "IDB" ) )
       {
-        myDatabaseDrivers += "Informix DataBlade,IDB;";
+        myDatabaseDrivers += QObject::tr( "Informix DataBlade" ) + ",IDB;";
       }
       else if ( driverName.startsWith( "Interlis 1" ) )
       {
-        myFileFilters += createFileFilter_( "INTERLIS 1", "*.itf *.xml *.ili" );
+        myFileFilters += createFileFilter_( QObject::tr( "INTERLIS 1" ), "*.itf *.xml *.ili" );
       }
       else if ( driverName.startsWith( "Interlis 2" ) )
       {
-        myFileFilters += createFileFilter_( "INTERLIS 2", "*.itf *.xml *.ili" );
+        myFileFilters += createFileFilter_( QObject::tr( "INTERLIS 2" ), "*.itf *.xml *.ili" );
       }
       else if ( driverName.startsWith( "INGRES" ) )
       {
-        myDatabaseDrivers += "INGRES,INGRES;";
+        myDatabaseDrivers += QObject::tr( "INGRES" ) + ",INGRES;";
       }
       else if ( driverName.startsWith( "KML" ) )
       {
-        myFileFilters += createFileFilter_( "KML", "*.kml" );
+        myFileFilters += createFileFilter_( QObject::tr( "Keyhole Markup Language (KML)" ), "*.kml" );
       }
       else if ( driverName.startsWith( "MapInfo File" ) )
       {
-        myFileFilters += createFileFilter_( "Mapinfo File", "*.mif *.tab" );
+        myFileFilters += createFileFilter_( QObject::tr( "Mapinfo File" ), "*.mif *.tab" );
       }
       else if ( driverName.startsWith( "DGN" ) )
       {
-        myFileFilters += createFileFilter_( "Microstation DGN", "*.dgn" );
+        myFileFilters += createFileFilter_( QObject::tr( "Microstation DGN" ), "*.dgn" );
       }
       else if ( driverName.startsWith( "MySQL" ) )
       {
-        myDatabaseDrivers += "MySQL,MySQL;";
+        myDatabaseDrivers += QObject::tr( "MySQL" ) + ",MySQL;";
       }
       else if ( driverName.startsWith( "OCI" ) )
       {
-        myDatabaseDrivers += "Oracle Spatial,OCI;";
+        myDatabaseDrivers += QObject::tr( "Oracle Spatial" ) + ",OCI;";
       }
       else if ( driverName.startsWith( "ODBC" ) )
       {
-        myDatabaseDrivers += "ODBC,ODBC;";
+        myDatabaseDrivers += QObject::tr( "ODBC" ) + ",ODBC;";
       }
       else if ( driverName.startsWith( "OGDI" ) )
       {
-        myDatabaseDrivers += "OGDI Vectors,OGDI;";
+        myDatabaseDrivers += QObject::tr( "OGDI Vectors" ) + ",OGDI;";
       }
       else if ( driverName.startsWith( "PostgreSQL" ) )
       {
-        myDatabaseDrivers += "PostgreSQL,PostgreSQL;";
+        myDatabaseDrivers += QObject::tr( "PostgreSQL" ) + ",PostgreSQL;";
       }
       else if ( driverName.startsWith( "S57" ) )
       {
-        myFileFilters += createFileFilter_( "S-57 Base file",
+        myFileFilters += createFileFilter_( QObject::tr( "S-57 Base file" ),
                                             "*.000" );
       }
       else if ( driverName.startsWith( "SDTS" ) )
       {
-        myFileFilters += createFileFilter_( "Spatial Data Transfer Standard",
+        myFileFilters += createFileFilter_( QObject::tr( "Spatial Data Transfer Standard" ),
                                             "*catd.ddf" );
       }
       else if ( driverName.startsWith( "SQLite" ) )
       {
-        myFileFilters += createFileFilter_( "SQLite",
+        myFileFilters += createFileFilter_( QObject::tr( "SQLite" ),
                                             "*.sqlite" );
       }
       else if ( driverName.startsWith( "UK .NTF" ) )
       {
-        myDirectoryDrivers += "UK. NTF,UK. NTF;";
+        myDirectoryDrivers += QObject::tr( "UK. NTF2" ) + ",UK. NTF;";
       }
       else if ( driverName.startsWith( "TIGER" ) )
       {
-        myDirectoryDrivers += "U.S. Census TIGER/Line,TIGER;";
+        myDirectoryDrivers += QObject::tr( "U.S. Census TIGER/Line" ) + ",TIGER;";
       }
       else if ( driverName.startsWith( "VRT" ) )
       {
-        myFileFilters += createFileFilter_( "VRT - Virtual Datasource ",
+        myFileFilters += createFileFilter_( QObject::tr( "VRT - Virtual Datasource" ),
                                             "*.vrt" );
       }
       else if ( driverName.startsWith( "XPlane" ) )
       {
-        myFileFilters += createFileFilter_( "X-Plane/Flightgear",
+        myFileFilters += createFileFilter_( QObject::tr( "X-Plane/Flightgear" ),
                                             "apt.dat nav.dat fix.dat awy.dat" );
       }
       else if ( driverName.startsWith( "Geoconcept" ) )
       {
-        myFileFilters += createFileFilter_( "Geoconcept", "*.gxt *.txt" );
+        myFileFilters += createFileFilter_( QObject::tr( "Geoconcept" ), "*.gxt *.txt" );
       }
       else if ( driverName.startsWith( "DXF" ) )
       {
-        myFileFilters += createFileFilter_( "AutoCAD DXF", "*.dxf" );
+        myFileFilters += createFileFilter_( QObject::tr( "AutoCAD DXF" ), "*.dxf" );
       }
       else
       {
@@ -1470,7 +1464,7 @@
 
     // can't forget the default case
 
-    myFileFilters += "All files (*)";
+    myFileFilters += QObject::tr( "All files" ) + " (*)";
   }
 
   if ( type == "file" )



More information about the QGIS-commit mailing list