summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--rbutil/rbutilqt/base/rbsettings.cpp1
-rw-r--r--rbutil/rbutilqt/base/rbsettings.h1
-rw-r--r--rbutil/rbutilqt/base/systeminfo.cpp8
-rw-r--r--rbutil/rbutilqt/base/systeminfo.h5
-rw-r--r--rbutil/rbutilqt/gui/selectiveinstallwidget.cpp119
-rw-r--r--rbutil/rbutilqt/gui/selectiveinstallwidget.h2
-rw-r--r--rbutil/rbutilqt/gui/selectiveinstallwidgetfrm.ui143
-rw-r--r--rbutil/rbutilqt/rbutil.ini7
-rw-r--r--rbutil/rbutilqt/rbutilqt.cpp1
9 files changed, 199 insertions, 88 deletions
diff --git a/rbutil/rbutilqt/base/rbsettings.cpp b/rbutil/rbutilqt/base/rbsettings.cpp
index 827c0f96fd..5baa53bee0 100644
--- a/rbutil/rbutilqt/base/rbsettings.cpp
+++ b/rbutil/rbutilqt/base/rbsettings.cpp
@@ -47,6 +47,7 @@ const static struct {
47 { RbSettings::InstallFonts, "install_fonts", "true" }, 47 { RbSettings::InstallFonts, "install_fonts", "true" },
48 { RbSettings::InstallThemes, "install_themes", "false" }, 48 { RbSettings::InstallThemes, "install_themes", "false" },
49 { RbSettings::InstallGamefiles, "install_gamefiles", "true" }, 49 { RbSettings::InstallGamefiles, "install_gamefiles", "true" },
50 { RbSettings::InstallVoice, "install_voice", "false" },
50#if defined(Q_OS_WIN32) 51#if defined(Q_OS_WIN32)
51 { RbSettings::Tts, "tts", "sapi" }, 52 { RbSettings::Tts, "tts", "sapi" },
52#elif defined(Q_OS_MACX) 53#elif defined(Q_OS_MACX)
diff --git a/rbutil/rbutilqt/base/rbsettings.h b/rbutil/rbutilqt/base/rbsettings.h
index 7406aab1ad..a25eabbcee 100644
--- a/rbutil/rbutilqt/base/rbsettings.h
+++ b/rbutil/rbutilqt/base/rbsettings.h
@@ -46,6 +46,7 @@ class RbSettings : public QObject
46 InstallFonts, 46 InstallFonts,
47 InstallThemes, 47 InstallThemes,
48 InstallGamefiles, 48 InstallGamefiles,
49 InstallVoice,
49 Tts, 50 Tts,
50 UseTtsCorrections, 51 UseTtsCorrections,
51 TalkFolders, 52 TalkFolders,
diff --git a/rbutil/rbutilqt/base/systeminfo.cpp b/rbutil/rbutilqt/base/systeminfo.cpp
index 2aece49110..2ad3c7a7d4 100644
--- a/rbutil/rbutilqt/base/systeminfo.cpp
+++ b/rbutil/rbutilqt/base/systeminfo.cpp
@@ -159,7 +159,7 @@ QStringList SystemInfo::platforms(enum SystemInfo::PlatformType type, QString va
159 return result; 159 return result;
160} 160}
161 161
162QMap<QString, QStringList> SystemInfo::languages(void) 162QMap<QString, QStringList> SystemInfo::languages(bool namesOnly)
163{ 163{
164 ensureSystemInfoExists(); 164 ensureSystemInfoExists();
165 165
@@ -168,7 +168,11 @@ QMap<QString, QStringList> SystemInfo::languages(void)
168 QStringList a = systemInfos->childKeys(); 168 QStringList a = systemInfos->childKeys();
169 for(int i = 0; i < a.size(); i++) 169 for(int i = 0; i < a.size(); i++)
170 { 170 {
171 result.insert(a.at(i), systemInfos->value(a.at(i), "null").toStringList()); 171 QStringList data = systemInfos->value(a.at(i), "null").toStringList();
172 if(namesOnly)
173 result.insert(data.at(0), QStringList(data.at(1)));
174 else
175 result.insert(a.at(i), data);
172 } 176 }
173 systemInfos->endGroup(); 177 systemInfos->endGroup();
174 return result; 178 return result;
diff --git a/rbutil/rbutilqt/base/systeminfo.h b/rbutil/rbutilqt/base/systeminfo.h
index 12b9eb4bfb..9bcfe6d253 100644
--- a/rbutil/rbutilqt/base/systeminfo.h
+++ b/rbutil/rbutilqt/base/systeminfo.h
@@ -90,8 +90,9 @@ class SystemInfo : public QObject
90 //! return a list of all platforms (rbutil internal names) 90 //! return a list of all platforms (rbutil internal names)
91 static QStringList platforms(enum PlatformType type = PlatformAll, 91 static QStringList platforms(enum PlatformType type = PlatformAll,
92 QString variant=""); 92 QString variant="");
93 //! returns a map of all languages 93 //! returns a map of all languages.
94 static QMap<QString, QStringList> languages(void); 94 //! Maps <language code> to (<language name>, <display name>)
95 static QMap<QString, QStringList> languages(bool namesOnly = false);
95 //! returns a map of usb-ids and their targets 96 //! returns a map of usb-ids and their targets
96 static QMap<int, QStringList> usbIdMap(enum MapType type); 97 static QMap<int, QStringList> usbIdMap(enum MapType type);
97 //! get a value from system settings 98 //! get a value from system settings
diff --git a/rbutil/rbutilqt/gui/selectiveinstallwidget.cpp b/rbutil/rbutilqt/gui/selectiveinstallwidget.cpp
index c916e7a190..8a83c6ebc5 100644
--- a/rbutil/rbutilqt/gui/selectiveinstallwidget.cpp
+++ b/rbutil/rbutilqt/gui/selectiveinstallwidget.cpp
@@ -39,6 +39,7 @@ SelectiveInstallWidget::SelectiveInstallWidget(QWidget* parent) : QWidget(parent
39 ui.fontsCheckbox->setChecked(RbSettings::value(RbSettings::InstallFonts).toBool()); 39 ui.fontsCheckbox->setChecked(RbSettings::value(RbSettings::InstallFonts).toBool());
40 ui.themesCheckbox->setChecked(RbSettings::value(RbSettings::InstallThemes).toBool()); 40 ui.themesCheckbox->setChecked(RbSettings::value(RbSettings::InstallThemes).toBool());
41 ui.gamefileCheckbox->setChecked(RbSettings::value(RbSettings::InstallGamefiles).toBool()); 41 ui.gamefileCheckbox->setChecked(RbSettings::value(RbSettings::InstallGamefiles).toBool());
42 ui.voiceCheckbox->setChecked(RbSettings::value(RbSettings::InstallVoice).toBool());
42 43
43 // check if Rockbox is installed by looking after rockbox-info.txt. 44 // check if Rockbox is installed by looking after rockbox-info.txt.
44 // If installed uncheck bootloader installation. 45 // If installed uncheck bootloader installation.
@@ -62,17 +63,27 @@ SelectiveInstallWidget::SelectiveInstallWidget(QWidget* parent) : QWidget(parent
62 63
63void SelectiveInstallWidget::selectedVersionChanged(int index) 64void SelectiveInstallWidget::selectedVersionChanged(int index)
64{ 65{
65 QString current = ui.selectedVersion->itemData(index).toString(); 66 m_buildtype = ui.selectedVersion->itemData(index).toString();
66 if(current == "release") 67 bool voice = true;
68 if(m_buildtype == "release") {
67 ui.selectedDescription->setText(tr("This is the latest stable " 69 ui.selectedDescription->setText(tr("This is the latest stable "
68 "release available.")); 70 "release available."));
69 if(current == "development") 71 voice = true;
72 }
73 if(m_buildtype == "development") {
70 ui.selectedDescription->setText(tr("The development version is " 74 ui.selectedDescription->setText(tr("The development version is "
71 "updated on every code change. Last update was on %1").arg( 75 "updated on every code change. Last update was on %1").arg(
72 ServerInfo::instance()->platformValue(ServerInfo::BleedingDate).toString())); 76 ServerInfo::instance()->platformValue(ServerInfo::BleedingDate).toString()));
73 if(current == "rc") 77 voice = false;
78 }
79 if(m_buildtype == "rc") {
74 ui.selectedDescription->setText(tr("This will eventually become the " 80 ui.selectedDescription->setText(tr("This will eventually become the "
75 "next Rockbox version. Install it to help testing.")); 81 "next Rockbox version. Install it to help testing."));
82 voice = false;
83 }
84 ui.voiceCheckbox->setEnabled(voice);
85 ui.voiceCombobox->setEnabled(voice);
86 ui.voiceLabel->setEnabled(voice);
76} 87}
77 88
78 89
@@ -144,7 +155,27 @@ void SelectiveInstallWidget::updateVersion(void)
144 RockboxInfo info(m_mountpoint); 155 RockboxInfo info(m_mountpoint);
145 ui.bootloaderCheckbox->setChecked(!info.success()); 156 ui.bootloaderCheckbox->setChecked(!info.success());
146 } 157 }
147 158 // populate languages for voice file.
159 // FIXME: currently only english. Need to get the available languages from
160 // build-info later.
161 QVariant current = ui.voiceCombobox->currentData();
162 QMap<QString, QStringList> languages = SystemInfo::languages(true);
163 QStringList voicelangs;
164 voicelangs << "english";
165 ui.voiceCombobox->clear();
166 for(int i = 0; i < voicelangs.size(); i++) {
167 QString key = voicelangs.at(i);
168 if(!languages.contains(key)) {
169 LOG_WARNING() << "trying to add unknown language" << key;
170 continue;
171 }
172 ui.voiceCombobox->addItem(languages.value(key).at(0), key);
173 }
174 // try to select the previously selected one again (if still present)
175 // TODO: Fall back to system language if not found, or english.
176 int sel = ui.voiceCombobox->findData(current);
177 if(sel >= 0)
178 ui.voiceCombobox->setCurrentIndex(sel);
148 179
149} 180}
150 181
@@ -157,6 +188,8 @@ void SelectiveInstallWidget::saveSettings(void)
157 RbSettings::setValue(RbSettings::InstallFonts, ui.fontsCheckbox->isChecked()); 188 RbSettings::setValue(RbSettings::InstallFonts, ui.fontsCheckbox->isChecked());
158 RbSettings::setValue(RbSettings::InstallThemes, ui.themesCheckbox->isChecked()); 189 RbSettings::setValue(RbSettings::InstallThemes, ui.themesCheckbox->isChecked());
159 RbSettings::setValue(RbSettings::InstallGamefiles, ui.gamefileCheckbox->isChecked()); 190 RbSettings::setValue(RbSettings::InstallGamefiles, ui.gamefileCheckbox->isChecked());
191 RbSettings::setValue(RbSettings::InstallVoice, ui.voiceCheckbox->isChecked());
192 RbSettings::setValue(RbSettings::VoiceLanguage, ui.voiceCombobox->currentData().toString());
160} 193}
161 194
162 195
@@ -209,7 +242,8 @@ void SelectiveInstallWidget::continueInstall(bool error)
209 case 3: installFonts(); break; 242 case 3: installFonts(); break;
210 case 4: installThemes(); break; 243 case 4: installThemes(); break;
211 case 5: installGamefiles(); break; 244 case 5: installGamefiles(); break;
212 case 6: installBootloaderPost(); break; 245 case 6: installVoicefile(); break;
246 case 7: installBootloaderPost(); break;
213 default: break; 247 default: break;
214 } 248 }
215 249
@@ -381,15 +415,14 @@ void SelectiveInstallWidget::installRockbox(void)
381 LOG_INFO() << "installing Rockbox"; 415 LOG_INFO() << "installing Rockbox";
382 QString url; 416 QString url;
383 417
384 QString selected = ui.selectedVersion->itemData(ui.selectedVersion->currentIndex()).toString(); 418 RbSettings::setValue(RbSettings::Build, m_buildtype);
385 RbSettings::setValue(RbSettings::Build, selected);
386 RbSettings::sync(); 419 RbSettings::sync();
387 420
388 if(selected == "release") url = ServerInfo::instance()->platformValue( 421 if(m_buildtype == "release") url = ServerInfo::instance()->platformValue(
389 ServerInfo::CurReleaseUrl, m_target).toString(); 422 ServerInfo::CurReleaseUrl, m_target).toString();
390 else if(selected == "development") url = ServerInfo::instance()->platformValue( 423 else if(m_buildtype == "development") url = ServerInfo::instance()->platformValue(
391 ServerInfo::CurDevelUrl, m_target).toString(); 424 ServerInfo::CurDevelUrl, m_target).toString();
392 else if(selected == "rc") url = ServerInfo::instance()->platformValue( 425 else if(m_buildtype == "rc") url = ServerInfo::instance()->platformValue(
393 ServerInfo::RelCandidateUrl, m_target).toString(); 426 ServerInfo::RelCandidateUrl, m_target).toString();
394 427
395 //! install build 428 //! install build
@@ -399,7 +432,7 @@ void SelectiveInstallWidget::installRockbox(void)
399 m_zipinstaller->setLogSection("Rockbox (Base)"); 432 m_zipinstaller->setLogSection("Rockbox (Base)");
400 if(!RbSettings::value(RbSettings::CacheDisabled).toBool()) 433 if(!RbSettings::value(RbSettings::CacheDisabled).toBool())
401 m_zipinstaller->setCache(true); 434 m_zipinstaller->setCache(true);
402 m_zipinstaller->setLogVersion(m_versions[selected]); 435 m_zipinstaller->setLogVersion(m_versions[m_buildtype]);
403 m_zipinstaller->setMountPoint(m_mountpoint); 436 m_zipinstaller->setMountPoint(m_mountpoint);
404 437
405 connect(m_zipinstaller, SIGNAL(done(bool)), this, SLOT(continueInstall(bool))); 438 connect(m_zipinstaller, SIGNAL(done(bool)), this, SLOT(continueInstall(bool)));
@@ -422,25 +455,71 @@ void SelectiveInstallWidget::installFonts(void)
422 if(ui.fontsCheckbox->isChecked()) { 455 if(ui.fontsCheckbox->isChecked()) {
423 LOG_INFO() << "installing Fonts"; 456 LOG_INFO() << "installing Fonts";
424 457
458 RockboxInfo installInfo(m_mountpoint);
459 QString fontsurl;
460 QString logversion;
461 QString relversion = installInfo.release();
462 if(relversion.isEmpty()) {
463 // release is empty for non-release versions (i.e. daily / current)
464 fontsurl = SystemInfo::value(SystemInfo::FontUrl, SystemInfo::BuildDaily).toString();
465 }
466 else {
467 fontsurl = SystemInfo::value(SystemInfo::FontUrl, SystemInfo::BuildRelease).toString();
468 logversion = installInfo.release();
469 }
470 fontsurl.replace("%RELEASEVER%", relversion);
471
472 // create new zip installer
473 if(m_zipinstaller != nullptr) m_zipinstaller->deleteLater();
474 m_zipinstaller = new ZipInstaller(this);
475 m_zipinstaller->setUrl(fontsurl);
476 m_zipinstaller->setLogSection("Fonts");
477 m_zipinstaller->setLogVersion(logversion);
478 m_zipinstaller->setMountPoint(m_mountpoint);
479 if(!RbSettings::value(RbSettings::CacheDisabled).toBool())
480 m_zipinstaller->setCache(true);
481
482 connect(m_zipinstaller, SIGNAL(done(bool)), this, SLOT(continueInstall(bool)));
483 connect(m_zipinstaller, SIGNAL(logItem(QString, int)), m_logger, SLOT(addItem(QString, int)));
484 connect(m_zipinstaller, SIGNAL(logProgress(int, int)), m_logger, SLOT(setProgress(int, int)));
485 connect(m_logger, SIGNAL(aborted()), m_zipinstaller, SLOT(abort()));
486 m_zipinstaller->install();
487 }
488 else {
489 LOG_INFO() << "Fonts install disabled.";
490 emit installSkipped(false);
491 }
492}
493
494void SelectiveInstallWidget::installVoicefile(void)
495{
496 if(ui.voiceCheckbox->isChecked()) {
497 LOG_INFO() << "installing Voice file";
498 QString lang = ui.voiceCombobox->currentData().toString();
499
425 RockboxInfo installInfo(m_mountpoint); 500 RockboxInfo installInfo(m_mountpoint);
426 QString fontsurl; 501 QString voiceurl;
427 QString logversion; 502 QString logversion;
428 QString relversion = installInfo.release(); 503 QString relversion = installInfo.release();
429 if(relversion.isEmpty()) { 504 if(m_buildtype == "release") {
430 // release is empty for non-release versions (i.e. daily / current) 505 // release is empty for non-release versions (i.e. daily / current)
431 fontsurl = SystemInfo::value(SystemInfo::FontUrl, SystemInfo::BuildDaily).toString(); 506 voiceurl = SystemInfo::value(SystemInfo::VoiceUrl, SystemInfo::BuildRelease).toString();
432 } 507 }
433 else { 508 else {
434 fontsurl = SystemInfo::value(SystemInfo::FontUrl, SystemInfo::BuildRelease).toString(); 509 voiceurl = SystemInfo::value(SystemInfo::VoiceUrl, SystemInfo::BuildDaily).toString();
435 logversion = installInfo.release(); 510 logversion = installInfo.release();
436 } 511 }
437 fontsurl.replace("%RELEASEVER%", relversion); 512 voiceurl.replace("%RELVERSION%", m_versions[m_buildtype]);
513 voiceurl.replace("%MODEL%", m_target);
514 voiceurl.replace("%LANGUAGE%", lang);
515
516 LOG_INFO() << "voicurl" << voiceurl;
438 517
439 // create new zip installer 518 // create new zip installer
440 if(m_zipinstaller != nullptr) m_zipinstaller->deleteLater(); 519 if(m_zipinstaller != nullptr) m_zipinstaller->deleteLater();
441 m_zipinstaller = new ZipInstaller(this); 520 m_zipinstaller = new ZipInstaller(this);
442 m_zipinstaller->setUrl(fontsurl); 521 m_zipinstaller->setUrl(voiceurl);
443 m_zipinstaller->setLogSection("Fonts"); 522 m_zipinstaller->setLogSection("Voice (" + lang + ")");
444 m_zipinstaller->setLogVersion(logversion); 523 m_zipinstaller->setLogVersion(logversion);
445 m_zipinstaller->setMountPoint(m_mountpoint); 524 m_zipinstaller->setMountPoint(m_mountpoint);
446 if(!RbSettings::value(RbSettings::CacheDisabled).toBool()) 525 if(!RbSettings::value(RbSettings::CacheDisabled).toBool())
@@ -453,7 +532,7 @@ void SelectiveInstallWidget::installFonts(void)
453 m_zipinstaller->install(); 532 m_zipinstaller->install();
454 } 533 }
455 else { 534 else {
456 LOG_INFO() << "Fonts install disabled."; 535 LOG_INFO() << "Voice install disabled.";
457 emit installSkipped(false); 536 emit installSkipped(false);
458 } 537 }
459} 538}
diff --git a/rbutil/rbutilqt/gui/selectiveinstallwidget.h b/rbutil/rbutilqt/gui/selectiveinstallwidget.h
index 799829e066..ac07e24ab8 100644
--- a/rbutil/rbutilqt/gui/selectiveinstallwidget.h
+++ b/rbutil/rbutilqt/gui/selectiveinstallwidget.h
@@ -41,6 +41,7 @@ class SelectiveInstallWidget : public QWidget
41 void installBootloader(void); 41 void installBootloader(void);
42 void installRockbox(void); 42 void installRockbox(void);
43 void installFonts(void); 43 void installFonts(void);
44 void installVoicefile(void);
44 void installThemes(void); 45 void installThemes(void);
45 void installGamefiles(void); 46 void installGamefiles(void);
46 void installBootloaderPost(void); 47 void installBootloaderPost(void);
@@ -62,6 +63,7 @@ class SelectiveInstallWidget : public QWidget
62 ZipInstaller *m_zipinstaller; 63 ZipInstaller *m_zipinstaller;
63 QMap<QString, QString> m_versions; 64 QMap<QString, QString> m_versions;
64 ThemesInstallWindow *m_themesinstaller; 65 ThemesInstallWindow *m_themesinstaller;
66 QString m_buildtype;
65}; 67};
66 68
67#endif 69#endif
diff --git a/rbutil/rbutilqt/gui/selectiveinstallwidgetfrm.ui b/rbutil/rbutilqt/gui/selectiveinstallwidgetfrm.ui
index 5e7fe54ffe..a5bb023f2e 100644
--- a/rbutil/rbutilqt/gui/selectiveinstallwidgetfrm.ui
+++ b/rbutil/rbutilqt/gui/selectiveinstallwidgetfrm.ui
@@ -7,7 +7,7 @@
7 <x>0</x> 7 <x>0</x>
8 <y>0</y> 8 <y>0</y>
9 <width>663</width> 9 <width>663</width>
10 <height>369</height> 10 <height>399</height>
11 </rect> 11 </rect>
12 </property> 12 </property>
13 <property name="sizePolicy"> 13 <property name="sizePolicy">
@@ -54,22 +54,22 @@
54 <string>Rockbox components to install</string> 54 <string>Rockbox components to install</string>
55 </property> 55 </property>
56 <layout class="QGridLayout" name="gridLayout_2"> 56 <layout class="QGridLayout" name="gridLayout_2">
57 <item row="0" column="0"> 57 <item row="1" column="0">
58 <widget class="QCheckBox" name="bootloaderCheckbox"> 58 <widget class="QCheckBox" name="rockboxCheckbox">
59 <property name="text"> 59 <property name="text">
60 <string>&amp;Bootloader</string> 60 <string>&amp;Rockbox</string>
61 </property> 61 </property>
62 <property name="icon"> 62 <property name="icon">
63 <iconset resource="../rbutilqt.qrc"> 63 <iconset resource="../rbutilqt.qrc">
64 <normaloff>:/icons/preferences-system.svg</normaloff>:/icons/preferences-system.svg</iconset> 64 <normaloff>:/icons/multimedia-player.svg</normaloff>:/icons/multimedia-player.svg</iconset>
65 </property> 65 </property>
66 <property name="checked"> 66 <property name="checked">
67 <bool>true</bool> 67 <bool>true</bool>
68 </property> 68 </property>
69 </widget> 69 </widget>
70 </item> 70 </item>
71 <item row="1" column="1"> 71 <item row="0" column="1">
72 <widget class="QLabel" name="rockboxLabel"> 72 <widget class="QLabel" name="bootloaderLabel">
73 <property name="sizePolicy"> 73 <property name="sizePolicy">
74 <sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred"> 74 <sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
75 <horstretch>0</horstretch> 75 <horstretch>0</horstretch>
@@ -77,13 +77,51 @@
77 </sizepolicy> 77 </sizepolicy>
78 </property> 78 </property>
79 <property name="text"> 79 <property name="text">
80 <string>The main Rockbox firmware.</string> 80 <string>The bootloader is required for starting Rockbox. Only necessary for first time install.</string>
81 </property> 81 </property>
82 <property name="wordWrap"> 82 <property name="wordWrap">
83 <bool>true</bool> 83 <bool>true</bool>
84 </property> 84 </property>
85 </widget> 85 </widget>
86 </item> 86 </item>
87 <item row="3" column="0">
88 <widget class="QCheckBox" name="themesCheckbox">
89 <property name="text">
90 <string>Themes</string>
91 </property>
92 <property name="icon">
93 <iconset resource="../rbutilqt.qrc">
94 <normaloff>:/icons/preferences-desktop-theme.svg</normaloff>:/icons/preferences-desktop-theme.svg</iconset>
95 </property>
96 </widget>
97 </item>
98 <item row="3" column="3">
99 <widget class="QPushButton" name="themesCustomize">
100 <property name="text">
101 <string>Customize</string>
102 </property>
103 <property name="icon">
104 <iconset resource="../rbutilqt.qrc">
105 <normaloff>:/icons/preferences-system.svg</normaloff>:/icons/preferences-system.svg</iconset>
106 </property>
107 </widget>
108 </item>
109 <item row="1" column="2">
110 <spacer name="horizontalSpacer">
111 <property name="orientation">
112 <enum>Qt::Horizontal</enum>
113 </property>
114 <property name="sizeType">
115 <enum>QSizePolicy::Minimum</enum>
116 </property>
117 <property name="sizeHint" stdset="0">
118 <size>
119 <width>1</width>
120 <height>1</height>
121 </size>
122 </property>
123 </spacer>
124 </item>
87 <item row="2" column="0"> 125 <item row="2" column="0">
88 <widget class="QCheckBox" name="fontsCheckbox"> 126 <widget class="QCheckBox" name="fontsCheckbox">
89 <property name="text"> 127 <property name="text">
@@ -98,22 +136,19 @@
98 </property> 136 </property>
99 </widget> 137 </widget>
100 </item> 138 </item>
101 <item row="1" column="0"> 139 <item row="6" column="0">
102 <widget class="QCheckBox" name="rockboxCheckbox"> 140 <widget class="QCheckBox" name="gamefileCheckbox">
103 <property name="text"> 141 <property name="text">
104 <string>&amp;Rockbox</string> 142 <string>Game Files</string>
105 </property> 143 </property>
106 <property name="icon"> 144 <property name="icon">
107 <iconset resource="../rbutilqt.qrc"> 145 <iconset resource="../rbutilqt.qrc">
108 <normaloff>:/icons/multimedia-player.svg</normaloff>:/icons/multimedia-player.svg</iconset> 146 <normaloff>:/icons/input-gaming.svg</normaloff>:/icons/input-gaming.svg</iconset>
109 </property>
110 <property name="checked">
111 <bool>true</bool>
112 </property> 147 </property>
113 </widget> 148 </widget>
114 </item> 149 </item>
115 <item row="6" column="1"> 150 <item row="3" column="1">
116 <widget class="QLabel" name="gameLabel"> 151 <widget class="QLabel" name="themesLabel">
117 <property name="sizePolicy"> 152 <property name="sizePolicy">
118 <sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred"> 153 <sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
119 <horstretch>0</horstretch> 154 <horstretch>0</horstretch>
@@ -121,7 +156,7 @@
121 </sizepolicy> 156 </sizepolicy>
122 </property> 157 </property>
123 <property name="text"> 158 <property name="text">
124 <string>Some game plugins require additional files.</string> 159 <string>Themes allow adjusting the user interface of Rockbox. Use &quot;Customize&quot; to select themes.</string>
125 </property> 160 </property>
126 <property name="wordWrap"> 161 <property name="wordWrap">
127 <bool>true</bool> 162 <bool>true</bool>
@@ -144,8 +179,8 @@
144 </property> 179 </property>
145 </widget> 180 </widget>
146 </item> 181 </item>
147 <item row="0" column="1"> 182 <item row="6" column="1">
148 <widget class="QLabel" name="bootloaderLabel"> 183 <widget class="QLabel" name="gameLabel">
149 <property name="sizePolicy"> 184 <property name="sizePolicy">
150 <sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred"> 185 <sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
151 <horstretch>0</horstretch> 186 <horstretch>0</horstretch>
@@ -153,77 +188,63 @@
153 </sizepolicy> 188 </sizepolicy>
154 </property> 189 </property>
155 <property name="text"> 190 <property name="text">
156 <string>The bootloader is required for starting Rockbox. Only necessary for first time install.</string> 191 <string>Some game plugins require additional files.</string>
157 </property> 192 </property>
158 <property name="wordWrap"> 193 <property name="wordWrap">
159 <bool>true</bool> 194 <bool>true</bool>
160 </property> 195 </property>
161 </widget> 196 </widget>
162 </item> 197 </item>
163 <item row="6" column="0"> 198 <item row="1" column="1">
164 <widget class="QCheckBox" name="gamefileCheckbox"> 199 <widget class="QLabel" name="rockboxLabel">
200 <property name="sizePolicy">
201 <sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
202 <horstretch>0</horstretch>
203 <verstretch>0</verstretch>
204 </sizepolicy>
205 </property>
165 <property name="text"> 206 <property name="text">
166 <string>Game Files</string> 207 <string>The main Rockbox firmware.</string>
167 </property> 208 </property>
168 <property name="icon"> 209 <property name="wordWrap">
169 <iconset resource="../rbutilqt.qrc"> 210 <bool>true</bool>
170 <normaloff>:/icons/input-gaming.svg</normaloff>:/icons/input-gaming.svg</iconset>
171 </property> 211 </property>
172 </widget> 212 </widget>
173 </item> 213 </item>
174 <item row="3" column="3"> 214 <item row="0" column="0">
175 <widget class="QPushButton" name="themesCustomize"> 215 <widget class="QCheckBox" name="bootloaderCheckbox">
176 <property name="text"> 216 <property name="text">
177 <string>Customize</string> 217 <string>&amp;Bootloader</string>
178 </property> 218 </property>
179 <property name="icon"> 219 <property name="icon">
180 <iconset resource="../rbutilqt.qrc"> 220 <iconset resource="../rbutilqt.qrc">
181 <normaloff>:/icons/preferences-system.svg</normaloff>:/icons/preferences-system.svg</iconset> 221 <normaloff>:/icons/preferences-system.svg</normaloff>:/icons/preferences-system.svg</iconset>
182 </property> 222 </property>
223 <property name="checked">
224 <bool>true</bool>
225 </property>
183 </widget> 226 </widget>
184 </item> 227 </item>
185 <item row="3" column="0"> 228 <item row="7" column="0">
186 <widget class="QCheckBox" name="themesCheckbox"> 229 <widget class="QCheckBox" name="voiceCheckbox">
187 <property name="text"> 230 <property name="text">
188 <string>Themes</string> 231 <string>&amp;Voice File</string>
189 </property> 232 </property>
190 <property name="icon"> 233 <property name="icon">
191 <iconset resource="../rbutilqt.qrc"> 234 <iconset resource="../rbutilqt.qrc">
192 <normaloff>:/icons/preferences-desktop-theme.svg</normaloff>:/icons/preferences-desktop-theme.svg</iconset> 235 <normaloff>:/icons/audio-volume-high.svg</normaloff>:/icons/audio-volume-high.svg</iconset>
193 </property> 236 </property>
194 </widget> 237 </widget>
195 </item> 238 </item>
196 <item row="3" column="1"> 239 <item row="7" column="1">
197 <widget class="QLabel" name="themesLabel"> 240 <widget class="QLabel" name="voiceLabel">
198 <property name="sizePolicy">
199 <sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
200 <horstretch>0</horstretch>
201 <verstretch>0</verstretch>
202 </sizepolicy>
203 </property>
204 <property name="text"> 241 <property name="text">
205 <string>Themes allow adjusting the user interface of Rockbox. Use &quot;Customize&quot; to select themes.</string> 242 <string>Install prerendered voice file.</string>
206 </property>
207 <property name="wordWrap">
208 <bool>true</bool>
209 </property> 243 </property>
210 </widget> 244 </widget>
211 </item> 245 </item>
212 <item row="1" column="2"> 246 <item row="7" column="3">
213 <spacer name="horizontalSpacer"> 247 <widget class="QComboBox" name="voiceCombobox"/>
214 <property name="orientation">
215 <enum>Qt::Horizontal</enum>
216 </property>
217 <property name="sizeType">
218 <enum>QSizePolicy::Minimum</enum>
219 </property>
220 <property name="sizeHint" stdset="0">
221 <size>
222 <width>1</width>
223 <height>1</height>
224 </size>
225 </property>
226 </spacer>
227 </item> 248 </item>
228 </layout> 249 </layout>
229 </widget> 250 </widget>
diff --git a/rbutil/rbutilqt/rbutil.ini b/rbutil/rbutilqt/rbutil.ini
index e0d60e797e..f680a15fe2 100644
--- a/rbutil/rbutilqt/rbutil.ini
+++ b/rbutil/rbutilqt/rbutil.ini
@@ -22,7 +22,7 @@ download_url=http://download.rockbox.org/bootloader
22 22
23[release] 23[release]
24build_url=https://download.rockbox.org/release/%RELVERSION%/rockbox-%MODEL%-%RELVERSION%.zip 24build_url=https://download.rockbox.org/release/%RELVERSION%/rockbox-%MODEL%-%RELVERSION%.zip
25voice_url=https://download.rockbox.org/release/%RELVERSION%/%MODEL%-%RELVERSION%-english.zip 25voice_url=https://download.rockbox.org/release/%RELVERSION%/%MODEL%-%RELVERSION%-%LANGUAGE%.zip
26font_url=https://download.rockbox.org/release/%RELEASEVER%/rockbox-fonts-%RELEASEVER%.zip 26font_url=https://download.rockbox.org/release/%RELEASEVER%/rockbox-fonts-%RELEASEVER%.zip
27manual_url=https://download.rockbox.org/release/%RELEASEVER%/rockbox-%MODEL%%FORMAT% 27manual_url=https://download.rockbox.org/release/%RELEASEVER%/rockbox-%MODEL%%FORMAT%
28 28
@@ -34,14 +34,15 @@ manual_url=https://download.rockbox.org/release-candidate/%RELEASEVER%/rockbox-%
34 34
35[development] 35[development]
36build_url=http://build.rockbox.org/data/rockbox-%MODEL%.zip 36build_url=http://build.rockbox.org/data/rockbox-%MODEL%.zip
37voice_url=https://download.rockbox.org/release/%RELVERSION%/%MODEL%-%RELVERSION%-english.zip 37; we don't have voices for dev builds.
38voice_url=https://download.rockbox.org/daily/voices/%MODEL%-%LANGUAGE%.zip
38font_url=https://download.rockbox.org/daily/fonts/rockbox-fonts.zip 39font_url=https://download.rockbox.org/daily/fonts/rockbox-fonts.zip
39; manual is only built daily, use that one instead. 40; manual is only built daily, use that one instead.
40manual_url=https://download.rockbox.org/daily/manual/rockbox-%MODEL%%FORMAT% 41manual_url=https://download.rockbox.org/daily/manual/rockbox-%MODEL%%FORMAT%
41 42
42[daily] 43[daily]
43build_url=https://download.rockbox.org/daily/%MODEL%/rockbox-%MODEL%.zip 44build_url=https://download.rockbox.org/daily/%MODEL%/rockbox-%MODEL%.zip
44voice_url=https://download.rockbox.org/daily/voices/%MODEL%-%VERSION%-%LANGUAGE%.zip 45voice_url=https://download.rockbox.org/daily/voices/%MODEL%-%LANGUAGE%.zip
45font_url=https://download.rockbox.org/daily/fonts/rockbox-fonts.zip 46font_url=https://download.rockbox.org/daily/fonts/rockbox-fonts.zip
46manual_url=https://download.rockbox.org/daily/manual/rockbox-%MODEL%%FORMAT% 47manual_url=https://download.rockbox.org/daily/manual/rockbox-%MODEL%%FORMAT%
47 48
diff --git a/rbutil/rbutilqt/rbutilqt.cpp b/rbutil/rbutilqt/rbutilqt.cpp
index 597509cc78..d996eddfe1 100644
--- a/rbutil/rbutilqt/rbutilqt.cpp
+++ b/rbutil/rbutilqt/rbutilqt.cpp
@@ -496,6 +496,7 @@ void RbUtilQt::installVoice()
496 // replace placeholder in voice url 496 // replace placeholder in voice url
497 voiceurl.replace("%MODEL%", model); 497 voiceurl.replace("%MODEL%", model);
498 voiceurl.replace("%RELVERSION%", relversion); 498 voiceurl.replace("%RELVERSION%", relversion);
499 voiceurl.replace("%LANGUAGE%", "english");
499 500
500 LOG_INFO() << "voicefile URL:" << voiceurl; 501 LOG_INFO() << "voicefile URL:" << voiceurl;
501 502