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