From 588363b7f6fe70a32986e5d48781980eb6876d5b Mon Sep 17 00:00:00 2001 From: mgrojo Date: Fri, 29 Jun 2018 22:37:25 +0200 Subject: [PATCH] Get the encoding name from a combo box in the "Set encoding" dialog User can enter the encoding name with completion or select it from the list using the mouse. This will help users to discover available codecs and to find a suitable one in an easier way. This should help with encoding issues like #1453. --- src/Data.cpp | 8 ++++++++ src/Data.h | 2 ++ src/MainWindow.cpp | 12 +++++++++--- 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/src/Data.cpp b/src/Data.cpp index e3a5e491..c61a5007 100644 --- a/src/Data.cpp +++ b/src/Data.cpp @@ -57,3 +57,11 @@ QByteArray removeBom(QByteArray& data) return QByteArray(); } } + +QStringList toStringList(const QList list) { + QStringList strings; + for (const QByteArray &item : list) { + strings.append(QString::fromUtf8(item)); + } + return strings; +} diff --git a/src/Data.h b/src/Data.h index 2cbf9ddc..f8a1430c 100644 --- a/src/Data.h +++ b/src/Data.h @@ -17,4 +17,6 @@ bool startsWithBom(const QByteArray& data); // with a BOM an empty byte array is returned and the original data is not modified. QByteArray removeBom(QByteArray& data); +QStringList toStringList(const QList list); + #endif diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index 2c60901a..d65d6a96 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -25,6 +25,7 @@ #include "RemoteDock.h" #include "RemoteDatabase.h" #include "FindReplaceDialog.h" +#include "Data.h" #include #include @@ -2773,15 +2774,20 @@ void MainWindow::browseDataSetTableEncoding(bool forAllTables) // Ask the user for a new encoding bool ok; QString question; + QStringList availableCodecs = toStringList(QTextCodec::availableCodecs()); + availableCodecs.removeDuplicates(); + int currentItem = availableCodecs.indexOf(encoding); + if(forAllTables) question = tr("Please choose a new encoding for all tables."); else question = tr("Please choose a new encoding for this table."); - encoding = QInputDialog::getText(this, + encoding = QInputDialog::getItem(this, tr("Set encoding"), tr("%1\nLeave the field empty for using the database encoding.").arg(question), - QLineEdit::Normal, - encoding, + availableCodecs, + currentItem, + true, // editable &ok); // Only set the new encoding if the user clicked the OK button