comparison main/PreferencesDialog.cpp @ 456:4bccf2014f80

Merge from branch "templating"
author Chris Cannam
date Sun, 26 Jun 2011 19:56:01 +0100
parents 868f73825b37 e3644cd9cf99
children 33d0632255b5 e5e6625deb85
comparison
equal deleted inserted replaced
452:fa0c3e79ea8e 456:4bccf2014f80
29 #include <QTabWidget> 29 #include <QTabWidget>
30 #include <QLineEdit> 30 #include <QLineEdit>
31 #include <QFileDialog> 31 #include <QFileDialog>
32 #include <QMessageBox> 32 #include <QMessageBox>
33 #include <QSpinBox> 33 #include <QSpinBox>
34 #include <QListWidget>
34 #include <QSettings> 35 #include <QSettings>
36
37 #include <set>
35 38
36 #include "widgets/WindowTypeSelector.h" 39 #include "widgets/WindowTypeSelector.h"
37 #include "widgets/IconLoader.h" 40 #include "widgets/IconLoader.h"
38 #include "base/Preferences.h" 41 #include "base/Preferences.h"
39 #include "audioio/AudioTargetFactory.h" 42 #include "audioio/AudioTargetFactory.h"
43 #include "base/ResourceFinder.h"
40 44
41 PreferencesDialog::PreferencesDialog(QWidget *parent, Qt::WFlags flags) : 45 PreferencesDialog::PreferencesDialog(QWidget *parent, Qt::WFlags flags) :
42 QDialog(parent, flags), 46 QDialog(parent, flags),
43 m_audioDevice(0), 47 m_audioDevice(0),
44 m_changesOnRestart(false) 48 m_changesOnRestart(false)
48 Preferences *prefs = Preferences::getInstance(); 52 Preferences *prefs = Preferences::getInstance();
49 53
50 QGridLayout *grid = new QGridLayout; 54 QGridLayout *grid = new QGridLayout;
51 setLayout(grid); 55 setLayout(grid);
52 56
53 QTabWidget *tab = new QTabWidget; 57 m_tabs = new QTabWidget;
54 grid->addWidget(tab, 0, 0); 58 grid->addWidget(m_tabs, 0, 0);
55 59
56 tab->setTabPosition(QTabWidget::North); 60 m_tabs->setTabPosition(QTabWidget::North);
57 61
58 // Create this first, as slots that get called from the ctor will 62 // Create this first, as slots that get called from the ctor will
59 // refer to it 63 // refer to it
60 m_applyButton = new QPushButton(tr("Apply")); 64 m_applyButton = new QPushButton(tr("Apply"));
61 65
255 row, 0); 259 row, 0);
256 subgrid->addWidget(resampleQuality, row++, 1, 1, 2); 260 subgrid->addWidget(resampleQuality, row++, 1, 1, 2);
257 261
258 subgrid->setRowStretch(row, 10); 262 subgrid->setRowStretch(row, 10);
259 263
260 tab->addTab(frame, tr("&General")); 264 m_tabOrdering[GeneralTab] = m_tabs->count();
265 m_tabs->addTab(frame, tr("&General"));
261 266
262 // Appearance tab 267 // Appearance tab
263 268
264 frame = new QFrame; 269 frame = new QFrame;
265 subgrid = new QGridLayout; 270 subgrid = new QGridLayout;
293 row, 0); 298 row, 0);
294 subgrid->addWidget(showSplash, row++, 1, 1, 1); 299 subgrid->addWidget(showSplash, row++, 1, 1, 1);
295 300
296 subgrid->setRowStretch(row, 10); 301 subgrid->setRowStretch(row, 10);
297 302
298 tab->addTab(frame, tr("&Appearance")); 303 m_tabOrdering[AppearanceTab] = m_tabs->count();
304 m_tabs->addTab(frame, tr("&Appearance"));
299 305
300 // Analysis tab 306 // Analysis tab
301 307
302 frame = new QFrame; 308 frame = new QFrame;
303 subgrid = new QGridLayout; 309 subgrid = new QGridLayout;
326 subgrid->setRowStretch(row, 10); 332 subgrid->setRowStretch(row, 10);
327 row++; 333 row++;
328 334
329 subgrid->setRowStretch(row, 10); 335 subgrid->setRowStretch(row, 10);
330 336
331 tab->addTab(frame, tr("Anal&ysis")); 337 m_tabOrdering[AnalysisTab] = m_tabs->count();
338 m_tabs->addTab(frame, tr("Anal&ysis"));
339
340 // Template tab
341
342 frame = new QFrame;
343 subgrid = new QGridLayout;
344 frame->setLayout(subgrid);
345 row = 0;
346
347 subgrid->addWidget(new QLabel(tr("Default session template for audio files:")), row++, 0);
348
349 QListWidget *lw = new QListWidget();
350 subgrid->addWidget(lw, row, 0);
351 subgrid->setRowStretch(row, 10);
352 row++;
353
354 settings.beginGroup("MainWindow");
355 m_currentTemplate = settings.value("sessiontemplate", "").toString();
356 settings.endGroup();
357
358 lw->addItem(tr("Standard Waveform"));
359 if (m_currentTemplate == "" || m_currentTemplate == "default") {
360 lw->setCurrentRow(lw->count()-1);
361 }
362 m_templates.push_back("");
363
364 QStringList templates = ResourceFinder().getResourceFiles("templates", "svt");
365
366 std::set<QString> byName;
367 foreach (QString t, templates) {
368 byName.insert(QFileInfo(t).baseName());
369 }
370
371 foreach (QString t, byName) {
372 if (t.toLower() == "default") continue;
373 m_templates.push_back(t);
374 lw->addItem(t);
375 if (m_currentTemplate == t) {
376 lw->setCurrentRow(lw->count()-1);
377 }
378 }
379
380 connect(lw, SIGNAL(currentRowChanged(int)), this, SLOT(defaultTemplateChanged(int)));
381
382 m_tabOrdering[TemplateTab] = m_tabs->count();
383 m_tabs->addTab(frame, tr("Session &Template"));
332 384
333 QDialogButtonBox *bb = new QDialogButtonBox(Qt::Horizontal); 385 QDialogButtonBox *bb = new QDialogButtonBox(Qt::Horizontal);
334 grid->addWidget(bb, 1, 0); 386 grid->addWidget(bb, 1, 0);
335 387
336 QPushButton *ok = new QPushButton(tr("OK")); 388 QPushButton *ok = new QPushButton(tr("OK"));
349 { 401 {
350 SVDEBUG << "PreferencesDialog::~PreferencesDialog()" << endl; 402 SVDEBUG << "PreferencesDialog::~PreferencesDialog()" << endl;
351 } 403 }
352 404
353 void 405 void
406 PreferencesDialog::switchToTab(Tab t)
407 {
408 if (m_tabOrdering.contains(t)) {
409 m_tabs->setCurrentIndex(m_tabOrdering[t]);
410 }
411 }
412
413 void
354 PreferencesDialog::windowTypeChanged(WindowType type) 414 PreferencesDialog::windowTypeChanged(WindowType type)
355 { 415 {
356 m_windowType = type; 416 m_windowType = type;
357 m_applyButton->setEnabled(true); 417 m_applyButton->setEnabled(true);
358 } 418 }
412 PreferencesDialog::showSplashChanged(int state) 472 PreferencesDialog::showSplashChanged(int state)
413 { 473 {
414 m_showSplash = (state == Qt::Checked); 474 m_showSplash = (state == Qt::Checked);
415 m_applyButton->setEnabled(true); 475 m_applyButton->setEnabled(true);
416 m_changesOnRestart = true; 476 m_changesOnRestart = true;
477 }
478
479 void
480 PreferencesDialog::defaultTemplateChanged(int i)
481 {
482 m_currentTemplate = m_templates[i];
483 m_applyButton->setEnabled(true);
417 } 484 }
418 485
419 void 486 void
420 PreferencesDialog::tempDirRootChanged(QString r) 487 PreferencesDialog::tempDirRootChanged(QString r)
421 { 488 {
486 553
487 std::vector<QString> devices = 554 std::vector<QString> devices =
488 AudioTargetFactory::getInstance()->getCallbackTargetNames(); 555 AudioTargetFactory::getInstance()->getCallbackTargetNames();
489 556
490 QSettings settings; 557 QSettings settings;
558
491 settings.beginGroup("Preferences"); 559 settings.beginGroup("Preferences");
492 settings.setValue("audio-target", devices[m_audioDevice]); 560 settings.setValue("audio-target", devices[m_audioDevice]);
561 settings.endGroup();
562
563 settings.beginGroup("MainWindow");
564 settings.setValue("sessiontemplate", m_currentTemplate);
493 settings.endGroup(); 565 settings.endGroup();
494 566
495 m_applyButton->setEnabled(false); 567 m_applyButton->setEnabled(false);
496 568
497 if (m_changesOnRestart) { 569 if (m_changesOnRestart) {