[QGIS Commit] r9195 - in trunk/qgis: python/core src/core src/plugins/ogr_converter src/plugins/spit src/providers/ogr

svn_qgis at osgeo.org svn_qgis at osgeo.org
Wed Aug 27 17:56:30 EDT 2008


Author: timlinux
Date: 2008-08-27 17:56:29 -0400 (Wed, 27 Aug 2008)
New Revision: 9195

Modified:
   trunk/qgis/python/core/qgsapplication.sip
   trunk/qgis/src/core/qgsapplication.cpp
   trunk/qgis/src/core/qgsapplication.h
   trunk/qgis/src/core/qgsvectorfilewriter.cpp
   trunk/qgis/src/plugins/ogr_converter/dialog.cpp
   trunk/qgis/src/plugins/ogr_converter/translator.cpp
   trunk/qgis/src/plugins/spit/qgsshapefile.cpp
   trunk/qgis/src/providers/ogr/qgsogrprovider.cpp
Log:
Added a wrapper for ogr register all so that it cant be called twice (on suggestion of M. Loskot). 
Fixes issues where drivers appear to be registered more than once.


Modified: trunk/qgis/python/core/qgsapplication.sip
===================================================================
--- trunk/qgis/python/core/qgsapplication.sip	2008-08-27 21:31:59 UTC (rev 9194)
+++ trunk/qgis/python/core/qgsapplication.sip	2008-08-27 21:56:29 UTC (rev 9195)
@@ -191,5 +191,13 @@
      * application instance useful for debugging mainly.*/
     static QString showSettings();
 
+    /** Register OGR drivers ensuring this only happens once.
+     * This is a workaround for an issue with older gdal versions that
+     * caused duplicate driver name entries to appear in the list 
+     * of registered drivers when QgsApplication::registerOgrDrivers was called multiple 
+     * times.
+     */
+    static void registerOgrDrivers();
+
 };
 

Modified: trunk/qgis/src/core/qgsapplication.cpp
===================================================================
--- trunk/qgis/src/core/qgsapplication.cpp	2008-08-27 21:31:59 UTC (rev 9194)
+++ trunk/qgis/src/core/qgsapplication.cpp	2008-08-27 21:56:29 UTC (rev 9195)
@@ -32,6 +32,8 @@
 #include <netinet/in.h>
 #endif
 
+#include <ogr_api.h>
+
 QString QgsApplication::mPrefixPath;
 QString QgsApplication::mPluginPath;
 QString QgsApplication::mPkgDataPath;
@@ -314,4 +316,10 @@
   return myStyle;
 }
 
-
+void QgsApplication::registerOgrDrivers()
+{
+  if ( 0 >= OGRGetDriverCount() )
+  {
+    OGRRegisterAll();
+  }
+}

Modified: trunk/qgis/src/core/qgsapplication.h
===================================================================
--- trunk/qgis/src/core/qgsapplication.h	2008-08-27 21:31:59 UTC (rev 9194)
+++ trunk/qgis/src/core/qgsapplication.h	2008-08-27 21:56:29 UTC (rev 9195)
@@ -139,6 +139,14 @@
     /** Convenience function to get a summary of the paths used in this
      * application instance useful for debugging mainly.*/
     static QString showSettings();
+    /** Register OGR drivers ensuring this only happens once.
+     * This is a workaround for an issue with older gdal versions that
+     * caused duplicate driver name entries to appear in the list
+     * of registered drivers when QgsApplication::registerOgrDrivers was called multiple
+     * times.
+     */
+    static void registerOgrDrivers();
+
   private:
     static QString mPrefixPath;
     static QString mPluginPath;

Modified: trunk/qgis/src/core/qgsvectorfilewriter.cpp
===================================================================
--- trunk/qgis/src/core/qgsvectorfilewriter.cpp	2008-08-27 21:31:59 UTC (rev 9194)
+++ trunk/qgis/src/core/qgsvectorfilewriter.cpp	2008-08-27 21:56:29 UTC (rev 9195)
@@ -17,6 +17,7 @@
  ***************************************************************************/
 /* $Id$ */
 
+#include "qgsapplication.h"
 #include "qgsfield.h"
 #include "qgsfeature.h"
 #include "qgsgeometry.h"
@@ -48,7 +49,7 @@
 
   // find driver in OGR
   OGRSFDriverH poDriver;
-  OGRRegisterAll();
+  QgsApplication::registerOgrDrivers();
   poDriver = OGRGetDriverByName( driverName.toLocal8Bit().data() );
 
   if ( poDriver == NULL )

Modified: trunk/qgis/src/plugins/ogr_converter/dialog.cpp
===================================================================
--- trunk/qgis/src/plugins/ogr_converter/dialog.cpp	2008-08-27 21:31:59 UTC (rev 9194)
+++ trunk/qgis/src/plugins/ogr_converter/dialog.cpp	2008-08-27 21:56:29 UTC (rev 9195)
@@ -15,9 +15,10 @@
 #include "format.h"
 #include "translator.h"
 // QGIS includes
+#include <qgsapplication.h>
 #include <qgslogger.h>
 #include <qgscontexthelp.h>
-// TODO: Add support of QGIS projection selector 
+// TODO: Add support of QGIS projection selector
 //#include <qgsprojectionselector.h>
 // Qt4
 #include <QtAlgorithms>
@@ -29,425 +30,432 @@
 #include <QStringList>
 #include <QVariant>
 
-namespace qgis { namespace plugin { namespace ogrconv {
+namespace qgis
+{
+  namespace plugin
+  {
+    namespace ogrconv
+    {
 
 // GDAL/OGR loaded into private namespace
 #include <ogr_api.h>
 #include <ogrsf_frmts.h>
 
-Dialog::Dialog(QWidget* parent, Qt::WFlags fl)
-    : QDialog(parent, fl)
-{
-    setupUi(this);
-    populateFormats();
-    resetSrcUi();
-    resetDstUi();
-}
+      Dialog::Dialog( QWidget* parent, Qt::WFlags fl )
+          : QDialog( parent, fl )
+      {
+        setupUi( this );
+        populateFormats();
+        resetSrcUi();
+        resetDstUi();
+      }
 
-Dialog::~Dialog()
-{
-}
+      Dialog::~Dialog()
+      {
+      }
 
-void Dialog::resetSrcUi()
-{
-    // Clear all settings and states
-    inputSrcDataset->clear();
-    // TODO: Transformation support
-    //inputSrcSrs->clear();
-    comboSrcLayer->clear();
-    radioSrcFile->setDisabled(true);
-    radioSrcFile->setChecked(false);
-    radioSrcDirectory->setDisabled(true);
-    radioSrcDirectory->setChecked(false);
-    radioSrcProtocol->setDisabled(true);
-    radioSrcProtocol->setChecked(false);
+      void Dialog::resetSrcUi()
+      {
+        // Clear all settings and states
+        inputSrcDataset->clear();
+        // TODO: Transformation support
+        //inputSrcSrs->clear();
+        comboSrcLayer->clear();
+        radioSrcFile->setDisabled( true );
+        radioSrcFile->setChecked( false );
+        radioSrcDirectory->setDisabled( true );
+        radioSrcDirectory->setChecked( false );
+        radioSrcProtocol->setDisabled( true );
+        radioSrcProtocol->setChecked( false );
 
-    // Configure types of input sources
-    unsigned char const& type = mSrcFormat.type();
+        // Configure types of input sources
+        unsigned char const& type = mSrcFormat.type();
 
-    if (isFormatType(type, Format::eFile))
-    {
-        radioSrcFile->setDisabled(false);
-        radioSrcFile->setChecked(true);
-    }
+        if ( isFormatType( type, Format::eFile ) )
+        {
+          radioSrcFile->setDisabled( false );
+          radioSrcFile->setChecked( true );
+        }
 
-    if (isFormatType(type, Format::eDirectory))
-    {
-        radioSrcDirectory->setDisabled(false);
-        if (!radioSrcFile->isEnabled())
-            radioSrcDirectory->setChecked(true);
-    }
+        if ( isFormatType( type, Format::eDirectory ) )
+        {
+          radioSrcDirectory->setDisabled( false );
+          if ( !radioSrcFile->isEnabled() )
+            radioSrcDirectory->setChecked( true );
+        }
 
-    if (isFormatType(type, Format::eProtocol))
-    {
-        radioSrcProtocol->setDisabled(false);
+        if ( isFormatType( type, Format::eProtocol ) )
+        {
+          radioSrcProtocol->setDisabled( false );
 
-        if (!radioSrcFile->isEnabled() && !radioSrcDirectory->isEnabled())
-        {
-            radioSrcProtocol->setChecked(true);
-            inputSrcDataset->setText(mSrcFormat.protocol());
+          if ( !radioSrcFile->isEnabled() && !radioSrcDirectory->isEnabled() )
+          {
+            radioSrcProtocol->setChecked( true );
+            inputSrcDataset->setText( mSrcFormat.protocol() );
+          }
         }
-    }
 
-    setButtonState(buttonSelectSrc, isFormatType(type, Format::eProtocol));
-}
+        setButtonState( buttonSelectSrc, isFormatType( type, Format::eProtocol ) );
+      }
 
-void Dialog::resetDstUi()
-{
-    inputDstDataset->clear();
-    // TODO: Transformation support
-    //inputDstSrs->clear();
-    
-    unsigned char const& type = mDstFormat.type();
-    bool isProtocol = isFormatType(type, Format::eProtocol);
+      void Dialog::resetDstUi()
+      {
+        inputDstDataset->clear();
+        // TODO: Transformation support
+        //inputDstSrs->clear();
 
-    if (isProtocol)
-    {
-        inputDstDataset->setText(mDstFormat.protocol());
-    }
-    
-    setButtonState(buttonSelectDst, isProtocol);
-}
+        unsigned char const& type = mDstFormat.type();
+        bool isProtocol = isFormatType( type, Format::eProtocol );
 
-void Dialog::setButtonState(QPushButton* btn, bool isProtocol)
-{
-    Q_CHECK_PTR(btn);
+        if ( isProtocol )
+        {
+          inputDstDataset->setText( mDstFormat.protocol() );
+        }
 
-    if (isProtocol)
-    {
-        btn->setText(tr("Connect"));
-    }
-    else
-    {
-        btn->setText(tr("Browse"));
-    }
-}
+        setButtonState( buttonSelectDst, isProtocol );
+      }
 
-void Dialog::populateFormats()
-{
-    comboSrcFormats->clear();
-    comboDstFormats->clear();
-    
-    QStringList drvSrcList;
-    QStringList drvDstList;
-    QString drvName;
+      void Dialog::setButtonState( QPushButton* btn, bool isProtocol )
+      {
+        Q_CHECK_PTR( btn );
 
-    if (0 >= OGRGetDriverCount())
-    {
-        OGRRegisterAll(); 
-    }
-    int const drvCount = OGRGetDriverCount();
+        if ( isProtocol )
+        {
+          btn->setText( tr( "Connect" ) );
+        }
+        else
+        {
+          btn->setText( tr( "Browse" ) );
+        }
+      }
 
-    for (int i = 0; i < drvCount; ++i)
-    {
-        OGRSFDriverH drv = OGRGetDriver(i);
-        Q_CHECK_PTR(drv);
-        if (0 != drv)
+      void Dialog::populateFormats()
+      {
+        comboSrcFormats->clear();
+        comboDstFormats->clear();
+
+        QStringList drvSrcList;
+        QStringList drvDstList;
+        QString drvName;
+
+        if ( 0 >= OGRGetDriverCount() )
         {
-            drvName = OGR_Dr_GetName(drv);
-            drvSrcList.append(drvName);
+          QgsApplication::registerOgrDrivers();
+        }
+        int const drvCount = OGRGetDriverCount();
 
-            if (0 != OGR_Dr_TestCapability(drv, ODrCCreateDataSource))
+        for ( int i = 0; i < drvCount; ++i )
+        {
+          OGRSFDriverH drv = OGRGetDriver( i );
+          Q_CHECK_PTR( drv );
+          if ( 0 != drv )
+          {
+            drvName = OGR_Dr_GetName( drv );
+            drvSrcList.append( drvName );
+
+            if ( 0 != OGR_Dr_TestCapability( drv, ODrCCreateDataSource ) )
             {
-                drvDstList.append(drvName);
+              drvDstList.append( drvName );
             }
+          }
         }
-    }
 
-    qSort(drvSrcList.begin(), drvSrcList.end());
-    qSort(drvDstList.begin(), drvDstList.end());
-    comboSrcFormats->addItems(drvSrcList);
-    comboDstFormats->addItems(drvDstList);
-}
+        qSort( drvSrcList.begin(), drvSrcList.end() );
+        qSort( drvDstList.begin(), drvDstList.end() );
+        comboSrcFormats->addItems( drvSrcList );
+        comboDstFormats->addItems( drvDstList );
+      }
 
-void Dialog::populateLayers(QString const& url)
-{
-    comboSrcLayer->clear();
+      void Dialog::populateLayers( QString const& url )
+      {
+        comboSrcLayer->clear();
 
-    OGRDataSourceH ds = OGROpen(url.toAscii().constData(), 0, 0);
-    if (0 != ds)
-    {
-        QString lyrName;
-        QString lyrType;
+        OGRDataSourceH ds = OGROpen( url.toAscii().constData(), 0, 0 );
+        if ( 0 != ds )
+        {
+          QString lyrName;
+          QString lyrType;
 
-        int const size = OGR_DS_GetLayerCount(ds);
-        for (int i = 0; i < size; ++i)
-        {
-            OGRLayerH lyr = OGR_DS_GetLayer(ds, i);
-            if (0 != lyr)
+          int const size = OGR_DS_GetLayerCount( ds );
+          for ( int i = 0; i < size; ++i )
+          {
+            OGRLayerH lyr = OGR_DS_GetLayer( ds, i );
+            if ( 0 != lyr )
             {
-                OGRFeatureDefnH lyrDef = OGR_L_GetLayerDefn(lyr);
-                Q_ASSERT(0 != lyrDef);
-                
-                lyrName = OGR_FD_GetName(lyrDef);
-                
-                OGRwkbGeometryType const geomType = OGR_FD_GetGeomType(lyrDef);
-                lyrType = OGRGeometryTypeToName(geomType);
+              OGRFeatureDefnH lyrDef = OGR_L_GetLayerDefn( lyr );
+              Q_ASSERT( 0 != lyrDef );
 
-                // FIXME: Appending type to layer name prevents from layer finding
-                //comboSrcLayer->addItem(lyrName + " (" + lyrType.toUpper() + ")");
-                comboSrcLayer->addItem(lyrName);
+              lyrName = OGR_FD_GetName( lyrDef );
+
+              OGRwkbGeometryType const geomType = OGR_FD_GetGeomType( lyrDef );
+              lyrType = OGRGeometryTypeToName( geomType );
+
+              // FIXME: Appending type to layer name prevents from layer finding
+              //comboSrcLayer->addItem(lyrName + " (" + lyrType.toUpper() + ")");
+              comboSrcLayer->addItem( lyrName );
             }
+          }
+
+          OGR_DS_Destroy( ds );
         }
+        else
+        {
+          QMessageBox::warning( this,
+                                tr( "OGR Converter" ),
+                                tr( "Could not establish connection to: '" ) + url + "'",
+                                QMessageBox::Close );
+        }
+      }
 
-        OGR_DS_Destroy(ds);
-    }
-    else
-    {
-        QMessageBox::warning(this,
-                tr("OGR Converter"),
-                tr("Could not establish connection to: '") + url + "'",
-                QMessageBox::Close);
-    }
-}
+      bool Dialog::testConnection( QString const& url )
+      {
+        bool success = false;
 
-bool Dialog::testConnection(QString const& url)
-{
-    bool success = false;
+        OGRDataSourceH ds = OGROpen( url.toAscii().constData(), 0, 0 );
+        if ( 0 != ds )
+        {
+          success = true;
+          OGR_DS_Destroy( ds );
+        }
 
-    OGRDataSourceH ds = OGROpen(url.toAscii().constData(), 0, 0);
-    if (0 != ds)
-    {
-        success = true;
-        OGR_DS_Destroy(ds);
-    }
+        return success;
+      }
 
-    return success;
-}
+      QString Dialog::openFile()
+      {
+        QSettings sets;
+        QString path = QFileDialog::getOpenFileName( this,
+                       tr( "Open OGR file" ),
+                       sets.value( "/Plugin-OGR/ogr-file", "./" ).toString(),
+                       tr( "OGR File Data Source (*.*)" ) );
 
-QString Dialog::openFile()
-{
-    QSettings sets;
-    QString path = QFileDialog::getOpenFileName(this,
-            tr("Open OGR file"),
-            sets.value("/Plugin-OGR/ogr-file", "./").toString(),
-            tr("OGR File Data Source (*.*)"));
+        return path;
+      }
 
-    return path;
-}
+      QString Dialog::openDirectory()
+      {
+        QString path = QFileDialog::getExistingDirectory( this,
+                       tr( "Open Directory" ), "",
+                       QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks );
 
-QString Dialog::openDirectory()
-{
-    QString path = QFileDialog::getExistingDirectory(this,
-            tr("Open Directory"), "",
-            QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks);
-    
-    return path;
-}
+        return path;
+      }
 
-void Dialog::on_buttonBox_accepted()
-{
-    // Validate input settings
-    QString srcUrl(inputSrcDataset->text());
-    QString srcLayer(comboSrcLayer->currentText());
+      void Dialog::on_buttonBox_accepted()
+      {
+        // Validate input settings
+        QString srcUrl( inputSrcDataset->text() );
+        QString srcLayer( comboSrcLayer->currentText() );
 
-    if (srcUrl.isEmpty())
-    {
-        QMessageBox::warning(this, "OGR Layer Converter",
-                tr("Input OGR dataset is missing!"));
-        return;
-    }
-   
-    if (srcLayer.isEmpty())
-    {
-        QMessageBox::warning(this, "OGR Layer Converter",
-                tr("Input OGR layer name is missing!"));
-        return;
-    }
+        if ( srcUrl.isEmpty() )
+        {
+          QMessageBox::warning( this, "OGR Layer Converter",
+                                tr( "Input OGR dataset is missing!" ) );
+          return;
+        }
 
-    // Validate output settings
-    QString dstFormat(comboDstFormats->currentText());
-    QString dstUrl(inputDstDataset->text());
-    QString dstLayer(inputDstLayer->text());
-    if (dstLayer.isEmpty())
-        dstLayer = srcLayer;
-    
-    if (dstFormat.isEmpty())
-    {
-        QMessageBox::warning(this, "OGR Layer Converter",
-                tr("Target OGR format not selected!"));
-        return;
-    }
- 
-    if (dstUrl.isEmpty())
-    {
-        QMessageBox::warning(this, "OGR Layer Converter",
-                tr("Output OGR dataset is missing!"));
-        return;
-    }
+        if ( srcLayer.isEmpty() )
+        {
+          QMessageBox::warning( this, "OGR Layer Converter",
+                                tr( "Input OGR layer name is missing!" ) );
+          return;
+        }
 
-    if (dstLayer.isEmpty())
-    {
-        QMessageBox::warning(this, "OGR Layer Converter",
-                tr("Output OGR layer name is missing!"));
-        return;
-    }
+        // Validate output settings
+        QString dstFormat( comboDstFormats->currentText() );
+        QString dstUrl( inputDstDataset->text() );
+        QString dstLayer( inputDstLayer->text() );
+        if ( dstLayer.isEmpty() )
+          dstLayer = srcLayer;
 
-    // TODO: SRS transformation support
-    //QString srcSrs("EPSG:");
-    //QString dstSrs("EPSG:");
-    //srcSrs += inputSrcSrs->text();
-    //dstSrs += inputDstSrs->text();
+        if ( dstFormat.isEmpty() )
+        {
+          QMessageBox::warning( this, "OGR Layer Converter",
+                                tr( "Target OGR format not selected!" ) );
+          return;
+        }
 
-    // Execute layer translation
-    bool success = false;
-    
-    // TODO: Use try-catch to display more meaningful error messages from Translator
-    Translator worker(srcUrl, dstUrl, dstFormat);
-    worker.setSourceLayer(srcLayer);
-    worker.setTargetLayer(dstLayer);
-    success = worker.translate();
+        if ( dstUrl.isEmpty() )
+        {
+          QMessageBox::warning( this, "OGR Layer Converter",
+                                tr( "Output OGR dataset is missing!" ) );
+          return;
+        }
 
-    if (success)
-    {
-        QMessageBox::information(this, "OGR Layer Converter",
-                tr("Successfully translated layer '") + srcLayer + "'");
-    }
-    else
-    {
-        QMessageBox::information(this, "OGR Layer Converter",
-                tr("Failed to translate layer '") + srcLayer + "'");
-    }
+        if ( dstLayer.isEmpty() )
+        {
+          QMessageBox::warning( this, "OGR Layer Converter",
+                                tr( "Output OGR layer name is missing!" ) );
+          return;
+        }
 
-    // Close dialog box
-    accept();
-}
+        // TODO: SRS transformation support
+        //QString srcSrs("EPSG:");
+        //QString dstSrs("EPSG:");
+        //srcSrs += inputSrcSrs->text();
+        //dstSrs += inputDstSrs->text();
 
-void Dialog::on_buttonBox_rejected()
-{
-    reject();
-}
+        // Execute layer translation
+        bool success = false;
 
-void Dialog::on_buttonBox_helpRequested()
-{
-    QgsContextHelp::run(context_id);
-}
+        // TODO: Use try-catch to display more meaningful error messages from Translator
+        Translator worker( srcUrl, dstUrl, dstFormat );
+        worker.setSourceLayer( srcLayer );
+        worker.setTargetLayer( dstLayer );
+        success = worker.translate();
 
-void Dialog::on_radioSrcFile_toggled(bool checked)
-{
-    if (checked)
-    {
-        unsigned char const& type = mSrcFormat.type();
-        Q_ASSERT(isFormatType(type, Format::eFile));
+        if ( success )
+        {
+          QMessageBox::information( this, "OGR Layer Converter",
+                                    tr( "Successfully translated layer '" ) + srcLayer + "'" );
+        }
+        else
+        {
+          QMessageBox::information( this, "OGR Layer Converter",
+                                    tr( "Failed to translate layer '" ) + srcLayer + "'" );
+        }
 
-        inputSrcDataset->clear();
-        setButtonState(buttonSelectSrc, isFormatType(type, Format::eProtocol));
-    }
-}
+        // Close dialog box
+        accept();
+      }
 
-void Dialog::on_radioSrcDirectory_toggled(bool checked)
-{
-    if (checked)
-    {
-        unsigned char const& type = mSrcFormat.type();
-        Q_ASSERT(isFormatType(type, Format::eDirectory));
+      void Dialog::on_buttonBox_rejected()
+      {
+        reject();
+      }
 
-        inputSrcDataset->clear();
-        setButtonState(buttonSelectSrc, isFormatType(type, Format::eProtocol));
-    }
-}
+      void Dialog::on_buttonBox_helpRequested()
+      {
+        QgsContextHelp::run( context_id );
+      }
 
-void Dialog::on_radioSrcProtocol_toggled(bool checked)
-{
-    if (checked)
-    {
-        unsigned char const& type = mSrcFormat.type();
-        Q_ASSERT(isFormatType(type, Format::eProtocol));
+      void Dialog::on_radioSrcFile_toggled( bool checked )
+      {
+        if ( checked )
+        {
+          unsigned char const& type = mSrcFormat.type();
+          Q_ASSERT( isFormatType( type, Format::eFile ) );
 
-        inputSrcDataset->setText(mSrcFormat.protocol());
-        setButtonState(buttonSelectSrc, isFormatType(type, Format::eProtocol));
-    }
-}
+          inputSrcDataset->clear();
+          setButtonState( buttonSelectSrc, isFormatType( type, Format::eProtocol ) );
+        }
+      }
 
-void Dialog::on_comboSrcFormats_currentIndexChanged(int index)
-{
-    // Select source data format
-    QString frmtCode = comboSrcFormats->currentText(); 
-    mSrcFormat = mFrmts.find(frmtCode);
-    
-    resetSrcUi();
-}
+      void Dialog::on_radioSrcDirectory_toggled( bool checked )
+      {
+        if ( checked )
+        {
+          unsigned char const& type = mSrcFormat.type();
+          Q_ASSERT( isFormatType( type, Format::eDirectory ) );
 
-void Dialog::on_comboDstFormats_currentIndexChanged(int index)
-{
-    // Select destination data format
-    QString frmtCode = comboDstFormats->currentText(); 
-    mDstFormat = mFrmts.find(frmtCode);
+          inputSrcDataset->clear();
+          setButtonState( buttonSelectSrc, isFormatType( type, Format::eProtocol ) );
+        }
+      }
 
-    resetDstUi();
-}
+      void Dialog::on_radioSrcProtocol_toggled( bool checked )
+      {
+        if ( checked )
+        {
+          unsigned char const& type = mSrcFormat.type();
+          Q_ASSERT( isFormatType( type, Format::eProtocol ) );
 
-void Dialog::on_buttonSelectSrc_clicked()
-{
-    QSettings settings;
-    QString src;
-    
-    if (radioSrcFile->isChecked())
-    {
-        src = openFile();
-    }
-    else if (radioSrcDirectory->isChecked())
-    {
-        src = openDirectory();
-    }
-    else if (radioSrcProtocol->isChecked())
-    {
-        src = inputSrcDataset->text();
-    }
-    else
-    {
-        Q_ASSERT(!"SHOULD NEVER GET HERE");
-    }
+          inputSrcDataset->setText( mSrcFormat.protocol() );
+          setButtonState( buttonSelectSrc, isFormatType( type, Format::eProtocol ) );
+        }
+      }
 
-    inputSrcDataset->setText(src);
+      void Dialog::on_comboSrcFormats_currentIndexChanged( int index )
+      {
+        // Select source data format
+        QString frmtCode = comboSrcFormats->currentText();
+        mSrcFormat = mFrmts.find( frmtCode );
 
-    if (!src.isEmpty())
-    {
-        populateLayers(src);
-    }
-}
+        resetSrcUi();
+      }
 
-void Dialog::on_buttonSelectDst_clicked()
-{
-    QSettings settings;
-    QString dst;
-    QString msg;
+      void Dialog::on_comboDstFormats_currentIndexChanged( int index )
+      {
+        // Select destination data format
+        QString frmtCode = comboDstFormats->currentText();
+        mDstFormat = mFrmts.find( frmtCode );
 
-    unsigned char const& type = mDstFormat.type();
-    if (isFormatType(type, Format::eProtocol))
-    {
-        dst = inputDstDataset->text();
+        resetDstUi();
+      }
 
-        if (testConnection(dst))
+      void Dialog::on_buttonSelectSrc_clicked()
+      {
+        QSettings settings;
+        QString src;
+
+        if ( radioSrcFile->isChecked() )
         {
-            msg = tr("Successfully connected to: '") + dst + "'";
+          src = openFile();
         }
+        else if ( radioSrcDirectory->isChecked() )
+        {
+          src = openDirectory();
+        }
+        else if ( radioSrcProtocol->isChecked() )
+        {
+          src = inputSrcDataset->text();
+        }
         else
         {
-            msg = tr("Could not establish connection to: '") + dst + "'";
+          Q_ASSERT( !"SHOULD NEVER GET HERE" );
         }
-        
-        QMessageBox::information(this, tr("OGR Converter"),
-                msg, QMessageBox::Close);
-    }
-    else if (isFormatType(type, Format::eDirectory))
-    {
-        dst = openDirectory();
-    }
-    else if (isFormatType(type, Format::eFile))
-    {
-        dst = QFileDialog::getSaveFileName(this,
-                tr("Choose a file name to save to"),
-                "output", tr("OGR File Data Source (*.*)"));
-    }
-    else
-    {
-        Q_ASSERT(!"SHOULD NEVER GET HERE");
-    }
 
-    inputDstDataset->setText(dst);
-}
+        inputSrcDataset->setText( src );
 
+        if ( !src.isEmpty() )
+        {
+          populateLayers( src );
+        }
+      }
 
-}}} // namespace qgis::plugin::ogrconv
+      void Dialog::on_buttonSelectDst_clicked()
+      {
+        QSettings settings;
+        QString dst;
+        QString msg;
 
+        unsigned char const& type = mDstFormat.type();
+        if ( isFormatType( type, Format::eProtocol ) )
+        {
+          dst = inputDstDataset->text();
+
+          if ( testConnection( dst ) )
+          {
+            msg = tr( "Successfully connected to: '" ) + dst + "'";
+          }
+          else
+          {
+            msg = tr( "Could not establish connection to: '" ) + dst + "'";
+          }
+
+          QMessageBox::information( this, tr( "OGR Converter" ),
+                                    msg, QMessageBox::Close );
+        }
+        else if ( isFormatType( type, Format::eDirectory ) )
+        {
+          dst = openDirectory();
+        }
+        else if ( isFormatType( type, Format::eFile ) )
+        {
+          dst = QFileDialog::getSaveFileName( this,
+                                              tr( "Choose a file name to save to" ),
+                                              "output", tr( "OGR File Data Source (*.*)" ) );
+        }
+        else
+        {
+          Q_ASSERT( !"SHOULD NEVER GET HERE" );
+        }
+
+        inputDstDataset->setText( dst );
+      }
+
+
+    }
+  }
+} // namespace qgis::plugin::ogrconv
+

Modified: trunk/qgis/src/plugins/ogr_converter/translator.cpp
===================================================================
--- trunk/qgis/src/plugins/ogr_converter/translator.cpp	2008-08-27 21:31:59 UTC (rev 9194)
+++ trunk/qgis/src/plugins/ogr_converter/translator.cpp	2008-08-27 21:56:29 UTC (rev 9195)
@@ -13,407 +13,415 @@
 // qgis::plugin::ogrconv
 #include "translator.h"
 // QGIS
+#include <qgsapplication.h>
 #include <qgslogger.h>
 // Qt4
 #include <QString>
 
-namespace qgis { namespace plugin { namespace ogrconv {
+namespace qgis
+{
+  namespace plugin
+  {
+    namespace ogrconv
+    {
 
 // GDAL/OGR loaded into private namespace
 #include <ogr_api.h>
 
-Translator::Translator()
-    : mDstUpdate(false), mDstLayerOverwrite(true)
-{
-}
+      Translator::Translator()
+          : mDstUpdate( false ), mDstLayerOverwrite( true )
+      {
+      }
 
-Translator::Translator(QString const& src, QString const& dst, QString const& format)
-    : mSrcUrl(src), mDstUrl(dst), mDstFormat(format),
-        mDstUpdate(false), mDstLayerOverwrite(true)
-{
-}
+      Translator::Translator( QString const& src, QString const& dst, QString const& format )
+          : mSrcUrl( src ), mDstUrl( dst ), mDstFormat( format ),
+          mDstUpdate( false ), mDstLayerOverwrite( true )
+      {
+      }
 
-QString const& Translator::targetFormat() const
-{
-    return mDstFormat;
-}
+      QString const& Translator::targetFormat() const
+      {
+        return mDstFormat;
+      }
 
-void Translator::setTargetFormat(QString const& format)
-{
-    mDstFormat = format;
-}
+      void Translator::setTargetFormat( QString const& format )
+      {
+        mDstFormat = format;
+      }
 
-QString const& Translator::targetLayer() const
-{
-    return mDstLayer;
-}
+      QString const& Translator::targetLayer() const
+      {
+        return mDstLayer;
+      }
 
-void Translator::setTargetLayer(QString const& layer)
-{
-    mDstLayer = layer;
-}
+      void Translator::setTargetLayer( QString const& layer )
+      {
+        mDstLayer = layer;
+      }
 
-QString const& Translator::sourceLayer() const
-{
-    return mSrcLayer;
-}
+      QString const& Translator::sourceLayer() const
+      {
+        return mSrcLayer;
+      }
 
-void Translator::setSourceLayer(QString const& layer)
-{
-    mSrcLayer = layer;
-}
+      void Translator::setSourceLayer( QString const& layer )
+      {
+        mSrcLayer = layer;
+      }
 
-QString const& Translator::targetReferenceSystem() const
-{
-    return mDstSrs;
-}
+      QString const& Translator::targetReferenceSystem() const
+      {
+        return mDstSrs;
+      }
 
-void Translator::setTargetReferenceSystem(QString const& srs)
-{
-    mDstSrs = srs;
-}
+      void Translator::setTargetReferenceSystem( QString const& srs )
+      {
+        mDstSrs = srs;
+      }
 
-QString const& Translator::sourceReferenceSystem() const
-{
-    return mSrcSrs;
-}
+      QString const& Translator::sourceReferenceSystem() const
+      {
+        return mSrcSrs;
+      }
 
-void Translator::setSourceReferenceSystem(QString const& srs)
-{
-    mSrcSrs = srs;
-}
+      void Translator::setSourceReferenceSystem( QString const& srs )
+      {
+        mSrcSrs = srs;
+      }
 
-bool Translator::isTargetUpdate() const
-{
-    return mDstUpdate;
-}
+      bool Translator::isTargetUpdate() const
+      {
+        return mDstUpdate;
+      }
 
-void Translator::setUpdateTarget(bool update)
-{
-    mDstUpdate = update;
-}
+      void Translator::setUpdateTarget( bool update )
+      {
+        mDstUpdate = update;
+      }
 
-bool Translator::isTargetLayerOverwrite() const
-{
-    return mDstLayerOverwrite;
-}
+      bool Translator::isTargetLayerOverwrite() const
+      {
+        return mDstLayerOverwrite;
+      }
 
-bool Translator::translate()
-{
-    bool success = false;
+      bool Translator::translate()
+      {
+        bool success = false;
 
-    // TODO: RAII for OGR handlers!!!
+        // TODO: RAII for OGR handlers!!!
 
-    // Open input data source
-    OGRDataSourceH srcDs = openDataSource(mSrcUrl, true);
-    if (0 == srcDs)
-    {
-        QgsDebugMsg("Open source failed: " + mSrcUrl);
-        return false;
-    }
+        // Open input data source
+        OGRDataSourceH srcDs = openDataSource( mSrcUrl, true );
+        if ( 0 == srcDs )
+        {
+          QgsDebugMsg( "Open source failed: " + mSrcUrl );
+          return false;
+        }
 
-    // Open output data source
-    OGRDataSourceH dstDs = openDataTarget(mDstUrl, mDstUpdate);
-    if (0 == dstDs)
-    {
-        QgsDebugMsg("Open target failed: " + mDstUrl);
-        OGR_DS_Destroy(srcDs);
-        return false;
-    }
+        // Open output data source
+        OGRDataSourceH dstDs = openDataTarget( mDstUrl, mDstUpdate );
+        if ( 0 == dstDs )
+        {
+          QgsDebugMsg( "Open target failed: " + mDstUrl );
+          OGR_DS_Destroy( srcDs );
+          return false;
+        }
 
-    // TODO: Support translation of all layers from input data source
-    //for (int i = 0; i < OGR_DS_GetLayerCount(); ++i)
+        // TODO: Support translation of all layers from input data source
+        //for (int i = 0; i < OGR_DS_GetLayerCount(); ++i)
 
-    OGRLayerH srcLayer = OGR_DS_GetLayerByName(srcDs, mSrcLayer.toAscii().constData());
-    if (0 == srcLayer)
-    {
-        QgsDebugMsg("Can not find layer: " + mSrcLayer);
-        OGR_DS_Destroy(srcDs);
-        OGR_DS_Destroy(dstDs);
-        return false;
-    }
+        OGRLayerH srcLayer = OGR_DS_GetLayerByName( srcDs, mSrcLayer.toAscii().constData() );
+        if ( 0 == srcLayer )
+        {
+          QgsDebugMsg( "Can not find layer: " + mSrcLayer );
+          OGR_DS_Destroy( srcDs );
+          OGR_DS_Destroy( dstDs );
+          return false;
+        }
 
-    if (mDstLayer.isEmpty())
-    {
-        QgsDebugMsg("Using source layer name: " + mDstLayer);
-        mDstLayer = mSrcLayer;
-    }
+        if ( mDstLayer.isEmpty() )
+        {
+          QgsDebugMsg( "Using source layer name: " + mDstLayer );
+          mDstLayer = mSrcLayer;
+        }
 
-    QgsDebugMsg("START LAYER TRANSLATION ------");
+        QgsDebugMsg( "START LAYER TRANSLATION ------" );
 
-    success = translateLayer(srcDs, srcLayer, dstDs);
+        success = translateLayer( srcDs, srcLayer, dstDs );
 
-    QgsDebugMsg("END LAYER TRANSLATION ------");
+        QgsDebugMsg( "END LAYER TRANSLATION ------" );
 
-    OGR_DS_Destroy(dstDs);
-    OGR_DS_Destroy(srcDs);
+        OGR_DS_Destroy( dstDs );
+        OGR_DS_Destroy( srcDs );
 
-    return success;
-}
+        return success;
+      }
 
-bool Translator::translateLayer(OGRDataSourceH srcDs, OGRLayerH srcLayer, OGRDataSourceH dstDs)
-{
-    // Implementation based on TranslateLayer function from ogr2ogr.cpp, from GDAL/OGR.
-    Q_ASSERT(0 != srcDs);
-    Q_ASSERT(0 != srcLayer);
-    Q_ASSERT(0 != dstDs);
+      bool Translator::translateLayer( OGRDataSourceH srcDs, OGRLayerH srcLayer, OGRDataSourceH dstDs )
+      {
+        // Implementation based on TranslateLayer function from ogr2ogr.cpp, from GDAL/OGR.
+        Q_ASSERT( 0 != srcDs );
+        Q_ASSERT( 0 != srcLayer );
+        Q_ASSERT( 0 != dstDs );
 
-    bool success = false;
+        bool success = false;
 
-    // Get source layer schema
-    OGRFeatureDefnH srcLayerDefn = OGR_L_GetLayerDefn(srcLayer);
-    Q_ASSERT(0 != srcLayerDefn);
+        // Get source layer schema
+        OGRFeatureDefnH srcLayerDefn = OGR_L_GetLayerDefn( srcLayer );
+        Q_ASSERT( 0 != srcLayerDefn );
 
-    // Find if layer exists in target data source 
-    int dstLayerIndex = 0;
-    OGRLayerH dstLayer = findLayer(dstDs, mDstLayer, dstLayerIndex);
+        // Find if layer exists in target data source
+        int dstLayerIndex = 0;
+        OGRLayerH dstLayer = findLayer( dstDs, mDstLayer, dstLayerIndex );
 
-    // If the user requested overwrite, and we have the layer in question
-    // we need to delete it now so it will get recreated overwritten
-    if (0 != dstLayer && mDstLayerOverwrite
-        && 0 != OGR_DS_TestCapability(dstDs, ODsCDeleteLayer))
-    {
-        if (OGRERR_NONE != OGR_DS_DeleteLayer(dstDs, dstLayerIndex))
+        // If the user requested overwrite, and we have the layer in question
+        // we need to delete it now so it will get recreated overwritten
+        if ( 0 != dstLayer && mDstLayerOverwrite
+             && 0 != OGR_DS_TestCapability( dstDs, ODsCDeleteLayer ) )
         {
-            QgsDebugMsg("Delete layer failed when overwrite requested");
+          if ( OGRERR_NONE != OGR_DS_DeleteLayer( dstDs, dstLayerIndex ) )
+          {
+            QgsDebugMsg( "Delete layer failed when overwrite requested" );
             return false;
+          }
         }
-    }
 
-    if (0 == dstLayer)
-    {
-        QgsDebugMsg("Destination layer not found, will attempt to create");
+        if ( 0 == dstLayer )
+        {
+          QgsDebugMsg( "Destination layer not found, will attempt to create" );
 
-        // If the layer does not exist, then create it
-        if (0 == OGR_DS_TestCapability(dstDs, ODsCCreateLayer))
-        {
-            QgsDebugMsg("Layer " + mDstLayer + " not found, and CreateLayer not supported by driver");
+          // If the layer does not exist, then create it
+          if ( 0 == OGR_DS_TestCapability( dstDs, ODsCCreateLayer ) )
+          {
+            QgsDebugMsg( "Layer " + mDstLayer + " not found, and CreateLayer not supported by driver" );
             return false;
-        }
+          }
 
-        // FIXME: Do we need it here?
-        //CPLErrorReset();
+          // FIXME: Do we need it here?
+          //CPLErrorReset();
 
-        // TODO: -nlt option support
-        OGRwkbGeometryType geomType = OGR_FD_GetGeomType(srcLayerDefn);
-        
-        // TODO: Implement SRS transformation 
-        OGRSpatialReferenceH dstLayerSrs = OGR_L_GetSpatialRef(srcLayer);
+          // TODO: -nlt option support
+          OGRwkbGeometryType geomType = OGR_FD_GetGeomType( srcLayerDefn );
 
-        dstLayer = OGR_DS_CreateLayer(dstDs, mDstLayer.toAscii().constData(),
-                                      dstLayerSrs, geomType, 0); 
-    }
-    // TODO: Append and createion options not implemented
-    // else if (!mDstLayerAppend)
-    
-    Q_ASSERT(0 != dstLayer);
+          // TODO: Implement SRS transformation
+          OGRSpatialReferenceH dstLayerSrs = OGR_L_GetSpatialRef( srcLayer );
 
-    // Transfer attributes schema
-    if (!copyFields(dstLayer, srcLayerDefn))
-    {
-        QgsDebugMsg("Faild to copy fields from layer " + mSrcLayer);
-        return false;
-    }
+          dstLayer = OGR_DS_CreateLayer( dstDs, mDstLayer.toAscii().constData(),
+                                         dstLayerSrs, geomType, 0 );
+        }
+        // TODO: Append and createion options not implemented
+        // else if (!mDstLayerAppend)
 
-    // Transfer features
-    success = copyFeatures(srcLayer, dstLayer);
+        Q_ASSERT( 0 != dstLayer );
 
-    return success;
-}
+        // Transfer attributes schema
+        if ( !copyFields( dstLayer, srcLayerDefn ) )
+        {
+          QgsDebugMsg( "Faild to copy fields from layer " + mSrcLayer );
+          return false;
+        }
 
-bool Translator::copyFields(OGRFeatureDefnH layerDefn, OGRLayerH layer)
-{
-    Q_ASSERT(0 != layerDefn);
-    Q_ASSERT(0 != layer);
+        // Transfer features
+        success = copyFeatures( srcLayer, dstLayer );
 
-    int const count = OGR_FD_GetFieldCount(layerDefn);
-    for (int i = 0; i < count; ++i)
-    {
-        OGRFieldDefnH fieldDefn = OGR_FD_GetFieldDefn(layerDefn, i);
-        Q_ASSERT(0 != fieldDefn);
+        return success;
+      }
 
-        if (OGRERR_NONE != OGR_L_CreateField(layer, fieldDefn, true))
+      bool Translator::copyFields( OGRFeatureDefnH layerDefn, OGRLayerH layer )
+      {
+        Q_ASSERT( 0 != layerDefn );
+        Q_ASSERT( 0 != layer );
+
+        int const count = OGR_FD_GetFieldCount( layerDefn );
+        for ( int i = 0; i < count; ++i )
         {
+          OGRFieldDefnH fieldDefn = OGR_FD_GetFieldDefn( layerDefn, i );
+          Q_ASSERT( 0 != fieldDefn );
+
+          if ( OGRERR_NONE != OGR_L_CreateField( layer, fieldDefn, true ) )
+          {
             return false;
+          }
         }
-    }
 
-    return true;
-}
+        return true;
+      }
 
-bool Translator::copyFeatures(OGRLayerH srcLayer, OGRLayerH dstLayer)
-{
-    Q_ASSERT(0 != srcLayer);
-    Q_ASSERT(0 != dstLayer);
+      bool Translator::copyFeatures( OGRLayerH srcLayer, OGRLayerH dstLayer )
+      {
+        Q_ASSERT( 0 != srcLayer );
+        Q_ASSERT( 0 != dstLayer );
 
-    bool success = false;
-    OGRFeatureDefnH srcLayerDefn = OGR_L_GetLayerDefn(srcLayer);
-    long srcFid = 0;
-    long count = 0;
+        bool success = false;
+        OGRFeatureDefnH srcLayerDefn = OGR_L_GetLayerDefn( srcLayer );
+        long srcFid = 0;
+        long count = 0;
 
-    // TODO: RAII for feature handlers!!!
- 
-    while (true)
-    {
-        OGRFeatureH srcFeat = OGR_L_GetNextFeature(srcLayer);
-        if (0 == srcFeat)
+        // TODO: RAII for feature handlers!!!
+
+        while ( true )
         {
-            QgsDebugMsg("Next source feature is null, finishing");
+          OGRFeatureH srcFeat = OGR_L_GetNextFeature( srcLayer );
+          if ( 0 == srcFeat )
+          {
+            QgsDebugMsg( "Next source feature is null, finishing" );
             success = true;
             break;
-        }
-        srcFid = OGR_F_GetFID(srcFeat);
+          }
+          srcFid = OGR_F_GetFID( srcFeat );
 
-        // FIXME: Do we need it here?
-        //CPLErrorReset();
+          // FIXME: Do we need it here?
+          //CPLErrorReset();
 
-        OGRFeatureH dstFeat = OGR_F_Create(srcLayerDefn);
+          OGRFeatureH dstFeat = OGR_F_Create( srcLayerDefn );
 
-        if (OGRERR_NONE !=  OGR_F_SetFrom(dstFeat, srcFeat, true))
-        {
-            QString msg = QString("Unable to translate feature %1 from layer %2").arg(srcFid).arg(mSrcLayer);
-            QgsDebugMsg(msg);
+          if ( OGRERR_NONE !=  OGR_F_SetFrom( dstFeat, srcFeat, true ) )
+          {
+            QString msg = QString( "Unable to translate feature %1 from layer %2" ).arg( srcFid ).arg( mSrcLayer );
+            QgsDebugMsg( msg );
 
-            OGR_F_Destroy(srcFeat);
-            OGR_F_Destroy(dstFeat);
+            OGR_F_Destroy( srcFeat );
+            OGR_F_Destroy( dstFeat );
             success = false;
             break;
-        }
-        Q_ASSERT(0 != dstFeat);
+          }
+          Q_ASSERT( 0 != dstFeat );
 
-        // TODO: Transform feature geometry
+          // TODO: Transform feature geometry
 
-        OGR_F_Destroy(srcFeat);
-        
-        // FIXME: Do we need it here?
-        //CPLErrorReset();
+          OGR_F_Destroy( srcFeat );
 
-        // TODO: Skip failures support
-        if (OGRERR_NONE != OGR_L_CreateFeature(dstLayer, dstFeat))
-        {
-            QgsDebugMsg("Feature creation failed");
-            OGR_F_Destroy(dstFeat);
+          // FIXME: Do we need it here?
+          //CPLErrorReset();
+
+          // TODO: Skip failures support
+          if ( OGRERR_NONE != OGR_L_CreateFeature( dstLayer, dstFeat ) )
+          {
+            QgsDebugMsg( "Feature creation failed" );
+            OGR_F_Destroy( dstFeat );
             success = false;
             break;
+          }
+
+          OGR_F_Destroy( dstFeat );
+
+          count += 1;
+          success = true;
         }
 
-        OGR_F_Destroy(dstFeat);
-        
-        count += 1;
-        success = true;
-    }
+        QgsDebugMsg( QString( "Number of copied features: %1" ).arg( count ) );
 
-    QgsDebugMsg(QString("Number of copied features: %1").arg(count));
+        return success;
+      }
 
-    return success;
-}
+      OGRSFDriverH Translator::findDriver( QString const& name )
+      {
+        if ( OGRGetDriverCount() <= 0 )
+        {
+          QgsApplication::registerOgrDrivers();
+        }
+        int const drvCount = OGRGetDriverCount();
 
-OGRSFDriverH Translator::findDriver(QString const& name)
-{
-    if (OGRGetDriverCount() <= 0)
-    {
-        OGRRegisterAll(); 
-    }
-    int const drvCount = OGRGetDriverCount();
+        OGRSFDriverH drv = 0;
+        QString drvName;
 
-    OGRSFDriverH drv = 0;
-    QString drvName;
-
-    for (int i = 0; i < drvCount; ++i)
-    {
-        OGRSFDriverH drvTmp = OGRGetDriver(i);
-        Q_CHECK_PTR(drvTmp);
-        if (0 != drvTmp)
+        for ( int i = 0; i < drvCount; ++i )
         {
-            drvName = OGR_Dr_GetName(drvTmp);
-            if (name == drvName
-                && 0 != OGR_Dr_TestCapability(drvTmp, ODrCCreateDataSource))
+          OGRSFDriverH drvTmp = OGRGetDriver( i );
+          Q_CHECK_PTR( drvTmp );
+          if ( 0 != drvTmp )
+          {
+            drvName = OGR_Dr_GetName( drvTmp );
+            if ( name == drvName
+                 && 0 != OGR_Dr_TestCapability( drvTmp, ODrCCreateDataSource ) )
             {
-                QgsDebugMsg("Driver found: " + name);
-                drv = drvTmp;
-                break;
+              QgsDebugMsg( "Driver found: " + name );
+              drv = drvTmp;
+              break;
             }
+          }
         }
-    }
 
-    return drv;
-}
+        return drv;
+      }
 
-OGRLayerH Translator::findLayer(OGRDataSourceH ds, QString const& name, int& index)
-{
-    if (0 == ds)
-    {
-        index = -1;
-        return 0;
-    }
+      OGRLayerH Translator::findLayer( OGRDataSourceH ds, QString const& name, int& index )
+      {
+        if ( 0 == ds )
+        {
+          index = -1;
+          return 0;
+        }
 
-    OGRLayerH lyr = 0;
-    int const count = OGR_DS_GetLayerCount(ds);
+        OGRLayerH lyr = 0;
+        int const count = OGR_DS_GetLayerCount( ds );
 
-    for (int i = 0; i < count; ++i)
-    {
-        OGRLayerH lyrTmp = OGR_DS_GetLayer(ds, i);
-        if (0 != lyrTmp)
+        for ( int i = 0; i < count; ++i )
         {
-            OGRFeatureDefnH defn = OGR_L_GetLayerDefn(lyrTmp);
-            Q_ASSERT(0 != defn);
-            
-            QString nameTmp(OGR_FD_GetName(defn));
-            if (name == nameTmp)
+          OGRLayerH lyrTmp = OGR_DS_GetLayer( ds, i );
+          if ( 0 != lyrTmp )
+          {
+            OGRFeatureDefnH defn = OGR_L_GetLayerDefn( lyrTmp );
+            Q_ASSERT( 0 != defn );
+
+            QString nameTmp( OGR_FD_GetName( defn ) );
+            if ( name == nameTmp )
             {
-                QgsDebugMsg("Layer found: " + nameTmp);
-                index = i;
-                lyr = lyrTmp;
-                break;
+              QgsDebugMsg( "Layer found: " + nameTmp );
+              index = i;
+              lyr = lyrTmp;
+              break;
             }
+          }
         }
-    }
 
-    return lyr;
-}
+        return lyr;
+      }
 
-OGRDataSourceH Translator::openDataSource(QString const& url, bool readOnly)
-{
-    OGRDataSourceH ds = OGROpen(url.toAscii().constData(), !readOnly, 0);
-    if (0 == ds)
-    {
-        QgsDebugMsg("Failed to open: " + url);
-    }
+      OGRDataSourceH Translator::openDataSource( QString const& url, bool readOnly )
+      {
+        OGRDataSourceH ds = OGROpen( url.toAscii().constData(), !readOnly, 0 );
+        if ( 0 == ds )
+        {
+          QgsDebugMsg( "Failed to open: " + url );
+        }
 
-    return ds;
-}
+        return ds;
+      }
 
-OGRDataSourceH Translator::openDataTarget(QString const& url, bool update)
-{
-    OGRDataSourceH ds = 0;
+      OGRDataSourceH Translator::openDataTarget( QString const& url, bool update )
+      {
+        OGRDataSourceH ds = 0;
 
-    if (update)
-    {
-        // Try opening the output datasource as an existing, writable
-        ds = openDataSource(url, false);
-    }
-    else
-    {
-        // Find the output driver
-        OGRSFDriverH drv = findDriver(mDstFormat);
-        if (0 == drv)
+        if ( update )
         {
-            QgsDebugMsg("Could not find driver: " + mDstFormat);
+          // Try opening the output datasource as an existing, writable
+          ds = openDataSource( url, false );
+        }
+        else
+        {
+          // Find the output driver
+          OGRSFDriverH drv = findDriver( mDstFormat );
+          if ( 0 == drv )
+          {
+            QgsDebugMsg( "Could not find driver: " + mDstFormat );
             return 0;
-        }
+          }
 
-        // Create the output data source
-        //
-        // TODO: Add support for creation options
-        ds = OGR_Dr_CreateDataSource(drv, url.toAscii().constData(), 0);
-        if (0 == ds)
-        {
-            QgsDebugMsg("Failed to open: " + url);
+          // Create the output data source
+          //
+          // TODO: Add support for creation options
+          ds = OGR_Dr_CreateDataSource( drv, url.toAscii().constData(), 0 );
+          if ( 0 == ds )
+          {
+            QgsDebugMsg( "Failed to open: " + url );
+          }
         }
-    }
 
-    return ds;
-}
+        return ds;
+      }
 
-}}} // namespace qgis::plugin::ogrconv
+    }
+  }
+} // namespace qgis::plugin::ogrconv
 

Modified: trunk/qgis/src/plugins/spit/qgsshapefile.cpp
===================================================================
--- trunk/qgis/src/plugins/spit/qgsshapefile.cpp	2008-08-27 21:31:59 UTC (rev 9194)
+++ trunk/qgis/src/plugins/spit/qgsshapefile.cpp	2008-08-27 21:56:29 UTC (rev 9195)
@@ -30,6 +30,7 @@
 #include <QTextCodec>
 #include <QFileInfo>
 
+#include "qgsapplication.h"
 #include "qgsdbfbase.h"
 #include "cpl_error.h"
 #include "qgsshapefile.h"
@@ -51,7 +52,7 @@
 {
   fileName = name;
   features = 0;
-  OGRRegisterAll();
+  QgsApplication::registerOgrDrivers();
   ogrDataSource = OGROpen( QFile::encodeName( fileName ).constData(), FALSE, NULL );
   if ( ogrDataSource != NULL )
   {
@@ -206,7 +207,7 @@
         dbf.read(( char * )&fda, sizeof( fda ) );
         switch ( fda.field_type )
         {
-          case 'N': if (( int )fda.field_decimal>0 )
+          case 'N': if (( int )fda.field_decimal > 0 )
               column_types.push_back( "float" );
             else
               column_types.push_back( "int" );

Modified: trunk/qgis/src/providers/ogr/qgsogrprovider.cpp
===================================================================
--- trunk/qgis/src/providers/ogr/qgsogrprovider.cpp	2008-08-27 21:31:59 UTC (rev 9194)
+++ trunk/qgis/src/providers/ogr/qgsogrprovider.cpp	2008-08-27 21:56:29 UTC (rev 9195)
@@ -62,7 +62,7 @@
     ogrLayer( 0 ),
     ogrDriver( 0 )
 {
-  OGRRegisterAll();
+  QgsApplication::registerOgrDrivers();
 
   // set the selection rectangle pointer to 0
   mSelectionRectangle = 0;
@@ -434,7 +434,7 @@
   {
     switch ( mAttributeFields[attindex].type() )
     {
-      case QVariant::String: value = QVariant( mEncoding->toUnicode( OGR_F_GetFieldAsString( ogrFet,attindex ) ) ); break;
+      case QVariant::String: value = QVariant( mEncoding->toUnicode( OGR_F_GetFieldAsString( ogrFet, attindex ) ) ); break;
       case QVariant::Int: value = QVariant( OGR_F_GetFieldAsInteger( ogrFet, attindex ) ); break;
       case QVariant::Double: value = QVariant( OGR_F_GetFieldAsDouble( ogrFet, attindex ) ); break;
         //case QVariant::DateTime: value = QVariant(QDateTime::fromString(str)); break;
@@ -924,7 +924,7 @@
   }
 
   // register ogr plugins
-  OGRRegisterAll();
+  QgsApplication::registerOgrDrivers();
 
   // first get the GDAL driver manager
 
@@ -1117,7 +1117,7 @@
                                        const std::list<std::pair<QString, QString> >& attributes )
 {
   OGRSFDriverH driver;
-  OGRRegisterAll();
+  QgsApplication::registerOgrDrivers();
   driver = OGRGetDriverByName( format.toAscii() );
   if ( driver == NULL )
   {



More information about the QGIS-commit mailing list