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

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

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 2689 by schoenebeck, Sun Jan 4 17:19:19 2015 UTC revision 3637 by schoenebeck, Thu Oct 24 13:12:52 2019 UTC
# Line 1  Line 1 
1  /*  /*
2      Copyright (c) 2014-2015 Christian Schoenebeck      Copyright (c) 2014-2019 Christian Schoenebeck
3            
4      This file is part of "gigedit" and released under the terms of the      This file is part of "gigedit" and released under the terms of the
5      GNU General Public License version 2.      GNU General Public License version 2.
# Line 8  Line 8 
8  #ifndef GIGEDIT_SETTINGS  #ifndef GIGEDIT_SETTINGS
9  #define GIGEDIT_SETTINGS  #define GIGEDIT_SETTINGS
10    
11  // Probably a bit overkill for only two settings (right now), but I saw  #include <typeinfo>
12  // originnaly no better place to put this, since warnUserOnExtensions needs to  #include <glibmm/object.h>
13  // be accessed without a MainWindow instance.  #include <glibmm/property.h>
14  struct Settings {  #include <vector>
15      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  #include "global.h"
16      bool syncSamplerInstrumentSelection; ///< if enabled, the sampler's current instrument will automatically be switched whenever another instrument was selected in gigedit  
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    
133        // settings of "MainWindow" group
134        Property<int> mainWindowX;
135        Property<int> mainWindowY;
136        Property<int> mainWindowW;
137        Property<int> mainWindowH;
138    
139        // settings of "ScriptEditor" group
140        Property<int> scriptEditorWindowX;
141        Property<int> scriptEditorWindowY;
142        Property<int> scriptEditorWindowW;
143        Property<int> scriptEditorWindowH;
144        Property<int> scriptEditorFontSize;
145    
146        // settings of "DimensionManager" group
147        Property<int> dimensionManagerWindowX;
148        Property<int> dimensionManagerWindowY;
149        Property<int> dimensionManagerWindowW;
150        Property<int> dimensionManagerWindowH;
151    
152        // settings of "ScriptSlots" group
153        Property<int> scriptSlotsWindowX;
154        Property<int> scriptSlotsWindowY;
155        Property<int> scriptSlotsWindowW;
156        Property<int> scriptSlotsWindowH;
157    
158        // settings of "CombineInstruments" group
159        Property<int> combineInstrumentsWindowX;
160        Property<int> combineInstrumentsWindowY;
161        Property<int> combineInstrumentsWindowW;
162        Property<int> combineInstrumentsWindowH;
163    
164        // settings of "MidiRules" group
165        Property<int> midiRulesWindowX;
166        Property<int> midiRulesWindowY;
167        Property<int> midiRulesWindowW;
168        Property<int> midiRulesWindowH;
169    
170        // settings of "FileProps" group
171        Property<int> filePropsWindowX;
172        Property<int> filePropsWindowY;
173        Property<int> filePropsWindowW;
174        Property<int> filePropsWindowH;
175    
176        // settings of "InstrProps" group
177        Property<int> instrPropsWindowX;
178        Property<int> instrPropsWindowY;
179        Property<int> instrPropsWindowW;
180        Property<int> instrPropsWindowH;
181    
182        // settings of "SampleProps" group
183        Property<int> samplePropsWindowX;
184        Property<int> samplePropsWindowY;
185        Property<int> samplePropsWindowW;
186        Property<int> samplePropsWindowH;
187    
188        // settings of "SampleRefs" group
189        Property<int> sampleRefsWindowX;
190        Property<int> sampleRefsWindowY;
191        Property<int> sampleRefsWindowW;
192        Property<int> sampleRefsWindowH;
193    
194        // settings of "MacroEditor" group
195        Property<int> macroEditorWindowX;
196        Property<int> macroEditorWindowY;
197        Property<int> macroEditorWindowW;
198        Property<int> macroEditorWindowH;
199    
200        // settings of "MacrosSetup" group
201        Property<int> macrosSetupWindowX;
202        Property<int> macrosSetupWindowY;
203        Property<int> macrosSetupWindowW;
204        Property<int> macrosSetupWindowH;
205    
206      static Settings* singleton();      static Settings* singleton();
207      Settings();      Settings();
208        void load();
209        void loadMacros(std::vector<Serialization::Archive>& macros);
210        void saveMacros(const std::vector<Serialization::Archive>& macros);
211    
212    protected:
213        void onPropertyChanged(Glib::PropertyBase* pProperty, RawValueType_t type, Group_t group);
214    
215    private:
216        std::vector<Glib::PropertyBase*> m_boolProps; ///< Pointers to all 'bool' type properties this Setting class manages.
217        std::vector<Glib::PropertyBase*> m_intProps; ///< Pointers to all 'int' type properties this Setting class manages.
218        bool m_ignoreNotifies;
219  };  };
220    
221  #endif // GIGEDIT_SETTINGS  #endif // GIGEDIT_SETTINGS

Legend:
Removed from v.2689  
changed lines
  Added in v.3637

  ViewVC Help
Powered by ViewVC