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 &param = QString(),
0172                          const QString &paramValue = QString());
0173 
0174 // TODO: Sanitize those functions.
0175 QString newItem(const CfgEntry *entry, const QString &key, const QString &defaultValue, const KConfigParameters &cfg, const QString &param = QString());
0176 
0177 QString newInnerItem(const CfgEntry *entry, const QString &key, const QString &defaultValue, const KConfigParameters &cfg, const QString &param = 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> &parameters);
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