summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDominik Wenger <domonoky@googlemail.com>2008-01-29 21:54:43 +0000
committerDominik Wenger <domonoky@googlemail.com>2008-01-29 21:54:43 +0000
commit0c66bdb2b01794448b7676a1b2b5ee5fd8c83371 (patch)
tree847eba2bd686d6639a002d602a102f36207c554e
parent51f937c2e445eaef345d3a9d15782436bb5e5c27 (diff)
downloadrockbox-0c66bdb2b01794448b7676a1b2b5ee5fd8c83371.tar.gz
rockbox-0c66bdb2b01794448b7676a1b2b5ee5fd8c83371.zip
rbutil: fix a bug in the new settings object. Seperate the config gui from tts and encoders. (in preparation for cli interface).
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@16183 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--rbutil/rbutilqt/encoders.cpp133
-rw-r--r--rbutil/rbutilqt/encoders.h15
-rw-r--r--rbutil/rbutilqt/encodersgui.cpp170
-rw-r--r--rbutil/rbutilqt/encodersgui.h77
-rw-r--r--rbutil/rbutilqt/rbsettings.cpp66
-rw-r--r--rbutil/rbutilqt/rbutilqt.pro4
-rw-r--r--rbutil/rbutilqt/tts.cpp159
-rw-r--r--rbutil/rbutilqt/tts.h35
-rw-r--r--rbutil/rbutilqt/ttsgui.cpp193
-rw-r--r--rbutil/rbutilqt/ttsgui.h71
10 files changed, 583 insertions, 340 deletions
diff --git a/rbutil/rbutilqt/encoders.cpp b/rbutil/rbutilqt/encoders.cpp
index 56fcd7c80d..1399ddff75 100644
--- a/rbutil/rbutilqt/encoders.cpp
+++ b/rbutil/rbutilqt/encoders.cpp
@@ -20,6 +20,9 @@
20#include "encoders.h" 20#include "encoders.h"
21#include "browsedirtree.h" 21#include "browsedirtree.h"
22 22
23#ifndef CONSOLE
24#include "encodersgui.h"
25#endif
23 26
24static QMap<QString,QString> encoderList; 27static QMap<QString,QString> encoderList;
25static QMap<QString,EncBase*> encoderCache; 28static QMap<QString,EncBase*> encoderCache;
@@ -92,11 +95,6 @@ EncExes::EncExes(QString name,QWidget *parent) : EncBase(parent)
92 m_name = name; 95 m_name = name;
93 96
94 m_TemplateMap["lame"] = "\"%exe\" %options \"%input\" \"%output\""; 97 m_TemplateMap["lame"] = "\"%exe\" %options \"%input\" \"%output\"";
95
96 ui.setupUi(this);
97 this->hide();
98 connect(ui.reset,SIGNAL(clicked()),this,SLOT(reset()));
99 connect(ui.browse,SIGNAL(clicked()),this,SLOT(browse()));
100} 98}
101 99
102bool EncExes::start() 100bool EncExes::start()
@@ -131,67 +129,13 @@ bool EncExes::encode(QString input,QString output)
131 return true; 129 return true;
132} 130}
133 131
134void EncExes::reset()
135{
136 ui.encoderpath->setText("");
137 ui.encoderoptions->setText("");
138}
139
140void EncExes::showCfg()
141{
142 // try to get config from settings
143 QString exepath =settings->encoderPath(m_name);
144 ui.encoderoptions->setText(settings->encoderOptions(m_name));
145
146 if(exepath == "")
147 {
148
149 // try to autodetect encoder
150#if defined(Q_OS_LINUX) || defined(Q_OS_MACX)
151 QStringList path = QString(getenv("PATH")).split(":", QString::SkipEmptyParts);
152#elif defined(Q_OS_WIN)
153 QStringList path = QString(getenv("PATH")).split(";", QString::SkipEmptyParts);
154#endif
155 qDebug() << path;
156
157 for(int i = 0; i < path.size(); i++)
158 {
159 QString executable = QDir::fromNativeSeparators(path.at(i)) + "/" + m_name;
160#if defined(Q_OS_WIN)
161 executable += ".exe";
162 QStringList ex = executable.split("\"", QString::SkipEmptyParts);
163 executable = ex.join("");
164#endif
165 if(QFileInfo(executable).isExecutable())
166 {
167 qDebug() << "found:" << executable;
168 exepath = QDir::toNativeSeparators(executable);
169 break;
170 }
171 }
172 }
173
174 ui.encoderpath->setText(exepath);
175
176 //show dialog
177 this->exec();
178
179}
180 132
181void EncExes::accept(void)
182{
183 //save settings in user config
184 settings->setEncoderPath(m_name,ui.encoderpath->text());
185 settings->setEncoderOptions(m_name,ui.encoderoptions->text());
186
187 // sync settings
188 settings->sync();
189 this->close();
190}
191 133
192void EncExes::reject(void) 134void EncExes::showCfg()
193{ 135{
194 this->close(); 136 EncExesGui gui;
137 gui.setCfg(settings);
138 gui.showCfg(m_name);
195} 139}
196 140
197bool EncExes::configOk() 141bool EncExes::configOk()
@@ -204,34 +148,14 @@ bool EncExes::configOk()
204 return false; 148 return false;
205} 149}
206 150
207void EncExes::browse()
208{
209 BrowseDirtree browser(this);
210 browser.setFilter(QDir::Dirs | QDir::Files | QDir::NoDotAndDotDot);
211 151
212 if(QFileInfo(ui.encoderpath->text()).isDir())
213 {
214 browser.setDir(ui.encoderpath->text());
215 }
216 if(browser.exec() == QDialog::Accepted)
217 {
218 qDebug() << browser.getSelected();
219 QString exe = browser.getSelected();
220 if(!QFileInfo(exe).isExecutable())
221 return;
222 ui.encoderpath->setText(exe);
223 }
224}
225 152
226/********************************************************************* 153/*********************************************************************
227* RB SPEEX ENCODER 154* RB SPEEX ENCODER
228**********************************************************************/ 155**********************************************************************/
229EncRbSpeex::EncRbSpeex(QWidget *parent) : EncBase(parent) 156EncRbSpeex::EncRbSpeex(QWidget *parent) : EncBase(parent)
230{ 157{
231 ui.setupUi(this); 158
232 this->hide();
233 connect(ui.reset,SIGNAL(clicked()),this,SLOT(reset()));
234
235 defaultQuality = 8.f; 159 defaultQuality = 8.f;
236 defaultVolume = 1.f; 160 defaultVolume = 1.f;
237 defaultComplexity = 10; 161 defaultComplexity = 10;
@@ -282,49 +206,14 @@ bool EncRbSpeex::encode(QString input,QString output)
282 return true; 206 return true;
283} 207}
284 208
285void EncRbSpeex::reset()
286{
287 ui.volume->setValue(defaultVolume);
288 ui.quality->setValue(defaultQuality);
289 ui.complexity->setValue(defaultComplexity);
290 ui.narrowband->setChecked(Qt::Unchecked);
291}
292 209
293void EncRbSpeex::showCfg() 210void EncRbSpeex::showCfg()
294{ 211{
295 //fill in the usersettings 212 EncRbSpeexGui gui;
296 ui.volume->setValue(settings->encoderVolume("rbspeex")); 213 gui.setCfg(settings);
297 ui.quality->setValue(settings->encoderQuality("rbspeex")); 214 gui.showCfg(defaultQuality,defaultVolume,defaultComplexity,defaultBand);
298 ui.complexity->setValue(settings->encoderComplexity("rbspeex"));
299
300 if(settings->encoderNarrowband("rbspeex"))
301 ui.narrowband->setCheckState(Qt::Checked);
302 else
303 ui.narrowband->setCheckState(Qt::Unchecked);
304
305 //show dialog
306 this->exec();
307}
308
309void EncRbSpeex::accept(void)
310{
311 //save settings in user config
312 settings->setEncoderVolume("rbspeex",ui.volume->value());
313 settings->setEncoderQuality("rbspeex",ui.quality->value());
314 settings->setEncoderComplexity("rbspeex",ui.complexity->value());
315 settings->setEncoderNarrowband("rbspeex",ui.narrowband->isChecked() ? true : false);
316
317 // sync settings
318 settings->sync();
319 this->close();
320} 215}
321 216
322void EncRbSpeex::reject(void)
323{
324 this->close();
325}
326
327
328bool EncRbSpeex::configOk() 217bool EncRbSpeex::configOk()
329{ 218{
330 bool result=true; 219 bool result=true;
diff --git a/rbutil/rbutilqt/encoders.h b/rbutil/rbutilqt/encoders.h
index ab59e52060..7a234a3b6f 100644
--- a/rbutil/rbutilqt/encoders.h
+++ b/rbutil/rbutilqt/encoders.h
@@ -22,8 +22,6 @@
22 22
23#include <QtGui> 23#include <QtGui>
24 24
25#include "ui_rbspeexcfgfrm.h"
26#include "ui_encexescfgfrm.h"
27#include "rbsettings.h" 25#include "rbsettings.h"
28 26
29extern "C" 27extern "C"
@@ -78,14 +76,7 @@ public:
78 virtual void showCfg(); 76 virtual void showCfg();
79 virtual bool configOk(); 77 virtual bool configOk();
80 78
81public slots:
82 virtual void accept(void);
83 virtual void reject(void);
84 virtual void reset(void);
85 void browse(void);
86
87private: 79private:
88 Ui::EncExesCfgFrm ui;
89 QString m_name; 80 QString m_name;
90 QString m_EncExec; 81 QString m_EncExec;
91 QString m_EncOpts; 82 QString m_EncOpts;
@@ -104,13 +95,7 @@ public:
104 virtual void showCfg(); 95 virtual void showCfg();
105 virtual bool configOk(); 96 virtual bool configOk();
106 97
107public slots:
108 virtual void accept(void);
109 virtual void reject(void);
110 virtual void reset(void);
111
112private: 98private:
113 Ui::RbSpeexCfgFrm ui;
114 float quality; 99 float quality;
115 float volume; 100 float volume;
116 int complexity; 101 int complexity;
diff --git a/rbutil/rbutilqt/encodersgui.cpp b/rbutil/rbutilqt/encodersgui.cpp
new file mode 100644
index 0000000000..76d0acf5c8
--- /dev/null
+++ b/rbutil/rbutilqt/encodersgui.cpp
@@ -0,0 +1,170 @@
1/***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 *
9 * Copyright (C) 2007 by Dominik Wenger
10 * $Id: encodersgui.cpp 15212 2007-10-19 21:49:07Z domonoky $
11 *
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.
14 *
15 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
16 * KIND, either express or implied.
17 *
18 ****************************************************************************/
19
20#include "encodersgui.h"
21
22#include "rbsettings.h"
23#include "browsedirtree.h"
24
25EncExesGui::EncExesGui(QDialog* parent) : QDialog(parent)
26{
27 ui.setupUi(this);
28 this->hide();
29 connect(ui.reset,SIGNAL(clicked()),this,SLOT(reset()));
30 connect(ui.browse,SIGNAL(clicked()),this,SLOT(browse()));
31}
32
33void EncExesGui::showCfg(QString name)
34{
35 m_name = name;
36 // try to get config from settings
37 QString exepath =settings->encoderPath(m_name);
38 ui.encoderoptions->setText(settings->encoderOptions(m_name));
39
40 if(exepath == "")
41 {
42
43 // try to autodetect encoder
44#if defined(Q_OS_LINUX) || defined(Q_OS_MACX)
45 QStringList path = QString(getenv("PATH")).split(":", QString::SkipEmptyParts);
46#elif defined(Q_OS_WIN)
47 QStringList path = QString(getenv("PATH")).split(";", QString::SkipEmptyParts);
48#endif
49 qDebug() << path;
50
51 for(int i = 0; i < path.size(); i++)
52 {
53 QString executable = QDir::fromNativeSeparators(path.at(i)) + "/" + m_name;
54#if defined(Q_OS_WIN)
55 executable += ".exe";
56 QStringList ex = executable.split("\"", QString::SkipEmptyParts);
57 executable = ex.join("");
58#endif
59 if(QFileInfo(executable).isExecutable())
60 {
61 qDebug() << "found:" << executable;
62 exepath = QDir::toNativeSeparators(executable);
63 break;
64 }
65 }
66 }
67
68 ui.encoderpath->setText(exepath);
69
70 //show dialog
71 this->exec();
72
73}
74
75void EncExesGui::accept(void)
76{
77 //save settings in user config
78 settings->setEncoderPath(m_name,ui.encoderpath->text());
79 settings->setEncoderOptions(m_name,ui.encoderoptions->text());
80
81 // sync settings
82 settings->sync();
83 this->close();
84}
85
86void EncExesGui::reject(void)
87{
88 this->close();
89}
90
91void EncExesGui::reset()
92{
93 ui.encoderpath->setText("");
94 ui.encoderoptions->setText("");
95}
96
97void EncExesGui::browse()
98{
99 BrowseDirtree browser(this);
100 browser.setFilter(QDir::Dirs | QDir::Files | QDir::NoDotAndDotDot);
101
102 if(QFileInfo(ui.encoderpath->text()).isDir())
103 {
104 browser.setDir(ui.encoderpath->text());
105 }
106 if(browser.exec() == QDialog::Accepted)
107 {
108 qDebug() << browser.getSelected();
109 QString exe = browser.getSelected();
110 if(!QFileInfo(exe).isExecutable())
111 return;
112 ui.encoderpath->setText(exe);
113 }
114}
115
116
117EncRbSpeexGui::EncRbSpeexGui(QDialog* parent) : QDialog(parent)
118{
119 ui.setupUi(this);
120 this->hide();
121 connect(ui.reset,SIGNAL(clicked()),this,SLOT(reset()));
122
123}
124
125void EncRbSpeexGui::showCfg(float defQ,float defV,float defC, bool defB)
126{
127 defaultQuality =defQ;
128 defaultVolume = defV;
129 defaultComplexity = defC;
130 defaultBand =defB;
131
132 //fill in the usersettings
133 ui.volume->setValue(settings->encoderVolume("rbspeex"));
134 ui.quality->setValue(settings->encoderQuality("rbspeex"));
135 ui.complexity->setValue(settings->encoderComplexity("rbspeex"));
136
137 if(settings->encoderNarrowband("rbspeex"))
138 ui.narrowband->setCheckState(Qt::Checked);
139 else
140 ui.narrowband->setCheckState(Qt::Unchecked);
141
142 //show dialog
143 this->exec();
144}
145
146void EncRbSpeexGui::accept(void)
147{
148 //save settings in user config
149 settings->setEncoderVolume("rbspeex",ui.volume->value());
150 settings->setEncoderQuality("rbspeex",ui.quality->value());
151 settings->setEncoderComplexity("rbspeex",ui.complexity->value());
152 settings->setEncoderNarrowband("rbspeex",ui.narrowband->isChecked() ? true : false);
153
154 // sync settings
155 settings->sync();
156 this->close();
157}
158
159void EncRbSpeexGui::reject(void)
160{
161 this->close();
162}
163
164void EncRbSpeexGui::reset()
165{
166 ui.volume->setValue(defaultVolume);
167 ui.quality->setValue(defaultQuality);
168 ui.complexity->setValue(defaultComplexity);
169 ui.narrowband->setChecked(Qt::Unchecked);
170}
diff --git a/rbutil/rbutilqt/encodersgui.h b/rbutil/rbutilqt/encodersgui.h
new file mode 100644
index 0000000000..f889823ac8
--- /dev/null
+++ b/rbutil/rbutilqt/encodersgui.h
@@ -0,0 +1,77 @@
1/***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 *
9 * Copyright (C) 2007 by Dominik Wenger
10 * $Id: encodersgui.h 15212 2007-10-19 21:49:07Z domonoky $
11 *
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.
14 *
15 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
16 * KIND, either express or implied.
17 *
18 ****************************************************************************/
19
20#ifndef ENCODERSGUI_H
21#define ENCODERSGUI_H
22
23#include <QtGui>
24
25class RbSettings;
26
27#include "ui_rbspeexcfgfrm.h"
28#include "ui_encexescfgfrm.h"
29
30
31class EncExesGui : public QDialog
32{
33 Q_OBJECT
34public:
35 EncExesGui(QDialog* parent = NULL);
36
37 void showCfg(QString m_name);
38 void setCfg(RbSettings* sett){settings = sett;}
39
40public slots:
41 virtual void accept(void);
42 virtual void reject(void);
43 virtual void reset(void);
44 void browse(void);
45
46private:
47 Ui::EncExesCfgFrm ui;
48 RbSettings* settings;
49 QString m_name;
50};
51
52class EncRbSpeexGui : public QDialog
53{
54 Q_OBJECT
55public:
56 EncRbSpeexGui(QDialog* parent = NULL);
57
58 void showCfg(float defQ,float defV,float defC, bool defB);
59 void setCfg(RbSettings* sett){settings = sett;}
60
61public slots:
62 virtual void accept(void);
63 virtual void reject(void);
64 virtual void reset(void);
65
66private:
67 Ui::RbSpeexCfgFrm ui;
68 RbSettings* settings;
69 float defaultQuality;
70 float defaultVolume;
71 int defaultComplexity;
72 bool defaultBand;
73};
74
75
76
77#endif
diff --git a/rbutil/rbutilqt/rbsettings.cpp b/rbutil/rbutilqt/rbsettings.cpp
index 736921ce81..2dd19965b9 100644
--- a/rbutil/rbutilqt/rbsettings.cpp
+++ b/rbutil/rbutilqt/rbsettings.cpp
@@ -272,82 +272,82 @@ int RbSettings::wavtrimTh()
272 272
273QString RbSettings::ttsPath(QString tts) 273QString RbSettings::ttsPath(QString tts)
274{ 274{
275 devices->beginGroup(tts); 275 userSettings->beginGroup(tts);
276 QString path = devices->value("ttspath").toString(); 276 QString path = userSettings->value("ttspath").toString();
277 devices->endGroup(); 277 userSettings->endGroup();
278 return path; 278 return path;
279 279
280} 280}
281QString RbSettings::ttsOptions(QString tts) 281QString RbSettings::ttsOptions(QString tts)
282{ 282{
283 devices->beginGroup(tts); 283 userSettings->beginGroup(tts);
284 QString op = devices->value("ttsoptions").toString(); 284 QString op = userSettings->value("ttsoptions").toString();
285 devices->endGroup(); 285 userSettings->endGroup();
286 return op; 286 return op;
287} 287}
288QString RbSettings::ttsVoice(QString tts) 288QString RbSettings::ttsVoice(QString tts)
289{ 289{
290 devices->beginGroup(tts); 290 userSettings->beginGroup(tts);
291 QString op = devices->value("ttsvoice").toString(); 291 QString op = userSettings->value("ttsvoice").toString();
292 devices->endGroup(); 292 userSettings->endGroup();
293 return op; 293 return op;
294} 294}
295int RbSettings::ttsSpeed(QString tts) 295int RbSettings::ttsSpeed(QString tts)
296{ 296{
297 devices->beginGroup(tts); 297 userSettings->beginGroup(tts);
298 int sp = devices->value("ttsspeed",0).toInt(); 298 int sp = userSettings->value("ttsspeed",0).toInt();
299 devices->endGroup(); 299 userSettings->endGroup();
300 return sp; 300 return sp;
301} 301}
302QString RbSettings::ttsLang(QString tts) 302QString RbSettings::ttsLang(QString tts)
303{ 303{
304 devices->beginGroup(tts); 304 userSettings->beginGroup(tts);
305 QString op = devices->value("ttslanguage").toString(); 305 QString op = userSettings->value("ttslanguage").toString();
306 devices->endGroup(); 306 userSettings->endGroup();
307 return op; 307 return op;
308} 308}
309 309
310QString RbSettings::encoderPath(QString enc) 310QString RbSettings::encoderPath(QString enc)
311{ 311{
312 devices->beginGroup(enc); 312 userSettings->beginGroup(enc);
313 QString path = devices->value("encoderpath").toString(); 313 QString path = userSettings->value("encoderpath").toString();
314 devices->endGroup(); 314 userSettings->endGroup();
315 return path; 315 return path;
316} 316}
317QString RbSettings::encoderOptions(QString enc) 317QString RbSettings::encoderOptions(QString enc)
318{ 318{
319 devices->beginGroup(enc); 319 userSettings->beginGroup(enc);
320 QString op = devices->value("encoderpath").toString(); 320 QString op = userSettings->value("encoderpath").toString();
321 devices->endGroup(); 321 userSettings->endGroup();
322 return op; 322 return op;
323} 323}
324 324
325double RbSettings::encoderQuality(QString enc) 325double RbSettings::encoderQuality(QString enc)
326{ 326{
327 devices->beginGroup(enc); 327 userSettings->beginGroup(enc);
328 double q = devices->value("quality",8.f).toDouble(); 328 double q =userSettings->value("quality",8.f).toDouble();
329 devices->endGroup(); 329 userSettings->endGroup();
330 return q; 330 return q;
331} 331}
332int RbSettings::encoderComplexity(QString enc) 332int RbSettings::encoderComplexity(QString enc)
333{ 333{
334 devices->beginGroup(enc); 334 userSettings->beginGroup(enc);
335 int c = devices->value("complexity",1.f).toInt(); 335 int c = userSettings->value("complexity",1.f).toInt();
336 devices->endGroup(); 336 userSettings->endGroup();
337 return c; 337 return c;
338} 338}
339double RbSettings::encoderVolume(QString enc) 339double RbSettings::encoderVolume(QString enc)
340{ 340{
341 devices->beginGroup(enc); 341 userSettings->beginGroup(enc);
342 double v = devices->value("volume",10).toDouble(); 342 double v = userSettings->value("volume",10).toDouble();
343 devices->endGroup(); 343 userSettings->endGroup();
344 return v; 344 return v;
345} 345}
346bool RbSettings::encoderNarrowband(QString enc) 346bool RbSettings::encoderNarrowband(QString enc)
347{ 347{
348 devices->beginGroup(enc); 348 userSettings->beginGroup(enc);
349 bool nb = devices->value("narrowband",false).toBool(); 349 bool nb = userSettings->value("narrowband",false).toBool();
350 devices->endGroup(); 350 userSettings->endGroup();
351 return nb; 351 return nb;
352} 352}
353 353
diff --git a/rbutil/rbutilqt/rbutilqt.pro b/rbutil/rbutilqt/rbutilqt.pro
index 252d116a86..d64edb1086 100644
--- a/rbutil/rbutilqt/rbutilqt.pro
+++ b/rbutil/rbutilqt/rbutilqt.pro
@@ -48,7 +48,9 @@ SOURCES += rbutilqt.cpp \
48 browseof.cpp \ 48 browseof.cpp \
49 preview.cpp \ 49 preview.cpp \
50 encoders.cpp \ 50 encoders.cpp \
51 encodersgui.cpp \
51 tts.cpp \ 52 tts.cpp \
53 ttsgui.cpp \
52 ../../tools/wavtrim.c \ 54 ../../tools/wavtrim.c \
53 ../../tools/voicefont.c \ 55 ../../tools/voicefont.c \
54 voicefile.cpp \ 56 voicefile.cpp \
@@ -91,7 +93,9 @@ HEADERS += rbutilqt.h \
91 browseof.h \ 93 browseof.h \
92 preview.h \ 94 preview.h \
93 encoders.h \ 95 encoders.h \
96 encodersgui.h \
94 tts.h \ 97 tts.h \
98 ttsgui.h \
95 ../../tools/wavtrim.h \ 99 ../../tools/wavtrim.h \
96 ../../tools/voicefont.h \ 100 ../../tools/voicefont.h \
97 voicefile.h \ 101 voicefile.h \
diff --git a/rbutil/rbutilqt/tts.cpp b/rbutil/rbutilqt/tts.cpp
index be2a20a31e..da15497c14 100644
--- a/rbutil/rbutilqt/tts.cpp
+++ b/rbutil/rbutilqt/tts.cpp
@@ -19,7 +19,7 @@
19 19
20#include "tts.h" 20#include "tts.h"
21 21
22#include "browsedirtree.h" 22
23 23
24static QMap<QString,QString> ttsList; 24static QMap<QString,QString> ttsList;
25static QMap<QString,TTSBase*> ttsCache; 25static QMap<QString,TTSBase*> ttsCache;
@@ -82,7 +82,7 @@ QStringList getTTSList()
82/********************************************************************* 82/*********************************************************************
83* TTS Base 83* TTS Base
84**********************************************************************/ 84**********************************************************************/
85TTSBase::TTSBase(QWidget *parent): QDialog(parent) 85TTSBase::TTSBase(): QObject()
86{ 86{
87 87
88} 88}
@@ -90,7 +90,7 @@ TTSBase::TTSBase(QWidget *parent): QDialog(parent)
90/********************************************************************* 90/*********************************************************************
91* General TTS Exes 91* General TTS Exes
92**********************************************************************/ 92**********************************************************************/
93TTSExes::TTSExes(QString name,QWidget *parent) : TTSBase(parent) 93TTSExes::TTSExes(QString name) : TTSBase()
94{ 94{
95 m_name = name; 95 m_name = name;
96 96
@@ -98,10 +98,6 @@ TTSExes::TTSExes(QString name,QWidget *parent) : TTSBase(parent)
98 m_TemplateMap["flite"] = "\"%exe\" \"%options\" -o \"%wavfile\" \"%text\""; 98 m_TemplateMap["flite"] = "\"%exe\" \"%options\" -o \"%wavfile\" \"%text\"";
99 m_TemplateMap["swift"] = "\"%exe\" \"%options\" -o \"%wavfile\" \"%text\""; 99 m_TemplateMap["swift"] = "\"%exe\" \"%options\" -o \"%wavfile\" \"%text\"";
100 100
101 ui.setupUi(this);
102 this->hide();
103 connect(ui.reset,SIGNAL(clicked()),this,SLOT(reset()));
104 connect(ui.browse,SIGNAL(clicked()),this,SLOT(browse()));
105} 101}
106 102
107bool TTSExes::start(QString *errStr) 103bool TTSExes::start(QString *errStr)
@@ -137,68 +133,11 @@ bool TTSExes::voice(QString text,QString wavfile)
137 133
138} 134}
139 135
140
141void TTSExes::reset()
142{
143 ui.ttspath->setText("");
144 ui.ttsoptions->setText("");
145}
146
147void TTSExes::showCfg() 136void TTSExes::showCfg()
148{ 137{
149 // try to get config from settings 138 TTSExesGui gui;
150 QString exepath =settings->ttsPath(m_name); 139 gui.setCfg(settings);
151 ui.ttsoptions->setText(settings->ttsOptions(m_name)); 140 gui.showCfg(m_name);
152
153 if(exepath == "")
154 {
155
156 //try autodetect tts
157#if defined(Q_OS_LINUX) || defined(Q_OS_MACX)
158 QStringList path = QString(getenv("PATH")).split(":", QString::SkipEmptyParts);
159#elif defined(Q_OS_WIN)
160 QStringList path = QString(getenv("PATH")).split(";", QString::SkipEmptyParts);
161#endif
162 qDebug() << path;
163 for(int i = 0; i < path.size(); i++)
164 {
165 QString executable = QDir::fromNativeSeparators(path.at(i)) + "/" + m_name;
166#if defined(Q_OS_WIN)
167 executable += ".exe";
168 QStringList ex = executable.split("\"", QString::SkipEmptyParts);
169 executable = ex.join("");
170#endif
171 qDebug() << executable;
172 if(QFileInfo(executable).isExecutable())
173 {
174 exepath= QDir::toNativeSeparators(executable);
175 break;
176 }
177 }
178
179 }
180
181 ui.ttspath->setText(exepath);
182
183 //show dialog
184 this->exec();
185
186}
187
188void TTSExes::accept(void)
189{
190 //save settings in user config
191 settings->setTTSPath(m_name,ui.ttspath->text());
192 settings->setTTSOptions(m_name,ui.ttsoptions->text());
193 // sync settings
194 settings->sync();
195
196 this->close();
197}
198
199void TTSExes::reject(void)
200{
201 this->close();
202} 141}
203 142
204bool TTSExes::configOk() 143bool TTSExes::configOk()
@@ -211,36 +150,14 @@ bool TTSExes::configOk()
211 return false; 150 return false;
212} 151}
213 152
214void TTSExes::browse()
215{
216 BrowseDirtree browser(this);
217 browser.setFilter(QDir::Dirs | QDir::Files | QDir::NoDotAndDotDot);
218
219 if(QFileInfo(ui.ttspath->text()).isDir())
220 {
221 browser.setDir(ui.ttspath->text());
222 }
223 if(browser.exec() == QDialog::Accepted)
224 {
225 qDebug() << browser.getSelected();
226 QString exe = browser.getSelected();
227 if(!QFileInfo(exe).isExecutable())
228 return;
229 ui.ttspath->setText(exe);
230 }
231}
232
233/********************************************************************* 153/*********************************************************************
234* TTS Sapi 154* TTS Sapi
235**********************************************************************/ 155**********************************************************************/
236TTSSapi::TTSSapi(QWidget *parent) : TTSBase(parent) 156TTSSapi::TTSSapi() : TTSBase()
237{ 157{
238 m_TTSTemplate = "cscript //nologo \"%exe\" /language:%lang /voice:\"%voice\" /speed:%speed \"%options\""; 158 m_TTSTemplate = "cscript //nologo \"%exe\" /language:%lang /voice:\"%voice\" /speed:%speed \"%options\"";
239 defaultLanguage ="english"; 159 defaultLanguage ="english";
240 ui.setupUi(this); 160
241 this->hide();
242 connect(ui.reset,SIGNAL(clicked()),this,SLOT(reset()));
243 connect(ui.languagecombo,SIGNAL(currentIndexChanged(QString)),this,SLOT(updateVoices(QString)));
244} 161}
245 162
246 163
@@ -329,14 +246,7 @@ QStringList TTSSapi::getVoiceList(QString language)
329 return result; 246 return result;
330} 247}
331 248
332void TTSSapi::updateVoices(QString language)
333{
334 QStringList Voices = getVoiceList(language);
335 ui.voicecombo->clear();
336 ui.voicecombo->addItems(Voices);
337
338 249
339}
340 250
341bool TTSSapi::voice(QString text,QString wavfile) 251bool TTSSapi::voice(QString text,QString wavfile)
342{ 252{
@@ -363,58 +273,11 @@ bool TTSSapi::stop()
363} 273}
364 274
365 275
366void TTSSapi::reset()
367{
368 ui.ttsoptions->setText("");
369 ui.languagecombo->setCurrentIndex(ui.languagecombo->findText(defaultLanguage));
370}
371
372void TTSSapi::showCfg() 276void TTSSapi::showCfg()
373{ 277{
374 // try to get config from settings 278 TTSSapiGui gui(this);
375 ui.ttsoptions->setText(settings->ttsOptions("sapi")); 279 gui.setCfg(settings);
376 QString selLang = settings->ttsLang("sapi"); 280 gui.showCfg();
377 QString selVoice = settings->ttsVoice("sapi");
378 ui.speed->setValue(settings->ttsSpeed("sapi"));
379
380
381 // fill in language combobox
382 QStringList languages = settings->allLanguages();
383
384 languages.sort();
385 ui.languagecombo->clear();
386 ui.languagecombo->addItems(languages);
387
388 // set saved lang
389 ui.languagecombo->setCurrentIndex(ui.languagecombo->findText(selLang));
390
391 // fill in voice combobox
392 updateVoices(selLang);
393
394 // set saved lang
395 ui.voicecombo->setCurrentIndex(ui.voicecombo->findText(selVoice));
396
397 //show dialog
398 this->exec();
399
400}
401
402void TTSSapi::accept(void)
403{
404 //save settings in user config
405 settings->setTTSOptions("sapi",ui.ttsoptions->text());
406 settings->setTTSLang("sapi",ui.languagecombo->currentText());
407 settings->setTTSVoice("sapi",ui.voicecombo->currentText());
408 settings->setTTSSpeed("sapi",ui.speed->value());
409 // sync settings
410 settings->sync();
411
412 this->close();
413}
414
415void TTSSapi::reject(void)
416{
417 this->close();
418} 281}
419 282
420bool TTSSapi::configOk() 283bool TTSSapi::configOk()
diff --git a/rbutil/rbutilqt/tts.h b/rbutil/rbutilqt/tts.h
index 90c402d8cc..9c73bfa5e5 100644
--- a/rbutil/rbutilqt/tts.h
+++ b/rbutil/rbutilqt/tts.h
@@ -21,11 +21,13 @@
21#ifndef TTS_H 21#ifndef TTS_H
22#define TTS_H 22#define TTS_H
23 23
24#include "ui_ttsexescfgfrm.h" 24
25#include "ui_sapicfgfrm.h"
26#include "rbsettings.h" 25#include "rbsettings.h"
27#include <QtGui> 26#include <QtGui>
28 27
28#ifndef CONSOLE
29#include "ttsgui.h"
30#endif
29 31
30class TTSBase; 32class TTSBase;
31 33
@@ -37,11 +39,11 @@ TTSBase* getTTS(QString ttsname);
37QStringList getTTSList(); 39QStringList getTTSList();
38 40
39 41
40class TTSBase : public QDialog 42class TTSBase : public QObject
41{ 43{
42 Q_OBJECT 44 Q_OBJECT
43public: 45public:
44 TTSBase(QWidget *parent ); 46 TTSBase();
45 virtual bool voice(QString text,QString wavfile) {return false;} 47 virtual bool voice(QString text,QString wavfile) {return false;}
46 virtual bool start(QString *errStr){return false;} 48 virtual bool start(QString *errStr){return false;}
47 virtual bool stop(){return false;} 49 virtual bool stop(){return false;}
@@ -63,23 +65,16 @@ class TTSSapi : public TTSBase
63{ 65{
64 Q_OBJECT 66 Q_OBJECT
65public: 67public:
66 TTSSapi(QWidget *parent = NULL); 68 TTSSapi();
67 virtual bool voice(QString text,QString wavfile); 69 virtual bool voice(QString text,QString wavfile);
68 virtual bool start(QString *errStr); 70 virtual bool start(QString *errStr);
69 virtual bool stop(); 71 virtual bool stop();
70 virtual void showCfg(); 72 virtual void showCfg();
71 virtual bool configOk(); 73 virtual bool configOk();
72 74
73public slots: 75 QStringList getVoiceList(QString language);
74 virtual void accept(void);
75 virtual void reject(void);
76 virtual void reset(void);
77
78 void updateVoices(QString language);
79private: 76private:
80 QStringList getVoiceList(QString language); 77
81
82 Ui::SapiCfgFrm ui;
83 QProcess* voicescript; 78 QProcess* voicescript;
84 79
85 QString defaultLanguage; 80 QString defaultLanguage;
@@ -97,21 +92,17 @@ class TTSExes : public TTSBase
97{ 92{
98 Q_OBJECT 93 Q_OBJECT
99public: 94public:
100 TTSExes(QString name,QWidget *parent = NULL); 95 TTSExes(QString name);
101 virtual bool voice(QString text,QString wavfile); 96 virtual bool voice(QString text,QString wavfile);
102 virtual bool start(QString *errStr); 97 virtual bool start(QString *errStr);
103 virtual bool stop() {return true;} 98 virtual bool stop() {return true;}
104 virtual void showCfg(); 99 virtual void showCfg();
105 virtual bool configOk(); 100 virtual bool configOk();
106 101
107public slots: 102
108 virtual void accept(void);
109 virtual void reject(void);
110 virtual void reset(void);
111 void browse(void);
112 103
113private: 104private:
114 Ui::TTSExesCfgFrm ui; 105
115 QString m_name; 106 QString m_name;
116 QString m_TTSexec; 107 QString m_TTSexec;
117 QString m_TTSOpts; 108 QString m_TTSOpts;
diff --git a/rbutil/rbutilqt/ttsgui.cpp b/rbutil/rbutilqt/ttsgui.cpp
new file mode 100644
index 0000000000..76488c5411
--- /dev/null
+++ b/rbutil/rbutilqt/ttsgui.cpp
@@ -0,0 +1,193 @@
1/***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 *
9 * Copyright (C) 2007 by Dominik Wenger
10 * $Id: tts.cpp 15212 2007-10-19 21:49:07Z domonoky $
11 *
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.
14 *
15 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
16 * KIND, either express or implied.
17 *
18 ****************************************************************************/
19
20#include "ttsgui.h"
21
22#include "rbsettings.h"
23#include "tts.h"
24#include "browsedirtree.h"
25
26TTSSapiGui::TTSSapiGui(TTSSapi* sapi,QDialog* parent) : QDialog(parent)
27{
28 m_sapi= sapi;
29 ui.setupUi(this);
30 this->hide();
31 connect(ui.reset,SIGNAL(clicked()),this,SLOT(reset()));
32 connect(ui.languagecombo,SIGNAL(currentIndexChanged(QString)),this,SLOT(updateVoices(QString)));
33
34}
35
36void TTSSapiGui::showCfg()
37{
38 // try to get config from settings
39 ui.ttsoptions->setText(settings->ttsOptions("sapi"));
40 QString selLang = settings->ttsLang("sapi");
41 QString selVoice = settings->ttsVoice("sapi");
42 ui.speed->setValue(settings->ttsSpeed("sapi"));
43
44
45 // fill in language combobox
46 QStringList languages = settings->allLanguages();
47
48 languages.sort();
49 ui.languagecombo->clear();
50 ui.languagecombo->addItems(languages);
51
52 // set saved lang
53 ui.languagecombo->setCurrentIndex(ui.languagecombo->findText(selLang));
54
55 // fill in voice combobox
56 updateVoices(selLang);
57
58 // set saved lang
59 ui.voicecombo->setCurrentIndex(ui.voicecombo->findText(selVoice));
60
61 //show dialog
62 this->exec();
63
64}
65
66
67void TTSSapiGui::reset()
68{
69 ui.ttsoptions->setText("");
70 ui.languagecombo->setCurrentIndex(ui.languagecombo->findText("english"));
71}
72
73
74
75void TTSSapiGui::accept(void)
76{
77 //save settings in user config
78 settings->setTTSOptions("sapi",ui.ttsoptions->text());
79 settings->setTTSLang("sapi",ui.languagecombo->currentText());
80 settings->setTTSVoice("sapi",ui.voicecombo->currentText());
81 settings->setTTSSpeed("sapi",ui.speed->value());
82 // sync settings
83 settings->sync();
84
85 this->close();
86}
87
88void TTSSapiGui::reject(void)
89{
90 this->close();
91}
92
93void TTSSapiGui::updateVoices(QString language)
94{
95 QStringList Voices = m_sapi->getVoiceList(language);
96 ui.voicecombo->clear();
97 ui.voicecombo->addItems(Voices);
98
99}
100
101TTSExesGui::TTSExesGui(QDialog* parent) : QDialog(parent)
102{
103 ui.setupUi(this);
104 this->hide();
105 connect(ui.reset,SIGNAL(clicked()),this,SLOT(reset()));
106 connect(ui.browse,SIGNAL(clicked()),this,SLOT(browse()));
107}
108
109
110void TTSExesGui::reset()
111{
112 ui.ttspath->setText("");
113 ui.ttsoptions->setText("");
114}
115
116void TTSExesGui::showCfg(QString name)
117{
118 m_name = name;
119 // try to get config from settings
120 QString exepath =settings->ttsPath(m_name);
121 ui.ttsoptions->setText(settings->ttsOptions(m_name));
122
123 if(exepath == "")
124 {
125
126 //try autodetect tts
127#if defined(Q_OS_LINUX) || defined(Q_OS_MACX)
128 QStringList path = QString(getenv("PATH")).split(":", QString::SkipEmptyParts);
129#elif defined(Q_OS_WIN)
130 QStringList path = QString(getenv("PATH")).split(";", QString::SkipEmptyParts);
131#endif
132 qDebug() << path;
133 for(int i = 0; i < path.size(); i++)
134 {
135 QString executable = QDir::fromNativeSeparators(path.at(i)) + "/" + m_name;
136#if defined(Q_OS_WIN)
137 executable += ".exe";
138 QStringList ex = executable.split("\"", QString::SkipEmptyParts);
139 executable = ex.join("");
140#endif
141 qDebug() << executable;
142 if(QFileInfo(executable).isExecutable())
143 {
144 exepath= QDir::toNativeSeparators(executable);
145 break;
146 }
147 }
148
149 }
150
151 ui.ttspath->setText(exepath);
152
153 //show dialog
154 this->exec();
155
156}
157
158void TTSExesGui::accept(void)
159{
160 //save settings in user config
161 settings->setTTSPath(m_name,ui.ttspath->text());
162 settings->setTTSOptions(m_name,ui.ttsoptions->text());
163 // sync settings
164 settings->sync();
165
166 this->close();
167}
168
169void TTSExesGui::reject(void)
170{
171 this->close();
172}
173
174
175void TTSExesGui::browse()
176{
177 BrowseDirtree browser(this);
178 browser.setFilter(QDir::Dirs | QDir::Files | QDir::NoDotAndDotDot);
179
180 if(QFileInfo(ui.ttspath->text()).isDir())
181 {
182 browser.setDir(ui.ttspath->text());
183 }
184 if(browser.exec() == QDialog::Accepted)
185 {
186 qDebug() << browser.getSelected();
187 QString exe = browser.getSelected();
188 if(!QFileInfo(exe).isExecutable())
189 return;
190 ui.ttspath->setText(exe);
191 }
192}
193
diff --git a/rbutil/rbutilqt/ttsgui.h b/rbutil/rbutilqt/ttsgui.h
new file mode 100644
index 0000000000..427dcd288c
--- /dev/null
+++ b/rbutil/rbutilqt/ttsgui.h
@@ -0,0 +1,71 @@
1/***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 *
9 * Copyright (C) 2007 by Dominik Wenger
10 * $Id: ttsgui.h 15212 2007-10-19 21:49:07Z domonoky $
11 *
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.
14 *
15 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
16 * KIND, either express or implied.
17 *
18 ****************************************************************************/
19
20#ifndef TTSGUI_H
21#define TTSGUI_H
22
23#include <QtGui>
24
25#include "ui_ttsexescfgfrm.h"
26#include "ui_sapicfgfrm.h"
27
28class RbSettings;
29class TTSSapi;
30
31class TTSSapiGui : public QDialog
32{
33 Q_OBJECT
34public:
35 TTSSapiGui(TTSSapi* sapi,QDialog* parent = NULL);
36
37 void showCfg();
38 void setCfg(RbSettings* sett){settings = sett;}
39public slots:
40
41 virtual void accept(void);
42 virtual void reject(void);
43 virtual void reset(void);
44 void updateVoices(QString language);
45private:
46 Ui::SapiCfgFrm ui;
47 RbSettings* settings;
48 TTSSapi* m_sapi;
49};
50
51class TTSExesGui : public QDialog
52{
53 Q_OBJECT
54public:
55 TTSExesGui(QDialog* parent = NULL);
56
57 void showCfg(QString m_name);
58 void setCfg(RbSettings* sett){settings = sett;}
59
60public slots:
61 virtual void accept(void);
62 virtual void reject(void);
63 virtual void reset(void);
64 void browse(void);
65private:
66 Ui::TTSExesCfgFrm ui;
67 RbSettings* settings;
68 QString m_name;
69};
70
71#endif