[QGIS Commit] r11182 - in trunk/qgis/src: app app/legend app/ogr core gui

svn_qgis at osgeo.org svn_qgis at osgeo.org
Mon Jul 27 11:19:41 EDT 2009


Author: homann
Date: 2009-07-27 11:19:39 -0400 (Mon, 27 Jul 2009)
New Revision: 11182

Modified:
   trunk/qgis/src/app/legend/qgslegendlayerfile.cpp
   trunk/qgis/src/app/ogr/qgsopenvectorlayerdialog.cpp
   trunk/qgis/src/app/qgisapp.cpp
   trunk/qgis/src/core/qgsvectordataprovider.cpp
   trunk/qgis/src/core/qgsvectorfilewriter.cpp
   trunk/qgis/src/gui/qgsencodingfiledialog.cpp
   trunk/qgis/src/gui/qgsencodingfiledialog.h
Log:
File encoding selector made consistent and persistent between different dialogs.

Modified: trunk/qgis/src/app/legend/qgslegendlayerfile.cpp
===================================================================
--- trunk/qgis/src/app/legend/qgslegendlayerfile.cpp	2009-07-27 13:24:43 UTC (rev 11181)
+++ trunk/qgis/src/app/legend/qgslegendlayerfile.cpp	2009-07-27 15:19:39 UTC (rev 11182)
@@ -247,7 +247,7 @@
       tr( "Save layer as..." ),
       dirName,
       filter,
-      QString( "UTF-8" ) );
+      QString( "" ) );
   openFileDialog->setAcceptMode( QFileDialog::AcceptSave );
 
   // allow for selection of more than one file

Modified: trunk/qgis/src/app/ogr/qgsopenvectorlayerdialog.cpp
===================================================================
--- trunk/qgis/src/app/ogr/qgsopenvectorlayerdialog.cpp	2009-07-27 13:24:43 UTC (rev 11181)
+++ trunk/qgis/src/app/ogr/qgsopenvectorlayerdialog.cpp	2009-07-27 15:19:39 UTC (rev 11182)
@@ -40,7 +40,19 @@
   radioSrcFile->setChecked( true );
   mDataSourceType = "file";
   //set encoding
-  cmbEncodings->setItemText( cmbEncodings->currentIndex(), QString( QTextCodec::codecForLocale()->name() ) );
+  // cmbEncodings->setItemText( cmbEncodings->currentIndex(), QString( QTextCodec::codecForLocale()->name() ) );
+  QSettings settings;
+  QString enc = settings.value( "/UI/encoding", QString("System") ).toString();
+  
+  // The specified decoding is added if not existing alread, and then set current.
+  // This should select it.
+  int encindex = cmbEncodings->findText( enc );
+  if ( encindex < 0 )
+  {
+    cmbEncodings->insertItem( 0, enc );
+    encindex = 0;
+  }
+  cmbEncodings->setCurrentIndex( encindex );
 
   //add database drivers
   mVectorFileFilter = QgsProviderRegistry::instance()->fileVectorFilters();
@@ -379,11 +391,11 @@
 //********************auto connected slots *****************/
 void QgsOpenVectorLayerDialog::on_buttonBox_accepted()
 {
+  QSettings settings;
   QgsDebugMsg( "dialog button accepted" );
   if ( radioSrcDatabase->isChecked() )
   {
     mDataSources.clear();
-    QSettings settings;
     QString baseKey = "/" + cmbDatabaseTypes->currentText() + "/connections/";
     baseKey += cmbConnections->currentText();
     QString host = settings.value( baseKey + "/host" ).toString();
@@ -414,6 +426,9 @@
                            protocolURI->text()
                          ) );
   }
+  // Save the used encoding
+  settings.setValue( "/UI/encoding", encoding() );
+
   accept();
 }
 

Modified: trunk/qgis/src/app/qgisapp.cpp
===================================================================
--- trunk/qgis/src/app/qgisapp.cpp	2009-07-27 13:24:43 UTC (rev 11181)
+++ trunk/qgis/src/app/qgisapp.cpp	2009-07-27 15:19:39 UTC (rev 11182)
@@ -2300,12 +2300,10 @@
 
   QString lastUsedDir = settings.value( "/UI/" + filterName + "Dir", "." ).toString();
 
-  QString lastUsedEncoding = settings.value( "/UI/encoding" ).toString();
-
   QgsDebugMsg( "Opening file dialog with filters: " + filters );
 
   QgsEncodingFileDialog* openFileDialog = new QgsEncodingFileDialog( 0,
-      title, lastUsedDir, filters, lastUsedEncoding );
+  title, lastUsedDir, filters, QString ("" ) );
 
   // allow for selection of more than one file
   openFileDialog->setFileMode( QFileDialog::ExistingFiles );
@@ -2330,7 +2328,6 @@
 
     settings.setValue( "/UI/" + filterName, openFileDialog->selectedFilter() );
     settings.setValue( "/UI/" + filterName + "Dir", myPath );
-    settings.setValue( "/UI/encoding", openFileDialog->encoding() );
   }
 
   delete openFileDialog;
@@ -3153,12 +3150,10 @@
   QString lastUsedDir = settings.value( "/UI/lastVectorFileFilterDir",
                                         "." ).toString();
 
-  QString lastUsedEncoding = settings.value( "/UI/encoding" ).toString();
-
   QgsDebugMsg( "Saving vector file dialog without filters: " );
 
   QgsEncodingFileDialog* openFileDialog = new QgsEncodingFileDialog( this,
-      tr( "Save As" ), lastUsedDir, "", lastUsedEncoding );
+  tr( "Save As" ), lastUsedDir, "", QString( "" ) );
 
   // allow for selection of more than one file
   openFileDialog->setFileMode( QFileDialog::AnyFile );
@@ -3188,7 +3183,6 @@
   settings.setValue( "/UI/lastVectorFileFilter", openFileDialog->selectedFilter() );
 
   settings.setValue( "/UI/lastVectorFileFilterDir", openFileDialog->directory().absolutePath() );
-  settings.setValue( "/UI/encoding", openFileDialog->encoding() );
 
   delete openFileDialog;
 

Modified: trunk/qgis/src/core/qgsvectordataprovider.cpp
===================================================================
--- trunk/qgis/src/core/qgsvectordataprovider.cpp	2009-07-27 13:24:43 UTC (rev 11181)
+++ trunk/qgis/src/core/qgsvectordataprovider.cpp	2009-07-27 15:19:39 UTC (rev 11182)
@@ -14,6 +14,7 @@
  ***************************************************************************/
 /* $Id$ */
 
+#include <QSettings>
 #include <QTextCodec>
 
 #include <cfloat> // for DBL_MAX
@@ -27,9 +28,10 @@
 QgsVectorDataProvider::QgsVectorDataProvider( QString uri )
     : QgsDataProvider( uri ),
     mCacheMinMaxDirty( TRUE ),
-    mEncoding( QTextCodec::codecForLocale() ),
     mFetchFeaturesWithoutGeom( FALSE )
 {
+  QSettings settings;
+  setEncoding( settings.value( "/UI/encoding", QString("System") ).toString() );
 }
 
 

Modified: trunk/qgis/src/core/qgsvectorfilewriter.cpp
===================================================================
--- trunk/qgis/src/core/qgsvectorfilewriter.cpp	2009-07-27 13:24:43 UTC (rev 11181)
+++ trunk/qgis/src/core/qgsvectorfilewriter.cpp	2009-07-27 15:19:39 UTC (rev 11182)
@@ -27,6 +27,7 @@
 #include "qgsvectordataprovider.h"
 
 #include <QFile>
+#include <QSettings>
 #include <QFileInfo>
 #include <QTextCodec>
 
@@ -72,8 +73,15 @@
   mCodec = QTextCodec::codecForName( fileEncoding.toLocal8Bit().data() );
   if ( !mCodec )
   {
+    QSettings settings;
+    QString enc = settings.value( "/UI/encoding", QString("System") ).toString();
     QgsDebugMsg( "error finding QTextCodec for " + fileEncoding );
-    mCodec = QTextCodec::codecForLocale();
+    mCodec = QTextCodec::codecForName( enc.toLocal8Bit().data() );
+    if ( !mCodec )
+    {
+      QgsDebugMsg( "error finding QTextCodec for " + enc );
+      mCodec = QTextCodec::codecForLocale();
+    }
   }
 
   // consider spatial reference system of the layer

Modified: trunk/qgis/src/gui/qgsencodingfiledialog.cpp
===================================================================
--- trunk/qgis/src/gui/qgsencodingfiledialog.cpp	2009-07-27 13:24:43 UTC (rev 11181)
+++ trunk/qgis/src/gui/qgsencodingfiledialog.cpp	2009-07-27 15:19:39 UTC (rev 11182)
@@ -14,6 +14,9 @@
  ***************************************************************************/
 
 #include "qgsencodingfiledialog.h"
+#include "qgsproject.h"
+#include "qgslogger.h"
+#include <QSettings>
 #include <QComboBox>
 #include <QLabel>
 #include <QLayout>
@@ -71,14 +74,24 @@
   mEncodingComboBox->addItem( "CP1258" );
   mEncodingComboBox->addItem( "Apple Roman" );
   mEncodingComboBox->addItem( "TIS-620" );
+
+  // Use default encoding if none supplied
+  QString enc = encoding;
   if ( encoding.isEmpty() )
   {
-    mEncodingComboBox->setItemText( mEncodingComboBox->currentIndex(), QString( QTextCodec::codecForLocale()->name() ) );
+    QSettings settings;
+    enc = settings.value( "/UI/encoding", QString("System") ).toString();
   }
-  else
+
+  // The specified decoding is added if not existing alread, and then set current.
+  // This should select it.
+  int encindex = mEncodingComboBox->findText( enc );
+  if ( encindex < 0 )
   {
-    mEncodingComboBox->setItemText( mEncodingComboBox->currentIndex(), encoding );
+    mEncodingComboBox->insertItem( 0, enc );
+    encindex = 0;
   }
+  mEncodingComboBox->setCurrentIndex( encindex );
 
   // if this dialog is being invoked from QgisApp::findFiles_(), then we
   // need to force selection of the first filter since that corresponds to
@@ -86,6 +99,10 @@
   // findFiles_(), it won't hurt to force selection of the first file filter
   selectFilter( filters().at( 0 ) );
 
+  // Connect our slot to get a signal when the user is done with the file dialog
+  connect( this, SIGNAL( accepted() ), this, SLOT( saveUsedEncoding() ) );
+  
+
 }
 
 QgsEncodingFileDialog::~QgsEncodingFileDialog()
@@ -97,3 +114,10 @@
 {
   return mEncodingComboBox->currentText();
 }
+
+void QgsEncodingFileDialog::saveUsedEncoding()
+{
+  QSettings settings;
+  settings.setValue( "/UI/encoding", encoding() );
+  QgsDebugMsg(QString( "Set encoding " + encoding() + " as default.") );
+}

Modified: trunk/qgis/src/gui/qgsencodingfiledialog.h
===================================================================
--- trunk/qgis/src/gui/qgsencodingfiledialog.h	2009-07-27 13:24:43 UTC (rev 11181)
+++ trunk/qgis/src/gui/qgsencodingfiledialog.h	2009-07-27 15:19:39 UTC (rev 11182)
@@ -32,6 +32,9 @@
     ~QgsEncodingFileDialog();
     /**Returns a string describing the choosen encoding*/
     QString encoding() const;
+  public slots:
+    void saveUsedEncoding();
+
   private:
     /**Box to choose the encoding type*/
     QComboBox* mEncodingComboBox;



More information about the QGIS-commit mailing list