/[svn]/gigedit/trunk/src/gigedit/Settings.h
ViewVC logotype

Contents of /gigedit/trunk/src/gigedit/Settings.h

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3831 - (show annotations) (download) (as text)
Thu Oct 15 18:08:49 2020 UTC (8 days, 9 hours ago) by schoenebeck
File MIME type: text/x-c++hdr
File size: 7948 byte(s)
* Main Window: auto save & restore the vertical splitter position.

* Bumped version (1.1.1.svn33).

1 /*
2 Copyright (c) 2014-2020 Christian Schoenebeck
3
4 This file is part of "gigedit" and released under the terms of the
5 GNU General Public License version 2.
6 */
7
8 #ifndef GIGEDIT_SETTINGS
9 #define GIGEDIT_SETTINGS
10
11 #include <typeinfo>
12 #include <glibmm/object.h>
13 #include <glibmm/property.h>
14 #include <vector>
15 #include "global.h"
16
17 /**
18 * Reflects, saves and restores all settings for the gigedit application.
19 *
20 * This class holds a bunch of custom Property objects which can be accessed
21 * as if they were basic data types (i.e. by using assignment operator, etc.).
22 * As soon as a property gets modified this way, it will automatically be saved
23 * to a local config file.
24 */
25 class Settings : public Glib::Object {
26 public:
27 /**
28 * Data types for the individual settings.
29 */
30 enum RawValueType_t {
31 BOOLEAN,
32 INTEGER,
33 UNKNOWN
34 };
35
36 /**
37 * All settings are grouped into these settings groups.
38 */
39 enum Group_t {
40 GLOBAL,
41 MAIN_WINDOW,
42 SCRIPT_EDITOR,
43 DIMENSION_MANAGER,
44 SCRIPT_SLOTS,
45 COMBINE_INSTRUMENTS,
46 MIDI_RULES,
47 FILE_PROPS,
48 INSTR_PROPS,
49 SAMPLE_PROPS,
50 SAMPLE_REFS,
51 MACRO_EDITOR,
52 MACROS_SETUP,
53 MACROS,
54 };
55
56 /**
57 * Extension of regular Glib::Property template class; this one
58 * automatically calls Settings::onPropertyChanged() method passing this
59 * property object as pointer; and it allows to assign new values to this
60 * property by using the regular assignment operator; and requires a
61 * "Setting group" to be assigned to the property at construction time.
62 */
63 template<typename T>
64 class Property : public Glib::Property<T> {
65 public:
66 Property(Settings& object, Group_t group, const Glib::ustring& name)
67 : Glib::Property<T>::Property(object, name)
68 {
69 m_settings = &object;
70 m_group = group;
71 const RawValueType_t type = rawValueType();
72 Glib::Property<T>::get_proxy().signal_changed().connect(
73 sigc::bind(
74 sigc::bind(
75 sigc::bind(
76 sigc::mem_fun(*m_settings, &Settings::onPropertyChanged),
77 m_group
78 ),
79 type
80 ),
81 this
82 )
83 );
84 }
85
86 Property(Settings& object, Group_t group, const Glib::ustring& name, const T& default_value)
87 : Glib::Property<T>::Property(object, name, default_value)
88 {
89 m_settings = &object;
90 m_group = group;
91 const RawValueType_t type = rawValueType();
92 Glib::Property<T>::get_proxy().signal_changed().connect(
93 sigc::bind(
94 sigc::bind(
95 sigc::bind(
96 sigc::mem_fun(*m_settings, &Settings::onPropertyChanged),
97 m_group
98 ),
99 type
100 ),
101 this
102 )
103 );
104 }
105
106 Property<T>& operator=(const T value) {
107 Glib::Property<T>::set_value(value);
108 return *this;
109 }
110
111 RawValueType_t rawValueType() const {
112 const std::string name = typeid(T).name();
113 if (name == "bool" || name == "b") return BOOLEAN;
114 if (name == "int" || name == "i") return INTEGER;
115 return UNKNOWN;
116 }
117
118 Group_t group() const { return m_group; }
119
120 private:
121 Settings* m_settings;
122 Group_t m_group;
123 };
124
125 // settings of "Global" group
126 Property<bool> warnUserOnExtensions; ///< if enabled, the user shall he be warned if he is trying to use a gig format extension that will not work with Gigasampler/GigaStudio
127 Property<bool> syncSamplerInstrumentSelection; ///< if enabled, the sampler's current instrument will automatically be switched whenever another instrument was selected in gigedit
128 Property<bool> moveRootNoteWithRegionMoved; ///< if enabled, the root note(s) of regions are automatically moving when the user drags a region around at the virtual keyboard
129 Property<bool> autoRestoreWindowDimension;
130 Property<bool> saveWithTemporaryFile; ///< If enabled and the user selects "Save" from the main menu, then the file is first saved as separate temporary file and after the save operation completed the temporary file is moved over the original file.
131 Property<bool> showTooltips; ///< Whether tooltips specifically intended for newbies should be displayed throughout the application (default: yes).
132 Property<bool> instrumentDoubleClickOpensProps; ///< If enabled then double clicking on an instrument of the instruments list view will show the selected instrument's properties dialog.
133
134 // settings of "MainWindow" group
135 Property<int> mainWindowX;
136 Property<int> mainWindowY;
137 Property<int> mainWindowW;
138 Property<int> mainWindowH;
139 Property<int> mainWindowSplitterPosX;
140
141 // settings of "ScriptEditor" group
142 Property<int> scriptEditorWindowX;
143 Property<int> scriptEditorWindowY;
144 Property<int> scriptEditorWindowW;
145 Property<int> scriptEditorWindowH;
146 Property<int> scriptEditorFontSize;
147
148 // settings of "DimensionManager" group
149 Property<int> dimensionManagerWindowX;
150 Property<int> dimensionManagerWindowY;
151 Property<int> dimensionManagerWindowW;
152 Property<int> dimensionManagerWindowH;
153
154 // settings of "ScriptSlots" group
155 Property<int> scriptSlotsWindowX;
156 Property<int> scriptSlotsWindowY;
157 Property<int> scriptSlotsWindowW;
158 Property<int> scriptSlotsWindowH;
159
160 // settings of "CombineInstruments" group
161 Property<int> combineInstrumentsWindowX;
162 Property<int> combineInstrumentsWindowY;
163 Property<int> combineInstrumentsWindowW;
164 Property<int> combineInstrumentsWindowH;
165
166 // settings of "MidiRules" group
167 Property<int> midiRulesWindowX;
168 Property<int> midiRulesWindowY;
169 Property<int> midiRulesWindowW;
170 Property<int> midiRulesWindowH;
171
172 // settings of "FileProps" group
173 Property<int> filePropsWindowX;
174 Property<int> filePropsWindowY;
175 Property<int> filePropsWindowW;
176 Property<int> filePropsWindowH;
177
178 // settings of "InstrProps" group
179 Property<int> instrPropsWindowX;
180 Property<int> instrPropsWindowY;
181 Property<int> instrPropsWindowW;
182 Property<int> instrPropsWindowH;
183
184 // settings of "SampleProps" group
185 Property<int> samplePropsWindowX;
186 Property<int> samplePropsWindowY;
187 Property<int> samplePropsWindowW;
188 Property<int> samplePropsWindowH;
189
190 // settings of "SampleRefs" group
191 Property<int> sampleRefsWindowX;
192 Property<int> sampleRefsWindowY;
193 Property<int> sampleRefsWindowW;
194 Property<int> sampleRefsWindowH;
195
196 // settings of "MacroEditor" group
197 Property<int> macroEditorWindowX;
198 Property<int> macroEditorWindowY;
199 Property<int> macroEditorWindowW;
200 Property<int> macroEditorWindowH;
201
202 // settings of "MacrosSetup" group
203 Property<int> macrosSetupWindowX;
204 Property<int> macrosSetupWindowY;
205 Property<int> macrosSetupWindowW;
206 Property<int> macrosSetupWindowH;
207
208 static Settings* singleton();
209 Settings();
210 void load();
211 void loadMacros(std::vector<Serialization::Archive>& macros);
212 void saveMacros(const std::vector<Serialization::Archive>& macros);
213
214 protected:
215 void onPropertyChanged(Glib::PropertyBase* pProperty, RawValueType_t type, Group_t group);
216
217 private:
218 std::vector<Glib::PropertyBase*> m_boolProps; ///< Pointers to all 'bool' type properties this Setting class manages.
219 std::vector<Glib::PropertyBase*> m_intProps; ///< Pointers to all 'int' type properties this Setting class manages.
220 bool m_ignoreNotifies;
221 };
222
223 #endif // GIGEDIT_SETTINGS

  ViewVC Help
Powered by ViewVC