From 84d56d99eef319c669420645fd2e4f5b0ec86fef Mon Sep 17 00:00:00 2001
From: Mark Watkins <jedimark@users.sourceforge.net>
Date: Wed, 14 May 2014 20:36:04 +1000
Subject: [PATCH] Change language selection combo to a more practical list

---
 sleepyhead/translation.cpp | 34 +++++++++++++++++++---------------
 1 file changed, 19 insertions(+), 15 deletions(-)

diff --git a/sleepyhead/translation.cpp b/sleepyhead/translation.cpp
index fb662dea..80f1b625 100644
--- a/sleepyhead/translation.cpp
+++ b/sleepyhead/translation.cpp
@@ -21,6 +21,7 @@
 #include <QDir>
 #include <QSettings>
 #include <QTranslator>
+#include <QListWidget>
 
 #ifndef nullptr
 #define nullptr NULL
@@ -92,7 +93,6 @@ void initTranslations(QSettings & settings) {
         langFiles[code]=fi.fileName();
 
     }
-
     if (language.isEmpty() || !langNames.contains(language)) {
         QDialog langsel(nullptr, Qt::CustomizeWindowHint | Qt::WindowTitleHint);
         QFont font;
@@ -106,39 +106,43 @@ void initTranslations(QSettings & settings) {
 
         // hard coded non translatable
 
-        QComboBox lang_combo(&langsel);
         QPushButton lang_okbtn("->", &langsel);
 
         QVBoxLayout layout1;
         QVBoxLayout layout2;
 
+        QListWidget langlist;
+
         lang_layout.addLayout(&layout1);
         lang_layout.addLayout(&layout2);
 
         layout1.addWidget(&img);
+        layout2.addWidget(&langlist, 1);
 
-        for (int i=0;i<welcome.size(); i++) {
-            QLabel *welcomeLabel = new QLabel(welcome[i]);
-            layout2.addWidget(welcomeLabel);
-        }
-
-        QWidget spacer;
-        layout2.addWidget(&spacer,1);
-        layout2.addWidget(&lang_combo, 1);
-        layout2.addWidget(&lang_okbtn);
-
+        langlist.setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
+        int row = 0;
         for (QHash<QString, QString>::iterator it = langNames.begin(); it != langNames.end(); ++it) {
             const QString & code = it.key();
             const QString & name = it.value();
-            lang_combo.addItem(name, code);
+            QListWidgetItem *item = new QListWidgetItem(name);
+            item->setData(Qt::UserRole, code);
+            langlist.insertItem(row++, item);
+            // Todo: Use base system language code
+            if (code.compare("en")==0) {
+                langlist.setCurrentItem(item);
+            }
         }
+        langlist.sortItems();
+        layout2.addWidget(&lang_okbtn);
 
+        langsel.connect(&langlist, SIGNAL(itemDoubleClicked(QListWidgetItem*)), &langsel, SLOT(close()));
         langsel.connect(&lang_okbtn, SIGNAL(clicked()), &langsel, SLOT(close()));
 
         langsel.exec();
         langsel.disconnect(&lang_okbtn, SIGNAL(clicked()), &langsel, SLOT(close()));
-        langname = lang_combo.currentText();
-        language = lang_combo.itemData(lang_combo.currentIndex()).toString();
+        langsel.disconnect(&langlist, SIGNAL(itemDoubleClicked(QListWidgetItem*)), &langsel, SLOT(close()));
+        langname = langlist.currentItem()->text();
+        language = langlist.currentItem()->data(Qt::UserRole).toString();
         settings.setValue("Settings/Language", language);
     }