/[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 3151 by schoenebeck, Fri May 5 18:44:59 2017 UTC
# Line 1  Line 1 
1  /*  /*
2      Copyright (c) 2014-2015 Christian Schoenebeck      Copyright (c) 2014-2017 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  
16      bool syncSamplerInstrumentSelection; ///< if enabled, the sampler's current instrument will automatically be switched whenever another instrument was selected in gigedit  /**
17         * Reflects, saves and restores all settings for the gigedit application.
18     *
19     * This class holds a bunch of custom Property objects which can be accessed
20     * as if they were basic data types (i.e. by using assignment operator, etc.).
21     * As soon as a property gets modified this way, it will automatically be saved
22     * to a local config file.
23     */
24    class Settings : public Glib::Object {
25    public:
26        /**
27         * Data types for the individual settings.
28         */
29        enum RawValueType_t {
30            BOOLEAN,
31            INTEGER,
32            UNKNOWN
33        };
34    
35        /**
36         * All settings are grouped into these settings groups.
37         */
38        enum Group_t {
39            GLOBAL,
40            MAIN_WINDOW,
41            SCRIPT_EDITOR,
42            DIMENSION_MANAGER,
43            SCRIPT_SLOTS,
44            COMBINE_INSTRUMENTS,
45            MIDI_RULES,
46            FILE_PROPS,
47            INSTR_PROPS,
48            SAMPLE_REFS,
49            MACRO_EDITOR,
50        };
51    
52        /**
53         * Extension of regular Glib::Property template class; this one
54         * automatically calls Settings::onPropertyChanged() method passing this
55         * property object as pointer; and it allows to assign new values to this
56         * property by using the regular assignment operator; and requires a
57         * "Setting group" to be assigned to the property at construction time.
58         */
59        template<typename T>
60        class Property : public Glib::Property<T> {
61        public:
62            Property(Settings& object, Group_t group, const Glib::ustring& name)
63                : Glib::Property<T>::Property(object, name)
64            {
65                m_settings = &object;
66                m_group = group;
67                const RawValueType_t type = rawValueType();
68                Glib::Property<T>::get_proxy().signal_changed().connect(
69                    sigc::bind(
70                        sigc::bind(
71                            sigc::bind(
72                                sigc::mem_fun(m_settings, &Settings::onPropertyChanged),
73                                m_group
74                            ),
75                            type
76                        ),
77                        this
78                    )
79                );
80            }
81    
82            Property(Settings& object, Group_t group, const Glib::ustring& name, const T& default_value)
83                : Glib::Property<T>::Property(object, name, default_value)
84            {
85                m_settings = &object;
86                m_group = group;
87                const RawValueType_t type = rawValueType();
88                Glib::Property<T>::get_proxy().signal_changed().connect(
89                    sigc::bind(
90                        sigc::bind(
91                            sigc::bind(
92                                sigc::mem_fun(m_settings, &Settings::onPropertyChanged),
93                                m_group
94                            ),
95                            type
96                        ),
97                        this
98                    )
99                );
100            }
101    
102            Property<T>& operator=(const T value) {
103                Glib::Property<T>::set_value(value);
104                return *this;
105            }
106    
107            RawValueType_t rawValueType() const {
108                const std::string name = typeid(T).name();
109                if (name == "bool" || name == "b") return BOOLEAN;
110                if (name == "int" || name == "i") return INTEGER;
111                return UNKNOWN;
112            }
113    
114            Group_t group() const { return m_group; }
115    
116        private:
117            Settings* m_settings;
118            Group_t m_group;
119        };
120    
121        // settings of "Global" group
122        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
123        Property<bool> syncSamplerInstrumentSelection; ///< if enabled, the sampler's current instrument will automatically be switched whenever another instrument was selected in gigedit
124        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
125        Property<bool> autoRestoreWindowDimension;
126        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.
127    
128        // settings of "MainWindow" group
129        Property<int> mainWindowX;
130        Property<int> mainWindowY;
131        Property<int> mainWindowW;
132        Property<int> mainWindowH;
133    
134        // settings of "ScriptEditor" group
135        Property<int> scriptEditorWindowX;
136        Property<int> scriptEditorWindowY;
137        Property<int> scriptEditorWindowW;
138        Property<int> scriptEditorWindowH;
139        Property<int> scriptEditorFontSize;
140    
141        // settings of "DimensionManager" group
142        Property<int> dimensionManagerWindowX;
143        Property<int> dimensionManagerWindowY;
144        Property<int> dimensionManagerWindowW;
145        Property<int> dimensionManagerWindowH;
146    
147        // settings of "ScriptSlots" group
148        Property<int> scriptSlotsWindowX;
149        Property<int> scriptSlotsWindowY;
150        Property<int> scriptSlotsWindowW;
151        Property<int> scriptSlotsWindowH;
152    
153        // settings of "CombineInstruments" group
154        Property<int> combineInstrumentsWindowX;
155        Property<int> combineInstrumentsWindowY;
156        Property<int> combineInstrumentsWindowW;
157        Property<int> combineInstrumentsWindowH;
158    
159        // settings of "MidiRules" group
160        Property<int> midiRulesWindowX;
161        Property<int> midiRulesWindowY;
162        Property<int> midiRulesWindowW;
163        Property<int> midiRulesWindowH;
164    
165        // settings of "FileProps" group
166        Property<int> filePropsWindowX;
167        Property<int> filePropsWindowY;
168        Property<int> filePropsWindowW;
169        Property<int> filePropsWindowH;
170    
171        // settings of "InstrProps" group
172        Property<int> instrPropsWindowX;
173        Property<int> instrPropsWindowY;
174        Property<int> instrPropsWindowW;
175        Property<int> instrPropsWindowH;
176    
177        // settings of "SampleRefs" group
178        Property<int> sampleRefsWindowX;
179        Property<int> sampleRefsWindowY;
180        Property<int> sampleRefsWindowW;
181        Property<int> sampleRefsWindowH;
182    
183        // settings of "MacroEditor" group
184        Property<int> macroEditorWindowX;
185        Property<int> macroEditorWindowY;
186        Property<int> macroEditorWindowW;
187        Property<int> macroEditorWindowH;
188    
189      static Settings* singleton();      static Settings* singleton();
190      Settings();      Settings();
191        void load();
192    
193    protected:
194        void onPropertyChanged(Glib::PropertyBase* pProperty, RawValueType_t type, Group_t group);
195    
196    private:
197        std::vector<Glib::PropertyBase*> m_boolProps; ///< Pointers to all 'bool' type properties this Setting class manages.
198        std::vector<Glib::PropertyBase*> m_intProps; ///< Pointers to all 'int' type properties this Setting class manages.
199        bool m_ignoreNotifies;
200  };  };
201    
202  #endif // GIGEDIT_SETTINGS  #endif // GIGEDIT_SETTINGS

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

  ViewVC Help
Powered by ViewVC