1 /*
2 * %kadu copyright begin%
3 * Copyright 2014 Rafał Przemysław Malinowski (rafal.przemyslaw.malinowski@gmail.com)
4 * %kadu copyright end%
5 *
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License as
8 * published by the Free Software Foundation; either version 2 of
9 * the License, or (at your option) any later version.
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 * You should have received a copy of the GNU General Public License
17 * along with this program. If not, see <http://www.gnu.org/licenses/>.
18 */
19
20 #include "deprecated-configuration-api.h"
21
22 #include "configuration/configuration-api.h"
23 #include "misc/misc.h"
24
25 #include <QtCore/QMutex>
26 #include <QtCore/QMutexLocker>
27 #include <QtWidgets/QApplication>
28
29 static QMutex GlobalMutex;
30
DeprecatedConfigurationApi(ConfigurationApi * xmlConfigFile,const QString & fileName)31 DeprecatedConfigurationApi::DeprecatedConfigurationApi(ConfigurationApi *xmlConfigFile, const QString &fileName) :
32 m_xmlConfigFile{xmlConfigFile},
33 m_fileName{fileName.section('/', -1)}
34 {
35 }
36
changeEntry(const QString & group,const QString & name,const QString & value)37 bool DeprecatedConfigurationApi::changeEntry(const QString &group, const QString &name, const QString &value)
38 {
39 QMutexLocker locker(&GlobalMutex);
40
41 auto root_elem = m_xmlConfigFile->rootElement();
42 auto deprecated_elem = m_xmlConfigFile->accessElement(root_elem, "Deprecated");
43 auto config_file_elem = m_xmlConfigFile->accessElementByFileNameProperty(deprecated_elem, "ConfigFile", "name", m_fileName);
44 auto group_elem = m_xmlConfigFile->accessElementByProperty(config_file_elem, "Group", "name", group);
45 auto entry_elem = m_xmlConfigFile->accessElementByProperty(group_elem, "Entry", "name", name);
46 entry_elem.setAttribute("value", value);
47
48 return true;
49 }
50
getEntry(const QString & group,const QString & name) const51 QString DeprecatedConfigurationApi::getEntry(const QString &group, const QString &name) const
52 {
53 QMutexLocker locker(&GlobalMutex);
54
55 auto root_elem = m_xmlConfigFile->rootElement();
56 auto deprecated_elem = m_xmlConfigFile->findElement(root_elem, "Deprecated");
57
58 if (deprecated_elem.isNull())
59 return {};
60
61 auto config_file_elem = m_xmlConfigFile->findElementByFileNameProperty(deprecated_elem, "ConfigFile", "name", m_fileName);
62 if (config_file_elem.isNull())
63 return {};
64
65 auto group_elem = m_xmlConfigFile->findElementByProperty(config_file_elem, "Group", "name", group);
66 if (group_elem.isNull())
67 return {};
68
69 auto entry_elem = m_xmlConfigFile->findElementByProperty(group_elem, "Entry", "name", name);
70 return entry_elem.attribute("value");
71 }
72
writeEntry(const QString & group,const QString & name,const QString & value)73 void DeprecatedConfigurationApi::writeEntry(const QString &group,const QString &name, const QString &value)
74 {
75 changeEntry(group, name, value);
76 }
77
writeEntry(const QString & group,const QString & name,const char * value)78 void DeprecatedConfigurationApi::writeEntry(const QString &group,const QString &name, const char *value)
79 {
80 changeEntry(group, name, QString::fromLocal8Bit(value));
81 }
82
writeEntry(const QString & group,const QString & name,const int value)83 void DeprecatedConfigurationApi::writeEntry(const QString &group,const QString &name, const int value)
84 {
85 changeEntry(group, name, QString::number(value));
86 }
87
writeEntry(const QString & group,const QString & name,const bool value)88 void DeprecatedConfigurationApi::writeEntry(const QString &group,const QString &name, const bool value)
89 {
90 changeEntry(group, name, value ? "true" : "false");
91 }
92
writeEntry(const QString & group,const QString & name,const QRect & value)93 void DeprecatedConfigurationApi::writeEntry(const QString &group,const QString &name, const QRect &value)
94 {
95 changeEntry(group, name, rectToString(value));
96 }
97
writeEntry(const QString & group,const QString & name,const QColor & value)98 void DeprecatedConfigurationApi::writeEntry(const QString &group,const QString &name, const QColor &value)
99 {
100 changeEntry(group, name, value.name());
101 }
102
writeEntry(const QString & group,const QString & name,const QFont & value)103 void DeprecatedConfigurationApi::writeEntry(const QString &group,const QString &name, const QFont &value)
104 {
105 changeEntry(group, name, value.toString());
106 }
107
readEntry(const QString & group,const QString & name,const QString & def) const108 QString DeprecatedConfigurationApi::readEntry(const QString &group,const QString &name, const QString &def) const
109 {
110 auto string = getEntry(group, name);
111 if (string.isNull())
112 return def;
113 return string;
114 }
115
readUnsignedNumEntry(const QString & group,const QString & name,unsigned int def) const116 unsigned int DeprecatedConfigurationApi::readUnsignedNumEntry(const QString &group,const QString &name, unsigned int def) const
117 {
118 auto ok = false;
119 auto string = getEntry(group, name);
120 if (string.isNull())
121 return def;
122 auto num = string.toUInt(&ok);
123 if (!ok)
124 return def;
125 return num;
126 }
127
readNumEntry(const QString & group,const QString & name,int def) const128 int DeprecatedConfigurationApi::readNumEntry(const QString &group,const QString &name, int def) const
129 {
130 auto ok = false;
131 auto string = getEntry(group, name);
132 if (string.isNull())
133 return def;
134 auto num = string.toInt(&ok);
135 if (!ok)
136 return def;
137 return num;
138 }
139
readBoolEntry(const QString & group,const QString & name,bool def) const140 bool DeprecatedConfigurationApi::readBoolEntry(const QString &group,const QString &name, bool def) const
141 {
142 auto string = getEntry(group, name);
143 if (string.isNull())
144 return def;
145 return string=="true";
146 }
147
readRectEntry(const QString & group,const QString & name,const QRect * def) const148 QRect DeprecatedConfigurationApi::readRectEntry(const QString &group,const QString &name, const QRect *def) const
149 {
150 return stringToRect(getEntry(group, name), def);
151 }
152
readColorEntry(const QString & group,const QString & name,const QColor * def) const153 QColor DeprecatedConfigurationApi::readColorEntry(const QString &group,const QString &name, const QColor *def) const
154 {
155 auto str = getEntry(group, name);
156 if (str.isNull())
157 return def ? *def : QColor(0, 0, 0);
158 else
159 return QColor(str);
160 }
161
162
readFontEntry(const QString & group,const QString & name,const QFont * def) const163 QFont DeprecatedConfigurationApi::readFontEntry(const QString &group,const QString &name, const QFont *def) const
164 {
165 auto string = getEntry(group, name);
166 if (string.isNull())
167 return def ? *def : QApplication::font();
168 auto font = QFont{};
169 if(font.fromString(string))
170 return font;
171 return def ? *def : QApplication::font();
172 }
173
removeVariable(const QString & group,const QString & name)174 void DeprecatedConfigurationApi::removeVariable(const QString &group, const QString &name)
175 {
176 QMutexLocker locker(&GlobalMutex);
177
178 auto root_elem = m_xmlConfigFile->rootElement();
179 auto deprecated_elem = m_xmlConfigFile->accessElement(root_elem, "Deprecated");
180 auto config_file_elem = m_xmlConfigFile->accessElementByFileNameProperty(deprecated_elem, "ConfigFile", "name", m_fileName);
181 auto group_elem = m_xmlConfigFile->accessElementByProperty(config_file_elem, "Group", "name", group);
182 auto entry_elem = m_xmlConfigFile->accessElementByProperty(group_elem, "Entry", "name", name);
183 group_elem.removeChild(entry_elem);
184 }
185
addVariable(const QString & group,const QString & name,const QString & defvalue)186 void DeprecatedConfigurationApi::addVariable(const QString &group, const QString &name, const QString &defvalue)
187 {
188 if (getEntry(group, name).isEmpty())
189 writeEntry(group, name, defvalue);
190 }
addVariable(const QString & group,const QString & name,const char * defvalue)191 void DeprecatedConfigurationApi::addVariable(const QString &group, const QString &name, const char *defvalue)
192 {
193 if (getEntry(group, name).isEmpty())
194 writeEntry(group, name, defvalue);
195 }
addVariable(const QString & group,const QString & name,const int defvalue)196 void DeprecatedConfigurationApi::addVariable(const QString &group, const QString &name, const int defvalue)
197 {
198 if (getEntry(group, name).isEmpty())
199 writeEntry(group, name, defvalue);
200 }
addVariable(const QString & group,const QString & name,const bool defvalue)201 void DeprecatedConfigurationApi::addVariable(const QString &group, const QString &name, const bool defvalue)
202 {
203 if (getEntry(group, name).isEmpty())
204 writeEntry(group, name, defvalue);
205 }
addVariable(const QString & group,const QString & name,const QColor & defvalue)206 void DeprecatedConfigurationApi::addVariable(const QString &group, const QString &name, const QColor &defvalue)
207 {
208 if (getEntry(group, name).isEmpty())
209 writeEntry(group, name, defvalue);
210 }
addVariable(const QString & group,const QString & name,const QFont & defvalue)211 void DeprecatedConfigurationApi::addVariable(const QString &group, const QString &name, const QFont &defvalue)
212 {
213 if (getEntry(group, name).isEmpty())
214 writeEntry(group, name, defvalue);
215 }
216