Pencil2D Animation
Download Community News Docs Contribute
  • Overview
  • Articles
  • Code
  •  
  • Class List
  • Class Index
  • Class Hierarchy
  • Class Members
  • File List
Loading...
Searching...
No Matches
  • core_lib
  • src
  • managers
preferencemanager.cpp
1/*
2
3Pencil2D - Traditional Animation Software
4Copyright (C) 2005-2007 Patrick Corrieri & Pascal Naidon
5Copyright (C) 2012-2020 Matthew Chiawen Chang
6
7This program is free software; you can redistribute it and/or
8modify it under the terms of the GNU General Public License
9as published by the Free Software Foundation; version 2 of the License.
10
11This program is distributed in the hope that it will be useful,
12but WITHOUT ANY WARRANTY; without even the implied warranty of
13MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14GNU General Public License for more details.
15
16*/
17
18#include "preferencemanager.h"
19
20#include <QSettings>
21#include <QDebug>
22
23PreferenceManager::PreferenceManager(Editor* editor) : BaseManager(editor, __FUNCTION__)
24{
25}
26
27PreferenceManager::~PreferenceManager()
28{
29}
30
31bool PreferenceManager::init()
32{
33 loadPrefs();
34 return true;
35}
36
37Status PreferenceManager::load(Object*)
38{
39 return Status::OK;
40}
41
42Status PreferenceManager::save(Object*)
43{
44 return Status::OK;
45}
46
47void PreferenceManager::loadPrefs()
48{
49 QSettings settings( PENCIL2D, PENCIL2D );
50
51 // Display
52 set(SETTING::GRID, settings.value(SETTING_SHOW_GRID, false).toBool());
53 set(SETTING::INVISIBLE_LINES, settings.value(SETTING_INVISIBLE_LINES, false).toBool());
54 set(SETTING::OUTLINES, settings.value(SETTING_OUTLINES, false).toBool());
55 set(SETTING::OVERLAY_CENTER, settings.value(SETTING_OVERLAY_CENTER, false).toBool());
56 set(SETTING::OVERLAY_THIRDS, settings.value(SETTING_OVERLAY_THIRDS, false).toBool());
57 set(SETTING::OVERLAY_GOLDEN, settings.value(SETTING_OVERLAY_GOLDEN, false).toBool());
58 set(SETTING::OVERLAY_SAFE, settings.value(SETTING_OVERLAY_SAFE, false).toBool());
59 set(SETTING::OVERLAY_PERSPECTIVE1, settings.value(SETTING_OVERLAY_PERSPECTIVE1, false).toBool());
60 set(SETTING::OVERLAY_PERSPECTIVE2, settings.value(SETTING_OVERLAY_PERSPECTIVE2, false).toBool());
61 set(SETTING::OVERLAY_PERSPECTIVE3, settings.value(SETTING_OVERLAY_PERSPECTIVE3, false).toBool());
62 set(SETTING::OVERLAY_ANGLE, settings.value(SETTING_OVERLAY_ANGLE, 15).toInt());
63 set(SETTING::ACTION_SAFE, settings.value(SETTING_ACTION_SAFE, 5).toInt());
64 set(SETTING::ACTION_SAFE_ON, settings.value(SETTING_ACTION_SAFE_ON, true).toBool());
65 set(SETTING::OVERLAY_SAFE_HELPER_TEXT_ON, settings.value(SETTING_OVERLAY_SAFE_HELPER_TEXT_ON, true).toBool());
66 set(SETTING::TITLE_SAFE, settings.value(SETTING_TITLE_SAFE, 10).toInt());
67 set(SETTING::TITLE_SAFE_ON, settings.value(SETTING_TITLE_SAFE_ON, true).toBool());
68
69 // Grid
70 set(SETTING::GRID_SIZE_W, settings.value(SETTING_GRID_SIZE_W, 100).toInt());
71 set(SETTING::GRID_SIZE_H, settings.value(SETTING_GRID_SIZE_H, 100).toInt());
72
73 // General
74 set(SETTING::ANTIALIAS, settings.value(SETTING_ANTIALIAS, true).toBool());
75 set(SETTING::TOOL_CURSOR, settings.value(SETTING_TOOL_CURSOR, true).toBool());
76 set(SETTING::CANVAS_CURSOR, settings.value(SETTING_CANVAS_CURSOR, true).toBool());
77 set(SETTING::HIGH_RESOLUTION, settings.value(SETTING_HIGH_RESOLUTION, true).toBool());
78 set(SETTING::SHADOW, settings.value(SETTING_SHADOW, false).toBool());
79 set(SETTING::QUICK_SIZING, settings.value(SETTING_QUICK_SIZING, true).toBool());
80 set(SETTING::SHOW_SELECTION_INFO, settings.value(SETTING_SHOW_SELECTION_INFO, false).toBool());
81
82 set(SETTING::INVERT_DRAG_ZOOM_DIRECTION, settings.value(SETTING_INVERT_DRAG_ZOOM_DIRECTION, false).toBool());
83 set(SETTING::INVERT_SCROLL_ZOOM_DIRECTION, settings.value(SETTING_INVERT_SCROLL_ZOOM_DIRECTION, false).toBool());
84
85 set(SETTING::ROTATION_INCREMENT, settings.value(SETTING_ROTATION_INCREMENT, 15).toInt());
86
87 set(SETTING::WINDOW_OPACITY, settings.value(SETTING_WINDOW_OPACITY, 0).toInt());
88 set(SETTING::SHOW_STATUS_BAR, settings.value(SETTING_SHOW_STATUS_BAR, true).toBool());
89 set(SETTING::CURVE_SMOOTHING, settings.value(SETTING_CURVE_SMOOTHING, 20).toInt());
90
91 set(SETTING::BACKGROUND_STYLE, settings.value(SETTING_BACKGROUND_STYLE, "white").toString());
92
93 set(SETTING::LAYOUT_LOCK, settings.value(SETTING_LAYOUT_LOCK, false).toBool());
94 set(SETTING::FRAME_POOL_SIZE, settings.value(SETTING_FRAME_POOL_SIZE, 1024).toInt());
95 set(SETTING::NEW_UNDO_REDO_SYSTEM_ON, settings.value(SETTING_NEW_UNDO_REDO_ON, false).toBool());
96 set(SETTING::UNDO_REDO_MAX_STEPS, settings.value(SETTING_UNDO_REDO_MAX_STEPS, 100).toInt());
97
98 set(SETTING::FPS, settings.value(SETTING_FPS, 12).toInt());
99 set(SETTING::FIELD_W, settings.value(SETTING_FIELD_W, 800).toInt());
100 set(SETTING::FIELD_H, settings.value(SETTING_FIELD_H, 600).toInt());
101 set(SETTING::TIMECODE_TEXT, settings.value(SETTING_TIMECODE_TEXT, 1).toInt());
102
103 // Files
104 set(SETTING::AUTO_SAVE, settings.value(SETTING_AUTO_SAVE, false).toBool());
105 set(SETTING::AUTO_SAVE_NUMBER, settings.value(SETTING_AUTO_SAVE_NUMBER, 256).toInt());
106 set(SETTING::AUTO_SAVE_BY_TIME, settings.value(SETTING_AUTO_SAVE_BY_TIME, false).toBool());
107 set(SETTING::AUTO_SAVE_BY_TIME_TIMER, settings.value(SETTING_AUTO_SAVE_BY_TIME_TIMER,15).toInt());
108 set(SETTING::ASK_FOR_PRESET, settings.value(SETTING_ASK_FOR_PRESET, false).toBool());
109 set(SETTING::LOAD_MOST_RECENT, settings.value(SETTING_LOAD_MOST_RECENT, false).toBool());
110 set(SETTING::LOAD_DEFAULT_PRESET, settings.value(SETTING_LOAD_DEFAULT_PRESET, true).toBool());
111 set(SETTING::DEFAULT_PRESET, settings.value(SETTING_DEFAULT_PRESET, 0).toInt());
112
113 // Timeline
114 set(SETTING::SHORT_SCRUB, settings.value(SETTING_SHORT_SCRUB, false ).toBool());
115 set(SETTING::FRAME_SIZE, settings.value(SETTING_FRAME_SIZE, 12).toInt());
116 set(SETTING::TIMELINE_SIZE, settings.value(SETTING_TIMELINE_SIZE, 240).toInt());
117 set(SETTING::DRAW_LABEL, settings.value(SETTING_DRAW_LABEL, false ).toBool());
118 set(SETTING::LABEL_FONT_SIZE, settings.value(SETTING_LABEL_FONT_SIZE, 12).toInt());
119
120 set( SETTING::DRAW_ON_EMPTY_FRAME_ACTION, settings.value( SETTING_DRAW_ON_EMPTY_FRAME_ACTION,
121 KEEP_DRAWING_ON_PREVIOUS_KEY).toInt() );
122
123 // Onion Skin
124 set(SETTING::PREV_ONION, settings.value(SETTING_PREV_ONION, false).toBool());
125 set(SETTING::NEXT_ONION, settings.value(SETTING_NEXT_ONION, false).toBool());
126 set(SETTING::ONION_MUTLIPLE_LAYERS, settings.value(SETTING_MULTILAYER_ONION, false).toBool());
127 set(SETTING::ONION_BLUE, settings.value(SETTING_ONION_BLUE, false).toBool());
128 set(SETTING::ONION_RED, settings.value(SETTING_ONION_RED, false).toBool());
129
130 set(SETTING::ONION_MAX_OPACITY, settings.value(SETTING_ONION_MAX_OPACITY, 50).toInt());
131 set(SETTING::ONION_MIN_OPACITY, settings.value(SETTING_ONION_MIN_OPACITY, 20).toInt());
132 set(SETTING::ONION_PREV_FRAMES_NUM, settings.value(SETTING_ONION_PREV_FRAMES_NUM, 5).toInt());
133 set(SETTING::ONION_NEXT_FRAMES_NUM, settings.value(SETTING_ONION_NEXT_FRAMES_NUM, 5).toInt());
134 set(SETTING::ONION_WHILE_PLAYBACK, settings.value(SETTING_ONION_WHILE_PLAYBACK, 0).toInt());
135 set(SETTING::ONION_TYPE, settings.value(SETTING_ONION_TYPE, "relative").toString());
136 set(SETTING::LAYER_VISIBILITY, settings.value(SETTING_LAYER_VISIBILITY, 2).toInt());
137 set(SETTING::LAYER_VISIBILITY_THRESHOLD, settings.value(SETTING_LAYER_VISIBILITY_THRESHOLD, 0.5f).toFloat());
138
139 set(SETTING::FLIP_ROLL_MSEC, settings.value(SETTING_FLIP_ROLL_MSEC, 100).toInt());
140 set(SETTING::FLIP_ROLL_DRAWINGS, settings.value(SETTING_FLIP_ROLL_DRAWINGS, 5).toInt());
141 set(SETTING::FLIP_INBETWEEN_MSEC, settings.value(SETTING_FLIP_INBETWEEN_MSEC, 100).toInt());
142 set(SETTING::SOUND_SCRUB_ACTIVE, settings.value(SETTING_SOUND_SCRUB_ACTIVE, false).toBool());
143 set(SETTING::SOUND_SCRUB_MSEC, settings.value(SETTING_SOUND_SCRUB_MSEC, 100).toInt());
144
145 set(SETTING::LANGUAGE, settings.value(SETTING_LANGUAGE).toString());
146}
147
148void PreferenceManager::turnOn(SETTING option)
149{
150 set(option, true);
151}
152
153void PreferenceManager::turnOff(SETTING option)
154{
155 set(option, false);
156}
157
158bool PreferenceManager::isOn(SETTING option)
159{
160 int optionId = static_cast<int>(option);
161 return mBooleanSet.value(optionId, false);
162}
163
164int PreferenceManager::getInt(SETTING option)
165{
166 int optionId = static_cast<int>(option);
167 return mIntegerSet.value(optionId, -1);
168}
169
170float PreferenceManager::getFloat(SETTING option)
171{
172 int optionId = static_cast<int>(option);
173 return mFloatingPointSet.value(optionId, -1);
174}
175
176QString PreferenceManager::getString(SETTING option)
177{
178 int optionId = static_cast<int>(option);
179 if (mIntegerSet.contains(optionId))
180 {
181 return QString::number(mIntegerSet.value(optionId, -1));
182 }
183 else if (mBooleanSet.contains(optionId))
184 {
185 if (mBooleanSet.value(optionId, false))
186 {
187 return "true";
188 }
189 else
190 {
191 return "false";
192 }
193 }
194 return mStringSet.value(optionId);
195}
196
197void PreferenceManager::set(SETTING option, QString value)
198{
199 QSettings settings(PENCIL2D, PENCIL2D);
200 switch (option)
201 {
202 case SETTING::BACKGROUND_STYLE:
203 settings.setValue(SETTING_BACKGROUND_STYLE, value);
204 break;
205 case SETTING::ONION_TYPE:
206 settings.setValue(SETTING_ONION_TYPE, value);
207 break;
208 case SETTING::LANGUAGE:
209 settings.setValue(SETTING_LANGUAGE, value);
210 break;
211 default:
212 break;
213 }
214
215 int optionId = static_cast<int>(option);
216 if (mStringSet[optionId] != value)
217 {
218 mStringSet[optionId] = value;
219 emit optionChanged(option);
220 }
221}
222
223void PreferenceManager::set(SETTING option, float value)
224{
225 QSettings settings(PENCIL2D, PENCIL2D);
226 switch(option)
227 {
228 case SETTING::LAYER_VISIBILITY_THRESHOLD:
229 settings.setValue(SETTING_LAYER_VISIBILITY_THRESHOLD, value);
230 break;
231 default:
232 Q_ASSERT(false);
233 break;
234 }
235
236
237 int optionId = static_cast<int>(option);
238
239 if (qFuzzyCompare(mFloatingPointSet[optionId], value) == false)
240 {
241 mFloatingPointSet[optionId] = value;
242 emit optionChanged(option);
243 }
244}
245
246void PreferenceManager::set(SETTING option, int value)
247{
248 QSettings settings(PENCIL2D, PENCIL2D);
249 switch (option)
250 {
251 case SETTING::WINDOW_OPACITY:
252 settings.setValue(SETTING_WINDOW_OPACITY, value);
253 break;
254 case SETTING::CURVE_SMOOTHING:
255 settings.setValue(SETTING_CURVE_SMOOTHING, value);
256 break;
257 case SETTING::AUTO_SAVE_NUMBER:
258 settings.setValue(SETTING_AUTO_SAVE_NUMBER, value);
259 break;
260 case SETTING::AUTO_SAVE_BY_TIME_TIMER:
261 settings.setValue(SETTING_AUTO_SAVE_BY_TIME_TIMER, value);
262 break;
263 case SETTING::FRAME_SIZE:
264 if (value < 4) { value = 4; }
265 else if (value > 40) { value = 40; }
266 settings.setValue(SETTING_FRAME_SIZE, value);
267 break;
268 case SETTING::TIMELINE_SIZE:
269 if (value < 2) { value = 2; }
270 settings.setValue(SETTING_TIMELINE_SIZE, value);
271 break;
272 case SETTING::LABEL_FONT_SIZE:
273 if (value < 12) { value = 12; }
274 settings.setValue(SETTING_LABEL_FONT_SIZE, value);
275 break;
276 case SETTING::ONION_MAX_OPACITY:
277 settings.setValue(SETTING_ONION_MAX_OPACITY, value);
278 break;
279 case SETTING::ONION_MIN_OPACITY:
280 settings.setValue(SETTING_ONION_MIN_OPACITY, value);
281 break;
282 case SETTING::ONION_PREV_FRAMES_NUM:
283 settings.setValue(SETTING_ONION_PREV_FRAMES_NUM, value);
284 break;
285 case SETTING::ONION_NEXT_FRAMES_NUM:
286 settings.setValue(SETTING_ONION_NEXT_FRAMES_NUM, value);
287 break;
288 case SETTING::OVERLAY_ANGLE:
289 settings.setValue(SETTING_OVERLAY_ANGLE, value);
290 break;
291 case SETTING::FLIP_ROLL_MSEC :
292 settings.setValue(SETTING_FLIP_ROLL_MSEC, value);
293 break;
294 case SETTING::FLIP_ROLL_DRAWINGS :
295 settings.setValue(SETTING_FLIP_ROLL_DRAWINGS, value);
296 break;
297 case SETTING::FLIP_INBETWEEN_MSEC :
298 settings.setValue(SETTING_FLIP_INBETWEEN_MSEC, value);
299 break;
300 case SETTING::SOUND_SCRUB_MSEC :
301 settings.setValue(SETTING_SOUND_SCRUB_MSEC, value);
302 break;
303 case SETTING::GRID_SIZE_W:
304 settings.setValue(SETTING_GRID_SIZE_W, value);
305 break;
306 case SETTING::TIMECODE_TEXT:
307 settings.setValue(SETTING_TIMECODE_TEXT, value);
308 break;
309 case SETTING::GRID_SIZE_H:
310 settings.setValue(SETTING_GRID_SIZE_H, value);
311 break;
312 case SETTING::ACTION_SAFE:
313 settings.setValue(SETTING_ACTION_SAFE, value);
314 break;
315 case SETTING::TITLE_SAFE:
316 settings.setValue(SETTING_TITLE_SAFE, value);
317 break;
318 case SETTING::FRAME_POOL_SIZE:
319 settings.setValue(SETTING_FRAME_POOL_SIZE, value);
320 break;
321 case SETTING::UNDO_REDO_MAX_STEPS:
322 settings.setValue(SETTING_UNDO_REDO_MAX_STEPS, value);
323 break;
324 case SETTING::DRAW_ON_EMPTY_FRAME_ACTION:
325 settings.setValue( SETTING_DRAW_ON_EMPTY_FRAME_ACTION, value);
326 break;
327 case SETTING::ONION_WHILE_PLAYBACK:
328 settings.setValue(SETTING_ONION_WHILE_PLAYBACK, value);
329 break;
330 case SETTING::ROTATION_INCREMENT:
331 settings.setValue(SETTING_ROTATION_INCREMENT, value);
332 break;
333 case SETTING::FPS:
334 settings.setValue(SETTING_FPS, value);
335 break;
336 case SETTING::FIELD_W:
337 settings.setValue(SETTING_FIELD_W, value);
338 break;
339 case SETTING::FIELD_H:
340 settings.setValue(SETTING_FIELD_H, value);
341 break;
342 case SETTING::LAYER_VISIBILITY:
343 settings.setValue(SETTING_LAYER_VISIBILITY, value);
344 break;
345 case SETTING::DEFAULT_PRESET:
346 settings.setValue(SETTING_DEFAULT_PRESET, value);
347 break;
348 default:
349 Q_ASSERT(false);
350 break;
351 }
352
353 int optionId = static_cast<int>(option);
354 if (mIntegerSet[optionId] != value)
355 {
356 mIntegerSet[optionId] = value;
357 emit optionChanged(option);
358 }
359}
360
361// Set bool value
362//
363void PreferenceManager::set(SETTING option, bool value)
364{
365 QSettings settings(PENCIL2D, PENCIL2D);
366 switch (option)
367 {
368 case SETTING::SHOW_STATUS_BAR:
369 settings.setValue(SETTING_SHOW_STATUS_BAR, value);
370 break;
371 case SETTING::ANTIALIAS:
372 settings.setValue(SETTING_ANTIALIAS, value);
373 break;
374 case SETTING::GRID:
375 settings.setValue(SETTING_SHOW_GRID, value);
376 break;
377 case SETTING::OVERLAY_CENTER:
378 settings.setValue(SETTING_OVERLAY_CENTER, value);
379 break;
380 case SETTING::OVERLAY_THIRDS:
381 settings.setValue(SETTING_OVERLAY_THIRDS, value);
382 break;
383 case SETTING::OVERLAY_GOLDEN:
384 settings.setValue(SETTING_OVERLAY_GOLDEN, value);
385 break;
386 case SETTING::OVERLAY_SAFE:
387 settings.setValue(SETTING_OVERLAY_SAFE, value);
388 break;
389 case SETTING::OVERLAY_PERSPECTIVE1:
390 settings.setValue(SETTING_OVERLAY_PERSPECTIVE1, value);
391 break;
392 case SETTING::OVERLAY_PERSPECTIVE2:
393 settings.setValue(SETTING_OVERLAY_PERSPECTIVE2, value);
394 break;
395 case SETTING::OVERLAY_PERSPECTIVE3:
396 settings.setValue(SETTING_OVERLAY_PERSPECTIVE3, value);
397 break;
398 case SETTING::ACTION_SAFE_ON:
399 settings.setValue(SETTING_ACTION_SAFE_ON, value);
400 break;
401 case SETTING::TITLE_SAFE_ON:
402 settings.setValue(SETTING_TITLE_SAFE_ON, value);
403 break;
404 case SETTING::OVERLAY_SAFE_HELPER_TEXT_ON:
405 settings.setValue(SETTING_OVERLAY_SAFE_HELPER_TEXT_ON, value);
406 break;
407 case SETTING::SHADOW:
408 settings.setValue(SETTING_SHADOW, value);
409 break;
410 case SETTING::PREV_ONION:
411 settings.setValue(SETTING_PREV_ONION, value);
412 break;
413 case SETTING::NEXT_ONION:
414 settings.setValue(SETTING_NEXT_ONION, value);
415 break;
416 case SETTING::ONION_MUTLIPLE_LAYERS:
417 settings.setValue(SETTING_MULTILAYER_ONION, value);
418 break;
419 case SETTING::INVISIBLE_LINES:
420 settings.setValue(SETTING_INVISIBLE_LINES, value);
421 break;
422 case SETTING::OUTLINES:
423 settings.setValue(SETTING_OUTLINES, value);
424 break;
425 case SETTING::ONION_BLUE:
426 settings.setValue(SETTING_ONION_BLUE, value);
427 break;
428 case SETTING::ONION_RED:
429 settings.setValue(SETTING_ONION_RED, value);
430 break;
431 case SETTING::TOOL_CURSOR:
432 settings.setValue(SETTING_TOOL_CURSOR, value);
433 break;
434 case SETTING::CANVAS_CURSOR:
435 settings.setValue(SETTING_CANVAS_CURSOR, value);
436 break;
437 case SETTING::HIGH_RESOLUTION:
438 settings.setValue(SETTING_HIGH_RESOLUTION, value);
439 break;
440 case SETTING::AUTO_SAVE:
441 settings.setValue(SETTING_AUTO_SAVE, value);
442 break;
443 case SETTING::AUTO_SAVE_BY_TIME:
444 settings.setValue(SETTING_AUTO_SAVE_BY_TIME, value);
445 break;
446 case SETTING::SHORT_SCRUB:
447 settings.setValue(SETTING_SHORT_SCRUB, value);
448 break;
449 case SETTING::DRAW_LABEL:
450 settings.setValue(SETTING_DRAW_LABEL, value);
451 break;
452 case SETTING::QUICK_SIZING:
453 settings.setValue(SETTING_QUICK_SIZING, value);
454 break;
455 case SETTING::INVERT_DRAG_ZOOM_DIRECTION:
456 settings.setValue(SETTING_INVERT_DRAG_ZOOM_DIRECTION, value);
457 break;
458 case SETTING::INVERT_SCROLL_ZOOM_DIRECTION:
459 settings.setValue(SETTING_INVERT_SCROLL_ZOOM_DIRECTION, value);
460 break;
461 case SETTING::LAYOUT_LOCK:
462 settings.setValue(SETTING_LAYOUT_LOCK, value);
463 break;
464 case SETTING::SHOW_SELECTION_INFO:
465 settings.setValue(SETTING_SHOW_SELECTION_INFO, value);
466 break;
467 case SETTING::SOUND_SCRUB_ACTIVE:
468 settings.setValue(SETTING_SOUND_SCRUB_ACTIVE, value);
469 break;
470 case SETTING::ASK_FOR_PRESET:
471 settings.setValue(SETTING_ASK_FOR_PRESET, value);
472 break;
473 case SETTING::LOAD_MOST_RECENT:
474 settings.setValue(SETTING_LOAD_MOST_RECENT, value);
475 break;
476 case SETTING::LOAD_DEFAULT_PRESET:
477 settings.setValue(SETTING_LOAD_DEFAULT_PRESET, value);
478 break;
479 case SETTING::NEW_UNDO_REDO_SYSTEM_ON:
480 settings.setValue(SETTING_NEW_UNDO_REDO_ON, value);
481 break;
482 default:
483 Q_ASSERT(false);
484 break;
485 }
486
487 int optionId = static_cast<int>(option);
488 if (mBooleanSet[optionId] != value)
489 {
490 mBooleanSet[optionId] = value;
491 emit optionChanged(option);
492 }
493}
BaseManager
Definition: basemanager.h:29
Editor
Definition: editor.h:71
Object
Definition: object.h:42
Status
Definition: pencilerror.h:40
QHash::contains
bool contains(const Key &key) const const
QHash::value
const T value(const Key &key) const const
QSettings
QString
QString::number
QString number(int n, int base)
Generated on Mon May 4 2026 07:50:47 for Pencil2D by doxygen 1.9.6 based on revision 3ed50cdd696e72315cedf30508d3572536c3876e