summaryrefslogtreecommitdiff
path: root/rbutil/rbutilqt/installtalkwindow.cpp
diff options
context:
space:
mode:
authorDominik Riebeling <Dominik.Riebeling@gmail.com>2012-06-13 23:04:27 +0200
committerDominik Riebeling <Dominik.Riebeling@gmail.com>2012-06-13 23:04:27 +0200
commitb4dee8958f53f489b2a816685badd0a015c33719 (patch)
treeeb9cd53eb16ec442ca47cfe12a79762f115bbf8b /rbutil/rbutilqt/installtalkwindow.cpp
parentda08e5059a50556d14315d6a5e850a218303992b (diff)
downloadrockbox-b4dee8958f53f489b2a816685badd0a015c33719.tar.gz
rockbox-b4dee8958f53f489b2a816685badd0a015c33719.zip
Rework talkfile creation window.
Support selecting multiple folders by replacing the provided path with a tree view that allows selecting multiple entries. The view is limited to the selected mountpoint (i.e. the player) so this removes the possibility of generating talk files for files that are not on the player. However, since Rockbox Utility disables most functionality without an attached player this isn't too much of a problem. Creating a standalone application for talkfile creation that is not limited to the player is possible as well. Change-Id: Ic68e7556f2e2e5b9c121aaba759a42a4d1d9d53a
Diffstat (limited to 'rbutil/rbutilqt/installtalkwindow.cpp')
-rw-r--r--rbutil/rbutilqt/installtalkwindow.cpp90
1 files changed, 46 insertions, 44 deletions
diff --git a/rbutil/rbutilqt/installtalkwindow.cpp b/rbutil/rbutilqt/installtalkwindow.cpp
index de723ae33e..f2e042e2a5 100644
--- a/rbutil/rbutilqt/installtalkwindow.cpp
+++ b/rbutil/rbutilqt/installtalkwindow.cpp
@@ -28,47 +28,42 @@ InstallTalkWindow::InstallTalkWindow(QWidget *parent) : QDialog(parent)
28 ui.setupUi(this); 28 ui.setupUi(this);
29 talkcreator = new TalkFileCreator(this); 29 talkcreator = new TalkFileCreator(this);
30 30
31 connect(ui.buttonBrowse, SIGNAL(clicked()), this, SLOT(browseFolder()));
32 connect(ui.change,SIGNAL(clicked()),this,SLOT(change())); 31 connect(ui.change,SIGNAL(clicked()),this,SLOT(change()));
33 32
34 ui.recursive->setChecked(true); 33 ui.recursive->setChecked(true);
35 ui.GenerateOnlyNew->setChecked(true); 34 ui.GenerateOnlyNew->setChecked(true);
36 ui.StripExtensions->setChecked(true); 35 ui.StripExtensions->setChecked(true);
37 36
38 updateSettings(); 37 fsm = new QFileSystemModel(this);
39} 38 QString mp = RbSettings::value(RbSettings::Mountpoint).toString();
39 fsm->setRootPath(mp);
40 ui.treeView->setModel(fsm);
41 ui.treeView->setSelectionMode(QAbstractItemView::ExtendedSelection);
42 ui.treeView->setRootIndex(fsm->index(mp));
43 qDebug() << fsm->columnCount();
44 fsm->setFilter(QDir::AllDirs | QDir::NoDotAndDotDot);
45 for(int i = 1; i < fsm->columnCount(); i++)
46 ui.treeView->setColumnHidden(i, true);
47 ui.treeView->setHeaderHidden(true);
40 48
41void InstallTalkWindow::browseFolder() 49 updateSettings();
42{
43 QString selected;
44 QString startfolder;
45 if(QFileInfo(ui.lineTalkFolder->text()).isDir())
46 {
47 startfolder = ui.lineTalkFolder->text();
48 }
49 else
50 {
51 startfolder = RbSettings::value(RbSettings::Mountpoint).toString();
52 }
53 selected = QFileDialog::getExistingDirectory(this,
54 tr("Select folder to create talk files"), startfolder);
55 if(!selected.isEmpty())
56 {
57 ui.lineTalkFolder->setText(selected);
58 }
59} 50}
60 51
61 52
62void InstallTalkWindow::change() 53void InstallTalkWindow::change()
63{ 54{
64 Config *cw = new Config(this,4); 55 Config *cw = new Config(this, 4);
65 56
66 // make sure the current selected folder doesn't get lost on settings 57 // make sure the current selected folder doesn't get lost on settings
67 // changes. If the current selection is invalid don't accept it so 58 // changes.
68 // it gets reset to the old value after closing the settings dialog. 59 QModelIndexList si = ui.treeView->selectionModel()->selectedIndexes();
69 QString folderToTalk = ui.lineTalkFolder->text(); 60 QStringList foldersToTalk;
70 if(QFileInfo(folderToTalk).isDir()) 61 for(int i = 0; i < si.size(); i++) {
71 RbSettings::setValue(RbSettings::LastTalkedFolder, folderToTalk); 62 if(si.at(i).column() == 0) {
63 foldersToTalk.append(fsm->filePath(si.at(i)));
64 }
65 }
66 RbSettings::setValue(RbSettings::LastTalkedFolder, foldersToTalk);
72 connect(cw, SIGNAL(settingsUpdated()), this, SLOT(updateSettings())); 67 connect(cw, SIGNAL(settingsUpdated()), this, SLOT(updateSettings()));
73 68
74 cw->show(); 69 cw->show();
@@ -78,24 +73,20 @@ void InstallTalkWindow::accept()
78{ 73{
79 logger = new ProgressLoggerGui(this); 74 logger = new ProgressLoggerGui(this);
80 75
76 QModelIndexList si = ui.treeView->selectionModel()->selectedIndexes();
77 QStringList foldersToTalk;
78 for(int i = 0; i < si.size(); i++) {
79 if(si.at(i).column() == 0) {
80 foldersToTalk.append(fsm->filePath(si.at(i)));
81 }
82 }
81 connect(logger,SIGNAL(closed()),this,SLOT(close())); 83 connect(logger,SIGNAL(closed()),this,SLOT(close()));
82 logger->show(); 84 logger->show();
83 85
84 86 RbSettings::setValue(RbSettings::LastTalkedFolder, foldersToTalk);
85 QString folderToTalk = ui.lineTalkFolder->text();
86
87 if(!QFileInfo(folderToTalk).isDir())
88 {
89 logger->addItem(tr("The Folder to Talk is wrong!"),LOGERROR);
90 logger->setFinished();
91 return;
92 }
93
94 RbSettings::setValue(RbSettings::LastTalkedFolder, folderToTalk);
95 87
96 RbSettings::sync(); 88 RbSettings::sync();
97 89
98 talkcreator->setDir(QDir(folderToTalk));
99 talkcreator->setMountPoint(RbSettings::value(RbSettings::Mountpoint).toString()); 90 talkcreator->setMountPoint(RbSettings::value(RbSettings::Mountpoint).toString());
100 91
101 talkcreator->setGenerateOnlyNew(ui.GenerateOnlyNew->isChecked()); 92 talkcreator->setGenerateOnlyNew(ui.GenerateOnlyNew->isChecked());
@@ -110,7 +101,10 @@ void InstallTalkWindow::accept()
110 connect(talkcreator, SIGNAL(logProgress(int, int)), logger, SLOT(setProgress(int, int))); 101 connect(talkcreator, SIGNAL(logProgress(int, int)), logger, SLOT(setProgress(int, int)));
111 connect(logger,SIGNAL(aborted()),talkcreator,SLOT(abort())); 102 connect(logger,SIGNAL(aborted()),talkcreator,SLOT(abort()));
112 103
113 talkcreator->createTalkFiles(); 104 for(int i = 0; i < foldersToTalk.size(); i++) {
105 talkcreator->setDir(QDir(foldersToTalk.at(i)));
106 talkcreator->createTalkFiles();
107 }
114} 108}
115 109
116 110
@@ -119,14 +113,22 @@ void InstallTalkWindow::updateSettings(void)
119 QString ttsName = RbSettings::value(RbSettings::Tts).toString(); 113 QString ttsName = RbSettings::value(RbSettings::Tts).toString();
120 TTSBase* tts = TTSBase::getTTS(this,ttsName); 114 TTSBase* tts = TTSBase::getTTS(this,ttsName);
121 if(tts->configOk()) 115 if(tts->configOk())
122 ui.labelTtsProfile->setText(tr("Selected TTS engine: <b>%1</b>") 116 ui.labelTtsProfile->setText(tr("<b>%1</b>")
123 .arg(TTSBase::getTTSName(ttsName))); 117 .arg(TTSBase::getTTSName(ttsName)));
124 else 118 else
125 ui.labelTtsProfile->setText(tr("Selected TTS engine: <b>%1</b>") 119 ui.labelTtsProfile->setText(tr("<b>%1</b>")
126 .arg("Invalid TTS configuration!")); 120 .arg("Invalid TTS configuration!"));
127 121
128 ui.lineTalkFolder->setText( 122 QStringList folders = RbSettings::value(RbSettings::LastTalkedFolder).toStringList();
129 RbSettings::value(RbSettings::LastTalkedFolder).toString()); 123 for(int i = 0; i < folders.size(); ++i) {
124 QModelIndex mi = fsm->index(folders.at(i));
125 ui.treeView->selectionModel()->select(mi, QItemSelectionModel::Select);
126 // make sure all parent items are expanded.
127 while((mi = mi.parent()) != QModelIndex()) {
128 ui.treeView->setExpanded(mi, true);
129 }
130 }
131
130 emit settingsUpdated(); 132 emit settingsUpdated();
131} 133}
132 134