diff options
Diffstat (limited to 'rbutil/rbutilqt/encttscfggui.cpp')
-rw-r--r-- | rbutil/rbutilqt/encttscfggui.cpp | 361 |
1 files changed, 361 insertions, 0 deletions
diff --git a/rbutil/rbutilqt/encttscfggui.cpp b/rbutil/rbutilqt/encttscfggui.cpp new file mode 100644 index 0000000000..25089873fc --- /dev/null +++ b/rbutil/rbutilqt/encttscfggui.cpp | |||
@@ -0,0 +1,361 @@ | |||
1 | /*************************************************************************** | ||
2 | * __________ __ ___. | ||
3 | * Open \______ \ ____ ____ | | _\_ |__ _______ ___ | ||
4 | * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / | ||
5 | * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < | ||
6 | * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ | ||
7 | * \/ \/ \/ \/ \/ | ||
8 | * | ||
9 | * Copyright (C) 2007 by Dominik Wenger | ||
10 | * $Id: encoders.h 17902 2008-06-30 22:09:45Z bluebrother $ | ||
11 | * | ||
12 | * This program is free software; you can redistribute it and/or | ||
13 | * modify it under the terms of the GNU General Public License | ||
14 | * as published by the Free Software Foundation; either version 2 | ||
15 | * of the License, or (at your option) any later version. | ||
16 | * | ||
17 | * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY | ||
18 | * KIND, either express or implied. | ||
19 | * | ||
20 | ****************************************************************************/ | ||
21 | |||
22 | #include "encttscfggui.h" | ||
23 | #include "browsedirtree.h" | ||
24 | |||
25 | EncTtsCfgGui::EncTtsCfgGui(QDialog* parent,EncTtsSettingInterface* interface,QString name) : QDialog(parent) | ||
26 | { | ||
27 | m_settingInterface = interface; | ||
28 | |||
29 | m_busyCnt=0; | ||
30 | // create a busy Dialog | ||
31 | m_busyDlg= new QProgressDialog(tr(""), tr(""), 0, 0,this); | ||
32 | m_busyDlg->setWindowTitle(tr("Waiting for engine...")); | ||
33 | m_busyDlg->setModal(true); | ||
34 | m_busyDlg->setLabel(0); | ||
35 | m_busyDlg->setCancelButton(0); | ||
36 | m_busyDlg->hide(); | ||
37 | connect(interface,SIGNAL(busy()),this,SLOT(showBusy())); | ||
38 | connect(interface,SIGNAL(busyEnd()),this,SLOT(hideBusy())); | ||
39 | |||
40 | //setup the window | ||
41 | setWindowTitle(name); | ||
42 | setUpWindow(); | ||
43 | } | ||
44 | |||
45 | void EncTtsCfgGui::setUpWindow() | ||
46 | { | ||
47 | m_settingsList = m_settingInterface->getSettings(); | ||
48 | |||
49 | //layout | ||
50 | QVBoxLayout *mainLayout = new QVBoxLayout; | ||
51 | |||
52 | // groupbox | ||
53 | QGroupBox *groupBox = new QGroupBox(this); | ||
54 | QFormLayout *formlayout = new QFormLayout; | ||
55 | // setting widgets | ||
56 | for(int i = 0; i < m_settingsList.size(); i++) | ||
57 | { | ||
58 | formlayout->addRow(m_settingsList.at(i)->name(),createWidgets(m_settingsList.at(i))); | ||
59 | } | ||
60 | groupBox->setLayout(formlayout); | ||
61 | mainLayout->addWidget(groupBox); | ||
62 | |||
63 | // connect browse btn | ||
64 | connect(&m_browseBtnMap,SIGNAL(mapped(QObject*)),this,SLOT(browse(QObject*))); | ||
65 | |||
66 | // ok - cancel buttons | ||
67 | QPushButton* okBtn = new QPushButton(tr("Ok"),this); | ||
68 | okBtn->setDefault(true); | ||
69 | okBtn->setIcon(QIcon(":icons/go-next.png")); | ||
70 | QPushButton* cancelBtn = new QPushButton(tr("Cancel"),this); | ||
71 | cancelBtn->setIcon(QIcon(":icons/process-stop.png")); | ||
72 | connect(okBtn,SIGNAL(clicked()),this,SLOT(accept())); | ||
73 | connect(cancelBtn,SIGNAL(clicked()),this,SLOT(reject())); | ||
74 | |||
75 | QHBoxLayout *btnbox = new QHBoxLayout; | ||
76 | btnbox->addWidget(okBtn); | ||
77 | btnbox->addWidget(cancelBtn); | ||
78 | btnbox->insertStretch(0,1); | ||
79 | |||
80 | mainLayout->addLayout(btnbox); | ||
81 | |||
82 | this->setLayout(mainLayout); | ||
83 | } | ||
84 | |||
85 | QLayout* EncTtsCfgGui::createWidgets(EncTtsSetting* setting) | ||
86 | { | ||
87 | // value display | ||
88 | QWidget* value = NULL; | ||
89 | switch(setting->type()) | ||
90 | { | ||
91 | case EncTtsSetting::eDOUBLE: | ||
92 | { | ||
93 | QDoubleSpinBox *spinBox = new QDoubleSpinBox(this); | ||
94 | spinBox->setMinimum(setting->min().toDouble()); | ||
95 | spinBox->setMaximum(setting->max().toDouble()); | ||
96 | spinBox->setSingleStep(0.01); | ||
97 | spinBox->setValue(setting->current().toDouble()); | ||
98 | connect(spinBox,SIGNAL(valueChanged(double)),this,SLOT(updateSetting())); | ||
99 | value = spinBox; | ||
100 | break; | ||
101 | } | ||
102 | case EncTtsSetting::eINT: | ||
103 | { | ||
104 | QSpinBox *spinBox = new QSpinBox(this); | ||
105 | spinBox->setMinimum(setting->min().toInt()); | ||
106 | spinBox->setMaximum(setting->max().toInt()); | ||
107 | spinBox->setValue(setting->current().toInt()); | ||
108 | connect(spinBox,SIGNAL(valueChanged(int)),this,SLOT(updateSetting())); | ||
109 | value = spinBox; | ||
110 | break; | ||
111 | } | ||
112 | case EncTtsSetting::eSTRING: | ||
113 | { | ||
114 | QLineEdit *lineEdit = new QLineEdit(this); | ||
115 | lineEdit->setText(setting->current().toString()); | ||
116 | connect(lineEdit,SIGNAL(textChanged(QString)),this,SLOT(updateSetting())); | ||
117 | value = lineEdit; | ||
118 | break; | ||
119 | } | ||
120 | case EncTtsSetting::eREADONLYSTRING: | ||
121 | { | ||
122 | value = new QLabel(setting->current().toString(),this); | ||
123 | break; | ||
124 | } | ||
125 | case EncTtsSetting::eSTRINGLIST: | ||
126 | { | ||
127 | QComboBox *comboBox = new QComboBox(this); | ||
128 | comboBox->addItems(setting->list()); | ||
129 | int index = comboBox->findText(setting->current().toString()); | ||
130 | comboBox->setCurrentIndex(index); | ||
131 | connect(comboBox,SIGNAL(currentIndexChanged(QString)),this,SLOT(updateSetting())); | ||
132 | value = comboBox; | ||
133 | break; | ||
134 | } | ||
135 | case EncTtsSetting::eBOOL: | ||
136 | { | ||
137 | QCheckBox *checkbox = new QCheckBox(this); | ||
138 | checkbox->setCheckState(setting->current().toBool() == true ? Qt::Checked : Qt::Unchecked); | ||
139 | connect(checkbox,SIGNAL(stateChanged(int)),this,SLOT(updateSetting())); | ||
140 | value = checkbox; | ||
141 | break; | ||
142 | } | ||
143 | default: | ||
144 | { | ||
145 | qDebug() << "Warning: unknown EncTTsSetting type" << setting->type(); | ||
146 | break; | ||
147 | } | ||
148 | } | ||
149 | |||
150 | // remeber widget | ||
151 | if(value != NULL) | ||
152 | { | ||
153 | m_settingsWidgetsMap.insert(setting,value); | ||
154 | connect(setting,SIGNAL(updateGui()),this,SLOT(updateWidget())); | ||
155 | } | ||
156 | |||
157 | // buttons ? | ||
158 | QWidget* btn = createButton(setting); | ||
159 | |||
160 | // add to layout | ||
161 | QHBoxLayout *hbox = new QHBoxLayout; | ||
162 | if(value != NULL)hbox->addWidget(value); | ||
163 | if(btn != NULL) hbox->addWidget(btn); | ||
164 | |||
165 | return hbox; | ||
166 | |||
167 | } | ||
168 | |||
169 | QWidget* EncTtsCfgGui::createButton(EncTtsSetting* setting) | ||
170 | { | ||
171 | if(setting->button() == EncTtsSetting::eBROWSEBTN) | ||
172 | { | ||
173 | QPushButton* browsebtn = new QPushButton(tr("Browse"),this); | ||
174 | browsebtn->setFixedWidth(50); //all buttons the same size, or it looks ugly | ||
175 | m_browseBtnMap.setMapping(browsebtn,setting); | ||
176 | connect(browsebtn,SIGNAL(clicked()),&m_browseBtnMap,SLOT(map())); | ||
177 | return browsebtn; | ||
178 | } | ||
179 | else if(setting->button() == EncTtsSetting::eREFRESHBTN) | ||
180 | { | ||
181 | QPushButton* refreshbtn = new QPushButton(tr("Refresh"),this); | ||
182 | refreshbtn->setFixedWidth(50); //all buttons the same size, or it looks ugly | ||
183 | connect(refreshbtn,SIGNAL(clicked()),setting,SIGNAL(refresh())); | ||
184 | return refreshbtn; | ||
185 | } | ||
186 | else | ||
187 | return NULL; | ||
188 | } | ||
189 | |||
190 | void EncTtsCfgGui::updateSetting() | ||
191 | { | ||
192 | //cast and get the sender widget | ||
193 | QWidget* widget = qobject_cast<QWidget*>(QObject::sender()); | ||
194 | if(widget == NULL) return; | ||
195 | // get the corresponding setting | ||
196 | EncTtsSetting* setting = m_settingsWidgetsMap.key(widget); | ||
197 | |||
198 | // update widget based on setting type | ||
199 | switch(setting->type()) | ||
200 | { | ||
201 | case EncTtsSetting::eDOUBLE: | ||
202 | { | ||
203 | setting->setCurrent(((QDoubleSpinBox*)widget)->value(),false); | ||
204 | break; | ||
205 | } | ||
206 | case EncTtsSetting::eINT: | ||
207 | { | ||
208 | setting->setCurrent(((QSpinBox*)widget)->value(),false); | ||
209 | break; | ||
210 | } | ||
211 | case EncTtsSetting::eSTRING: | ||
212 | { | ||
213 | setting->setCurrent(((QLineEdit*)widget)->text(),false); | ||
214 | break; | ||
215 | } | ||
216 | case EncTtsSetting::eREADONLYSTRING: | ||
217 | { | ||
218 | setting->setCurrent(((QLabel*)widget)->text(),false); | ||
219 | break; | ||
220 | } | ||
221 | case EncTtsSetting::eSTRINGLIST: | ||
222 | { | ||
223 | setting->setCurrent(((QComboBox*)widget)->currentText(),false); | ||
224 | break; | ||
225 | } | ||
226 | case EncTtsSetting::eBOOL: | ||
227 | { | ||
228 | setting->setCurrent(((QCheckBox*)widget)->isChecked(),false); | ||
229 | } | ||
230 | default: | ||
231 | { | ||
232 | qDebug() << "unknown Settingtype !!"; | ||
233 | break; | ||
234 | } | ||
235 | } | ||
236 | } | ||
237 | |||
238 | void EncTtsCfgGui::updateWidget() | ||
239 | { | ||
240 | // get sender setting | ||
241 | EncTtsSetting* setting = qobject_cast<EncTtsSetting*>(QObject::sender()); | ||
242 | if(setting == NULL) return; | ||
243 | // get corresponding widget | ||
244 | QWidget* widget = m_settingsWidgetsMap.value(setting); | ||
245 | |||
246 | // update Widget based on setting type | ||
247 | switch(setting->type()) | ||
248 | { | ||
249 | case EncTtsSetting::eDOUBLE: | ||
250 | { | ||
251 | QDoubleSpinBox* spinbox = (QDoubleSpinBox*) widget; | ||
252 | spinbox->setMinimum(setting->min().toDouble()); | ||
253 | spinbox->setMaximum(setting->max().toDouble()); | ||
254 | spinbox->blockSignals(true); | ||
255 | spinbox->setValue(setting->current().toDouble()); | ||
256 | spinbox->blockSignals(false); | ||
257 | break; | ||
258 | } | ||
259 | case EncTtsSetting::eINT: | ||
260 | { | ||
261 | QSpinBox* spinbox = (QSpinBox*) widget; | ||
262 | spinbox->setMinimum(setting->min().toInt()); | ||
263 | spinbox->setMaximum(setting->max().toInt()); | ||
264 | spinbox->blockSignals(true); | ||
265 | spinbox->setValue(setting->current().toInt()); | ||
266 | spinbox->blockSignals(false); | ||
267 | break; | ||
268 | } | ||
269 | case EncTtsSetting::eSTRING: | ||
270 | { | ||
271 | QLineEdit* lineedit = (QLineEdit*) widget; | ||
272 | |||
273 | lineedit->blockSignals(true); | ||
274 | lineedit->setText(setting->current().toString()); | ||
275 | lineedit->blockSignals(false); | ||
276 | break; | ||
277 | } | ||
278 | case EncTtsSetting::eREADONLYSTRING: | ||
279 | { | ||
280 | QLabel* label = (QLabel*) widget; | ||
281 | |||
282 | label->blockSignals(true); | ||
283 | label->setText(setting->current().toString()); | ||
284 | label->blockSignals(false); | ||
285 | break; | ||
286 | } | ||
287 | case EncTtsSetting::eSTRINGLIST: | ||
288 | { | ||
289 | QComboBox* combobox = (QComboBox*) widget; | ||
290 | |||
291 | combobox->blockSignals(true); | ||
292 | combobox->clear(); | ||
293 | combobox->addItems(setting->list()); | ||
294 | int index = combobox->findText(setting->current().toString()); | ||
295 | combobox->setCurrentIndex(index); | ||
296 | combobox->blockSignals(false); | ||
297 | |||
298 | break; | ||
299 | } | ||
300 | case EncTtsSetting::eBOOL: | ||
301 | { | ||
302 | QCheckBox* checkbox = (QCheckBox*) widget; | ||
303 | |||
304 | checkbox->blockSignals(true); | ||
305 | checkbox->setCheckState(setting->current().toBool() == true ? Qt::Checked : Qt::Unchecked); | ||
306 | checkbox->blockSignals(false); | ||
307 | break; | ||
308 | } | ||
309 | default: | ||
310 | { | ||
311 | qDebug() << "unknown EncTTsSetting"; | ||
312 | break; | ||
313 | } | ||
314 | } | ||
315 | } | ||
316 | |||
317 | void EncTtsCfgGui::showBusy() | ||
318 | { | ||
319 | if(m_busyCnt == 0) m_busyDlg->show(); | ||
320 | |||
321 | m_busyCnt++; | ||
322 | } | ||
323 | |||
324 | void EncTtsCfgGui::hideBusy() | ||
325 | { | ||
326 | m_busyCnt--; | ||
327 | |||
328 | if(m_busyCnt == 0) m_busyDlg->hide(); | ||
329 | } | ||
330 | |||
331 | |||
332 | void EncTtsCfgGui::accept(void) | ||
333 | { | ||
334 | m_settingInterface->saveSettings(); | ||
335 | this->done(0); | ||
336 | } | ||
337 | |||
338 | void EncTtsCfgGui::reject(void) | ||
339 | { | ||
340 | this->done(0); | ||
341 | } | ||
342 | |||
343 | //! takes a QObject because of QsignalMapper | ||
344 | void EncTtsCfgGui::browse(QObject* settingObj) | ||
345 | { | ||
346 | // cast top setting | ||
347 | EncTtsSetting* setting= qobject_cast<EncTtsSetting*>(settingObj); | ||
348 | if(setting == NULL) return; | ||
349 | |||
350 | //current path | ||
351 | QString curPath = setting->current().toString(); | ||
352 | // show file dialog | ||
353 | QString exe = QFileDialog::getOpenFileName(this, tr("Select excutable"), curPath, "*"); | ||
354 | if(!QFileInfo(exe).isExecutable()) | ||
355 | return; | ||
356 | // set new value, gui will update automatically | ||
357 | setting->setCurrent(exe); | ||
358 | } | ||
359 | |||
360 | |||
361 | |||