Skip to content

Commit ea9b4fa

Browse files
author
homann
committed
File encoding selector made consistent and persistent between different dialogs.
git-svn-id: http://svn.osgeo.org/qgis/trunk/qgis@11182 c8812cc2-4d05-0410-92ff-de0c093fc19c
1 parent c04aef6 commit ea9b4fa

7 files changed

+62
-16
lines changed

src/app/legend/qgslegendlayerfile.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -247,7 +247,7 @@ void QgsLegendLayerFile::saveAsShapefileGeneral( bool saveOnlySelection )
247247
tr( "Save layer as..." ),
248248
dirName,
249249
filter,
250-
QString( "UTF-8" ) );
250+
QString( "" ) );
251251
openFileDialog->setAcceptMode( QFileDialog::AcceptSave );
252252

253253
// allow for selection of more than one file

src/app/ogr/qgsopenvectorlayerdialog.cpp

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,19 @@ QgsOpenVectorLayerDialog::QgsOpenVectorLayerDialog( QWidget* parent, Qt::WFlags
4040
radioSrcFile->setChecked( true );
4141
mDataSourceType = "file";
4242
//set encoding
43-
cmbEncodings->setItemText( cmbEncodings->currentIndex(), QString( QTextCodec::codecForLocale()->name() ) );
43+
// cmbEncodings->setItemText( cmbEncodings->currentIndex(), QString( QTextCodec::codecForLocale()->name() ) );
44+
QSettings settings;
45+
QString enc = settings.value( "/UI/encoding", QString("System") ).toString();
46+
47+
// The specified decoding is added if not existing alread, and then set current.
48+
// This should select it.
49+
int encindex = cmbEncodings->findText( enc );
50+
if ( encindex < 0 )
51+
{
52+
cmbEncodings->insertItem( 0, enc );
53+
encindex = 0;
54+
}
55+
cmbEncodings->setCurrentIndex( encindex );
4456

4557
//add database drivers
4658
mVectorFileFilter = QgsProviderRegistry::instance()->fileVectorFilters();
@@ -379,11 +391,11 @@ void QgsOpenVectorLayerDialog::openFilesRememberingFilter( QString const &filter
379391
//********************auto connected slots *****************/
380392
void QgsOpenVectorLayerDialog::on_buttonBox_accepted()
381393
{
394+
QSettings settings;
382395
QgsDebugMsg( "dialog button accepted" );
383396
if ( radioSrcDatabase->isChecked() )
384397
{
385398
mDataSources.clear();
386-
QSettings settings;
387399
QString baseKey = "/" + cmbDatabaseTypes->currentText() + "/connections/";
388400
baseKey += cmbConnections->currentText();
389401
QString host = settings.value( baseKey + "/host" ).toString();
@@ -414,6 +426,9 @@ void QgsOpenVectorLayerDialog::on_buttonBox_accepted()
414426
protocolURI->text()
415427
) );
416428
}
429+
// Save the used encoding
430+
settings.setValue( "/UI/encoding", encoding() );
431+
417432
accept();
418433
}
419434

src/app/qgisapp.cpp

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2300,12 +2300,10 @@ static void openFilesRememberingFilter_( QString const &filterName,
23002300

23012301
QString lastUsedDir = settings.value( "/UI/" + filterName + "Dir", "." ).toString();
23022302

2303-
QString lastUsedEncoding = settings.value( "/UI/encoding" ).toString();
2304-
23052303
QgsDebugMsg( "Opening file dialog with filters: " + filters );
23062304

23072305
QgsEncodingFileDialog* openFileDialog = new QgsEncodingFileDialog( 0,
2308-
title, lastUsedDir, filters, lastUsedEncoding );
2306+
title, lastUsedDir, filters, QString ("" ) );
23092307

23102308
// allow for selection of more than one file
23112309
openFileDialog->setFileMode( QFileDialog::ExistingFiles );
@@ -2330,7 +2328,6 @@ static void openFilesRememberingFilter_( QString const &filterName,
23302328

23312329
settings.setValue( "/UI/" + filterName, openFileDialog->selectedFilter() );
23322330
settings.setValue( "/UI/" + filterName + "Dir", myPath );
2333-
settings.setValue( "/UI/encoding", openFileDialog->encoding() );
23342331
}
23352332

23362333
delete openFileDialog;
@@ -3153,12 +3150,10 @@ void QgisApp::newVectorLayer()
31533150
QString lastUsedDir = settings.value( "/UI/lastVectorFileFilterDir",
31543151
"." ).toString();
31553152

3156-
QString lastUsedEncoding = settings.value( "/UI/encoding" ).toString();
3157-
31583153
QgsDebugMsg( "Saving vector file dialog without filters: " );
31593154

31603155
QgsEncodingFileDialog* openFileDialog = new QgsEncodingFileDialog( this,
3161-
tr( "Save As" ), lastUsedDir, "", lastUsedEncoding );
3156+
tr( "Save As" ), lastUsedDir, "", QString( "" ) );
31623157

31633158
// allow for selection of more than one file
31643159
openFileDialog->setFileMode( QFileDialog::AnyFile );
@@ -3188,7 +3183,6 @@ void QgisApp::newVectorLayer()
31883183
settings.setValue( "/UI/lastVectorFileFilter", openFileDialog->selectedFilter() );
31893184

31903185
settings.setValue( "/UI/lastVectorFileFilterDir", openFileDialog->directory().absolutePath() );
3191-
settings.setValue( "/UI/encoding", openFileDialog->encoding() );
31923186

31933187
delete openFileDialog;
31943188

src/core/qgsvectordataprovider.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
***************************************************************************/
1515
/* $Id$ */
1616

17+
#include <QSettings>
1718
#include <QTextCodec>
1819

1920
#include <cfloat> // for DBL_MAX
@@ -27,9 +28,10 @@
2728
QgsVectorDataProvider::QgsVectorDataProvider( QString uri )
2829
: QgsDataProvider( uri ),
2930
mCacheMinMaxDirty( TRUE ),
30-
mEncoding( QTextCodec::codecForLocale() ),
3131
mFetchFeaturesWithoutGeom( FALSE )
3232
{
33+
QSettings settings;
34+
setEncoding( settings.value( "/UI/encoding", QString("System") ).toString() );
3335
}
3436

3537

src/core/qgsvectorfilewriter.cpp

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
#include "qgsvectordataprovider.h"
2828

2929
#include <QFile>
30+
#include <QSettings>
3031
#include <QFileInfo>
3132
#include <QTextCodec>
3233

@@ -72,8 +73,15 @@ QgsVectorFileWriter::QgsVectorFileWriter( const QString& shapefileName,
7273
mCodec = QTextCodec::codecForName( fileEncoding.toLocal8Bit().data() );
7374
if ( !mCodec )
7475
{
76+
QSettings settings;
77+
QString enc = settings.value( "/UI/encoding", QString("System") ).toString();
7578
QgsDebugMsg( "error finding QTextCodec for " + fileEncoding );
76-
mCodec = QTextCodec::codecForLocale();
79+
mCodec = QTextCodec::codecForName( enc.toLocal8Bit().data() );
80+
if ( !mCodec )
81+
{
82+
QgsDebugMsg( "error finding QTextCodec for " + enc );
83+
mCodec = QTextCodec::codecForLocale();
84+
}
7785
}
7886

7987
// consider spatial reference system of the layer

src/gui/qgsencodingfiledialog.cpp

Lines changed: 27 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@
1414
***************************************************************************/
1515

1616
#include "qgsencodingfiledialog.h"
17+
#include "qgsproject.h"
18+
#include "qgslogger.h"
19+
#include <QSettings>
1720
#include <QComboBox>
1821
#include <QLabel>
1922
#include <QLayout>
@@ -71,21 +74,35 @@ QgsEncodingFileDialog::QgsEncodingFileDialog( QWidget * parent,
7174
mEncodingComboBox->addItem( "CP1258" );
7275
mEncodingComboBox->addItem( "Apple Roman" );
7376
mEncodingComboBox->addItem( "TIS-620" );
77+
78+
// Use default encoding if none supplied
79+
QString enc = encoding;
7480
if ( encoding.isEmpty() )
7581
{
76-
mEncodingComboBox->setItemText( mEncodingComboBox->currentIndex(), QString( QTextCodec::codecForLocale()->name() ) );
82+
QSettings settings;
83+
enc = settings.value( "/UI/encoding", QString("System") ).toString();
7784
}
78-
else
85+
86+
// The specified decoding is added if not existing alread, and then set current.
87+
// This should select it.
88+
int encindex = mEncodingComboBox->findText( enc );
89+
if ( encindex < 0 )
7990
{
80-
mEncodingComboBox->setItemText( mEncodingComboBox->currentIndex(), encoding );
91+
mEncodingComboBox->insertItem( 0, enc );
92+
encindex = 0;
8193
}
94+
mEncodingComboBox->setCurrentIndex( encindex );
8295

8396
// if this dialog is being invoked from QgisApp::findFiles_(), then we
8497
// need to force selection of the first filter since that corresponds to
8598
// the file name we're looking for; even if we're not here from
8699
// findFiles_(), it won't hurt to force selection of the first file filter
87100
selectFilter( filters().at( 0 ) );
88101

102+
// Connect our slot to get a signal when the user is done with the file dialog
103+
connect( this, SIGNAL( accepted() ), this, SLOT( saveUsedEncoding() ) );
104+
105+
89106
}
90107

91108
QgsEncodingFileDialog::~QgsEncodingFileDialog()
@@ -97,3 +114,10 @@ QString QgsEncodingFileDialog::encoding() const
97114
{
98115
return mEncodingComboBox->currentText();
99116
}
117+
118+
void QgsEncodingFileDialog::saveUsedEncoding()
119+
{
120+
QSettings settings;
121+
settings.setValue( "/UI/encoding", encoding() );
122+
QgsDebugMsg(QString( "Set encoding " + encoding() + " as default.") );
123+
}

src/gui/qgsencodingfiledialog.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,9 @@ class GUI_EXPORT QgsEncodingFileDialog: public QFileDialog
3232
~QgsEncodingFileDialog();
3333
/**Returns a string describing the choosen encoding*/
3434
QString encoding() const;
35+
public slots:
36+
void saveUsedEncoding();
37+
3538
private:
3639
/**Box to choose the encoding type*/
3740
QComboBox* mEncodingComboBox;

0 commit comments

Comments
 (0)