annotate base/Preferences.h @ 985:f073d924a7c3

Fix #1058 clicking row in Layer Edit dialog when colour 3d plot layer active jumps to wrong frame (was using sample rate where resolution intended)
author Chris Cannam
date Tue, 16 Sep 2014 10:29:19 +0100
parents 2896b8872834
children 344c9ea90181
rev   line source
Chris@136 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
Chris@136 2
Chris@136 3 /*
Chris@136 4 Sonic Visualiser
Chris@136 5 An audio file viewer and annotation editor.
Chris@136 6 Centre for Digital Music, Queen Mary, University of London.
Chris@202 7 This file copyright 2006 Chris Cannam and QMUL.
Chris@136 8
Chris@136 9 This program is free software; you can redistribute it and/or
Chris@136 10 modify it under the terms of the GNU General Public License as
Chris@136 11 published by the Free Software Foundation; either version 2 of the
Chris@136 12 License, or (at your option) any later version. See the file
Chris@136 13 COPYING included with this distribution for more information.
Chris@136 14 */
Chris@136 15
Chris@136 16 #ifndef _PREFERENCES_H_
Chris@136 17 #define _PREFERENCES_H_
Chris@136 18
Chris@136 19 #include "PropertyContainer.h"
Chris@136 20
Chris@140 21 #include "Window.h"
Chris@140 22
Chris@136 23 class Preferences : public PropertyContainer
Chris@136 24 {
Chris@136 25 Q_OBJECT
Chris@136 26
Chris@136 27 public:
Chris@156 28 static Preferences *getInstance();
Chris@136 29
Chris@136 30 virtual PropertyList getProperties() const;
Chris@136 31 virtual QString getPropertyLabel(const PropertyName &) const;
Chris@136 32 virtual PropertyType getPropertyType(const PropertyName &) const;
Chris@245 33 virtual int getPropertyRangeAndValue(const PropertyName &, int *, int *, int *) const;
Chris@136 34 virtual QString getPropertyValueLabel(const PropertyName &, int value) const;
Chris@136 35 virtual QString getPropertyContainerName() const;
Chris@136 36 virtual QString getPropertyContainerIconName() const;
Chris@136 37
Chris@246 38 enum SpectrogramSmoothing {
Chris@246 39 NoSpectrogramSmoothing,
Chris@246 40 SpectrogramInterpolated,
Chris@246 41 SpectrogramZeroPadded,
Chris@246 42 SpectrogramZeroPaddedAndInterpolated
Chris@246 43 };
Chris@246 44
Chris@553 45 enum SpectrogramXSmoothing {
Chris@553 46 NoSpectrogramXSmoothing,
Chris@553 47 SpectrogramXInterpolated
Chris@553 48 };
Chris@553 49
Chris@246 50 SpectrogramSmoothing getSpectrogramSmoothing() const { return m_spectrogramSmoothing; }
Chris@553 51 SpectrogramXSmoothing getSpectrogramXSmoothing() const { return m_spectrogramXSmoothing; }
Chris@136 52 float getTuningFrequency() const { return m_tuningFrequency; }
Chris@140 53 WindowType getWindowType() const { return m_windowType; }
Chris@164 54 int getResampleQuality() const { return m_resampleQuality; }
Chris@136 55
Chris@138 56 //!!! harmonise with PaneStack
Chris@138 57 enum PropertyBoxLayout {
Chris@138 58 VerticallyStacked,
Chris@138 59 Layered
Chris@138 60 };
Chris@138 61 PropertyBoxLayout getPropertyBoxLayout() const { return m_propertyBoxLayout; }
Chris@138 62
Chris@354 63 int getViewFontSize() const { return m_viewFontSize; }
Chris@354 64
Chris@277 65 bool getOmitTempsFromRecentFiles() const { return m_omitRecentTemps; }
Chris@277 66
Chris@297 67 QString getTemporaryDirectoryRoot() const { return m_tempDirRoot; }
Chris@297 68
Chris@919 69 /// If we should always resample audio to the same rate, return it; otherwise (the normal case) return 0
Chris@919 70 int getFixedSampleRate() const { return m_fixedSampleRate; }
Chris@919 71
Chris@919 72 /// True if we should resample second or subsequent audio file to match first audio file's rate
Chris@297 73 bool getResampleOnLoad() const { return m_resampleOnLoad; }
Chris@297 74
Chris@921 75 /// True if audio files should be loaded with normalisation (max == 1)
Chris@921 76 bool getNormaliseAudio() const { return m_normaliseAudio; }
Chris@921 77
Chris@297 78 enum BackgroundMode {
Chris@297 79 BackgroundFromTheme,
Chris@297 80 DarkBackground,
Chris@297 81 LightBackground
Chris@297 82 };
Chris@297 83 BackgroundMode getBackgroundMode() const { return m_backgroundMode; }
Chris@297 84
Chris@612 85 enum TimeToTextMode {
Chris@612 86 TimeToTextMs,
Chris@612 87 TimeToTextUs,
Chris@612 88 TimeToText24Frame,
Chris@612 89 TimeToText25Frame,
Chris@612 90 TimeToText30Frame,
Chris@612 91 TimeToText50Frame,
Chris@612 92 TimeToText60Frame
Chris@612 93 };
Chris@612 94 TimeToTextMode getTimeToTextMode() const { return m_timeToTextMode; }
Chris@612 95
Chris@892 96 int getOctaveOfMiddleC() const {
Chris@892 97 // weed out unsupported octaves
Chris@892 98 return getOctaveOfMiddleCInSystem(getSystemWithMiddleCInOctave(m_octave));
Chris@892 99 }
Chris@892 100 int getOctaveOfLowestMIDINote() const {
Chris@892 101 return getOctaveOfMiddleC() - 5;
Chris@892 102 }
Chris@892 103
Chris@372 104 bool getShowSplash() const { return m_showSplash; }
Chris@372 105
Chris@136 106 public slots:
Chris@136 107 virtual void setProperty(const PropertyName &, int);
Chris@136 108
Chris@246 109 void setSpectrogramSmoothing(SpectrogramSmoothing smoothing);
Chris@553 110 void setSpectrogramXSmoothing(SpectrogramXSmoothing smoothing);
Chris@136 111 void setTuningFrequency(float freq);
Chris@138 112 void setPropertyBoxLayout(PropertyBoxLayout layout);
Chris@140 113 void setWindowType(WindowType type);
Chris@164 114 void setResampleQuality(int quality);
Chris@277 115 void setOmitTempsFromRecentFiles(bool omit);
Chris@297 116 void setTemporaryDirectoryRoot(QString tempDirRoot);
Chris@919 117 void setFixedSampleRate(int);
Chris@297 118 void setResampleOnLoad(bool);
Chris@921 119 void setNormaliseAudio(bool);
Chris@297 120 void setBackgroundMode(BackgroundMode mode);
Chris@612 121 void setTimeToTextMode(TimeToTextMode mode);
Chris@892 122 void setOctaveOfMiddleC(int oct);
Chris@354 123 void setViewFontSize(int size);
Chris@372 124 void setShowSplash(bool);
Chris@136 125
Chris@136 126 private:
Chris@145 127 Preferences(); // may throw DirectoryCreationFailed
Chris@145 128 virtual ~Preferences();
Chris@136 129
Chris@136 130 static Preferences *m_instance;
Chris@136 131
Chris@892 132 // We don't support arbitrary octaves in the gui, because we want
Chris@892 133 // to be able to label what the octave system comes from. These
Chris@892 134 // are the ones we support. (But we save and load as octave
Chris@892 135 // numbers, so as not to make the prefs format really confusing)
Chris@892 136 enum OctaveNumberingSystem {
Chris@892 137 C0_Centre,
Chris@892 138 C3_Logic,
Chris@892 139 C4_ASA,
Chris@892 140 C5_Sonar
Chris@892 141 };
Chris@892 142 static int getOctaveOfMiddleCInSystem(OctaveNumberingSystem s);
Chris@892 143 static OctaveNumberingSystem getSystemWithMiddleCInOctave(int o);
Chris@892 144
Chris@246 145 SpectrogramSmoothing m_spectrogramSmoothing;
Chris@553 146 SpectrogramXSmoothing m_spectrogramXSmoothing;
Chris@136 147 float m_tuningFrequency;
Chris@138 148 PropertyBoxLayout m_propertyBoxLayout;
Chris@140 149 WindowType m_windowType;
Chris@164 150 int m_resampleQuality;
Chris@277 151 bool m_omitRecentTemps;
Chris@297 152 QString m_tempDirRoot;
Chris@919 153 int m_fixedSampleRate;
Chris@297 154 bool m_resampleOnLoad;
Chris@921 155 bool m_normaliseAudio;
Chris@354 156 int m_viewFontSize;
Chris@297 157 BackgroundMode m_backgroundMode;
Chris@612 158 TimeToTextMode m_timeToTextMode;
Chris@892 159 int m_octave;
Chris@372 160 bool m_showSplash;
Chris@136 161 };
Chris@136 162
Chris@136 163 #endif