1 /***************************************************************************
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
9 * Copyright (C) 2007 by Dominik Riebeling
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 ****************************************************************************/
22 #include "configure.h"
23 #include "ui_configurefrm.h"
29 #define DEFAULT_LANG "English (builtin)"
31 Config::Config(QWidget
*parent
) : QDialog(parent
)
33 programPath
= QFileInfo(qApp
->arguments().at(0)).absolutePath() + "/";
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
);
41 ui
.radioSystemProxy
->setEnabled(false); // only on linux for now
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());
53 ui
.listLanguages
->setSelectionMode(QAbstractItemView::SingleSelection
);
54 connect(ui
.listLanguages
, SIGNAL(itemSelectionChanged()), this, SLOT(updateLanguage()));
55 ui
.proxyPass
->setEchoMode(QLineEdit::Password
);
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)));
63 connect(ui
.browseMountPoint
, SIGNAL(clicked()), this, SLOT(browseFolder()));
65 // disable unimplemented stuff
66 ui
.buttonCacheBrowse
->setEnabled(false);
67 ui
.cacheDisable
->setEnabled(false);
68 ui
.cacheOfflineMode
->setEnabled(false);
69 ui
.buttonCacheClear
->setEnabled(false);
71 ui
.buttonAutodetect
->setEnabled(false);
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
;
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
);
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
);
102 QString mp
= ui
.mountPoint
->text();
103 if(QFileInfo(mp
).isDir())
104 userSettings
->setValue("defaults/mountpoint", mp
);
108 nplat
= ui
.treeDevices
->selectedItems().at(0)->data(0, Qt::UserRole
).toString();
109 userSettings
->setValue("defaults/platform", nplat
);
112 userSettings
->sync();
114 emit
settingsUpdated();
120 qDebug() << "Config::abort()";
125 void Config::setUserSettings(QSettings
*user
)
129 QUrl proxy
= userSettings
->value("defaults/proxy").toString();
132 ui
.proxyPort
->setText(QString("%1").arg(proxy
.port()));
133 else ui
.proxyPort
->setText("");
134 ui
.proxyHost
->setText(proxy
.host());
135 ui
.proxyUser
->setText(proxy
.userName());
136 ui
.proxyPass
->setText(proxy
.password());
138 QString proxyType
= userSettings
->value("defaults/proxytype").toString();
139 if(proxyType
== "manual") ui
.radioManualProxy
->setChecked(true);
140 else if(proxyType
== "system") ui
.radioSystemProxy
->setChecked(true);
141 else if(proxyType
== "none") ui
.radioNoProxy
->setChecked(true);
143 // set language selection
144 QList
<QListWidgetItem
*> a
;
146 // find key for lang value
147 QMap
<QString
, QString
>::const_iterator i
= lang
.constBegin();
148 while (i
!= lang
.constEnd()) {
149 if(i
.value() == userSettings
->value("defaults/lang").toString() + ".qm") {
155 a
= ui
.listLanguages
->findItems(b
, Qt::MatchExactly
);
157 a
= ui
.listLanguages
->findItems(DEFAULT_LANG
, Qt::MatchExactly
);
159 ui
.listLanguages
->setCurrentItem(a
.at(0));
162 ui
.mountPoint
->setText(userSettings
->value("defaults/mountpoint").toString());
167 void Config::setDevices(QSettings
*dev
)
170 // setup devices table
171 qDebug() << "Config::setDevices()";
172 devices
->beginGroup("platforms");
173 QStringList a
= devices
->childKeys();
176 QMap
<QString
, QString
> manuf
;
177 QMap
<QString
, QString
> devcs
;
178 for(int it
= 0; it
< a
.size(); it
++) {
180 devices
->beginGroup("platforms");
181 curdev
= devices
->value(a
.at(it
), "null").toString();
184 devices
->beginGroup(curdev
);
185 curname
= devices
->value("name", "null").toString();
186 QString curbrand
= devices
->value("brand", "").toString();
188 manuf
.insertMulti(curbrand
, curdev
);
189 devcs
.insert(curdev
, curname
);
193 platform
= devcs
.value(userSettings
->value("defaults/platform").toString());
195 // set up devices table
196 ui
.treeDevices
->header()->hide();
197 ui
.treeDevices
->expandAll();
198 ui
.treeDevices
->setColumnCount(1);
199 QList
<QTreeWidgetItem
*> items
;
202 QStringList brands
= manuf
.uniqueKeys();
205 QTreeWidgetItem
*w3
= 0;
206 for(int c
= 0; c
< brands
.size(); c
++) {
207 qDebug() << brands
.at(c
);
208 w
= new QTreeWidgetItem();
209 w
->setFlags(Qt::ItemIsEnabled
);
210 w
->setText(0, brands
.at(c
));
211 // w->setData(0, Qt::DecorationRole, <icon>);
214 // go through platforms again for sake of order
215 for(int it
= 0; it
< a
.size(); it
++) {
217 devices
->beginGroup("platforms");
218 curdev
= devices
->value(a
.at(it
), "null").toString();
221 devices
->beginGroup(curdev
);
222 curname
= devices
->value("name", "null").toString();
223 QString curbrand
= devices
->value("brand", "").toString();
225 if(curbrand
!= brands
.at(c
)) continue;
226 qDebug() << "adding:" << brands
.at(c
) << curname
<< curdev
;
227 w2
= new QTreeWidgetItem(w
, QStringList(curname
));
228 w2
->setData(0, Qt::UserRole
, curdev
);
229 if(platform
.contains(curname
)) {
230 w2
->setSelected(true);
231 w
->setExpanded(true);
232 w3
= w2
; // save pointer to hilight old selection
237 ui
.treeDevices
->insertTopLevelItems(0, items
);
239 ui
.treeDevices
->setCurrentItem(w3
); // hilight old selection
243 void Config::setNoProxy(bool checked
)
246 ui
.proxyPort
->setEnabled(i
);
247 ui
.proxyHost
->setEnabled(i
);
248 ui
.proxyUser
->setEnabled(i
);
249 ui
.proxyPass
->setEnabled(i
);
253 void Config::setSystemProxy(bool checked
)
256 ui
.proxyPort
->setEnabled(i
);
257 ui
.proxyHost
->setEnabled(i
);
258 ui
.proxyUser
->setEnabled(i
);
259 ui
.proxyPass
->setEnabled(i
);
261 // save values in input box
262 proxy
.setScheme("http");
263 proxy
.setUserName(ui
.proxyUser
->text());
264 proxy
.setPassword(ui
.proxyPass
->text());
265 proxy
.setHost(ui
.proxyHost
->text());
266 proxy
.setPort(ui
.proxyPort
->text().toInt());
267 // show system values in input box
269 QUrl envproxy
= QUrl(getenv("http_proxy"));
270 ui
.proxyHost
->setText(envproxy
.host());
271 ui
.proxyPort
->setText(QString("%1").arg(envproxy
.port()));
272 ui
.proxyUser
->setText(envproxy
.userName());
273 ui
.proxyPass
->setText(envproxy
.password());
277 ui
.proxyHost
->setText(proxy
.host());
279 ui
.proxyPort
->setText(QString("%1").arg(proxy
.port()));
280 else ui
.proxyPort
->setText("");
281 ui
.proxyUser
->setText(proxy
.userName());
282 ui
.proxyPass
->setText(proxy
.password());
288 QStringList
Config::findLanguageFiles()
290 QDir
dir(programPath
+ "/");
291 QStringList fileNames
;
292 fileNames
= dir
.entryList(QStringList("*.qm"), QDir::Files
, QDir::Name
);
294 QDir
resDir(":/lang");
295 fileNames
+= resDir
.entryList(QStringList("*.qm"), QDir::Files
, QDir::Name
);
298 qDebug() << "Config::findLanguageFiles()" << fileNames
;
304 QString
Config::languageName(const QString
&qmFile
)
306 QTranslator translator
;
308 if(!translator
.load(qmFile
, programPath
))
309 translator
.load(qmFile
, ":/lang");
311 return translator
.translate("Configure", "English");
315 void Config::updateLanguage()
317 qDebug() << "updateLanguage()";
318 QList
<QListWidgetItem
*> a
= ui
.listLanguages
->selectedItems();
320 language
= QFileInfo(lang
.value(a
.at(0)->text())).baseName();
324 void Config::browseFolder()
326 QFileDialog
browser(this);
327 if(QFileInfo(ui
.mountPoint
->text()).isDir())
328 browser
.setDirectory(ui
.mountPoint
->text());
330 browser
.setDirectory("/media");
331 browser
.setReadOnly(true);
332 browser
.setFileMode(QFileDialog::DirectoryOnly
);
333 browser
.setAcceptMode(QFileDialog::AcceptOpen
);
335 qDebug() << browser
.directory();
336 QStringList files
= browser
.selectedFiles();
337 ui
.mountPoint
->setText(files
.at(0));
338 userSettings
->setValue("defaults/mountpoint", files
.at(0));