File indexing completed on 2024-06-30 05:51:24
0001 /* 0002 This file is part of the Okteta Kasten Framework, made within the KDE community. 0003 0004 SPDX-FileCopyrightText: 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_BASICPRIMITIVEDATAINFORMATION_HPP 0010 #define KASTEN_BASICPRIMITIVEDATAINFORMATION_HPP 0011 0012 #include "primitivedatainformation.hpp" 0013 #include "../../allprimitivetypes.hpp" 0014 0015 /** A basic implementation for all primitive types. 0016 * T is the data type (e.g. quint8 or float) 0017 * C is a namespace containing all needed functions */ 0018 template <typename T, class C> 0019 class BasicPrimitiveDataInformation : public PrimitiveDataInformation 0020 { 0021 public: 0022 explicit BasicPrimitiveDataInformation(const QString& name, DataInformation* parent = nullptr); 0023 ~BasicPrimitiveDataInformation() override; 0024 PrimitiveDataType type() const override; 0025 AllPrimitiveTypes value() const override; 0026 void setValue(AllPrimitiveTypes newVal) override; 0027 BasicPrimitiveDataInformation<T, C>* clone() const override; 0028 0029 QWidget* createEditWidget(QWidget* parent) const override; 0030 QVariant dataFromWidget(const QWidget* w) const override; 0031 void setWidgetData(QWidget* w) const override; 0032 0033 QScriptValue valueAsQScriptValue() const override; 0034 QVariant valueToQVariant() const override; 0035 QString valueToQString(AllPrimitiveTypes value) const override; 0036 QVariant valueToQVariant(AllPrimitiveTypes value) const override; 0037 BitCount32 size() const override; // TODO declare final with c++11 so it can be inlined 0038 bool setData(const QVariant& value, Okteta::AbstractByteArrayModel* out, 0039 Okteta::Address address, BitCount64 bitsRemaining, quint8 bitOffset) override; 0040 qint64 readData(const Okteta::AbstractByteArrayModel* input, Okteta::Address address, 0041 BitCount64 bitsRemaining, quint8* bitOffset) override; 0042 0043 protected: 0044 BasicPrimitiveDataInformation(const BasicPrimitiveDataInformation<T, C>& d); 0045 0046 private: 0047 QString valueStringImpl() const override; 0048 QString typeNameImpl() const override; 0049 QScriptClass* scriptClass(ScriptHandlerInfo* handlerInfo) const override; 0050 0051 protected: 0052 T mValue = 0; 0053 }; 0054 0055 template <typename T, typename C> 0056 inline BasicPrimitiveDataInformation<T, C>::BasicPrimitiveDataInformation(const QString& name, 0057 DataInformation* parent) 0058 : PrimitiveDataInformation(name, parent) 0059 { 0060 } 0061 0062 template <typename T, typename C> 0063 inline BasicPrimitiveDataInformation<T, C>::BasicPrimitiveDataInformation( 0064 const BasicPrimitiveDataInformation<T, C>& d) 0065 : PrimitiveDataInformation(d) 0066 , mValue(d.mValue) 0067 { 0068 } 0069 0070 template <typename T, typename C> 0071 inline BasicPrimitiveDataInformation<T, C>::~BasicPrimitiveDataInformation() = default; 0072 0073 template <typename T, typename C> 0074 inline QString BasicPrimitiveDataInformation<T, C>::typeNameImpl() const 0075 { 0076 return PrimitiveType::typeName(C::staticType()); 0077 } 0078 0079 template <typename T, typename C> 0080 inline AllPrimitiveTypes BasicPrimitiveDataInformation<T, C>::value() const 0081 { 0082 return AllPrimitiveTypes(mValue); 0083 } 0084 0085 template <typename T, typename C> 0086 inline void BasicPrimitiveDataInformation<T, C>::setValue(AllPrimitiveTypes newVal) 0087 { 0088 mValue = newVal.value<T>(); 0089 0090 } 0091 0092 template <typename T, typename C> 0093 inline BitCount32 BasicPrimitiveDataInformation<T, C>::size() const 0094 { 0095 return sizeof(T) * 8; 0096 } 0097 0098 template <typename T, typename C> 0099 inline QVariant BasicPrimitiveDataInformation<T, C>::dataFromWidget(const QWidget* w) const 0100 { 0101 return C::staticDataFromWidget(w); 0102 } 0103 0104 template <typename T, typename C> 0105 inline QWidget* BasicPrimitiveDataInformation<T, C>::createEditWidget(QWidget* parent) const 0106 { 0107 return C::staticCreateEditWidget(parent); 0108 } 0109 0110 template <typename T, typename C> 0111 inline void BasicPrimitiveDataInformation<T, C>::setWidgetData(QWidget* w) const 0112 { 0113 C::staticSetWidgetData(mValue, w); 0114 } 0115 0116 template <typename T, typename C> 0117 inline PrimitiveDataType BasicPrimitiveDataInformation<T, C>::type() const 0118 { 0119 return C::staticType(); 0120 } 0121 0122 template <typename T, typename C> 0123 inline BasicPrimitiveDataInformation<T, C>* BasicPrimitiveDataInformation<T, C>::clone() const 0124 { 0125 return new BasicPrimitiveDataInformation<T, C>(*this); 0126 } 0127 0128 template <typename T, typename C> 0129 QString BasicPrimitiveDataInformation<T, C>::valueStringImpl() const 0130 { 0131 Q_ASSERT(mWasAbleToRead); 0132 return C::staticValueString(mValue); 0133 } 0134 0135 template <typename T, typename C> 0136 QVariant BasicPrimitiveDataInformation<T, C>::valueToQVariant() const 0137 { 0138 return C::staticToQVariant(mValue); 0139 } 0140 0141 template <typename T, typename C> 0142 QString BasicPrimitiveDataInformation<T, C>::valueToQString(AllPrimitiveTypes value) const 0143 { 0144 return C::staticValueString(value.value<T>()); 0145 } 0146 0147 template <typename T, typename C> 0148 QVariant BasicPrimitiveDataInformation<T, C>::valueToQVariant(AllPrimitiveTypes value) const 0149 { 0150 return C::staticToQVariant(value.value<T>()); 0151 } 0152 0153 #endif /* KASTEN_BASICPRIMITIVEDATAINFORMATION_HPP */