Chris@136: /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ Chris@136: Chris@136: /* Chris@136: Sonic Visualiser Chris@136: An audio file viewer and annotation editor. Chris@136: Centre for Digital Music, Queen Mary, University of London. Chris@202: This file copyright 2006 Chris Cannam and QMUL. Chris@136: Chris@136: This program is free software; you can redistribute it and/or Chris@136: modify it under the terms of the GNU General Public License as Chris@136: published by the Free Software Foundation; either version 2 of the Chris@136: License, or (at your option) any later version. See the file Chris@136: COPYING included with this distribution for more information. Chris@136: */ Chris@136: Chris@136: #include "Preferences.h" Chris@136: Chris@145: #include "Exceptions.h" Chris@145: Chris@145: #include "TempDirectory.h" Chris@145: Chris@145: #include Chris@145: #include Chris@156: #include Chris@156: #include Chris@145: Chris@136: Preferences * Chris@156: Preferences::m_instance = 0; Chris@156: Chris@156: Preferences * Chris@156: Preferences::getInstance() Chris@156: { Chris@156: if (!m_instance) m_instance = new Preferences(); Chris@156: return m_instance; Chris@156: } Chris@136: Chris@136: Preferences::Preferences() : Chris@553: m_spectrogramSmoothing(SpectrogramInterpolated), Chris@553: m_spectrogramXSmoothing(SpectrogramXInterpolated), Chris@140: m_tuningFrequency(440), Chris@140: m_propertyBoxLayout(VerticallyStacked), Chris@164: m_windowType(HanningWindow), Chris@277: m_resampleQuality(1), Chris@1225: m_runPluginsInProcess(true), Chris@297: m_omitRecentTemps(true), Chris@297: m_tempDirRoot(""), Chris@919: m_fixedSampleRate(0), Chris@354: m_resampleOnLoad(false), Chris@1313: m_gapless(true), Chris@921: m_normaliseAudio(false), Chris@354: m_viewFontSize(10), Chris@372: m_backgroundMode(BackgroundFromTheme), Chris@612: m_timeToTextMode(TimeToTextMs), Chris@1031: m_showHMS(true), Chris@892: m_octave(4), Chris@372: m_showSplash(true) Chris@136: { Chris@156: QSettings settings; Chris@156: settings.beginGroup("Preferences"); Chris@246: m_spectrogramSmoothing = SpectrogramSmoothing Chris@553: (settings.value("spectrogram-y-smoothing", int(m_spectrogramSmoothing)).toInt()); Chris@553: m_spectrogramXSmoothing = SpectrogramXSmoothing Chris@553: (settings.value("spectrogram-x-smoothing", int(m_spectrogramXSmoothing)).toInt()); Chris@1038: m_tuningFrequency = settings.value("tuning-frequency", 440.).toDouble(); Chris@145: m_propertyBoxLayout = PropertyBoxLayout Chris@156: (settings.value("property-box-layout", int(VerticallyStacked)).toInt()); Chris@145: m_windowType = WindowType Chris@156: (settings.value("window-type", int(HanningWindow)).toInt()); Chris@164: m_resampleQuality = settings.value("resample-quality", 1).toInt(); Chris@1225: m_runPluginsInProcess = settings.value("run-vamp-plugins-in-process", true).toBool(); Chris@1047: m_fixedSampleRate = settings.value("fixed-sample-rate", 0).toDouble(); Chris@304: m_resampleOnLoad = settings.value("resample-on-load", false).toBool(); Chris@1313: m_gapless = settings.value("gapless", true).toBool(); Chris@921: m_normaliseAudio = settings.value("normalise-audio", false).toBool(); Chris@297: m_backgroundMode = BackgroundMode Chris@297: (settings.value("background-mode", int(BackgroundFromTheme)).toInt()); Chris@612: m_timeToTextMode = TimeToTextMode Chris@612: (settings.value("time-to-text-mode", int(TimeToTextMs)).toInt()); Chris@1031: m_showHMS = (settings.value("show-hours-minutes-seconds", true)).toBool(); Chris@892: m_octave = (settings.value("octave-of-middle-c", 4)).toInt(); Chris@387: m_viewFontSize = settings.value("view-font-size", 10).toInt(); Chris@372: m_showSplash = settings.value("show-splash", true).toBool(); Chris@297: settings.endGroup(); Chris@297: Chris@297: settings.beginGroup("TempDirectory"); Chris@297: m_tempDirRoot = settings.value("create-in", "$HOME").toString(); Chris@156: settings.endGroup(); Chris@145: } Chris@145: Chris@145: Preferences::~Preferences() Chris@145: { Chris@136: } Chris@136: Chris@136: Preferences::PropertyList Chris@136: Preferences::getProperties() const Chris@136: { Chris@136: PropertyList props; Chris@553: props.push_back("Spectrogram Y Smoothing"); Chris@553: props.push_back("Spectrogram X Smoothing"); Chris@136: props.push_back("Tuning Frequency"); Chris@138: props.push_back("Property Box Layout"); Chris@140: props.push_back("Window Type"); Chris@164: props.push_back("Resample Quality"); Chris@277: props.push_back("Omit Temporaries from Recent Files"); Chris@297: props.push_back("Resample On Load"); Chris@1313: props.push_back("Use Gapless Mode"); Chris@921: props.push_back("Normalise Audio"); Chris@919: props.push_back("Fixed Sample Rate"); Chris@297: props.push_back("Temporary Directory Root"); Chris@297: props.push_back("Background Mode"); Chris@612: props.push_back("Time To Text Mode"); Chris@1031: props.push_back("Show Hours And Minutes"); Chris@892: props.push_back("Octave Numbering System"); Chris@354: props.push_back("View Font Size"); Chris@372: props.push_back("Show Splash Screen"); Chris@136: return props; Chris@136: } Chris@136: Chris@136: QString Chris@136: Preferences::getPropertyLabel(const PropertyName &name) const Chris@136: { Chris@553: if (name == "Spectrogram Y Smoothing") { Chris@372: return tr("Spectrogram y-axis interpolation:"); Chris@136: } Chris@553: if (name == "Spectrogram X Smoothing") { Chris@553: return tr("Spectrogram x-axis interpolation:"); Chris@553: } Chris@136: if (name == "Tuning Frequency") { Chris@141: return tr("Frequency of concert A"); Chris@136: } Chris@138: if (name == "Property Box Layout") { Chris@141: return tr("Property box layout"); Chris@138: } Chris@140: if (name == "Window Type") { Chris@141: return tr("Spectral analysis window shape"); Chris@140: } Chris@164: if (name == "Resample Quality") { Chris@165: return tr("Playback resampler type"); Chris@164: } Chris@921: if (name == "Normalise Audio") { Chris@921: return tr("Normalise audio signal when reading from audio file"); Chris@921: } Chris@277: if (name == "Omit Temporaries from Recent Files") { Chris@297: return tr("Omit temporaries from Recent Files menu"); Chris@297: } Chris@297: if (name == "Resample On Load") { Chris@297: return tr("Resample mismatching files on import"); Chris@297: } Chris@1313: if (name == "Use Gapless Mode") { Chris@1313: return tr("Load mp3 files in gapless mode"); Chris@1313: } Chris@919: if (name == "Fixed Sample Rate") { Chris@919: return tr("Single fixed sample rate to resample all files to"); Chris@919: } Chris@297: if (name == "Temporary Directory Root") { Chris@297: return tr("Location for cache file directory"); Chris@297: } Chris@297: if (name == "Background Mode") { Chris@297: return tr("Background colour preference"); Chris@277: } Chris@612: if (name == "Time To Text Mode") { Chris@1031: return tr("Time display precision"); Chris@1031: } Chris@1031: if (name == "Show Hours And Minutes") { Chris@1031: return tr("Use hours:minutes:seconds format"); Chris@612: } Chris@892: if (name == "Octave Numbering System") { Chris@892: return tr("Label middle C as"); Chris@892: } Chris@354: if (name == "View Font Size") { Chris@354: return tr("Font size for text overlays"); Chris@354: } Chris@372: if (name == "Show Splash Screen") { Chris@372: return tr("Show splash screen on startup"); Chris@372: } Chris@136: return name; Chris@136: } Chris@136: Chris@136: Preferences::PropertyType Chris@136: Preferences::getPropertyType(const PropertyName &name) const Chris@136: { Chris@553: if (name == "Spectrogram Y Smoothing") { Chris@553: return ValueProperty; Chris@553: } Chris@553: if (name == "Spectrogram X Smoothing") { Chris@246: return ValueProperty; Chris@136: } Chris@136: if (name == "Tuning Frequency") { Chris@136: return RangeProperty; Chris@136: } Chris@138: if (name == "Property Box Layout") { Chris@138: return ValueProperty; Chris@138: } Chris@140: if (name == "Window Type") { Chris@140: return ValueProperty; Chris@140: } Chris@164: if (name == "Resample Quality") { Chris@164: return ValueProperty; Chris@164: } Chris@921: if (name == "Normalise Audio") { Chris@921: return ToggleProperty; Chris@921: } Chris@277: if (name == "Omit Temporaries from Recent Files") { Chris@277: return ToggleProperty; Chris@277: } Chris@297: if (name == "Resample On Load") { Chris@297: return ToggleProperty; Chris@297: } Chris@1313: if (name == "Use Gapless Mode") { Chris@1313: return ToggleProperty; Chris@1313: } Chris@919: if (name == "Fixed Sample Rate") { Chris@919: return ValueProperty; Chris@919: } Chris@297: if (name == "Temporary Directory Root") { Chris@297: // It's an arbitrary string, we don't have a set of values for this Chris@297: return InvalidProperty; Chris@297: } Chris@297: if (name == "Background Mode") { Chris@297: return ValueProperty; Chris@297: } Chris@612: if (name == "Time To Text Mode") { Chris@612: return ValueProperty; Chris@612: } Chris@1031: if (name == "Show Hours And Minutes") { Chris@1031: return ToggleProperty; Chris@1031: } Chris@892: if (name == "Octave Numbering System") { Chris@892: return ValueProperty; Chris@892: } Chris@354: if (name == "View Font Size") { Chris@354: return RangeProperty; Chris@354: } Chris@372: if (name == "Show Splash Screen") { Chris@372: return ToggleProperty; Chris@372: } Chris@136: return InvalidProperty; Chris@136: } Chris@136: Chris@136: int Chris@136: Preferences::getPropertyRangeAndValue(const PropertyName &name, Chris@245: int *min, int *max, int *deflt) const Chris@136: { Chris@553: if (name == "Spectrogram Y Smoothing") { Chris@136: if (min) *min = 0; Chris@553: if (max) *max = 3; Chris@553: if (deflt) *deflt = int(SpectrogramInterpolated); Chris@246: return int(m_spectrogramSmoothing); Chris@136: } Chris@553: if (name == "Spectrogram X Smoothing") { Chris@553: if (min) *min = 0; Chris@553: if (max) *max = 1; Chris@553: if (deflt) *deflt = int(SpectrogramXInterpolated); Chris@553: return int(m_spectrogramXSmoothing); Chris@553: } Chris@136: Chris@136: //!!! freq mapping Chris@136: Chris@138: if (name == "Property Box Layout") { Chris@138: if (min) *min = 0; Chris@138: if (max) *max = 1; Chris@245: if (deflt) *deflt = 0; Chris@138: return m_propertyBoxLayout == Layered ? 1 : 0; Chris@138: } Chris@138: Chris@140: if (name == "Window Type") { Chris@140: if (min) *min = int(RectangularWindow); Chris@142: if (max) *max = int(BlackmanHarrisWindow); Chris@245: if (deflt) *deflt = int(HanningWindow); Chris@140: return int(m_windowType); Chris@140: } Chris@140: Chris@164: if (name == "Resample Quality") { Chris@164: if (min) *min = 0; Chris@164: if (max) *max = 2; Chris@245: if (deflt) *deflt = 1; Chris@164: return m_resampleQuality; Chris@164: } Chris@164: Chris@1225: if (name == "Run Vamp Plugins In Process") { Chris@1225: return m_runPluginsInProcess; Chris@1225: } Chris@1225: Chris@277: if (name == "Omit Temporaries from Recent Files") { Chris@277: if (deflt) *deflt = 1; Chris@1031: return m_omitRecentTemps ? 1 : 0; Chris@277: } Chris@277: Chris@297: if (name == "Background Mode") { Chris@297: if (min) *min = 0; Chris@297: if (max) *max = 2; Chris@297: if (deflt) *deflt = 0; Chris@297: return int(m_backgroundMode); Chris@297: } Chris@297: Chris@612: if (name == "Time To Text Mode") { Chris@612: if (min) *min = 0; Chris@612: if (max) *max = 6; Chris@612: if (deflt) *deflt = 0; Chris@612: return int(m_timeToTextMode); Chris@612: } Chris@612: Chris@1031: if (name == "Show Hours And Minutes") { Chris@1031: if (deflt) *deflt = 1; Chris@1031: return m_showHMS ? 1 : 0; Chris@1031: } Chris@1031: Chris@892: if (name == "Octave Numbering System") { Chris@892: // we don't support arbitrary octaves in the gui, because we Chris@892: // want to be able to label what the octave system comes Chris@892: // from. so we support 0, 3, 4 and 5. Chris@892: if (min) *min = 0; Chris@892: if (max) *max = 3; Chris@892: if (deflt) *deflt = 2; Chris@892: return int(getSystemWithMiddleCInOctave(m_octave)); Chris@892: } Chris@892: Chris@354: if (name == "View Font Size") { Chris@354: if (min) *min = 3; Chris@354: if (max) *max = 48; Chris@387: if (deflt) *deflt = 10; Chris@354: return int(m_viewFontSize); Chris@354: } Chris@354: Chris@372: if (name == "Show Splash Screen") { Chris@372: if (deflt) *deflt = 1; Chris@1031: return m_showSplash ? 1 : 0; Chris@372: } Chris@372: Chris@136: return 0; Chris@136: } Chris@136: Chris@136: QString Chris@136: Preferences::getPropertyValueLabel(const PropertyName &name, Chris@136: int value) const Chris@136: { Chris@138: if (name == "Property Box Layout") { Chris@141: if (value == 0) return tr("Show boxes for all panes"); Chris@141: else return tr("Show box for current pane only"); Chris@138: } Chris@140: if (name == "Window Type") { Chris@140: switch (WindowType(value)) { Chris@140: case RectangularWindow: return tr("Rectangular"); Chris@141: case BartlettWindow: return tr("Triangular"); Chris@140: case HammingWindow: return tr("Hamming"); Chris@381: case HanningWindow: return tr("Hann"); Chris@140: case BlackmanWindow: return tr("Blackman"); Chris@140: case GaussianWindow: return tr("Gaussian"); Chris@140: case ParzenWindow: return tr("Parzen"); Chris@142: case NuttallWindow: return tr("Nuttall"); Chris@142: case BlackmanHarrisWindow: return tr("Blackman-Harris"); Chris@140: } Chris@140: } Chris@164: if (name == "Resample Quality") { Chris@164: switch (value) { Chris@164: case 0: return tr("Fastest"); Chris@165: case 1: return tr("Standard"); Chris@164: case 2: return tr("Highest quality"); Chris@164: } Chris@164: } Chris@553: if (name == "Spectrogram Y Smoothing") { Chris@246: switch (value) { Chris@553: case NoSpectrogramSmoothing: return tr("None"); Chris@553: case SpectrogramInterpolated: return tr("Linear interpolation"); Chris@553: case SpectrogramZeroPadded: return tr("4 x Oversampling"); Chris@553: case SpectrogramZeroPaddedAndInterpolated: return tr("4 x Oversampling with interpolation"); Chris@553: } Chris@553: } Chris@553: if (name == "Spectrogram X Smoothing") { Chris@553: switch (value) { Chris@553: case NoSpectrogramXSmoothing: return tr("None"); Chris@553: case SpectrogramXInterpolated: return tr("Linear interpolation"); Chris@246: } Chris@246: } Chris@297: if (name == "Background Mode") { Chris@297: switch (value) { Chris@297: case BackgroundFromTheme: return tr("Follow desktop theme"); Chris@297: case DarkBackground: return tr("Dark background"); Chris@297: case LightBackground: return tr("Light background"); Chris@297: } Chris@297: } Chris@612: if (name == "Time To Text Mode") { Chris@612: switch (value) { Chris@612: case TimeToTextMs: return tr("Standard (to millisecond)"); Chris@612: case TimeToTextUs: return tr("High resolution (to microsecond)"); Chris@612: case TimeToText24Frame: return tr("24 FPS"); Chris@612: case TimeToText25Frame: return tr("25 FPS"); Chris@612: case TimeToText30Frame: return tr("30 FPS"); Chris@612: case TimeToText50Frame: return tr("50 FPS"); Chris@612: case TimeToText60Frame: return tr("60 FPS"); Chris@612: } Chris@612: } Chris@892: if (name == "Octave Numbering System") { Chris@892: switch (value) { Chris@892: case C0_Centre: return tr("C0 - middle of octave scale"); Chris@892: case C3_Logic: return tr("C3 - common MIDI sequencer convention"); Chris@892: case C4_ASA: return tr("C4 - ASA American standard"); Chris@892: case C5_Sonar: return tr("C5 - used in Cakewalk and others"); Chris@892: } Chris@892: } Chris@246: Chris@136: return ""; Chris@136: } Chris@136: Chris@136: QString Chris@136: Preferences::getPropertyContainerName() const Chris@136: { Chris@136: return tr("Preferences"); Chris@136: } Chris@136: Chris@136: QString Chris@136: Preferences::getPropertyContainerIconName() const Chris@136: { Chris@136: return "preferences"; Chris@136: } Chris@136: Chris@136: void Chris@136: Preferences::setProperty(const PropertyName &name, int value) Chris@136: { Chris@553: if (name == "Spectrogram Y Smoothing") { Chris@246: setSpectrogramSmoothing(SpectrogramSmoothing(value)); Chris@553: } else if (name == "Spectrogram X Smoothing") { Chris@553: setSpectrogramXSmoothing(SpectrogramXSmoothing(value)); Chris@136: } else if (name == "Tuning Frequency") { Chris@136: //!!! Chris@138: } else if (name == "Property Box Layout") { Chris@138: setPropertyBoxLayout(value == 0 ? VerticallyStacked : Layered); Chris@140: } else if (name == "Window Type") { Chris@140: setWindowType(WindowType(value)); Chris@164: } else if (name == "Resample Quality") { Chris@164: setResampleQuality(value); Chris@1225: } else if (name == "Run Vamp Plugins In Process") { Chris@1225: setRunPluginsInProcess(value ? true : false); Chris@277: } else if (name == "Omit Temporaries from Recent Files") { Chris@277: setOmitTempsFromRecentFiles(value ? true : false); Chris@297: } else if (name == "Background Mode") { Chris@297: setBackgroundMode(BackgroundMode(value)); Chris@612: } else if (name == "Time To Text Mode") { Chris@612: setTimeToTextMode(TimeToTextMode(value)); Chris@1031: } else if (name == "Show Hours And Minutes") { Chris@1031: setShowHMS(value ? true : false); Chris@892: } else if (name == "Octave Numbering System") { Chris@892: setOctaveOfMiddleC(getOctaveOfMiddleCInSystem Chris@892: (OctaveNumberingSystem(value))); Chris@354: } else if (name == "View Font Size") { Chris@354: setViewFontSize(value); Chris@372: } else if (name == "Show Splash Screen") { Chris@372: setShowSplash(value ? true : false); Chris@136: } Chris@136: } Chris@136: Chris@136: void Chris@246: Preferences::setSpectrogramSmoothing(SpectrogramSmoothing smoothing) Chris@136: { Chris@246: if (m_spectrogramSmoothing != smoothing) { Chris@246: Chris@246: // "smoothing" is one of those words that looks increasingly Chris@246: // ridiculous the more you see it. Smoothing smoothing smoothing. Chris@246: m_spectrogramSmoothing = smoothing; Chris@246: Chris@156: QSettings settings; Chris@156: settings.beginGroup("Preferences"); Chris@553: settings.setValue("spectrogram-y-smoothing", int(smoothing)); Chris@156: settings.endGroup(); Chris@553: emit propertyChanged("Spectrogram Y Smoothing"); Chris@553: } Chris@553: } Chris@553: Chris@553: void Chris@553: Preferences::setSpectrogramXSmoothing(SpectrogramXSmoothing smoothing) Chris@553: { Chris@553: if (m_spectrogramXSmoothing != smoothing) { Chris@553: Chris@553: // "smoothing" is one of those words that looks increasingly Chris@553: // ridiculous the more you see it. Smoothing smoothing smoothing. Chris@553: m_spectrogramXSmoothing = smoothing; Chris@553: Chris@553: QSettings settings; Chris@553: settings.beginGroup("Preferences"); Chris@553: settings.setValue("spectrogram-x-smoothing", int(smoothing)); Chris@553: settings.endGroup(); Chris@553: emit propertyChanged("Spectrogram X Smoothing"); Chris@138: } Chris@136: } Chris@136: Chris@136: void Chris@1038: Preferences::setTuningFrequency(double freq) Chris@136: { Chris@138: if (m_tuningFrequency != freq) { Chris@138: m_tuningFrequency = freq; Chris@156: QSettings settings; Chris@156: settings.beginGroup("Preferences"); Chris@156: settings.setValue("tuning-frequency", freq); Chris@156: settings.endGroup(); Chris@141: emit propertyChanged("Tuning Frequency"); Chris@138: } Chris@136: } Chris@136: Chris@138: void Chris@138: Preferences::setPropertyBoxLayout(PropertyBoxLayout layout) Chris@138: { Chris@138: if (m_propertyBoxLayout != layout) { Chris@138: m_propertyBoxLayout = layout; Chris@156: QSettings settings; Chris@156: settings.beginGroup("Preferences"); Chris@156: settings.setValue("property-box-layout", int(layout)); Chris@156: settings.endGroup(); Chris@141: emit propertyChanged("Property Box Layout"); Chris@138: } Chris@138: } Chris@138: Chris@140: void Chris@140: Preferences::setWindowType(WindowType type) Chris@140: { Chris@140: if (m_windowType != type) { Chris@140: m_windowType = type; Chris@156: QSettings settings; Chris@156: settings.beginGroup("Preferences"); Chris@156: settings.setValue("window-type", int(type)); Chris@156: settings.endGroup(); Chris@141: emit propertyChanged("Window Type"); Chris@140: } Chris@140: } Chris@140: Chris@164: void Chris@164: Preferences::setResampleQuality(int q) Chris@164: { Chris@164: if (m_resampleQuality != q) { Chris@164: m_resampleQuality = q; Chris@164: QSettings settings; Chris@164: settings.beginGroup("Preferences"); Chris@164: settings.setValue("resample-quality", q); Chris@164: settings.endGroup(); Chris@164: emit propertyChanged("Resample Quality"); Chris@164: } Chris@164: } Chris@277: Chris@277: void Chris@1225: Preferences::setRunPluginsInProcess(bool run) Chris@1225: { Chris@1225: if (m_runPluginsInProcess != run) { Chris@1225: m_runPluginsInProcess = run; Chris@1225: QSettings settings; Chris@1225: settings.beginGroup("Preferences"); Chris@1225: settings.setValue("run-vamp-plugins-in-process", run); Chris@1225: settings.endGroup(); Chris@1225: emit propertyChanged("Run Vamp Plugins In Process"); Chris@1225: } Chris@1225: } Chris@1225: Chris@1225: void Chris@277: Preferences::setOmitTempsFromRecentFiles(bool omit) Chris@277: { Chris@277: if (m_omitRecentTemps != omit) { Chris@277: m_omitRecentTemps = omit; Chris@277: QSettings settings; Chris@277: settings.beginGroup("Preferences"); Chris@277: settings.setValue("omit-recent-temporaries", omit); Chris@277: settings.endGroup(); Chris@277: emit propertyChanged("Omit Temporaries from Recent Files"); Chris@277: } Chris@277: } Chris@297: Chris@297: void Chris@297: Preferences::setTemporaryDirectoryRoot(QString root) Chris@297: { Chris@297: if (root == QDir::home().absolutePath()) { Chris@297: root = "$HOME"; Chris@297: } Chris@297: if (m_tempDirRoot != root) { Chris@297: m_tempDirRoot = root; Chris@297: QSettings settings; Chris@297: settings.beginGroup("TempDirectory"); Chris@297: settings.setValue("create-in", root); Chris@297: settings.endGroup(); Chris@297: emit propertyChanged("Temporary Directory Root"); Chris@297: } Chris@297: } Chris@297: Chris@297: void Chris@297: Preferences::setResampleOnLoad(bool resample) Chris@297: { Chris@297: if (m_resampleOnLoad != resample) { Chris@297: m_resampleOnLoad = resample; Chris@297: QSettings settings; Chris@297: settings.beginGroup("Preferences"); Chris@297: settings.setValue("resample-on-load", resample); Chris@297: settings.endGroup(); Chris@297: emit propertyChanged("Resample On Load"); Chris@297: } Chris@297: } Chris@297: Chris@297: void Chris@1313: Preferences::setUseGaplessMode(bool gapless) Chris@1313: { Chris@1313: if (m_gapless != gapless) { Chris@1313: m_gapless = gapless; Chris@1313: QSettings settings; Chris@1313: settings.beginGroup("Preferences"); Chris@1313: settings.setValue("gapless", gapless); Chris@1313: settings.endGroup(); Chris@1313: emit propertyChanged("Use Gapless Mode"); Chris@1313: } Chris@1313: } Chris@1313: Chris@1313: void Chris@1047: Preferences::setFixedSampleRate(sv_samplerate_t rate) Chris@919: { Chris@919: if (m_fixedSampleRate != rate) { Chris@919: m_fixedSampleRate = rate; Chris@919: QSettings settings; Chris@919: settings.beginGroup("Preferences"); Chris@919: settings.setValue("fixed-sample-rate", rate); Chris@919: settings.endGroup(); Chris@919: emit propertyChanged("Fixed Sample Rate"); Chris@919: } Chris@919: } Chris@919: Chris@919: void Chris@921: Preferences::setNormaliseAudio(bool norm) Chris@921: { Chris@921: if (m_normaliseAudio != norm) { Chris@921: m_normaliseAudio = norm; Chris@921: QSettings settings; Chris@921: settings.beginGroup("Preferences"); Chris@921: settings.setValue("normalise-audio", norm); Chris@921: settings.endGroup(); Chris@921: emit propertyChanged("Normalise Audio"); Chris@921: } Chris@921: } Chris@921: Chris@921: void Chris@297: Preferences::setBackgroundMode(BackgroundMode mode) Chris@297: { Chris@297: if (m_backgroundMode != mode) { Chris@297: Chris@297: m_backgroundMode = mode; Chris@297: Chris@297: QSettings settings; Chris@297: settings.beginGroup("Preferences"); Chris@297: settings.setValue("background-mode", int(mode)); Chris@297: settings.endGroup(); Chris@297: emit propertyChanged("Background Mode"); Chris@297: } Chris@297: } Chris@297: Chris@354: void Chris@612: Preferences::setTimeToTextMode(TimeToTextMode mode) Chris@612: { Chris@612: if (m_timeToTextMode != mode) { Chris@612: Chris@612: m_timeToTextMode = mode; Chris@612: Chris@612: QSettings settings; Chris@612: settings.beginGroup("Preferences"); Chris@612: settings.setValue("time-to-text-mode", int(mode)); Chris@612: settings.endGroup(); Chris@612: emit propertyChanged("Time To Text Mode"); Chris@612: } Chris@612: } Chris@612: Chris@612: void Chris@1031: Preferences::setShowHMS(bool show) Chris@1031: { Chris@1031: if (m_showHMS != show) { Chris@1031: Chris@1031: m_showHMS = show; Chris@1031: Chris@1031: QSettings settings; Chris@1031: settings.beginGroup("Preferences"); Chris@1031: settings.setValue("show-hours-minutes-seconds", show); Chris@1031: settings.endGroup(); Chris@1031: emit propertyChanged("Show Hours And Minutes"); Chris@1031: } Chris@1031: } Chris@1031: Chris@1031: void Chris@892: Preferences::setOctaveOfMiddleC(int oct) Chris@892: { Chris@892: if (m_octave != oct) { Chris@892: Chris@892: m_octave = oct; Chris@892: Chris@892: QSettings settings; Chris@892: settings.beginGroup("Preferences"); Chris@892: settings.setValue("octave-of-middle-c", int(oct)); Chris@892: settings.endGroup(); Chris@892: emit propertyChanged("Octave Numbering System"); Chris@892: } Chris@892: } Chris@892: Chris@892: int Chris@892: Preferences::getOctaveOfMiddleCInSystem(OctaveNumberingSystem s) Chris@892: { Chris@892: switch (s) { Chris@892: case C0_Centre: return 0; Chris@892: case C3_Logic: return 3; Chris@892: case C4_ASA: return 4; Chris@892: case C5_Sonar: return 5; Chris@892: default: return 4; Chris@892: } Chris@892: } Chris@892: Chris@892: Preferences::OctaveNumberingSystem Chris@892: Preferences::getSystemWithMiddleCInOctave(int o) Chris@892: { Chris@892: switch (o) { Chris@892: case 0: return C0_Centre; Chris@892: case 3: return C3_Logic; Chris@892: case 4: return C4_ASA; Chris@892: case 5: return C5_Sonar; Chris@892: default: return C4_ASA; Chris@892: } Chris@892: } Chris@892: Chris@892: void Chris@354: Preferences::setViewFontSize(int size) Chris@354: { Chris@354: if (m_viewFontSize != size) { Chris@297: Chris@354: m_viewFontSize = size; Chris@354: Chris@354: QSettings settings; Chris@354: settings.beginGroup("Preferences"); Chris@354: settings.setValue("view-font-size", size); Chris@354: settings.endGroup(); Chris@354: emit propertyChanged("View Font Size"); Chris@354: } Chris@354: } Chris@354: Chris@372: void Chris@372: Preferences::setShowSplash(bool show) Chris@372: { Chris@372: if (m_showSplash != show) { Chris@372: Chris@372: m_showSplash = show; Chris@372: Chris@372: QSettings settings; Chris@372: settings.beginGroup("Preferences"); Chris@372: settings.setValue("show-splash", show); Chris@372: settings.endGroup(); Chris@372: emit propertyChanged("Show Splash Screen"); Chris@372: } Chris@372: } Chris@372: