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