File indexing completed on 2024-06-23 05:48:57
0001 /* 0002 This file is part of the Okteta Kasten Framework, made within the KDE community. 0003 0004 SPDX-FileCopyrightText: 2009, 2012 Alex Richardson <alex.richardson@gmx.de> 0005 0006 SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL 0007 */ 0008 0009 #ifndef KASTEN_ENUMDEFINITION_HPP 0010 #define KASTEN_ENUMDEFINITION_HPP 0011 #include "../../allprimitivetypes.hpp" 0012 #include "../primitivedatatype.hpp" 0013 // Qt core 0014 #include <QMap> 0015 #include <QSharedData> 0016 #include <QSharedDataPointer> 0017 #include <QString> 0018 #include <QPair> 0019 0020 class QScriptValue; 0021 struct LoggerWithContext; 0022 0023 class EnumDefinition : public QSharedData 0024 { 0025 public: 0026 using Ptr = QSharedDataPointer<EnumDefinition>; 0027 0028 EnumDefinition(const QMap<AllPrimitiveTypes, QString>& values, const QString& name, 0029 PrimitiveDataType type) 0030 : mName(name) 0031 , mValues(values) 0032 , mType(type) 0033 {} 0034 EnumDefinition(const EnumDefinition& e) 0035 : QSharedData(e) 0036 , mValues(e.mValues) 0037 , mType(e.mType) 0038 {} 0039 0040 const QMap<AllPrimitiveTypes, QString>& values() const; 0041 AllPrimitiveTypes key(QString& value) const; 0042 QString value(AllPrimitiveTypes key) const; 0043 PrimitiveDataType type() const; 0044 const QString& name() const; 0045 void setValues(const QMap<AllPrimitiveTypes, QString>& newValues); 0046 0047 static QMap<AllPrimitiveTypes, QString> parseEnumValues(const QScriptValue& val, 0048 const LoggerWithContext& logger, PrimitiveDataType type = PrimitiveDataType::UInt64); 0049 /** @return a pair containing the converted value. A default constructed pair means error! */ 0050 static QPair<AllPrimitiveTypes, QString> convertToEnumEntry(const QString& name, const QVariant& value, 0051 const LoggerWithContext& logger, PrimitiveDataType type); 0052 0053 protected: 0054 const QString mName; 0055 QMap<AllPrimitiveTypes, QString> mValues; 0056 const PrimitiveDataType mType; 0057 }; 0058 0059 inline const QMap<AllPrimitiveTypes, QString>& EnumDefinition::values() const 0060 { 0061 return mValues; 0062 } 0063 0064 inline AllPrimitiveTypes EnumDefinition::key(QString& value) const 0065 { 0066 return mValues.key(value); 0067 } 0068 0069 inline QString EnumDefinition::value(AllPrimitiveTypes key) const 0070 { 0071 return mValues.value(key); 0072 } 0073 0074 inline PrimitiveDataType EnumDefinition::type() const 0075 { 0076 return mType; 0077 } 0078 0079 inline const QString& EnumDefinition::name() const 0080 { 0081 return mName; 0082 } 0083 0084 inline void EnumDefinition::setValues(const QMap<AllPrimitiveTypes, QString>& newValues) 0085 { 0086 mValues = newValues; // causes the QSharedPointer to detach and copy 0087 } 0088 0089 #endif /* KASTEN_ENUMDEFINITION_HPP */