File indexing completed on 2024-06-30 05:51:31
0001 /* 0002 This file is part of the Okteta Kasten Framework, made within the KDE community. 0003 0004 SPDX-FileCopyrightText: 2011, 2012, 2013 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_DEFAULTSCRIPTCLASS_HPP 0010 #define KASTEN_DEFAULTSCRIPTCLASS_HPP 0011 0012 #include <QVector> 0013 #include <QScriptClass> 0014 #include <QScriptValue> 0015 #include <QScriptEngine> 0016 #include <QScriptString> 0017 #include <QScriptClassPropertyIterator> 0018 0019 class DataInformation; 0020 class ScriptHandlerInfo; 0021 0022 class DefaultScriptClass : public QScriptClass 0023 { 0024 friend class DefaultscriptClassIterator; 0025 0026 public: 0027 using DataInfPtr = DataInformation*; 0028 using PropertyInfoList = QVector<QPair<QScriptString, QScriptValue::PropertyFlags>>; 0029 0030 DefaultScriptClass(QScriptEngine* engine, ScriptHandlerInfo* handlerInfo); 0031 ~DefaultScriptClass() override; 0032 0033 QueryFlags queryProperty(const QScriptValue& object, const QScriptString& name, QueryFlags flags, uint* id) override; 0034 QScriptValue::PropertyFlags propertyFlags(const QScriptValue& object, const QScriptString& name, uint id) override; 0035 QScriptValue property(const QScriptValue& object, const QScriptString& name, uint id) override; 0036 void setProperty(QScriptValue& object, const QScriptString& name, uint id, const QScriptValue& value) override; 0037 QScriptValue prototype() const override; 0038 0039 QScriptClassPropertyIterator* newIterator(const QScriptValue& object) override; 0040 0041 /** Convert a QScriptValue to DataInformation than qscriptvalue_cast, since we know exactly what to expect 0042 * @param val the value to convert. Do not call .data() on it. 0043 * @return @p val converted to a Datainformation* 0044 */ 0045 static DataInformation* toDataInformation(const QScriptValue& obj); 0046 0047 protected: 0048 virtual bool queryAdditionalProperty(const DataInformation* data, const QScriptString& name, QueryFlags* flags, uint* id) = 0; 0049 virtual bool additionalPropertyFlags(const DataInformation* data, const QScriptString& name, uint id, QScriptValue::PropertyFlags* flags) = 0; 0050 virtual QScriptValue additionalProperty(const DataInformation* data, const QScriptString& name, uint id) = 0; 0051 virtual bool setAdditionalProperty(DataInformation* data, const QScriptString& name, uint id, const QScriptValue& value) = 0; 0052 static QScriptValue Default_proto_toString(QScriptContext* ctx, QScriptEngine* eng); 0053 0054 private: 0055 void setDataType(const QScriptValue& value, DataInformation* data); 0056 0057 protected: 0058 QScriptString s_valid; 0059 QScriptString s_wasAbleToRead; 0060 QScriptString s_validationError; 0061 QScriptString s_parent; 0062 QScriptString s_byteOrder; 0063 QScriptString s_name; 0064 QScriptString s_datatype; 0065 QScriptString s_updateFunc; 0066 QScriptString s_validationFunc; 0067 QScriptString s_customTypeName; 0068 QScriptString s_asStringFunc; 0069 /** Contains all properties of this class, classes inheriting should add their own properties to this list */ 0070 PropertyInfoList mIterableProperties; 0071 QScriptValue mDefaultPrototype; 0072 ScriptHandlerInfo* mHandlerInfo; 0073 }; 0074 0075 /** Provide a default iterator for all properties. This should suffice for all classes that don't have children */ 0076 class DefaultscriptClassIterator : public QScriptClassPropertyIterator 0077 { 0078 public: 0079 DefaultscriptClassIterator(const QScriptValue& object, DefaultScriptClass* cls); 0080 ~DefaultscriptClassIterator() override; 0081 bool hasNext() const override; 0082 bool hasPrevious() const override; 0083 QScriptString name() const override; 0084 QScriptValue::PropertyFlags flags() const override; 0085 uint id() const override; 0086 void next() override; 0087 void previous() override; 0088 void toBack() override; 0089 void toFront() override; 0090 0091 private: 0092 int mCurrent = -1; 0093 DefaultScriptClass* mClass; 0094 DataInformation* mData; 0095 }; 0096 0097 #endif // KASTEN_DEFAULTSCRIPTCLASS_HPP