Update configuration dialog and disable unimplemented items. Add some nice icons...
[Rockbox.git] / rbutil / rbutilqt / configure.cpp
blobe92234527bb83a768b57f93372f54f342c3edd80
1 /***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
9 * Copyright (C) 2007 by Dominik Riebeling
10 * $Id$
12 * All files in this archive are subject to the GNU General Public License.
13 * See the file COPYING in the source tree root for full license agreement.
15 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
16 * KIND, either express or implied.
18 ****************************************************************************/
20 #include <QtGui>
22 #include "configure.h"
23 #include "ui_configurefrm.h"
25 #ifdef __linux
26 #include <stdio.h>
27 #endif
29 #define DEFAULT_LANG "English (builtin)"
31 Config::Config(QWidget *parent) : QDialog(parent)
33 programPath = QFileInfo(qApp->arguments().at(0)).absolutePath() + "/";
34 ui.setupUi(this);
35 ui.radioManualProxy->setChecked(true);
36 QRegExpValidator *proxyValidator = new QRegExpValidator(this);
37 QRegExp validate("[0-9]*");
38 proxyValidator->setRegExp(validate);
39 ui.proxyPort->setValidator(proxyValidator);
40 #ifndef __linux
41 ui.radioSystemProxy->setEnabled(false); // only on linux for now
42 #endif
43 // build language list and sort alphabetically
44 QStringList langs = findLanguageFiles();
45 for(int i = 0; i < langs.size(); ++i)
46 lang.insert(languageName(langs[i]), langs[i]);
47 lang.insert(DEFAULT_LANG, "");
48 QMap<QString, QString>::const_iterator i = lang.constBegin();
49 while (i != lang.constEnd()) {
50 ui.listLanguages->addItem(i.key());
51 i++;
53 ui.listLanguages->setSelectionMode(QAbstractItemView::SingleSelection);
54 connect(ui.listLanguages, SIGNAL(itemSelectionChanged()), this, SLOT(updateLanguage()));
55 ui.proxyPass->setEchoMode(QLineEdit::Password);
57 this->setModal(true);
59 connect(ui.buttonOk, SIGNAL(clicked()), this, SLOT(accept()));
60 connect(ui.buttonCancel, SIGNAL(clicked()), this, SLOT(abort()));
61 connect(ui.radioNoProxy, SIGNAL(toggled(bool)), this, SLOT(setNoProxy(bool)));
62 connect(ui.radioSystemProxy, SIGNAL(toggled(bool)), this, SLOT(setSystemProxy(bool)));
64 // disable unimplemented stuff
65 ui.buttonCacheBrowse->setEnabled(false);
66 ui.cacheDisable->setEnabled(false);
67 ui.cacheOfflineMode->setEnabled(false);
68 ui.buttonCacheClear->setEnabled(false);
69 ui.scrobblerUser->setEnabled(false);
70 ui.scrobblerPass->setEnabled(false);
71 ui.scrobblerTimezone->setEnabled(false);
75 void Config::accept()
77 qDebug() << "Config::accept()";
78 // proxy: save entered proxy values, not displayed.
79 if(ui.radioManualProxy->isChecked()) {
80 proxy.setScheme("http");
81 proxy.setUserName(ui.proxyUser->text());
82 proxy.setPassword(ui.proxyPass->text());
83 proxy.setHost(ui.proxyHost->text());
84 proxy.setPort(ui.proxyPort->text().toInt());
86 userSettings->setValue("defaults/proxy", proxy.toString());
87 qDebug() << "new proxy:" << proxy;
88 // proxy type
89 QString proxyType;
90 if(ui.radioNoProxy->isChecked()) proxyType = "none";
91 else if(ui.radioSystemProxy->isChecked()) proxyType = "system";
92 else proxyType = "manual";
93 userSettings->setValue("defaults/proxytype", proxyType);
95 // language
96 if(userSettings->value("defaults/lang").toString() != language)
97 QMessageBox::information(this, tr("Language changed"),
98 tr("You need to restart the application for the changed language to take effect."));
99 userSettings->setValue("defaults/lang", language);
101 // sync settings
102 userSettings->sync();
103 this->close();
104 emit settingsUpdated();
108 void Config::abort()
110 qDebug() << "Config::abort()";
111 this->close();
115 void Config::setUserSettings(QSettings *user)
117 userSettings = user;
118 QUrl proxy = userSettings->value("defaults/proxy").toString();
120 ui.proxyPort->setText(QString("%1").arg(proxy.port()));
121 ui.proxyHost->setText(proxy.host());
122 ui.proxyUser->setText(proxy.userName());
123 ui.proxyPass->setText(proxy.password());
125 QString proxyType = userSettings->value("defaults/proxytype").toString();
126 if(proxyType == "manual") ui.radioManualProxy->setChecked(true);
127 else if(proxyType == "system") ui.radioSystemProxy->setChecked(true);
128 else if(proxyType == "none") ui.radioNoProxy->setChecked(true);
130 // set language selection
131 QList<QListWidgetItem*> a;
132 QString b;
133 // find key for lang value
134 QMap<QString, QString>::const_iterator i = lang.constBegin();
135 while (i != lang.constEnd()) {
136 if(i.value() == userSettings->value("defaults/lang").toString() + ".qm") {
137 b = i.key();
138 break;
140 i++;
142 a = ui.listLanguages->findItems(b, Qt::MatchExactly);
143 if(a.size() <= 0)
144 a = ui.listLanguages->findItems(DEFAULT_LANG, Qt::MatchExactly);
145 if(a.size() > 0)
146 ui.listLanguages->setCurrentItem(a.at(0));
151 void Config::setNoProxy(bool checked)
153 bool i = !checked;
154 ui.proxyPort->setEnabled(i);
155 ui.proxyHost->setEnabled(i);
156 ui.proxyUser->setEnabled(i);
157 ui.proxyPass->setEnabled(i);
161 void Config::setSystemProxy(bool checked)
163 bool i = !checked;
164 ui.proxyPort->setEnabled(i);
165 ui.proxyHost->setEnabled(i);
166 ui.proxyUser->setEnabled(i);
167 ui.proxyPass->setEnabled(i);
168 if(checked) {
169 // save values in input box
170 proxy.setScheme("http");
171 proxy.setUserName(ui.proxyUser->text());
172 proxy.setPassword(ui.proxyPass->text());
173 proxy.setHost(ui.proxyHost->text());
174 proxy.setPort(ui.proxyPort->text().toInt());
175 // show system values in input box
176 #ifdef __linux
177 QUrl envproxy = QUrl(getenv("http_proxy"));
178 ui.proxyHost->setText(envproxy.host());
179 ui.proxyPort->setText(QString("%1").arg(envproxy.port()));
180 ui.proxyUser->setText(envproxy.userName());
181 ui.proxyPass->setText(envproxy.password());
182 #endif
184 else {
185 ui.proxyHost->setText(proxy.host());
186 ui.proxyPort->setText(QString("%1").arg(proxy.port()));
187 ui.proxyUser->setText(proxy.userName());
188 ui.proxyPass->setText(proxy.password());
194 QStringList Config::findLanguageFiles()
196 QDir dir(programPath + "/");
197 QStringList fileNames;
198 fileNames = dir.entryList(QStringList("*.qm"), QDir::Files, QDir::Name);
200 QDir resDir(":/lang");
201 fileNames += resDir.entryList(QStringList("*.qm"), QDir::Files, QDir::Name);
203 fileNames.sort();
204 qDebug() << "Config::findLanguageFiles()" << fileNames;
206 return fileNames;
210 QString Config::languageName(const QString &qmFile)
212 QTranslator translator;
214 if(!translator.load(qmFile, programPath))
215 translator.load(qmFile, ":/lang");
217 return translator.translate("Configure", "English");
221 void Config::updateLanguage()
223 qDebug() << "updateLanguage()";
224 QList<QListWidgetItem*> a = ui.listLanguages->selectedItems();
225 if(a.size() > 0)
226 language = QFileInfo(lang.value(a.at(0)->text())).baseName();