1 /************************************************************************
2 **
3 ** Copyright (C) 2016-2020 Kevin B. Hendricks, Stratford, ON
4 ** Copyright (C) 2011-2013 John Schember <john@nachtimwald.com>
5 ** Copyright (C) 2012-2013 Dave Heiland
6 **
7 ** This file is part of PageEdit.
8 **
9 ** PageEdit is free software: you can redistribute it and/or modify
10 ** it under the terms of the GNU General Public License as published by
11 ** the Free Software Foundation, either version 3 of the License, or
12 ** (at your option) any later version.
13 **
14 ** PageEdit is distributed in the hope that it will be useful,
15 ** but WITHOUT ANY WARRANTY; without even the implied warranty of
16 ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 ** GNU General Public License for more details.
18 **
19 ** You should have received a copy of the GNU General Public License
20 ** along with PageEdit. If not, see <http://www.gnu.org/licenses/>.
21 **
22 *************************************************************************/
23
24 #include <QtCore/QLocale>
25 #include <QtCore/QCoreApplication>
26 #include <QFile>
27 #include <QDir>
28
29 #include "SettingsStore.h"
30 #include "Utility.h"
31
32 static const float ZOOM_NORMAL = 1.0f;
33 static QString SETTINGS_GROUP = "user_preferences";
34 static QString KEY_UI_LANGUAGE = SETTINGS_GROUP + "/" + "ui_language";
35 static QString KEY_UI_DICTIONARY = SETTINGS_GROUP + "/" + "ui_dictionary";
36
37 static QString KEY_UI_FONT = SETTINGS_GROUP + "/" + "ui_font";
38 static QString KEY_ORIGINAL_UI_FONT = SETTINGS_GROUP + "/" + "original_ui_font";
39
40 static QString KEY_HIGHDPI_SETTING = SETTINGS_GROUP + "/" + "high_dpi";
41 static QString KEY_PREVIEW_DARK_IN_DM = SETTINGS_GROUP + "/" + "preview_dark_in_dm";
42
43 static QString KEY_SPELL_CHECK = SETTINGS_GROUP + "/" + "spellcheck";
44 static QString KEY_ZOOM_IMAGE = SETTINGS_GROUP + "/" + "zoom_image";
45 static QString KEY_ZOOM_TEXT = SETTINGS_GROUP + "/" + "zoom_text";
46 static QString KEY_ZOOM_WEB = SETTINGS_GROUP + "/" + "zoom_web";
47 static QString KEY_ZOOM_PREVIEW = SETTINGS_GROUP + "/" + "zoom_preview";
48 static QString KEY_ZOOM_INSPECTOR = SETTINGS_GROUP + "/" + "zoom_inspector";
49 static QString KEY_APPEARANCE_PREFS_TAB_INDEX = SETTINGS_GROUP + "/" + "appearance_prefs_tab_index";
50 static QString KEY_WEBVIEW_FONT_FAMILY_STANDARD = SETTINGS_GROUP + "/" + "webview_font_family_standard";
51 static QString KEY_WEBVIEW_FONT_FAMILY_SERIF = SETTINGS_GROUP + "/" + "webview_font_family_serif";
52 static QString KEY_WEBVIEW_FONT_FAMILY_SANS_SERIF = SETTINGS_GROUP + "/" + "webview_font_family_sans_serif";
53 static QString KEY_WEBVIEW_FONT_SIZE = SETTINGS_GROUP + "/" + "webview_font_size";
54 static QString KEY_SPECIAL_CHARACTER_FONT_FAMILY = SETTINGS_GROUP + "/" + "special_character_font_family";
55 static QString KEY_SPECIAL_CHARACTER_FONT_SIZE = SETTINGS_GROUP + "/" + "special_character_font_size";
56 static QString KEY_MAIN_MENU_ICON_SIZE = SETTINGS_GROUP + "/" + "main_menu_icon_size";
57 static QString KEY_JAVASCRIPT_ON = SETTINGS_GROUP + "/" + "javascript_on";
58 static QString KEY_REMOTE_ON = SETTINGS_GROUP + "/" + "remote_on";
59 static QString KEY_USE_PRETTIFY = SETTINGS_GROUP + "/" + "use_prettify";
60 static QString KEY_USE_WSPREWRAP = SETTINGS_GROUP + "/" + "use_white_space_pre_wrap";
61
62
SettingsStore()63 SettingsStore::SettingsStore()
64 : QSettings(Utility::DefinePrefsDir() + "/pageedit.ini", QSettings::IniFormat)
65 {
66 // See QTBUG-40796 and QTBUG-54510 as using UTF-8 as a codec for ini files is very broken
67 // setIniCodec("UTF-8");
68 }
69
SettingsStore(QString filename)70 SettingsStore::SettingsStore(QString filename)
71 : QSettings(filename, QSettings::IniFormat)
72 {
73 // See QTBUG-40796 and QTBUG-54510 as using UTF-8 as a codec for ini files is very broken
74 // setIniCodec("UTF-8");
75 }
76
uiLanguage()77 QString SettingsStore::uiLanguage()
78 {
79 clearSettingsGroup();
80 return value(KEY_UI_LANGUAGE, QLocale::system().name()).toString();
81 }
82
uiDictionary()83 QString SettingsStore::uiDictionary()
84 {
85 clearSettingsGroup();
86 return value(KEY_UI_DICTIONARY, "en_US").toString();
87 }
88
uiFont()89 QString SettingsStore::uiFont()
90 {
91 clearSettingsGroup();
92 return value(KEY_UI_FONT, "").toString();
93 }
94
originalUIFont()95 QString SettingsStore::originalUIFont()
96 {
97 clearSettingsGroup();
98 return value(KEY_ORIGINAL_UI_FONT, "").toString();
99 }
100
highDPI()101 int SettingsStore::highDPI()
102 {
103 clearSettingsGroup();
104 return value(KEY_HIGHDPI_SETTING, 0).toInt();
105 }
106
previewDark()107 int SettingsStore::previewDark()
108 {
109 clearSettingsGroup();
110 return value(KEY_PREVIEW_DARK_IN_DM, 1).toInt();
111 }
112
113 #if 0
114 bool SettingsStore::spellCheck()
115 {
116 clearSettingsGroup();
117 return static_cast<bool>(value(KEY_SPELL_CHECK, false).toBool());
118 }
119 #endif
120
zoomImage()121 float SettingsStore::zoomImage()
122 {
123 clearSettingsGroup();
124 return value(KEY_ZOOM_IMAGE, ZOOM_NORMAL).toFloat();;
125 }
126
zoomText()127 float SettingsStore::zoomText()
128 {
129 clearSettingsGroup();
130 return value(KEY_ZOOM_TEXT, ZOOM_NORMAL).toFloat();
131 }
132
zoomWeb()133 float SettingsStore::zoomWeb()
134 {
135 clearSettingsGroup();
136 return value(KEY_ZOOM_WEB, ZOOM_NORMAL).toFloat();
137 }
138
zoomPreview()139 float SettingsStore::zoomPreview()
140 {
141 clearSettingsGroup();
142 return value(KEY_ZOOM_PREVIEW, ZOOM_NORMAL).toFloat();
143 }
144
zoomInspector()145 float SettingsStore::zoomInspector()
146 {
147 clearSettingsGroup();
148 return value(KEY_ZOOM_INSPECTOR, ZOOM_NORMAL).toFloat();
149 }
150
appearancePrefsTabIndex()151 int SettingsStore::appearancePrefsTabIndex() {
152 clearSettingsGroup();
153 return value(KEY_APPEARANCE_PREFS_TAB_INDEX, 0).toInt();
154 }
155
webViewAppearance()156 SettingsStore::WebViewAppearance SettingsStore::webViewAppearance()
157 {
158 clearSettingsGroup();
159 SettingsStore::WebViewAppearance appearance;
160 appearance.font_family_standard = value(KEY_WEBVIEW_FONT_FAMILY_STANDARD, "Arial").toString();
161 appearance.font_family_serif = value(KEY_WEBVIEW_FONT_FAMILY_SERIF, "Times New Roman").toString();
162 appearance.font_family_sans_serif = value(KEY_WEBVIEW_FONT_FAMILY_SANS_SERIF, "Arial").toString();
163 appearance.font_size = value(KEY_WEBVIEW_FONT_SIZE, 16).toInt();
164 return appearance;
165 }
166
specialCharacterAppearance()167 SettingsStore::SpecialCharacterAppearance SettingsStore::specialCharacterAppearance()
168 {
169 clearSettingsGroup();
170 SettingsStore::SpecialCharacterAppearance appearance;
171 appearance.font_family = value(KEY_SPECIAL_CHARACTER_FONT_FAMILY, "Arial").toString();
172 appearance.font_size = value(KEY_SPECIAL_CHARACTER_FONT_SIZE, 14).toInt();
173 return appearance;
174 }
175
mainMenuIconSize()176 double SettingsStore::mainMenuIconSize()
177 {
178 clearSettingsGroup();
179 return value(KEY_MAIN_MENU_ICON_SIZE, 1.8).toDouble();
180 }
181
javascriptOn()182 int SettingsStore::javascriptOn()
183 {
184 clearSettingsGroup();
185 return value(KEY_JAVASCRIPT_ON, 0).toInt();
186 }
187
remoteOn()188 int SettingsStore::remoteOn()
189 {
190 clearSettingsGroup();
191 return value(KEY_REMOTE_ON, 0).toInt();
192 }
193
usePrettify()194 int SettingsStore::usePrettify()
195 {
196 clearSettingsGroup();
197 return value(KEY_USE_PRETTIFY, 0).toInt();
198 }
199
useWSPreWrap()200 int SettingsStore::useWSPreWrap()
201 {
202 clearSettingsGroup();
203 return value(KEY_USE_WSPREWRAP, 0).toInt();
204 }
205
setUILanguage(const QString & language_code)206 void SettingsStore::setUILanguage(const QString &language_code)
207 {
208 clearSettingsGroup();
209 setValue(KEY_UI_LANGUAGE, language_code);
210 }
211
setUIDictionary(const QString & dictionary_name)212 void SettingsStore::setUIDictionary(const QString &dictionary_name)
213 {
214 clearSettingsGroup();
215 setValue(KEY_UI_DICTIONARY, dictionary_name);
216 }
217
setUIFont(const QString & font_data)218 void SettingsStore::setUIFont(const QString &font_data)
219 {
220 clearSettingsGroup();
221 setValue(KEY_UI_FONT, font_data);
222 }
223
setOriginalUIFont(const QString & font_data)224 void SettingsStore::setOriginalUIFont(const QString &font_data)
225 {
226 clearSettingsGroup();
227 setValue(KEY_ORIGINAL_UI_FONT, font_data);
228 }
229
setHighDPI(int value)230 void SettingsStore::setHighDPI(int value)
231 {
232 clearSettingsGroup();
233 setValue(KEY_HIGHDPI_SETTING, value);
234 }
235
setPreviewDark(int enabled)236 void SettingsStore::setPreviewDark(int enabled)
237 {
238 clearSettingsGroup();
239 setValue(KEY_PREVIEW_DARK_IN_DM, enabled);
240 }
241
242 #if 0
243 void SettingsStore::setSpellCheck(bool enabled)
244 {
245 clearSettingsGroup();
246 setValue(KEY_SPELL_CHECK, enabled);
247 }
248 #endif
249
setZoomImage(float zoom)250 void SettingsStore::setZoomImage(float zoom)
251 {
252 clearSettingsGroup();
253 setValue(KEY_ZOOM_IMAGE, zoom);
254 }
255
setZoomText(float zoom)256 void SettingsStore::setZoomText(float zoom)
257 {
258 clearSettingsGroup();
259 setValue(KEY_ZOOM_TEXT, zoom);
260 }
261
setZoomWeb(float zoom)262 void SettingsStore::setZoomWeb(float zoom)
263 {
264 clearSettingsGroup();
265 setValue(KEY_ZOOM_WEB, zoom);
266 }
267
setZoomPreview(float zoom)268 void SettingsStore::setZoomPreview(float zoom)
269 {
270 clearSettingsGroup();
271 setValue(KEY_ZOOM_PREVIEW, zoom);
272 }
273
setZoomInspector(float zoom)274 void SettingsStore::setZoomInspector(float zoom)
275 {
276 clearSettingsGroup();
277 setValue(KEY_ZOOM_INSPECTOR, zoom);
278 }
279
setAppearancePrefsTabIndex(int index)280 void SettingsStore::setAppearancePrefsTabIndex(int index) {
281 clearSettingsGroup();
282 setValue(KEY_APPEARANCE_PREFS_TAB_INDEX, index);
283 }
284
setWebViewAppearance(const SettingsStore::WebViewAppearance & webview_appearance)285 void SettingsStore::setWebViewAppearance(const SettingsStore::WebViewAppearance &webview_appearance)
286 {
287 clearSettingsGroup();
288 setValue(KEY_WEBVIEW_FONT_FAMILY_STANDARD, webview_appearance.font_family_standard);
289 setValue(KEY_WEBVIEW_FONT_FAMILY_SERIF, webview_appearance.font_family_serif);
290 setValue(KEY_WEBVIEW_FONT_FAMILY_SANS_SERIF, webview_appearance.font_family_sans_serif);
291 setValue(KEY_WEBVIEW_FONT_SIZE, webview_appearance.font_size);
292 }
293
setSpecialCharacterAppearance(const SettingsStore::SpecialCharacterAppearance & special_character_appearance)294 void SettingsStore::setSpecialCharacterAppearance(const SettingsStore::SpecialCharacterAppearance &special_character_appearance)
295 {
296 clearSettingsGroup();
297 setValue(KEY_SPECIAL_CHARACTER_FONT_FAMILY, special_character_appearance.font_family);
298 setValue(KEY_SPECIAL_CHARACTER_FONT_SIZE, special_character_appearance.font_size);
299 }
300
setMainMenuIconSize(double icon_size)301 void SettingsStore::setMainMenuIconSize(double icon_size)
302 {
303 clearSettingsGroup();
304 setValue(KEY_MAIN_MENU_ICON_SIZE, icon_size);
305 }
306
setJavascriptOn(int on)307 void SettingsStore::setJavascriptOn(int on)
308 {
309 clearSettingsGroup();
310 setValue(KEY_JAVASCRIPT_ON, on);
311 }
312
setRemoteOn(int on)313 void SettingsStore::setRemoteOn(int on)
314 {
315 clearSettingsGroup();
316 setValue(KEY_REMOTE_ON, on);
317 }
318
setUsePrettify(int on)319 void SettingsStore::setUsePrettify(int on)
320 {
321 clearSettingsGroup();
322 setValue(KEY_USE_PRETTIFY, on);
323 }
324
setUseWSPreWrap(int on)325 void SettingsStore::setUseWSPreWrap(int on)
326 {
327 clearSettingsGroup();
328 setValue(KEY_USE_WSPREWRAP, on);
329 }
330
clearAppearanceSettings()331 void SettingsStore::clearAppearanceSettings()
332 {
333 clearSettingsGroup();
334 remove(KEY_WEBVIEW_FONT_FAMILY_STANDARD);
335 remove(KEY_WEBVIEW_FONT_FAMILY_SERIF);
336 remove(KEY_WEBVIEW_FONT_FAMILY_SANS_SERIF);
337 remove(KEY_WEBVIEW_FONT_SIZE);
338 remove(KEY_SPECIAL_CHARACTER_FONT_FAMILY);
339 remove(KEY_SPECIAL_CHARACTER_FONT_SIZE);
340 remove(KEY_MAIN_MENU_ICON_SIZE);
341 }
342
clearSettingsGroup()343 void SettingsStore::clearSettingsGroup()
344 {
345 while (!group().isEmpty()) {
346 endGroup();
347 }
348 }
349