31 #include <QSharedData> 32 #include <QMetaTypeId> 37 namespace EnumDetectorHelper
43 inline Yes is_int_type(
int) {
return Yes(); }
44 inline No is_int_type(...) {
return No(); }
46 template <
int Defined,
int Size>
50 static No value() {
return No(); }
54 class Helper<0, sizeof(Yes)>
57 static Yes value() {
return Yes(); }
60 template <
typename T,
int IsEnum>
61 class VariantCastHelper
64 static QVariant convertToVariant(
const T &t)
65 {
return QVariant::fromValue(t); }
66 static T convertFromVariant(
const QVariant &t)
67 {
return t.value<T>(); }
71 class VariantCastHelper <T, sizeof(Yes)>
74 static QVariant convertToVariant(
const T &t)
75 {
return QVariant::fromValue(
int(t)); }
76 static T convertFromVariant(
const QVariant &v)
77 {
return static_cast<T
>(v.toInt()); }
80 template <
typename T,
int Defined>
81 class VariantCastHelper3
84 static QVariant convertToVariant(
const T &t)
86 return VariantCastHelper<T, sizeof(No)>::convertToVariant(t);
88 static T convertFromVariant(
const QVariant &v)
90 return VariantCastHelper<T, sizeof(No)>::convertFromVariant(v);
96 class VariantCastHelper3 <T, 0>
99 static QVariant convertToVariant(
const T &t)
101 return VariantCastHelper<T, sizeof(Helper<QMetaTypeId2<T>::Defined,
sizeof(is_int_type(*reinterpret_cast<T*>(0)))>::value())>::convertToVariant(t);
103 static T convertFromVariant(
const QVariant &v)
105 return VariantCastHelper<T, sizeof(Helper<QMetaTypeId2<T>::Defined,
sizeof(is_int_type(*reinterpret_cast<T*>(0)))>::value())>::convertFromVariant(v);
111 template <
typename T>
112 class VariantCastHelper2
115 static QVariant convertToVariant(
const T &t)
117 return VariantCastHelper3<T, QMetaTypeId2<T>::Defined>::convertToVariant(t);
119 static T convertFromVariant(
const QVariant &v)
121 return VariantCastHelper3<T, QMetaTypeId2<T>::Defined>::convertFromVariant(v);
128 class ConfigBackendPrivate;
137 Config(
const QVariantList &list);
138 Config(QVariantList *list);
139 Config(
const QVariantMap &map);
141 Config(
const QString &path = QString());
143 Config(
const QStringList &paths);
144 Config(
const QString &path,
const QVariantList &fallbacks);
145 Config(
const QString &path,
const QVariant &fallback);
150 Config group(
const QString &name) Q_REQUIRED_RESULT;
151 QStringList childGroups()
const Q_REQUIRED_RESULT;
152 QStringList childKeys()
const Q_REQUIRED_RESULT;
153 bool hasChildGroup(
const QString &name)
const Q_REQUIRED_RESULT;
154 bool hasChildKey(
const QString &name)
const Q_REQUIRED_RESULT;
155 void beginGroup(
const QString &name);
157 void remove(
const QString &name);
159 Config arrayElement(
int index) Q_REQUIRED_RESULT;
160 int beginArray(
const QString &name);
162 int arraySize()
const Q_REQUIRED_RESULT;
163 void setArrayIndex(
int index);
164 void remove(
int index);
166 QVariant rootValue(
const QVariant &def = QVariant(), ValueFlags type = Normal)
const Q_REQUIRED_RESULT;
168 T value(
const QString &key,
const T &def = T(), ValueFlags type = Normal)
const Q_REQUIRED_RESULT;
169 QVariant value(
const QString &key,
const QVariant &def = QVariant(), ValueFlags type = Normal)
const Q_REQUIRED_RESULT;
170 inline QString value(
const QString &key,
const QLatin1String &def, ValueFlags type = Normal)
const Q_REQUIRED_RESULT;
171 inline QString value(
const QString &key,
const char *def, ValueFlags type = Normal)
const Q_REQUIRED_RESULT;
173 QString value(
const QString &key,
const char (&def)[N], ValueFlags type = Normal)
const Q_REQUIRED_RESULT;
175 void setValue(
const QString &key,
const T &value, ValueFlags type = Normal);
176 void setValue(
const QString &key,
const QVariant &value, ValueFlags type = Normal);
177 inline void setValue(
const QString &key,
const QLatin1String &value, ValueFlags type = Normal);
178 inline void setValue(
const QString &key,
const char *value, ValueFlags type = Normal);
180 void setValue(
const QString &key,
const char (&value)[N], ValueFlags type = Normal);
184 typedef void (*SaveOperator)(QVariant &,
const void *);
185 typedef void (*LoadOperator)(
const QVariant &,
void *);
186 static void registerType(
int type, SaveOperator saveOp, LoadOperator loadOp);
188 QExplicitlySharedDataPointer<ConfigPrivate> d_ptr;
191 template <
typename T>
194 var = QVariant::fromValue(t);
197 template <
typename T>
203 template <
typename T>
206 typedef void (*SavePtr)(QVariant &,
const T *);
207 typedef void (*LoadPtr)(
const QVariant &, T *);
208 SavePtr sptr = configSaveHelper<T>();
209 LoadPtr lptr = configLoadHelper<T>();
212 reinterpret_cast<Config::SaveOperator>(sptr),
213 reinterpret_cast<Config::LoadOperator>(lptr));
227 virtual QVariant load(
const QString &file) = 0;
228 virtual void save(
const QString &file,
const QVariant &entry) = 0;
230 QByteArray name()
const;
232 virtual void virtual_hook(
int id,
void *data);
234 QScopedPointer<ConfigBackendPrivate> d_ptr;
238 Q_INLINE_TEMPLATE T
Config::value(
const QString &key,
const T &def, Config::ValueFlags type)
const 240 QVariant defVar = EnumDetectorHelper::VariantCastHelper2<T>::convertToVariant(def);
241 return EnumDetectorHelper::VariantCastHelper2<T>::convertFromVariant(value(key, defVar, type));
245 Q_INLINE_TEMPLATE
void Config::setValue(
const QString &key,
const T &value, Config::ValueFlags type)
247 setValue(key, EnumDetectorHelper::VariantCastHelper2<T>::convertToVariant(value), type);
250 QString
Config::value(
const QString &key,
const QLatin1String &def, ValueFlags type)
const 252 return value(key, QString(def), type);
255 QString
Config::value(
const QString &key,
const char *def, ValueFlags type)
const 257 return value(key, QString::fromUtf8(def), type);
261 Q_INLINE_TEMPLATE QString
Config::value(
const QString &key,
const char (&def)[N], ValueFlags type)
const 263 return value(key, QString::fromUtf8(def, N-1), type);
268 setValue(key, QString(value), type);
273 setValue(key, QString::fromUtf8(value), type);
277 Q_INLINE_TEMPLATE
void Config::setValue(
const QString &key,
const char (&value)[N], ValueFlags type)
279 setValue(key, QString::fromUtf8(value, N-1), type);
#define LIBQUTIM_EXPORT
Definition: libqutim_global.h:45
Definition: abstractsearchrequest.h:33
static void registerType(int type, SaveOperator saveOp, LoadOperator loadOp)
void configLoadHelper(const QVariant &var, T *t)
Definition: config.h:198
Config ConfigGroup
Definition: config.h:217
T value(const QString &key, const T &def=T(), ValueFlags type=Normal) const Q_REQUIRED_RESULT
void registerConfigType(T *=0)
Definition: config.h:204
Q_DECLARE_METATYPE(qutim_sdk_0_3::ExtensionIcon)
void configSaveHelper(QVariant &var, const T *t)
Definition: config.h:192
ValueFlag
Definition: config.h:134
void setValue(const QString &key, const T &value, ValueFlags type=Normal)
Config ConfigBase
Definition: config.h:216