File indexing completed on 2024-04-28 03:53:15

0001 /*
0002     This file is part of the KDE libraries
0003     SPDX-FileCopyrightText: 2006 Thomas Braxton <brax108@cox.net>
0004 
0005     SPDX-License-Identifier: LGPL-2.0-or-later
0006 */
0007 
0008 #ifndef KCONFIG_CONVERSION_CHECK_P_H
0009 #define KCONFIG_CONVERSION_CHECK_P_H
0010 
0011 #include <QDate>
0012 #include <QPoint>
0013 #include <QRect>
0014 #include <QSize>
0015 #include <QString>
0016 #include <QUuid>
0017 #include <QVariant>
0018 
0019 class QColor;
0020 class QFont;
0021 
0022 namespace KConfigConversionCheck
0023 {
0024 // used to distinguish between supported/unsupported types
0025 struct supported {
0026 };
0027 struct unsupported {
0028 };
0029 
0030 // traits type class to define support for constraints
0031 template<typename T>
0032 struct QVconvertible {
0033     typedef unsupported toQString;
0034     typedef unsupported toQVariant;
0035 };
0036 
0037 // constraint classes
0038 template<typename T>
0039 struct type_toQString {
0040     void constraint()
0041     {
0042         supported x = y;
0043         Q_UNUSED(x);
0044     }
0045     typename QVconvertible<T>::toQString y;
0046 };
0047 
0048 template<typename T>
0049 struct type_toQVariant {
0050     void constraint()
0051     {
0052         supported x = y;
0053         Q_UNUSED(x);
0054     }
0055     typename QVconvertible<T>::toQVariant y;
0056 };
0057 
0058 // check if T is convertible to QString thru QVariant
0059 // if not supported can't be used in QList<T> functions
0060 template<typename T>
0061 inline void to_QString()
0062 {
0063     void (type_toQString<T>::*x)() = &type_toQString<T>::constraint;
0064     Q_UNUSED(x);
0065 }
0066 
0067 // check if T is convertible to QVariant & supported in readEntry/writeEntry
0068 template<typename T>
0069 inline void to_QVariant()
0070 {
0071     void (type_toQVariant<T>::*x)() = &type_toQVariant<T>::constraint;
0072     Q_UNUSED(x);
0073 }
0074 
0075 // define for all types handled in readEntry/writeEntry
0076 // string_support - is supported by QVariant(type).toString(),
0077 //                  can be used in QList<T> functions
0078 // variant_support - has a QVariant constructor
0079 #define QVConversions(type, string_support, variant_support)                                                                                                   \
0080     template<>                                                                                                                                                 \
0081     struct QVconvertible<type> {                                                                                                                               \
0082         typedef string_support toQString;                                                                                                                      \
0083         typedef variant_support toQVariant;                                                                                                                    \
0084     }
0085 
0086 // The only types needed here are the types handled in readEntry/writeEntry
0087 // the default QVconvertible will take care of the rest.
0088 QVConversions(bool, supported, supported);
0089 QVConversions(int, supported, supported);
0090 QVConversions(unsigned int, supported, supported);
0091 QVConversions(long long, supported, supported);
0092 QVConversions(unsigned long long, supported, supported);
0093 QVConversions(float, supported, supported);
0094 QVConversions(double, supported, supported);
0095 QVConversions(QString, supported, supported);
0096 QVConversions(QColor, unsupported, supported);
0097 QVConversions(QFont, supported, supported);
0098 QVConversions(QDateTime, unsupported, supported);
0099 QVConversions(QDate, unsupported, supported);
0100 QVConversions(QSize, unsupported, supported);
0101 QVConversions(QRect, unsupported, supported);
0102 QVConversions(QPoint, unsupported, supported);
0103 QVConversions(QSizeF, unsupported, supported);
0104 QVConversions(QRectF, unsupported, supported);
0105 QVConversions(QPointF, unsupported, supported);
0106 QVConversions(QByteArray, supported, supported);
0107 QVConversions(QStringList, unsupported, supported);
0108 QVConversions(QVariantList, unsupported, supported);
0109 QVConversions(QUrl, supported, supported);
0110 QVConversions(QList<QUrl>, unsupported, supported);
0111 QVConversions(QUuid, supported, supported);
0112 }
0113 
0114 #endif