File indexing completed on 2024-05-12 03:54:30
0001 /* 0002 This file is part of the KDE libraries. 0003 0004 SPDX-FileCopyrightText: 2003 Cornelius Schumacher <schumacher@kde.org> 0005 SPDX-FileCopyrightText: 2003 Waldo Bastian <bastian@kde.org> 0006 SPDX-FileCopyrightText: 2003 Zack Rusin <zack@kde.org> 0007 SPDX-FileCopyrightText: 2006 MichaĆ«l Larouche <michael.larouche@kdemail.net> 0008 SPDX-FileCopyrightText: 2008 Allen Winter <winter@kde.org> 0009 SPDX-FileCopyrightText: 2020 Tomaz Cananbrava <tcanabrava@kde.org> 0010 0011 SPDX-License-Identifier: LGPL-2.0-or-later 0012 */ 0013 0014 #ifndef KCONFIGCOMMONSTRUCTS_H 0015 #define KCONFIGCOMMONSTRUCTS_H 0016 0017 #include <QList> 0018 #include <QString> 0019 0020 #include "KConfigParameters.h" 0021 0022 struct Param { 0023 QString name; 0024 QString type; 0025 }; 0026 0027 struct Signal { 0028 QString name; 0029 QString label; 0030 QList<Param> arguments; 0031 bool modify = false; 0032 }; 0033 0034 class CfgEntry 0035 { 0036 public: 0037 struct Choice { 0038 QString name; 0039 QString context; 0040 QString label; 0041 QString toolTip; 0042 QString whatsThis; 0043 QString val; 0044 0045 QString value() const 0046 { 0047 return !val.isEmpty() ? val : name; 0048 } 0049 }; 0050 class Choices 0051 { 0052 public: 0053 Choices() 0054 { 0055 } 0056 Choices(const QList<Choice> &d, const QString &n, const QString &p) 0057 : prefix(p) 0058 , choices(d) 0059 , mName(n) 0060 { 0061 int i = n.indexOf(QLatin1String("::")); 0062 if (i >= 0) { 0063 mExternalQual = n.left(i + 2); 0064 } 0065 } 0066 QString prefix; 0067 QList<Choice> choices; 0068 const QString &name() const 0069 { 0070 return mName; 0071 } 0072 const QString &externalQualifier() const 0073 { 0074 return mExternalQual; 0075 } 0076 bool external() const 0077 { 0078 return !mExternalQual.isEmpty(); 0079 } 0080 0081 private: 0082 QString mName; 0083 QString mExternalQual; 0084 }; 0085 0086 public: 0087 QString group; 0088 QString parentGroup; 0089 QString type; 0090 QString key; 0091 QString name; 0092 QString labelContext; 0093 QString label; 0094 QString toolTipContext; 0095 QString toolTip; 0096 QString whatsThisContext; 0097 QString whatsThis; 0098 QString code; 0099 QString defaultValue; 0100 QString param; 0101 QString paramName; 0102 QString paramType; 0103 Choices choices; 0104 QList<Signal> signalList; 0105 QStringList paramValues; 0106 QStringList paramDefaultValues; 0107 int paramMax; 0108 bool hidden; 0109 QString min; 0110 QString max; 0111 }; 0112 0113 struct ParseResult { 0114 QString cfgFileName; 0115 bool cfgFileNameArg = false; 0116 bool cfgStateConfig = false; 0117 QList<Param> parameters; 0118 QList<Signal> signalList; 0119 QStringList includes; 0120 QList<CfgEntry *> entries; 0121 bool hasNonModifySignals = false; 0122 }; 0123 0124 // TODO: Move those methods 0125 QString enumName(const QString &n); 0126 QString enumName(const QString &n, const CfgEntry::Choices &c); 0127 QString param(const QString &t); 0128 QString cppType(const QString &t); 0129 QString itemType(const QString &type); 0130 QString changeSignalName(const QString &n); 0131 0132 QString enumType(const CfgEntry *e, bool globalEnums); 0133 0134 QString getDefaultFunction(const QString &n, const QString &className = QString()); 0135 QString setFunction(const QString &n, const QString &className = QString()); 0136 QString getFunction(const QString &n, const QString &className = QString()); 0137 QString immutableFunction(const QString &n, const QString &className = QString()); 0138 0139 QString itemAccessorBody(const CfgEntry *e, const KConfigParameters &cfg); 0140 QString signalEnumName(const QString &signalName); 0141 0142 bool isUnsigned(const QString &type); 0143 0144 // returns the name of an member variable 0145 // use itemPath to know the full path 0146 // like using d-> in case of dpointer 0147 QString varName(const QString &n, const KConfigParameters &cfg); 0148 0149 QString varPath(const QString &n, const KConfigParameters &cfg); 0150 0151 // returns the name of an item variable 0152 // use itemPath to know the full path 0153 // like using d-> in case of dpointer 0154 QString itemVar(const CfgEntry *e, const KConfigParameters &cfg); 0155 0156 // returns the name of the local inner item if there is one 0157 // (before wrapping with KConfigCompilerSignallingItem) 0158 // Otherwise return itemVar() 0159 QString innerItemVar(const CfgEntry *e, const KConfigParameters &cfg); 0160 0161 QString itemPath(const CfgEntry *e, const KConfigParameters &cfg); 0162 0163 QString filenameOnly(const QString &path); 0164 0165 QString itemDeclaration(const CfgEntry *e, const KConfigParameters &cfg); 0166 0167 QString translatedString(const KConfigParameters &cfg, 0168 const QString &string, 0169 const QString &context = QString(), 0170 const QString ¶m = QString(), 0171 const QString ¶mValue = QString()); 0172 0173 // TODO: Sanitize those functions. 0174 QString newItem(const CfgEntry *entry, const QString &key, const QString &defaultValue, const KConfigParameters &cfg, const QString ¶m = QString()); 0175 0176 QString newInnerItem(const CfgEntry *entry, const QString &key, const QString &defaultValue, const KConfigParameters &cfg, const QString ¶m = QString()); 0177 0178 QString userTextsFunctions(const CfgEntry *e, const KConfigParameters &cfg, QString itemVarStr = QString(), const QString &i = QString()); 0179 0180 QString paramString(const QString &s, const CfgEntry *e, int i); 0181 QString paramString(const QString &group, const QList<Param> ¶meters); 0182 0183 QString defaultValue(const QString &t); 0184 QString memberGetDefaultBody(const CfgEntry *e); 0185 QString literalString(const QString &s); 0186 QString enumTypeQualifier(const QString &n, const CfgEntry::Choices &c); 0187 0188 void addQuotes(QString &s); 0189 void addDebugMethod(QTextStream &out, const KConfigParameters &cfg, const QString &n); 0190 0191 #endif