summaryrefslogtreecommitdiff
path: root/rbutil/rbutilqt/base
diff options
context:
space:
mode:
authorDominik Wenger <domonoky@googlemail.com>2009-05-09 16:59:14 +0000
committerDominik Wenger <domonoky@googlemail.com>2009-05-09 16:59:14 +0000
commit33d9cf091a62cb217987092d03bf110c35444845 (patch)
tree4ee6be3018e0b71c38d4857f86ad17a08668afdd /rbutil/rbutilqt/base
parent8e63df19cbeee2de9470049feae8ae0f9c5a339e (diff)
downloadrockbox-33d9cf091a62cb217987092d03bf110c35444845.tar.gz
rockbox-33d9cf091a62cb217987092d03bf110c35444845.zip
rbutil: make RbSettings a static class. (FS#10183 with improvements)
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@20890 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'rbutil/rbutilqt/base')
-rw-r--r--rbutil/rbutilqt/base/autodetection.cpp7
-rw-r--r--rbutil/rbutilqt/base/autodetection.h4
-rw-r--r--rbutil/rbutilqt/base/detect.cpp9
-rw-r--r--rbutil/rbutilqt/base/detect.h3
-rw-r--r--rbutil/rbutilqt/base/encoders.cpp49
-rw-r--r--rbutil/rbutilqt/base/encoders.h7
-rw-r--r--rbutil/rbutilqt/base/rbsettings.cpp86
-rw-r--r--rbutil/rbutilqt/base/rbsettings.h79
-rw-r--r--rbutil/rbutilqt/base/tts.cpp81
-rw-r--r--rbutil/rbutilqt/base/tts.h7
10 files changed, 177 insertions, 155 deletions
diff --git a/rbutil/rbutilqt/base/autodetection.cpp b/rbutil/rbutilqt/base/autodetection.cpp
index 276c270499..30651077f2 100644
--- a/rbutil/rbutilqt/base/autodetection.cpp
+++ b/rbutil/rbutilqt/base/autodetection.cpp
@@ -19,6 +19,7 @@
19 19
20#include <QtCore> 20#include <QtCore>
21#include "autodetection.h" 21#include "autodetection.h"
22#include "rbsettings.h"
22 23
23#include "../ipodpatcher/ipodpatcher.h" 24#include "../ipodpatcher/ipodpatcher.h"
24#include "../sansapatcher/sansapatcher.h" 25#include "../sansapatcher/sansapatcher.h"
@@ -396,9 +397,9 @@ bool Autodetection::detectUsb()
396 // usbids holds the mapping in the form 397 // usbids holds the mapping in the form
397 // ((VID<<16)|(PID)), targetname 398 // ((VID<<16)|(PID)), targetname
398 // the ini file needs to hold the IDs as hex values. 399 // the ini file needs to hold the IDs as hex values.
399 QMap<int, QString> usbids = settings->usbIdMap(RbSettings::MapDevice); 400 QMap<int, QString> usbids = RbSettings::usbIdMap(RbSettings::MapDevice);
400 QMap<int, QString> usberror = settings->usbIdMap(RbSettings::MapError); 401 QMap<int, QString> usberror = RbSettings::usbIdMap(RbSettings::MapError);
401 QMap<int, QString> usbincompat = settings->usbIdMap(RbSettings::MapIncompatible); 402 QMap<int, QString> usbincompat = RbSettings::usbIdMap(RbSettings::MapIncompatible);
402 403
403 // usb pid detection 404 // usb pid detection
404 QList<uint32_t> attached; 405 QList<uint32_t> attached;
diff --git a/rbutil/rbutilqt/base/autodetection.h b/rbutil/rbutilqt/base/autodetection.h
index cffab5bd4f..c6b33ac313 100644
--- a/rbutil/rbutilqt/base/autodetection.h
+++ b/rbutil/rbutilqt/base/autodetection.h
@@ -24,7 +24,6 @@
24#define AUTODETECTION_H_ 24#define AUTODETECTION_H_
25 25
26#include <QtCore> 26#include <QtCore>
27#include "rbsettings.h"
28 27
29class Autodetection :public QObject 28class Autodetection :public QObject
30{ 29{
@@ -33,8 +32,6 @@ class Autodetection :public QObject
33public: 32public:
34 Autodetection(QObject* parent=0); 33 Autodetection(QObject* parent=0);
35 34
36 void setSettings(RbSettings* sett) {settings = sett;}
37
38 bool detect(); 35 bool detect();
39 36
40 QString getDevice() {return m_device;} 37 QString getDevice() {return m_device;}
@@ -54,7 +51,6 @@ private:
54 QString m_errdev; 51 QString m_errdev;
55 QString m_incompat; 52 QString m_incompat;
56 QList<int> m_usbconid; 53 QList<int> m_usbconid;
57 RbSettings* settings;
58}; 54};
59 55
60 56
diff --git a/rbutil/rbutilqt/base/detect.cpp b/rbutil/rbutilqt/base/detect.cpp
index df1cf50647..88ffb36723 100644
--- a/rbutil/rbutilqt/base/detect.cpp
+++ b/rbutil/rbutilqt/base/detect.cpp
@@ -59,6 +59,7 @@
59#endif 59#endif
60 60
61#include "utils.h" 61#include "utils.h"
62#include "rbsettings.h"
62 63
63/** @brief detect permission of user (only Windows at moment). 64/** @brief detect permission of user (only Windows at moment).
64 * @return enum userlevel. 65 * @return enum userlevel.
@@ -384,7 +385,7 @@ QString Detect::installedTarget(QString mountpoint)
384 * @param targetId the targetID to check for. if it is -1 no check is done. 385 * @param targetId the targetID to check for. if it is -1 no check is done.
385 * @return string with error messages if problems occurred, empty strings if none. 386 * @return string with error messages if problems occurred, empty strings if none.
386 */ 387 */
387QString Detect::check(RbSettings* settings, bool permission) 388QString Detect::check(bool permission)
388{ 389{
389 QString text = ""; 390 QString text = "";
390 391
@@ -401,12 +402,12 @@ QString Detect::check(RbSettings* settings, bool permission)
401 } 402 }
402 403
403 // Check TargetId 404 // Check TargetId
404 QString installed = installedTarget(settings->value(RbSettings::Mountpoint).toString()); 405 QString installed = installedTarget(RbSettings::value(RbSettings::Mountpoint).toString());
405 if(!installed.isEmpty() && installed != settings->value(RbSettings::CurConfigureModel).toString()) 406 if(!installed.isEmpty() && installed != RbSettings::value(RbSettings::CurConfigureModel).toString())
406 { 407 {
407 text += QObject::tr("<li>Target mismatch detected.\n" 408 text += QObject::tr("<li>Target mismatch detected.\n"
408 "Installed target: %1, selected target: %2.</li>") 409 "Installed target: %1, selected target: %2.</li>")
409 .arg(installed, settings->value(RbSettings::CurPlatformName).toString()); 410 .arg(installed, RbSettings::value(RbSettings::CurPlatformName).toString());
410 // FIXME: replace installed by human-friendly name 411 // FIXME: replace installed by human-friendly name
411 } 412 }
412 413
diff --git a/rbutil/rbutilqt/base/detect.h b/rbutil/rbutilqt/base/detect.h
index 3077699a93..96c0696467 100644
--- a/rbutil/rbutilqt/base/detect.h
+++ b/rbutil/rbutilqt/base/detect.h
@@ -27,7 +27,6 @@
27 27
28#include <QString> 28#include <QString>
29#include <QUrl> 29#include <QUrl>
30#include "rbsettings.h"
31 30
32class Detect 31class Detect
33{ 32{
@@ -49,7 +48,7 @@ public:
49 static QString installedVersion(QString mountpoint); 48 static QString installedVersion(QString mountpoint);
50 static QString installedTarget(QString mountpoint); 49 static QString installedTarget(QString mountpoint);
51 50
52 static QString check(RbSettings* settings, bool permission); 51 static QString check(bool permission);
53 52
54}; 53};
55#endif 54#endif
diff --git a/rbutil/rbutilqt/base/encoders.cpp b/rbutil/rbutilqt/base/encoders.cpp
index 6ff1185c82..59add74a0d 100644
--- a/rbutil/rbutilqt/base/encoders.cpp
+++ b/rbutil/rbutilqt/base/encoders.cpp
@@ -19,6 +19,7 @@
19 19
20#include "encoders.h" 20#include "encoders.h"
21#include "utils.h" 21#include "utils.h"
22#include "rbsettings.h"
22 23
23/********************************************************************* 24/*********************************************************************
24* Encoder Base 25* Encoder Base
@@ -87,24 +88,24 @@ EncExes::EncExes(QString name,QObject *parent) : EncBase(parent)
87 88
88void EncExes::generateSettings() 89void EncExes::generateSettings()
89{ 90{
90 QString exepath =settings->subValue(m_name,RbSettings::EncoderPath).toString(); 91 QString exepath =RbSettings::subValue(m_name,RbSettings::EncoderPath).toString();
91 if(exepath == "") exepath = findExecutable(m_name); 92 if(exepath == "") exepath = findExecutable(m_name);
92 93
93 insertSetting(eEXEPATH,new EncTtsSetting(this,EncTtsSetting::eSTRING,"Path to Encoder:",exepath,EncTtsSetting::eBROWSEBTN)); 94 insertSetting(eEXEPATH,new EncTtsSetting(this,EncTtsSetting::eSTRING,"Path to Encoder:",exepath,EncTtsSetting::eBROWSEBTN));
94 insertSetting(eEXEOPTIONS,new EncTtsSetting(this,EncTtsSetting::eSTRING,"Encoder options:",settings->subValue(m_name,RbSettings::EncoderOptions))); 95 insertSetting(eEXEOPTIONS,new EncTtsSetting(this,EncTtsSetting::eSTRING,"Encoder options:",RbSettings::subValue(m_name,RbSettings::EncoderOptions)));
95} 96}
96 97
97void EncExes::saveSettings() 98void EncExes::saveSettings()
98{ 99{
99 settings->setSubValue(m_name,RbSettings::EncoderPath,getSetting(eEXEPATH)->current().toString()); 100 RbSettings::setSubValue(m_name,RbSettings::EncoderPath,getSetting(eEXEPATH)->current().toString());
100 settings->setSubValue(m_name,RbSettings::EncoderOptions,getSetting(eEXEOPTIONS)->current().toString()); 101 RbSettings::setSubValue(m_name,RbSettings::EncoderOptions,getSetting(eEXEOPTIONS)->current().toString());
101 settings->sync(); 102 RbSettings::sync();
102} 103}
103 104
104bool EncExes::start() 105bool EncExes::start()
105{ 106{
106 m_EncExec = settings->subValue(m_name, RbSettings::EncoderPath).toString(); 107 m_EncExec = RbSettings::subValue(m_name, RbSettings::EncoderPath).toString();
107 m_EncOpts = settings->subValue(m_name, RbSettings::EncoderOptions).toString(); 108 m_EncOpts = RbSettings::subValue(m_name, RbSettings::EncoderOptions).toString();
108 109
109 m_EncTemplate = m_TemplateMap.value(m_name); 110 m_EncTemplate = m_TemplateMap.value(m_name);
110 111
@@ -136,7 +137,7 @@ bool EncExes::encode(QString input,QString output)
136 137
137bool EncExes::configOk() 138bool EncExes::configOk()
138{ 139{
139 QString path = settings->subValue(m_name, RbSettings::EncoderPath).toString(); 140 QString path = RbSettings::subValue(m_name, RbSettings::EncoderPath).toString();
140 141
141 if (QFileInfo(path).exists()) 142 if (QFileInfo(path).exists())
142 return true; 143 return true;
@@ -154,31 +155,31 @@ EncRbSpeex::EncRbSpeex(QObject *parent) : EncBase(parent)
154 155
155void EncRbSpeex::generateSettings() 156void EncRbSpeex::generateSettings()
156{ 157{
157 insertSetting(eVOLUME,new EncTtsSetting(this,EncTtsSetting::eDOUBLE,"Volume:",settings->subValue("rbspeex",RbSettings::EncoderVolume),1.0,10.0)); 158 insertSetting(eVOLUME,new EncTtsSetting(this,EncTtsSetting::eDOUBLE,"Volume:",RbSettings::subValue("rbspeex",RbSettings::EncoderVolume),1.0,10.0));
158 insertSetting(eQUALITY,new EncTtsSetting(this,EncTtsSetting::eDOUBLE,"Quality:",settings->subValue("rbspeex",RbSettings::EncoderQuality),0,10.0)); 159 insertSetting(eQUALITY,new EncTtsSetting(this,EncTtsSetting::eDOUBLE,"Quality:",RbSettings::subValue("rbspeex",RbSettings::EncoderQuality),0,10.0));
159 insertSetting(eCOMPLEXITY,new EncTtsSetting(this,EncTtsSetting::eINT,"Complexity:",settings->subValue("rbspeex",RbSettings::EncoderComplexity),0,10)); 160 insertSetting(eCOMPLEXITY,new EncTtsSetting(this,EncTtsSetting::eINT,"Complexity:",RbSettings::subValue("rbspeex",RbSettings::EncoderComplexity),0,10));
160 insertSetting(eNARROWBAND,new EncTtsSetting(this,EncTtsSetting::eBOOL,"Use Narrowband:",settings->subValue("rbspeex",RbSettings::EncoderNarrowBand))); 161 insertSetting(eNARROWBAND,new EncTtsSetting(this,EncTtsSetting::eBOOL,"Use Narrowband:",RbSettings::subValue("rbspeex",RbSettings::EncoderNarrowBand)));
161} 162}
162 163
163void EncRbSpeex::saveSettings() 164void EncRbSpeex::saveSettings()
164{ 165{
165 //save settings in user config 166 //save settings in user config
166 settings->setSubValue("rbspeex",RbSettings::EncoderVolume,getSetting(eVOLUME)->current().toDouble()); 167 RbSettings::setSubValue("rbspeex",RbSettings::EncoderVolume,getSetting(eVOLUME)->current().toDouble());
167 settings->setSubValue("rbspeex",RbSettings::EncoderQuality,getSetting(eQUALITY)->current().toDouble()); 168 RbSettings::setSubValue("rbspeex",RbSettings::EncoderQuality,getSetting(eQUALITY)->current().toDouble());
168 settings->setSubValue("rbspeex",RbSettings::EncoderComplexity,getSetting(eCOMPLEXITY)->current().toInt()); 169 RbSettings::setSubValue("rbspeex",RbSettings::EncoderComplexity,getSetting(eCOMPLEXITY)->current().toInt());
169 settings->setSubValue("rbspeex",RbSettings::EncoderNarrowBand,getSetting(eNARROWBAND)->current().toBool()); 170 RbSettings::setSubValue("rbspeex",RbSettings::EncoderNarrowBand,getSetting(eNARROWBAND)->current().toBool());
170 171
171 settings->sync(); 172 RbSettings::sync();
172} 173}
173 174
174bool EncRbSpeex::start() 175bool EncRbSpeex::start()
175{ 176{
176 177
177 // try to get config from settings 178 // try to get config from settings
178 quality = settings->subValue("rbspeex", RbSettings::EncoderQuality).toDouble(); 179 quality = RbSettings::subValue("rbspeex", RbSettings::EncoderQuality).toDouble();
179 complexity = settings->subValue("rbspeex", RbSettings::EncoderComplexity).toInt(); 180 complexity = RbSettings::subValue("rbspeex", RbSettings::EncoderComplexity).toInt();
180 volume = settings->subValue("rbspeex", RbSettings::EncoderVolume).toDouble(); 181 volume = RbSettings::subValue("rbspeex", RbSettings::EncoderVolume).toDouble();
181 narrowband = settings->subValue("rbspeex", RbSettings::EncoderNarrowBand).toBool(); 182 narrowband = RbSettings::subValue("rbspeex", RbSettings::EncoderNarrowBand).toBool();
182 183
183 184
184 return true; 185 return true;
@@ -219,13 +220,13 @@ bool EncRbSpeex::configOk()
219 bool result=true; 220 bool result=true;
220 // check config 221 // check config
221 222
222 if(settings->subValue("rbspeex", RbSettings::EncoderVolume).toDouble() <= 0) 223 if(RbSettings::subValue("rbspeex", RbSettings::EncoderVolume).toDouble() <= 0)
223 result =false; 224 result =false;
224 225
225 if(settings->subValue("rbspeex", RbSettings::EncoderQuality).toDouble() <= 0) 226 if(RbSettings::subValue("rbspeex", RbSettings::EncoderQuality).toDouble() <= 0)
226 result =false; 227 result =false;
227 228
228 if(settings->subValue("rbspeex", RbSettings::EncoderComplexity).toInt() <= 0) 229 if(RbSettings::subValue("rbspeex", RbSettings::EncoderComplexity).toInt() <= 0)
229 result =false; 230 result =false;
230 231
231 return result; 232 return result;
diff --git a/rbutil/rbutilqt/base/encoders.h b/rbutil/rbutilqt/base/encoders.h
index d5d1723a46..a70f775e98 100644
--- a/rbutil/rbutilqt/base/encoders.h
+++ b/rbutil/rbutilqt/base/encoders.h
@@ -24,7 +24,6 @@
24 24
25#include <QtCore> 25#include <QtCore>
26 26
27#include "rbsettings.h"
28#include "encttssettings.h" 27#include "encttssettings.h"
29#include "rbspeex.h" 28#include "rbspeex.h"
30 29
@@ -54,15 +53,11 @@ class EncBase : public EncTtsSettingInterface
54 static QString getEncoderName(QString name); 53 static QString getEncoderName(QString name);
55 static EncBase* getEncoder(QObject* parent,QString name); 54 static EncBase* getEncoder(QObject* parent,QString name);
56 static QStringList getEncoderList(void); 55 static QStringList getEncoderList(void);
57 56
58 //set the config. users of Encoder classes, always have to call this first
59 void setCfg(RbSettings *sett){settings = sett;}
60 private: 57 private:
61 static void initEncodernamesList(void); 58 static void initEncodernamesList(void);
62 59
63 protected: 60 protected:
64 RbSettings* settings;
65
66 static QMap<QString,QString> encoderList; 61 static QMap<QString,QString> encoderList;
67}; 62};
68 63
diff --git a/rbutil/rbutilqt/base/rbsettings.cpp b/rbutil/rbutilqt/base/rbsettings.cpp
index 12654cd288..8e2e7c26d2 100644
--- a/rbutil/rbutilqt/base/rbsettings.cpp
+++ b/rbutil/rbutilqt/base/rbsettings.cpp
@@ -25,6 +25,7 @@
25#include <unistd.h> 25#include <unistd.h>
26#endif 26#endif
27 27
28
28// device settings 29// device settings
29const static struct { 30const static struct {
30 RbSettings::SystemSettings setting; 31 RbSettings::SystemSettings setting;
@@ -94,31 +95,45 @@ const static struct {
94 { RbSettings::EncoderVolume, ":encoder:/volume", "1.0" }, 95 { RbSettings::EncoderVolume, ":encoder:/volume", "1.0" },
95}; 96};
96 97
97void RbSettings::open() 98//! pointer to setting object to NULL
99QSettings* RbSettings::systemSettings = NULL;
100QSettings* RbSettings::userSettings = NULL;
101
102void RbSettings::ensureRbSettingsExists()
98{ 103{
99 // only use built-in rbutil.ini 104 //check and create settings object
100 systemSettings = new QSettings(":/ini/rbutil.ini", QSettings::IniFormat, 0); 105 if(systemSettings == NULL)
101 // portable installation:
102 // check for a configuration file in the program folder.
103 QFileInfo config;
104 config.setFile(QCoreApplication::instance()->applicationDirPath()
105 + "/RockboxUtility.ini");
106 if(config.isFile())
107 { 106 {
108 userSettings = new QSettings(QCoreApplication::instance()->applicationDirPath() 107 // only use built-in rbutil.ini
109 + "/RockboxUtility.ini", QSettings::IniFormat, this); 108 systemSettings = new QSettings(":/ini/rbutil.ini", QSettings::IniFormat, 0);
110 qDebug() << "config: portable";
111 } 109 }
112 else 110
111 if(userSettings == NULL)
113 { 112 {
114 userSettings = new QSettings(QSettings::IniFormat, 113 // portable installation:
115 QSettings::UserScope, "rockbox.org", "RockboxUtility",this); 114 // check for a configuration file in the program folder.
116 qDebug() << "config: system"; 115 QFileInfo config;
116 config.setFile(QCoreApplication::instance()->applicationDirPath()
117 + "/RockboxUtility.ini");
118 if(config.isFile())
119 {
120 userSettings = new QSettings(QCoreApplication::instance()->applicationDirPath()
121 + "/RockboxUtility.ini", QSettings::IniFormat, NULL);
122 qDebug() << "config: portable";
123 }
124 else
125 {
126 userSettings = new QSettings(QSettings::IniFormat,
127 QSettings::UserScope, "rockbox.org", "RockboxUtility",NULL);
128 qDebug() << "config: system";
129 }
117 } 130 }
118} 131}
119 132
120void RbSettings::sync() 133void RbSettings::sync()
121{ 134{
135 ensureRbSettingsExists();
136
122 userSettings->sync(); 137 userSettings->sync();
123#if defined(Q_OS_LINUX) 138#if defined(Q_OS_LINUX)
124 // when using sudo it runs rbutil with uid 0 but unfortunately without a 139 // when using sudo it runs rbutil with uid 0 but unfortunately without a
@@ -143,9 +158,16 @@ void RbSettings::sync()
143#endif 158#endif
144} 159}
145 160
161QString RbSettings::userSettingFilename()
162{
163 ensureRbSettingsExists();
164 return userSettings->fileName();
165}
146 166
147QVariant RbSettings::value(enum SystemSettings setting) 167QVariant RbSettings::value(enum SystemSettings setting)
148{ 168{
169 ensureRbSettingsExists();
170
149 // locate setting item 171 // locate setting item
150 int i = 0; 172 int i = 0;
151 while(SystemSettingsList[i].setting != setting) 173 while(SystemSettingsList[i].setting != setting)
@@ -158,15 +180,16 @@ QVariant RbSettings::value(enum SystemSettings setting)
158 return systemSettings->value(s, d); 180 return systemSettings->value(s, d);
159} 181}
160 182
161 183QVariant RbSettings::value(enum UserSettings setting)
162QString RbSettings::userSettingFilename() 184{
163{ 185 QString empty;
164 return userSettings->fileName(); 186 return subValue(empty, setting);
165} 187}
166 188
167 189QVariant RbSettings::subValue(QString sub, enum UserSettings setting)
168QVariant RbSettings::subValue(QString& sub, enum UserSettings setting)
169{ 190{
191 ensureRbSettingsExists();
192
170 // locate setting item 193 // locate setting item
171 int i = 0; 194 int i = 0;
172 while(UserSettingsList[i].setting != setting) 195 while(UserSettingsList[i].setting != setting)
@@ -177,9 +200,16 @@ QVariant RbSettings::subValue(QString& sub, enum UserSettings setting)
177 return userSettings->value(s, UserSettingsList[i].def); 200 return userSettings->value(s, UserSettingsList[i].def);
178} 201}
179 202
203void RbSettings::setValue(enum UserSettings setting , QVariant value)
204{
205 QString empty;
206 return setSubValue(empty, setting, value);
207}
180 208
181void RbSettings::setSubValue(QString& sub, enum UserSettings setting, QVariant value) 209void RbSettings::setSubValue(QString sub, enum UserSettings setting, QVariant value)
182{ 210{
211 ensureRbSettingsExists();
212
183 // locate setting item 213 // locate setting item
184 int i = 0; 214 int i = 0;
185 while(UserSettingsList[i].setting != setting) 215 while(UserSettingsList[i].setting != setting)
@@ -190,10 +220,10 @@ void RbSettings::setSubValue(QString& sub, enum UserSettings setting, QVariant v
190 userSettings->setValue(s, value); 220 userSettings->setValue(s, value);
191} 221}
192 222
193
194
195QStringList RbSettings::platforms() 223QStringList RbSettings::platforms()
196{ 224{
225 ensureRbSettingsExists();
226
197 QStringList result; 227 QStringList result;
198 systemSettings->beginGroup("platforms"); 228 systemSettings->beginGroup("platforms");
199 QStringList a = systemSettings->childKeys(); 229 QStringList a = systemSettings->childKeys();
@@ -207,6 +237,8 @@ QStringList RbSettings::platforms()
207 237
208QStringList RbSettings::languages() 238QStringList RbSettings::languages()
209{ 239{
240 ensureRbSettingsExists();
241
210 QStringList result; 242 QStringList result;
211 systemSettings->beginGroup("languages"); 243 systemSettings->beginGroup("languages");
212 QStringList a = systemSettings->childKeys(); 244 QStringList a = systemSettings->childKeys();
@@ -220,16 +252,20 @@ QStringList RbSettings::languages()
220 252
221QString RbSettings::name(QString platform) 253QString RbSettings::name(QString platform)
222{ 254{
255 ensureRbSettingsExists();
223 return systemSettings->value(platform + "/name").toString(); 256 return systemSettings->value(platform + "/name").toString();
224} 257}
225 258
226QString RbSettings::brand(QString platform) 259QString RbSettings::brand(QString platform)
227{ 260{
261 ensureRbSettingsExists();
228 return systemSettings->value(platform + "/brand").toString(); 262 return systemSettings->value(platform + "/brand").toString();
229} 263}
230 264
231QMap<int, QString> RbSettings::usbIdMap(enum MapType type) 265QMap<int, QString> RbSettings::usbIdMap(enum MapType type)
232{ 266{
267 ensureRbSettingsExists();
268
233 QMap<int, QString> map; 269 QMap<int, QString> map;
234 // get a list of ID -> target name 270 // get a list of ID -> target name
235 QStringList platforms; 271 QStringList platforms;
diff --git a/rbutil/rbutilqt/base/rbsettings.h b/rbutil/rbutilqt/base/rbsettings.h
index 341577abc8..4f2a5c3617 100644
--- a/rbutil/rbutilqt/base/rbsettings.h
+++ b/rbutil/rbutilqt/base/rbsettings.h
@@ -29,23 +29,15 @@ class QSettings;
29class RbSettings : public QObject 29class RbSettings : public QObject
30{ 30{
31 Q_OBJECT 31 Q_OBJECT
32
33 public: 32 public:
34 RbSettings() {} 33 //! Type of requested usb-id map
35
36 //! open the settings files
37 void open();
38 //! call this to flush the user Settings
39 void sync();
40
41 // returns the filename of the usersettings file
42 QString userSettingFilename();
43
44 enum MapType { 34 enum MapType {
45 MapDevice, 35 MapDevice,
46 MapError, 36 MapError,
47 MapIncompatible, 37 MapIncompatible,
48 }; 38 };
39
40 //! All user settings
49 enum UserSettings { 41 enum UserSettings {
50 RbutilVersion, 42 RbutilVersion,
51 CurrentPlatform, 43 CurrentPlatform,
@@ -76,6 +68,8 @@ class RbSettings : public QObject
76 EncoderQuality, 68 EncoderQuality,
77 EncoderVolume, 69 EncoderVolume,
78 }; 70 };
71
72 //! All system settings
79 enum SystemSettings { 73 enum SystemSettings {
80 ManualUrl, 74 ManualUrl,
81 BleedingUrl, 75 BleedingUrl,
@@ -103,40 +97,43 @@ class RbSettings : public QObject
103 CurConfigureModel, 97 CurConfigureModel,
104 CurTargetId, 98 CurTargetId,
105 }; 99 };
106 100
107 QVariant value(enum SystemSettings setting); 101 //! call this to flush the user Settings
108 // generic and "current selection" values -- getters 102 static void sync();
109 QVariant value(enum UserSettings setting) 103 //! returns the filename of the usersettings file
110 { QString empty; return subValue(empty, setting); } 104 static QString userSettingFilename();
111 void setValue(enum UserSettings setting , QVariant value) 105 //! return a list of all platforms (rbutil internal names)
112 { QString empty; return setSubValue(empty, setting, value); } 106 static QStringList platforms(void);
113 107 //! returns a list of all languages
114 QVariant subValue(QString& sub, enum UserSettings setting); 108 static QStringList languages(void);
115 QVariant subValue(const char* sub, enum UserSettings setting) 109 //! maps a platform to its name
116 { QString s = sub; return subValue(s, setting); } 110 static QString name(QString plattform);
117 void setSubValue(QString& sub, enum UserSettings setting, QVariant value); 111 //! maps a platform to its brand
118 void setSubValue(const char* sub, enum UserSettings setting, QVariant value) 112 static QString brand(QString plattform);
119 { QString s = sub; return setSubValue(s, setting, value); } 113 //! returns a map of usb-ids and their targets
120 114 static QMap<int, QString> usbIdMap(enum MapType);
121 QStringList platforms(void); 115 //! get a value from system settings
122 QStringList languages(void); 116 static QVariant value(enum SystemSettings setting);
123 117 //! get a vaulue from user settings
124 QString name(QString plattform); 118 static QVariant value(enum UserSettings setting);
125 QString brand(QString plattform); 119 //! set a user setting value
126 120 static void setValue(enum UserSettings setting , QVariant value);
127 QMap<int, QString> usbIdMap(enum MapType); 121 //! get a user setting from a subvalue (ie for encoders and tts engines)
122 static QVariant subValue(QString sub, enum UserSettings setting);
123 //! set a user setting from a subvalue (ie for encoders and tts engines)
124 static void setSubValue(QString sub, enum UserSettings setting, QVariant value);
128 125
129 private: 126 private:
130 //! private copy constructors to prvent copying 127 //! you shouldnt call this, its a fully static calls
131 RbSettings& operator= (const RbSettings& other) 128 RbSettings() {}
132 { (void)other; return *this; } 129 //! create the setting objects if neccessary
133 RbSettings(const RbSettings& other) :QObject() 130 static void ensureRbSettingsExists();
134 { (void)other; } 131 //! create a settings path, substitute platform, tts and encoder
135 QString constructSettingPath(QString path, QString substitute = QString()); 132 static QString constructSettingPath(QString path, QString substitute = QString());
136 133
137 //! pointers to our setting objects 134 //! pointers to our setting objects
138 QSettings *systemSettings; 135 static QSettings *systemSettings;
139 QSettings *userSettings; 136 static QSettings *userSettings;
140}; 137};
141 138
142#endif 139#endif
diff --git a/rbutil/rbutilqt/base/tts.cpp b/rbutil/rbutilqt/base/tts.cpp
index d55ba9e739..70332f5f38 100644
--- a/rbutil/rbutilqt/base/tts.cpp
+++ b/rbutil/rbutilqt/base/tts.cpp
@@ -19,6 +19,7 @@
19 19
20#include "tts.h" 20#include "tts.h"
21#include "utils.h" 21#include "utils.h"
22#include "rbsettings.h"
22/********************************************************************* 23/*********************************************************************
23* TTS Base 24* TTS Base
24**********************************************************************/ 25**********************************************************************/
@@ -105,24 +106,24 @@ TTSExes::TTSExes(QString name,QObject* parent) : TTSBase(parent)
105 106
106void TTSExes::generateSettings() 107void TTSExes::generateSettings()
107{ 108{
108 QString exepath =settings->subValue(m_name,RbSettings::TtsPath).toString(); 109 QString exepath =RbSettings::subValue(m_name,RbSettings::TtsPath).toString();
109 if(exepath == "") exepath = findExecutable(m_name); 110 if(exepath == "") exepath = findExecutable(m_name);
110 111
111 insertSetting(eEXEPATH,new EncTtsSetting(this,EncTtsSetting::eSTRING,"Path to TTS engine:",exepath,EncTtsSetting::eBROWSEBTN)); 112 insertSetting(eEXEPATH,new EncTtsSetting(this,EncTtsSetting::eSTRING,"Path to TTS engine:",exepath,EncTtsSetting::eBROWSEBTN));
112 insertSetting(eOPTIONS,new EncTtsSetting(this,EncTtsSetting::eSTRING,"TTS enginge options:",settings->subValue(m_name,RbSettings::TtsOptions))); 113 insertSetting(eOPTIONS,new EncTtsSetting(this,EncTtsSetting::eSTRING,"TTS enginge options:",RbSettings::subValue(m_name,RbSettings::TtsOptions)));
113} 114}
114 115
115void TTSExes::saveSettings() 116void TTSExes::saveSettings()
116{ 117{
117 settings->setSubValue(m_name,RbSettings::TtsPath,getSetting(eEXEPATH)->current().toString()); 118 RbSettings::setSubValue(m_name,RbSettings::TtsPath,getSetting(eEXEPATH)->current().toString());
118 settings->setSubValue(m_name,RbSettings::TtsOptions,getSetting(eOPTIONS)->current().toString()); 119 RbSettings::setSubValue(m_name,RbSettings::TtsOptions,getSetting(eOPTIONS)->current().toString());
119 settings->sync(); 120 RbSettings::sync();
120} 121}
121 122
122bool TTSExes::start(QString *errStr) 123bool TTSExes::start(QString *errStr)
123{ 124{
124 m_TTSexec = settings->subValue(m_name,RbSettings::TtsPath).toString(); 125 m_TTSexec = RbSettings::subValue(m_name,RbSettings::TtsPath).toString();
125 m_TTSOpts = settings->subValue(m_name,RbSettings::TtsOptions).toString(); 126 m_TTSOpts = RbSettings::subValue(m_name,RbSettings::TtsOptions).toString();
126 127
127 m_TTSTemplate = m_TemplateMap.value(m_name); 128 m_TTSTemplate = m_TemplateMap.value(m_name);
128 129
@@ -155,7 +156,7 @@ TTSStatus TTSExes::voice(QString text,QString wavfile, QString *errStr)
155 156
156bool TTSExes::configOk() 157bool TTSExes::configOk()
157{ 158{
158 QString path = settings->subValue(m_name,RbSettings::TtsPath).toString(); 159 QString path = RbSettings::subValue(m_name,RbSettings::TtsPath).toString();
159 160
160 if (QFileInfo(path).exists()) 161 if (QFileInfo(path).exists())
161 return true; 162 return true;
@@ -176,31 +177,31 @@ TTSSapi::TTSSapi(QObject* parent) : TTSBase(parent)
176void TTSSapi::generateSettings() 177void TTSSapi::generateSettings()
177{ 178{
178 // language 179 // language
179 QStringList languages = settings->languages(); 180 QStringList languages = RbSettings::languages();
180 languages.sort(); 181 languages.sort();
181 EncTtsSetting* setting =new EncTtsSetting(this,EncTtsSetting::eSTRINGLIST,"Language:",settings->subValue("sapi",RbSettings::TtsLanguage),languages); 182 EncTtsSetting* setting =new EncTtsSetting(this,EncTtsSetting::eSTRINGLIST,"Language:",RbSettings::subValue("sapi",RbSettings::TtsLanguage),languages);
182 connect(setting,SIGNAL(dataChanged()),this,SLOT(updateVoiceList())); 183 connect(setting,SIGNAL(dataChanged()),this,SLOT(updateVoiceList()));
183 insertSetting(eLANGUAGE,setting); 184 insertSetting(eLANGUAGE,setting);
184 // voice 185 // voice
185 setting = new EncTtsSetting(this,EncTtsSetting::eSTRINGLIST,"Voice:",settings->subValue("sapi",RbSettings::TtsVoice),getVoiceList(settings->subValue("sapi",RbSettings::TtsLanguage).toString()),EncTtsSetting::eREFRESHBTN); 186 setting = new EncTtsSetting(this,EncTtsSetting::eSTRINGLIST,"Voice:",RbSettings::subValue("sapi",RbSettings::TtsVoice),getVoiceList(RbSettings::subValue("sapi",RbSettings::TtsLanguage).toString()),EncTtsSetting::eREFRESHBTN);
186 connect(setting,SIGNAL(refresh()),this,SLOT(updateVoiceList())); 187 connect(setting,SIGNAL(refresh()),this,SLOT(updateVoiceList()));
187 insertSetting(eVOICE,setting); 188 insertSetting(eVOICE,setting);
188 //speed 189 //speed
189 insertSetting(eSPEED,new EncTtsSetting(this,EncTtsSetting::eINT,"Speed:",settings->subValue("sapi",RbSettings::TtsSpeed),-10,10)); 190 insertSetting(eSPEED,new EncTtsSetting(this,EncTtsSetting::eINT,"Speed:",RbSettings::subValue("sapi",RbSettings::TtsSpeed),-10,10));
190 // options 191 // options
191 insertSetting(eOPTIONS,new EncTtsSetting(this,EncTtsSetting::eSTRING,"Options:",settings->subValue("sapi",RbSettings::TtsOptions))); 192 insertSetting(eOPTIONS,new EncTtsSetting(this,EncTtsSetting::eSTRING,"Options:",RbSettings::subValue("sapi",RbSettings::TtsOptions)));
192 193
193} 194}
194 195
195void TTSSapi::saveSettings() 196void TTSSapi::saveSettings()
196{ 197{
197 //save settings in user config 198 //save settings in user config
198 settings->setSubValue("sapi",RbSettings::TtsLanguage,getSetting(eLANGUAGE)->current().toString()); 199 RbSettings::setSubValue("sapi",RbSettings::TtsLanguage,getSetting(eLANGUAGE)->current().toString());
199 settings->setSubValue("sapi",RbSettings::TtsVoice,getSetting(eVOICE)->current().toString()); 200 RbSettings::setSubValue("sapi",RbSettings::TtsVoice,getSetting(eVOICE)->current().toString());
200 settings->setSubValue("sapi",RbSettings::TtsSpeed,getSetting(eSPEED)->current().toInt()); 201 RbSettings::setSubValue("sapi",RbSettings::TtsSpeed,getSetting(eSPEED)->current().toInt());
201 settings->setSubValue("sapi",RbSettings::TtsOptions,getSetting(eOPTIONS)->current().toString()); 202 RbSettings::setSubValue("sapi",RbSettings::TtsOptions,getSetting(eOPTIONS)->current().toString());
202 203
203 settings->sync(); 204 RbSettings::sync();
204} 205}
205 206
206void TTSSapi::updateVoiceList() 207void TTSSapi::updateVoiceList()
@@ -215,11 +216,11 @@ void TTSSapi::updateVoiceList()
215bool TTSSapi::start(QString *errStr) 216bool TTSSapi::start(QString *errStr)
216{ 217{
217 218
218 m_TTSOpts = settings->subValue("sapi",RbSettings::TtsOptions).toString(); 219 m_TTSOpts = RbSettings::subValue("sapi",RbSettings::TtsOptions).toString();
219 m_TTSLanguage =settings->subValue("sapi",RbSettings::TtsLanguage).toString(); 220 m_TTSLanguage =RbSettings::subValue("sapi",RbSettings::TtsLanguage).toString();
220 m_TTSVoice=settings->subValue("sapi",RbSettings::TtsVoice).toString(); 221 m_TTSVoice=RbSettings::subValue("sapi",RbSettings::TtsVoice).toString();
221 m_TTSSpeed=settings->subValue("sapi",RbSettings::TtsSpeed).toString(); 222 m_TTSSpeed=RbSettings::subValue("sapi",RbSettings::TtsSpeed).toString();
222 m_sapi4 = settings->subValue("sapi",RbSettings::TtsUseSapi4).toBool(); 223 m_sapi4 = RbSettings::subValue("sapi",RbSettings::TtsUseSapi4).toBool();
223 224
224 QFile::remove(QDir::tempPath() +"/sapi_voice.vbs"); 225 QFile::remove(QDir::tempPath() +"/sapi_voice.vbs");
225 QFile::copy(":/builtin/sapi_voice.vbs",QDir::tempPath() + "/sapi_voice.vbs"); 226 QFile::copy(":/builtin/sapi_voice.vbs",QDir::tempPath() + "/sapi_voice.vbs");
@@ -283,7 +284,7 @@ QStringList TTSSapi::getVoiceList(QString language)
283 execstring.replace("%exe",m_TTSexec); 284 execstring.replace("%exe",m_TTSexec);
284 execstring.replace("%lang",language); 285 execstring.replace("%lang",language);
285 286
286 if(settings->value(RbSettings::TtsUseSapi4).toBool()) 287 if(RbSettings::value(RbSettings::TtsUseSapi4).toBool())
287 execstring.append(" /sapi4 "); 288 execstring.append(" /sapi4 ");
288 289
289 qDebug() << "init" << execstring; 290 qDebug() << "init" << execstring;
@@ -348,7 +349,7 @@ bool TTSSapi::stop()
348 349
349bool TTSSapi::configOk() 350bool TTSSapi::configOk()
350{ 351{
351 if(settings->subValue("sapi",RbSettings::TtsVoice).toString().isEmpty()) 352 if(RbSettings::subValue("sapi",RbSettings::TtsVoice).toString().isEmpty())
352 return false; 353 return false;
353 return true; 354 return true;
354} 355}
@@ -363,17 +364,17 @@ TTSFestival::~TTSFestival()
363void TTSFestival::generateSettings() 364void TTSFestival::generateSettings()
364{ 365{
365 // server path 366 // server path
366 QString exepath = settings->subValue("festival-server",RbSettings::TtsPath).toString(); 367 QString exepath = RbSettings::subValue("festival-server",RbSettings::TtsPath).toString();
367 if(exepath == "" ) exepath = findExecutable("festival"); 368 if(exepath == "" ) exepath = findExecutable("festival");
368 insertSetting(eSERVERPATH,new EncTtsSetting(this,EncTtsSetting::eSTRING,"Path to Festival server:",exepath,EncTtsSetting::eBROWSEBTN)); 369 insertSetting(eSERVERPATH,new EncTtsSetting(this,EncTtsSetting::eSTRING,"Path to Festival server:",exepath,EncTtsSetting::eBROWSEBTN));
369 370
370 // client path 371 // client path
371 QString clientpath = settings->subValue("festival-client",RbSettings::TtsPath).toString(); 372 QString clientpath = RbSettings::subValue("festival-client",RbSettings::TtsPath).toString();
372 if(clientpath == "" ) clientpath = findExecutable("festival_client"); 373 if(clientpath == "" ) clientpath = findExecutable("festival_client");
373 insertSetting(eCLIENTPATH,new EncTtsSetting(this,EncTtsSetting::eSTRING,"Path to Festival client:",clientpath,EncTtsSetting::eBROWSEBTN)); 374 insertSetting(eCLIENTPATH,new EncTtsSetting(this,EncTtsSetting::eSTRING,"Path to Festival client:",clientpath,EncTtsSetting::eBROWSEBTN));
374 375
375 // voice 376 // voice
376 EncTtsSetting* setting = new EncTtsSetting(this,EncTtsSetting::eSTRINGLIST,"Voice:",settings->subValue("festival",RbSettings::TtsVoice),getVoiceList(exepath),EncTtsSetting::eREFRESHBTN); 377 EncTtsSetting* setting = new EncTtsSetting(this,EncTtsSetting::eSTRINGLIST,"Voice:",RbSettings::subValue("festival",RbSettings::TtsVoice),getVoiceList(exepath),EncTtsSetting::eREFRESHBTN);
377 connect(setting,SIGNAL(refresh()),this,SLOT(updateVoiceList())); 378 connect(setting,SIGNAL(refresh()),this,SLOT(updateVoiceList()));
378 connect(setting,SIGNAL(dataChanged()),this,SLOT(clearVoiceDescription())); 379 connect(setting,SIGNAL(dataChanged()),this,SLOT(clearVoiceDescription()));
379 insertSetting(eVOICE,setting); 380 insertSetting(eVOICE,setting);
@@ -387,11 +388,11 @@ void TTSFestival::generateSettings()
387void TTSFestival::saveSettings() 388void TTSFestival::saveSettings()
388{ 389{
389 //save settings in user config 390 //save settings in user config
390 settings->setSubValue("festival-server",RbSettings::TtsPath,getSetting(eSERVERPATH)->current().toString()); 391 RbSettings::setSubValue("festival-server",RbSettings::TtsPath,getSetting(eSERVERPATH)->current().toString());
391 settings->setSubValue("festival-client",RbSettings::TtsPath,getSetting(eCLIENTPATH)->current().toString()); 392 RbSettings::setSubValue("festival-client",RbSettings::TtsPath,getSetting(eCLIENTPATH)->current().toString());
392 settings->setSubValue("festival",RbSettings::TtsVoice,getSetting(eVOICE)->current().toString()); 393 RbSettings::setSubValue("festival",RbSettings::TtsVoice,getSetting(eVOICE)->current().toString());
393 394
394 settings->sync(); 395 RbSettings::sync();
395} 396}
396 397
397void TTSFestival::updateVoiceDescription() 398void TTSFestival::updateVoiceDescription()
@@ -420,7 +421,7 @@ void TTSFestival::startServer(QString path)
420 return; 421 return;
421 422
422 if(path == "") 423 if(path == "")
423 path = settings->subValue("festival-server",RbSettings::TtsPath).toString(); 424 path = RbSettings::subValue("festival-server",RbSettings::TtsPath).toString();
424 425
425 serverProcess.start(QString("%1 --server").arg(path)); 426 serverProcess.start(QString("%1 --server").arg(path));
426 serverProcess.waitForStarted(); 427 serverProcess.waitForStarted();
@@ -444,9 +445,9 @@ bool TTSFestival::start(QString* errStr)
444{ 445{
445 (void) errStr; 446 (void) errStr;
446 ensureServerRunning(); 447 ensureServerRunning();
447 if (!settings->subValue("festival",RbSettings::TtsVoice).toString().isEmpty()) 448 if (!RbSettings::subValue("festival",RbSettings::TtsVoice).toString().isEmpty())
448 queryServer(QString("(voice.select '%1)") 449 queryServer(QString("(voice.select '%1)")
449 .arg(settings->subValue("festival", RbSettings::TtsVoice).toString())); 450 .arg(RbSettings::subValue("festival", RbSettings::TtsVoice).toString()));
450 451
451 return true; 452 return true;
452} 453}
@@ -463,7 +464,7 @@ TTSStatus TTSFestival::voice(QString text, QString wavfile, QString* errStr)
463{ 464{
464 qDebug() << text << "->" << wavfile; 465 qDebug() << text << "->" << wavfile;
465 466
466 QString path = settings->subValue("festival-client",RbSettings::TtsPath).toString(); 467 QString path = RbSettings::subValue("festival-client",RbSettings::TtsPath).toString();
467 QString cmd = QString("%1 --server localhost --otype riff --ttw --withlisp --output \"%2\" - ").arg(path).arg(wavfile); 468 QString cmd = QString("%1 --server localhost --otype riff --ttw --withlisp --output \"%2\" - ").arg(path).arg(wavfile);
468 qDebug() << cmd; 469 qDebug() << cmd;
469 470
@@ -493,13 +494,13 @@ TTSStatus TTSFestival::voice(QString text, QString wavfile, QString* errStr)
493 494
494bool TTSFestival::configOk() 495bool TTSFestival::configOk()
495{ 496{
496 QString serverPath = settings->subValue("festival-server",RbSettings::TtsPath).toString(); 497 QString serverPath = RbSettings::subValue("festival-server",RbSettings::TtsPath).toString();
497 QString clientPath = settings->subValue("festival-client",RbSettings::TtsVoice).toString(); 498 QString clientPath = RbSettings::subValue("festival-client",RbSettings::TtsVoice).toString();
498 499
499 bool ret = QFileInfo(serverPath).isExecutable() && 500 bool ret = QFileInfo(serverPath).isExecutable() &&
500 QFileInfo(clientPath).isExecutable(); 501 QFileInfo(clientPath).isExecutable();
501 if(settings->subValue("festival",RbSettings::TtsVoice).toString().size() > 0 && voices.size() > 0) 502 if(RbSettings::subValue("festival",RbSettings::TtsVoice).toString().size() > 0 && voices.size() > 0)
502 ret = ret && (voices.indexOf(settings->subValue("festival",RbSettings::TtsVoice).toString()) != -1); 503 ret = ret && (voices.indexOf(RbSettings::subValue("festival",RbSettings::TtsVoice).toString()) != -1);
503 return ret; 504 return ret;
504} 505}
505 506
diff --git a/rbutil/rbutilqt/base/tts.h b/rbutil/rbutilqt/base/tts.h
index 093ccd6138..f665ed2865 100644
--- a/rbutil/rbutilqt/base/tts.h
+++ b/rbutil/rbutilqt/base/tts.h
@@ -23,7 +23,6 @@
23#ifndef TTS_H 23#ifndef TTS_H
24#define TTS_H 24#define TTS_H
25 25
26#include "rbsettings.h"
27#include <QtCore> 26#include <QtCore>
28#include <QProcess> 27#include <QProcess>
29#include <QDateTime> 28#include <QDateTime>
@@ -58,16 +57,12 @@ class TTSBase : public EncTtsSettingInterface
58 static TTSBase* getTTS(QObject* parent,QString ttsname); 57 static TTSBase* getTTS(QObject* parent,QString ttsname);
59 static QStringList getTTSList(); 58 static QStringList getTTSList();
60 static QString getTTSName(QString tts); 59 static QString getTTSName(QString tts);
61 60
62 // sets the config. Users of TTS classes, always have to call this first
63 void setCfg(RbSettings* sett) { settings = sett; }
64
65 private: 61 private:
66 //inits the tts List 62 //inits the tts List
67 static void initTTSList(); 63 static void initTTSList();
68 64
69 protected: 65 protected:
70 RbSettings* settings;
71 static QMap<QString,QString> ttsList; 66 static QMap<QString,QString> ttsList;
72}; 67};
73 68