1 /*
2 
3 Pencil2D - Traditional Animation Software
4 Copyright (C) 2005-2007 Patrick Corrieri & Pascal Naidon
5 Copyright (C) 2012-2020 Matthew Chiawen Chang
6 
7 This program is free software; you can redistribute it and/or
8 modify it under the terms of the GNU General Public License
9 as published by the Free Software Foundation; version 2 of the License.
10 
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 GNU General Public License for more details.
15 
16 */
17 
18 #ifndef PREFERENCEMANAGER_H
19 #define PREFERENCEMANAGER_H
20 
21 #include <bitset>
22 #include <QHash>
23 #include "basemanager.h"
24 #include "pencildef.h"
25 
26 
27 enum class SETTING
28 {
29     ANTIALIAS,
30     GRID,
31     SHADOW,
32     PREV_ONION,
33     NEXT_ONION,
34     INVISIBLE_LINES,
35     OUTLINES,
36     ONION_BLUE,
37     ONION_RED,
38     TOOL_CURSOR,
39     DOTTED_CURSOR,
40     HIGH_RESOLUTION,
41     WINDOW_OPACITY,
42     CURVE_SMOOTHING,
43     BACKGROUND_STYLE,
44     AUTO_SAVE,
45     AUTO_SAVE_NUMBER,
46     SHORT_SCRUB,
47     FPS,
48     FIELD_W,
49     FIELD_H,
50     FRAME_SIZE,
51     TIMELINE_SIZE,
52     LABEL_FONT_SIZE,
53     DRAW_LABEL,
54     ONION_MAX_OPACITY,
55     ONION_MIN_OPACITY,
56     ONION_PREV_FRAMES_NUM,
57     ONION_NEXT_FRAMES_NUM,
58     ONION_WHILE_PLAYBACK,
59     ONION_TYPE,
60     FLIP_ROLL_MSEC,
61     FLIP_ROLL_DRAWINGS,
62     FLIP_INBETWEEN_MSEC,
63     SOUND_SCRUB_ACTIVE,
64     SOUND_SCRUB_MSEC,
65     LAYER_VISIBILITY,
66     LAYER_VISIBILITY_THRESHOLD,
67     GRID_SIZE_W,
68     GRID_SIZE_H,
69     OVERLAY_CENTER,
70     OVERLAY_THIRDS,
71     OVERLAY_GOLDEN,
72     OVERLAY_SAFE,
73     OVERLAY_SAFE_HELPER_TEXT_ON,
74     ACTION_SAFE_ON,
75     ACTION_SAFE,
76     TIMECODE_TEXT,
77     TITLE_SAFE_ON,
78     TITLE_SAFE,
79     QUICK_SIZING,
80     MULTILAYER_ONION,
81     LANGUAGE,
82     LAYOUT_LOCK,
83     DRAW_ON_EMPTY_FRAME_ACTION,
84     FRAME_POOL_SIZE,
85     ROTATION_INCREMENT,
86     ASK_FOR_PRESET,
87     LOAD_MOST_RECENT,
88     LOAD_DEFAULT_PRESET,
89     DEFAULT_PRESET,
90     COUNT, // COUNT must always be the last one.
91 };
92 
93 // Actions for drawing on an empty frame.
94 enum DrawOnEmptyFrameAction
95 {
96     CREATE_NEW_KEY,
97     DUPLICATE_PREVIOUS_KEY,
98     KEEP_DRAWING_ON_PREVIOUS_KEY
99 };
100 
101 class PreferenceManager : public BaseManager
102 {
103     Q_OBJECT
104 
105 public:
106     explicit PreferenceManager(Editor* editor);
107     ~PreferenceManager() override;
108 
109     virtual bool init() override;
110     Status load(Object*) override;
111     Status save(Object*) override;
112 
113     void loadPrefs();
114     void set(SETTING option, QString value);
115     void set(SETTING option, int value);
116     void set(SETTING option, bool value);
117     void set(SETTING option, float value);
118 
119     void turnOn(SETTING option);
120     void turnOff(SETTING option);
121     bool isOn(SETTING option);
122 
123     QString getString(SETTING option);
124     int     getInt(SETTING option);
125     float getFloat(SETTING option);
126 
127 signals:
128     void optionChanged(SETTING e);
129 
130 private:
131     QHash<int, QString> mStringSet;
132     QHash<int, int> mIntegerSet;
133     QHash<int, bool> mBooleanSet;
134     QHash<int, float> mFloatingPointSet;
135 };
136 
137 #endif // PREFERENCEMANAGER_H
138