mirror of
https://github.com/qgis/QGIS.git
synced 2025-04-14 00:07:35 -04:00
Add a new dialog for selecting file encoding, QgsEncodingSelectionDialog
Can be used to prompt users for a file encoding choice
This commit is contained in:
parent
e05cca2bed
commit
f660d78017
@ -49,6 +49,46 @@ Returns true if the user clicked 'Cancel All'
|
|||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class QgsEncodingSelectionDialog: QDialog
|
||||||
|
{
|
||||||
|
%Docstring
|
||||||
|
A dialog which presents the user with a choice of file encodings.
|
||||||
|
.. versionadded:: 3.0
|
||||||
|
*
|
||||||
|
%End
|
||||||
|
|
||||||
|
%TypeHeaderCode
|
||||||
|
#include "qgsencodingfiledialog.h"
|
||||||
|
%End
|
||||||
|
public:
|
||||||
|
|
||||||
|
QgsEncodingSelectionDialog( QWidget *parent /TransferThis/ = 0,
|
||||||
|
const QString &caption = QString(), const QString &encoding = QString(),
|
||||||
|
Qt::WindowFlags flags = Qt::WindowFlags() );
|
||||||
|
%Docstring
|
||||||
|
Constructor for QgsEncodingSelectionDialog.
|
||||||
|
|
||||||
|
If ``caption`` is set, it will be used as the caption within the dialog.
|
||||||
|
|
||||||
|
The ``encoding`` argument can be used to specify the encoding initially selected in the dialog.
|
||||||
|
%End
|
||||||
|
|
||||||
|
QString encoding() const;
|
||||||
|
%Docstring
|
||||||
|
Returns the encoding selected within the dialog.
|
||||||
|
.. seealso:: setEncoding()
|
||||||
|
:rtype: str
|
||||||
|
%End
|
||||||
|
|
||||||
|
void setEncoding( const QString &encoding );
|
||||||
|
%Docstring
|
||||||
|
Sets the ``encoding`` selected within the dialog.
|
||||||
|
see encoding()
|
||||||
|
%End
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
/************************************************************************
|
/************************************************************************
|
||||||
* This file has been generated automatically from *
|
* This file has been generated automatically from *
|
||||||
* *
|
* *
|
||||||
|
@ -24,6 +24,7 @@
|
|||||||
#include <QLabel>
|
#include <QLabel>
|
||||||
#include <QLayout>
|
#include <QLayout>
|
||||||
#include <QTextCodec>
|
#include <QTextCodec>
|
||||||
|
#include <QDialogButtonBox>
|
||||||
|
|
||||||
QgsEncodingFileDialog::QgsEncodingFileDialog( QWidget *parent,
|
QgsEncodingFileDialog::QgsEncodingFileDialog( QWidget *parent,
|
||||||
const QString &caption, const QString &directory,
|
const QString &caption, const QString &directory,
|
||||||
@ -102,3 +103,63 @@ void QgsEncodingFileDialog::pbnCancelAll_clicked()
|
|||||||
// Now, continue as the user clicked the cancel button
|
// Now, continue as the user clicked the cancel button
|
||||||
reject();
|
reject();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QgsEncodingSelectionDialog::QgsEncodingSelectionDialog( QWidget *parent, const QString &caption, const QString &encoding, Qt::WindowFlags flags )
|
||||||
|
: QDialog( parent, flags )
|
||||||
|
{
|
||||||
|
QString c = caption;
|
||||||
|
if ( c.isEmpty() )
|
||||||
|
c = tr( "Encoding" );
|
||||||
|
|
||||||
|
setWindowTitle( tr( "Select Encoding" ) );
|
||||||
|
|
||||||
|
QVBoxLayout *layout = new QVBoxLayout();
|
||||||
|
layout->setMargin( 6 );
|
||||||
|
|
||||||
|
mEncodingComboBox = new QComboBox( this );
|
||||||
|
QLabel *l = new QLabel( c, this );
|
||||||
|
|
||||||
|
QHBoxLayout *hLayout = new QHBoxLayout();
|
||||||
|
hLayout->addWidget( l );
|
||||||
|
hLayout->addWidget( mEncodingComboBox, 1 );
|
||||||
|
layout->addLayout( hLayout );
|
||||||
|
|
||||||
|
QDialogButtonBox *buttonBox = new QDialogButtonBox( QDialogButtonBox::Ok | QDialogButtonBox::Cancel,
|
||||||
|
Qt::Horizontal, this );
|
||||||
|
buttonBox->button( QDialogButtonBox::Ok )->setDefault( true );
|
||||||
|
connect( buttonBox, &QDialogButtonBox::rejected, this, &QDialog::reject );
|
||||||
|
connect( buttonBox, &QDialogButtonBox::accepted, this, &QDialog::accept );
|
||||||
|
layout->addWidget( buttonBox );
|
||||||
|
setLayout( layout );
|
||||||
|
|
||||||
|
mEncodingComboBox->addItems( QgsVectorDataProvider::availableEncodings() );
|
||||||
|
|
||||||
|
// Use default encoding if none supplied
|
||||||
|
QString enc = encoding;
|
||||||
|
if ( encoding.isEmpty() )
|
||||||
|
{
|
||||||
|
QgsSettings settings;
|
||||||
|
enc = settings.value( QStringLiteral( "UI/encoding" ), "System" ).toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
setEncoding( enc );
|
||||||
|
}
|
||||||
|
|
||||||
|
QString QgsEncodingSelectionDialog::encoding() const
|
||||||
|
{
|
||||||
|
return mEncodingComboBox->currentText();
|
||||||
|
}
|
||||||
|
|
||||||
|
void QgsEncodingSelectionDialog::setEncoding( const QString &encoding )
|
||||||
|
{
|
||||||
|
// The specified decoding is added if not existing alread, and then set current.
|
||||||
|
// This should select it.
|
||||||
|
|
||||||
|
int encindex = mEncodingComboBox->findText( encoding );
|
||||||
|
if ( encindex < 0 )
|
||||||
|
{
|
||||||
|
mEncodingComboBox->insertItem( 0, encoding );
|
||||||
|
encindex = 0;
|
||||||
|
}
|
||||||
|
mEncodingComboBox->setCurrentIndex( encindex );
|
||||||
|
}
|
||||||
|
@ -61,4 +61,45 @@ class GUI_EXPORT QgsEncodingFileDialog: public QFileDialog
|
|||||||
bool mCancelAll;
|
bool mCancelAll;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \ingroup gui
|
||||||
|
* A dialog which presents the user with a choice of file encodings.
|
||||||
|
* \since QGIS 3.0
|
||||||
|
**/
|
||||||
|
class GUI_EXPORT QgsEncodingSelectionDialog: public QDialog
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor for QgsEncodingSelectionDialog.
|
||||||
|
*
|
||||||
|
* If \a caption is set, it will be used as the caption within the dialog.
|
||||||
|
*
|
||||||
|
* The \a encoding argument can be used to specify the encoding initially selected in the dialog.
|
||||||
|
*/
|
||||||
|
QgsEncodingSelectionDialog( QWidget *parent SIP_TRANSFERTHIS = nullptr,
|
||||||
|
const QString &caption = QString(), const QString &encoding = QString(),
|
||||||
|
Qt::WindowFlags flags = Qt::WindowFlags() );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the encoding selected within the dialog.
|
||||||
|
* \see setEncoding()
|
||||||
|
*/
|
||||||
|
QString encoding() const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the \a encoding selected within the dialog.
|
||||||
|
* see encoding()
|
||||||
|
*/
|
||||||
|
void setEncoding( const QString &encoding );
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
QComboBox *mEncodingComboBox = nullptr;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -48,6 +48,7 @@ ADD_PYTHON_TEST(PyQgsDelimitedTextProvider test_qgsdelimitedtextprovider.py)
|
|||||||
ADD_PYTHON_TEST(PyQgsDistanceArea test_qgsdistancearea.py)
|
ADD_PYTHON_TEST(PyQgsDistanceArea test_qgsdistancearea.py)
|
||||||
ADD_PYTHON_TEST(PyQgsEditWidgets test_qgseditwidgets.py)
|
ADD_PYTHON_TEST(PyQgsEditWidgets test_qgseditwidgets.py)
|
||||||
ADD_PYTHON_TEST(PyQgsEllipsoidUtils test_qgsellipsoidutils.py)
|
ADD_PYTHON_TEST(PyQgsEllipsoidUtils test_qgsellipsoidutils.py)
|
||||||
|
ADD_PYTHON_TEST(PyQgsEncodingSelectionDialog test_qgsencodingselectiondialog.py)
|
||||||
ADD_PYTHON_TEST(PyQgsExpression test_qgsexpression.py)
|
ADD_PYTHON_TEST(PyQgsExpression test_qgsexpression.py)
|
||||||
ADD_PYTHON_TEST(PyQgsExpressionBuilderWidget test_qgsexpressionbuilderwidget.py)
|
ADD_PYTHON_TEST(PyQgsExpressionBuilderWidget test_qgsexpressionbuilderwidget.py)
|
||||||
ADD_PYTHON_TEST(PyQgsExpressionLineEdit test_qgsexpressionlineedit.py)
|
ADD_PYTHON_TEST(PyQgsExpressionLineEdit test_qgsexpressionlineedit.py)
|
||||||
|
38
tests/src/python/test_qgsencodingselectiondialog.py
Normal file
38
tests/src/python/test_qgsencodingselectiondialog.py
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
"""QGIS Unit tests for QgsEncodingSelectionDialog
|
||||||
|
|
||||||
|
.. note:: This program is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
"""
|
||||||
|
__author__ = 'Nyall Dawson'
|
||||||
|
__date__ = '21/11/2017'
|
||||||
|
__copyright__ = 'Copyright 2017, The QGIS Project'
|
||||||
|
# This will get replaced with a git SHA1 when you do a git archive
|
||||||
|
__revision__ = '$Format:%H$'
|
||||||
|
|
||||||
|
import qgis # NOQA
|
||||||
|
|
||||||
|
from qgis.gui import QgsEncodingSelectionDialog
|
||||||
|
|
||||||
|
from qgis.testing import start_app, unittest
|
||||||
|
|
||||||
|
start_app()
|
||||||
|
|
||||||
|
|
||||||
|
class TestQgsEncodingSelectionDialog(unittest.TestCase):
|
||||||
|
|
||||||
|
def testGettersSetters(self):
|
||||||
|
""" test dialog getters/setters """
|
||||||
|
dlg = qgis.gui.QgsEncodingSelectionDialog(encoding='UTF-16')
|
||||||
|
self.assertEqual(dlg.encoding(), 'UTF-16')
|
||||||
|
dlg.setEncoding('UTF-8')
|
||||||
|
self.assertEqual(dlg.encoding(), 'UTF-8')
|
||||||
|
# custom encoding option
|
||||||
|
dlg.setEncoding('trisolarian')
|
||||||
|
self.assertEqual(dlg.encoding(), 'trisolarian')
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
unittest.main()
|
Loading…
x
Reference in New Issue
Block a user