add "verify c/clive path" button.
[abby.git] / src / prefsdlg.cpp
blob2fa523abadcc72888f93e8032edd53de6375d77c
1 /*
2 * abby Copyright (C) 2009 Toni Gundogdu.
3 * This file is part of abby.
5 * abby is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation, either version 3 of the License, or
8 * (at your option) any later version.
10 * abby is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License
16 * along with this program. If not, see <http://www.gnu.org/licenses/>.
18 #include <QDialog>
19 #include <QSettings>
20 #include <QFileDialog>
21 #include <QTranslator>
22 #include <QMessageBox>
24 #include "prefsdlg.h"
25 #include "util.h"
27 PreferencesDialog::PreferencesDialog(QWidget *parent)
28 : QDialog(parent)
30 setupUi(this);
31 readSettings();
33 langCombo->addItem("English");
35 int sel = 0;
36 qmFiles = findQmFiles();
37 typedef unsigned int _uint;
38 const register _uint size = qmFiles.size();
39 for (register _uint i=0; i<size; ++i) {
40 langCombo->addItem(langName(qmFiles[i]));
41 if (qmFile == qmFiles[i])
42 sel = i+1;
44 langCombo->setCurrentIndex(sel);
46 connect(langCombo, SIGNAL(currentIndexChanged(int)),
47 this, SLOT(onLangChanged(int)));
49 #ifdef WIN32
50 streamLabel ->setHidden(true);
51 streamEdit ->setHidden(true);
52 streamButton->setHidden(true);
53 #endif
55 langLabel->setHidden(true);
56 langCombo->setHidden(true);
59 void
60 PreferencesDialog::onFinished(int) {
61 writeSettings();
64 void
65 PreferencesDialog::writeSettings() {
66 QSettings s;
68 s.beginGroup("PreferencesDialog");
70 s.setValue("size", size());
72 s.setValue("savedirEdit", savedirEdit->text());
73 s.setValue("streamEdit", streamEdit->text());
74 s.setValue("commandEdit", commandEdit->text());
75 s.setValue("ccliveEdit", ccliveEdit->text());
77 s.setValue("proxyCombo", proxyCombo->currentIndex());
78 s.setValue("proxyEdit", proxyEdit->text());
79 s.setValue("limitBox", limitBox->checkState());
80 s.setValue("limitSpin", limitSpin->value());
81 s.setValue("timeoutBox", timeoutBox->checkState());
82 s.setValue("timeoutSpin", timeoutSpin->value());
83 s.setValue("socksBox", socksBox->checkState());
85 s.setValue("qmFile", qmFile);
87 s.endGroup();
90 void
91 PreferencesDialog::readSettings() {
92 QSettings s;
94 s.beginGroup("PreferencesDialog");
96 resize( s.value("size", QSize(525,205)).toSize() );
98 savedirEdit->setText( s.value("savedirEdit").toString() );
99 streamEdit->setText( s.value("streamEdit").toString() );
100 commandEdit->setText( s.value("commandEdit").toString() );
101 ccliveEdit->setText( s.value("ccliveEdit").toString() );
103 proxyCombo->setCurrentIndex( s.value("proxyCombo").toInt() );
104 proxyEdit->setText( s.value("proxyEdit").toString() );
105 limitBox->setCheckState(
106 s.value("limitBox").toBool()
107 ? Qt::Checked
108 : Qt::Unchecked);
109 limitSpin->setValue( s.value("limitSpin").toInt() );
110 timeoutBox->setCheckState(
111 s.value("timeoutBox").toBool()
112 ? Qt::Checked
113 : Qt::Unchecked);
114 timeoutSpin->setValue( s.value("timeoutSpin").toInt() );
115 socksBox->setCheckState(
116 s.value("socksBox").toBool()
117 ? Qt::Checked
118 : Qt::Unchecked);
120 qmFile = s.value("qmFile").toString();
122 s.endGroup();
125 QStringList
126 PreferencesDialog::findQmFiles() {
127 QDir dir(":/i18n");
129 QStringList fnames =
130 dir.entryList(QStringList("*.qm"), QDir::Files, QDir::Name);
132 QMutableStringListIterator iter(fnames);
133 while (iter.hasNext()) {
134 iter.next();
135 iter.setValue(dir.filePath(iter.value()));
137 return fnames;
140 QString
141 PreferencesDialog::langName(const QString& qmFile) {
142 QTranslator transl;
143 transl.load(qmFile);
144 return transl.translate("MainWindow","English");
148 // Slots
150 void
151 PreferencesDialog::onProxyChanged(int index) {
152 proxyEdit->setEnabled(index == 1);
155 void
156 PreferencesDialog::onLimitStateChanged(int state) {
157 limitSpin->setEnabled(state != 0);
160 void
161 PreferencesDialog::onBrowseSaveDir() {
162 QFileDialog dlg(this);
164 dlg.setFileMode(QFileDialog::Directory);
165 dlg.setViewMode(QFileDialog::Detail);
166 dlg.setDirectory(savedirEdit->text());
168 if (dlg.exec())
169 savedirEdit->setText(dlg.selectedFiles()[0]);
172 void
173 PreferencesDialog::onBrowseStreamCommand() {
174 QString fname = QFileDialog::getOpenFileName(this,tr("Choose command"));
175 if (!fname.isEmpty())
176 streamEdit->setText(fname);
179 void
180 PreferencesDialog::onBrowseCommand() {
181 QString fname = QFileDialog::getOpenFileName(this,tr("Choose command"));
182 if (!fname.isEmpty())
183 commandEdit->setText(fname);
186 void
187 PreferencesDialog::onBrowseCclive() {
188 QString fname = QFileDialog::getOpenFileName(this,tr("Choose cclive"));
189 if (!fname.isEmpty())
190 ccliveEdit->setText(fname);
193 void
194 PreferencesDialog::onVerifyCclive() {
195 try {
196 QString ccliveVersion, curlVersion, curlMod;
197 bool isCcliveFlag;
198 Util::verifyCclivePath(
199 ccliveEdit->text(),
200 ccliveVersion,
201 curlVersion,
202 curlMod,
203 &isCcliveFlag
205 QMessageBox::information(
206 this,
207 QCoreApplication::applicationName(),
208 QString( tr("Program: %1\nVersion: %2\n%3: %4") )
209 .arg(isCcliveFlag ? "cclive":"clive")
210 .arg(ccliveVersion)
211 .arg(curlMod)
212 .arg(curlVersion)
215 catch (const NoCcliveException& x) {
216 QMessageBox::warning(this, tr("Warning"), x.what());
220 void
221 PreferencesDialog::onLangChanged(int index) {
222 qmFile = "";
223 if (index > 0)
224 qmFile = qmFiles[index-1];
226 QMessageBox::information(this, QCoreApplication::applicationName(),
227 tr("You need to restart the application for the language change "
228 "to take effect."));
231 void
232 PreferencesDialog::onTimeoutStateChanged(int state) {
233 timeoutSpin->setEnabled(state != 0);
234 socksBox->setEnabled(state != 0);