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