File indexing completed on 2024-12-08 06:41:29

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 KSERVICE_CONVERSION_CHECK_P_H
0009 #define KSERVICE_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 // Copied from kconfigconversioncheck_p.h in KConfig
0023 namespace KServiceConversionCheck
0024 {
0025 // used to distinguish between supported/unsupported types
0026 struct supported {
0027 };
0028 struct unsupported {
0029 };
0030 
0031 // traits type class to define support for constraints
0032 template<typename T>
0033 struct QVconvertible {
0034     typedef unsupported toQString;
0035     typedef unsupported toQVariant;
0036 };
0037 
0038 // constraint classes
0039 template<typename T>
0040 struct type_toQString {
0041     void constraint()
0042     {
0043         supported x = y;
0044         Q_UNUSED(x);
0045     }
0046     typename QVconvertible<T>::toQString y;
0047 };
0048 
0049 template<typename T>
0050 struct type_toQVariant {
0051     void constraint()
0052     {
0053         supported x = y;
0054         Q_UNUSED(x);
0055     }
0056     typename QVconvertible<T>::toQVariant y;
0057 };
0058 
0059 // check if T is convertible to QString thru QVariant
0060 // if not supported can't be used in QList<T> functions
0061 template<typename T>
0062 inline void to_QString()
0063 {
0064     void (type_toQString<T>::*x)() = &type_toQString<T>::constraint;
0065     Q_UNUSED(x);
0066 }
0067 
0068 // check if T is convertible to QVariant & supported in readEntry/writeEntry
0069 template<typename T>
0070 inline void to_QVariant()
0071 {
0072     void (type_toQVariant<T>::*x)() = &type_toQVariant<T>::constraint;
0073     Q_UNUSED(x);
0074 }
0075 
0076 // define for all types handled in readEntry/writeEntry
0077 // string_support - is supported by QVariant(type).toString(),
0078 //                  can be used in QList<T> functions
0079 // variant_support - has a QVariant constructor
0080 #define QVConversions(type, string_support, variant_support)                                                                                                   \
0081     template<>                                                                                                                                                 \
0082     struct QVconvertible<type> {                                                                                                                               \
0083         typedef string_support toQString;                                                                                                                      \
0084         typedef variant_support toQVariant;                                                                                                                    \
0085     }
0086 
0087 // The only types needed here are the types handled in readEntry/writeEntry
0088 // the default QVconvertible will take care of the rest.
0089 QVConversions(bool, supported, supported);
0090 QVConversions(int, supported, supported);
0091 QVConversions(unsigned int, supported, supported);
0092 QVConversions(long long, supported, supported);
0093 QVConversions(unsigned long long, supported, supported);
0094 QVConversions(float, supported, supported);
0095 QVConversions(double, supported, supported);
0096 QVConversions(QString, supported, supported);
0097 QVConversions(QColor, unsupported, supported);
0098 QVConversions(QFont, supported, supported);
0099 QVConversions(QDateTime, unsupported, supported);
0100 QVConversions(QDate, unsupported, supported);
0101 QVConversions(QSize, unsupported, supported);
0102 QVConversions(QRect, unsupported, supported);
0103 QVConversions(QPoint, unsupported, supported);
0104 QVConversions(QSizeF, unsupported, supported);
0105 QVConversions(QRectF, unsupported, supported);
0106 QVConversions(QPointF, unsupported, supported);
0107 QVConversions(QByteArray, supported, supported);
0108 QVConversions(QStringList, unsupported, supported);
0109 QVConversions(QVariantList, unsupported, supported);
0110 QVConversions(QUrl, supported, supported);
0111 QVConversions(QList<QUrl>, unsupported, supported);
0112 QVConversions(QUuid, supported, supported);
0113 }
0114 
0115 #endif