Mercurial > hg > sonic-visualiser
comparison main/PreferencesDialog.cpp @ 436:6d827453657f templating
Add default session template to Preferences; tidy up menu functions and states
author | Chris Cannam |
---|---|
date | Mon, 23 May 2011 16:13:30 +0100 |
parents | a3b2cba73143 |
children | e3644cd9cf99 |
comparison
equal
deleted
inserted
replaced
435:586eb6764a2b | 436:6d827453657f |
---|---|
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("Classic 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 std::cerr << "PreferencesDialog::~PreferencesDialog()" << std::endl; | 402 std::cerr << "PreferencesDialog::~PreferencesDialog()" << std::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) { |