ImagingTools Core SDK
CGqlParamObject.h
1// SPDX-License-Identifier: LGPL-2.1-or-later OR GPL-2.0-or-later OR GPL-3.0-or-later OR LicenseRef-ImtCore-Commercial
2#pragma once
3
4
5// Qt includes
6#include <QtCore/QByteArray>
7
8// ACF includes
9#include <iser/IObject.h>
10
11// ImtCore includes
12#include <imtgql/CGqlEnum.h>
13
14
15namespace imtgql
16{
17
18
19class CGqlParamObject: virtual public iser::IObject
20{
21public:
22 CGqlParamObject();
23
24 QByteArrayList GetParamIds() const;
25 QVariant GetParamArgumentValue(const QByteArray& paramId) const;
26 CGqlParamObject* CreateParamObject(const QByteArray& paramId);
27 const CGqlParamObject* GetParamArgumentObjectPtr(const QByteArray& paramId, qsizetype index = 0) const;
28 qsizetype GetObjectsCount(const QByteArray& paramId) const;
29 QList<const CGqlParamObject*> GetParamArgumentObjectPtrList(const QByteArray& paramId) const;
30 CGqlParamObject* GetParentObject() const;
31 void InsertParam(const QByteArray& paramId, const QVariant& value);
32 void InsertParam(const QByteArray& paramId, const imtgql::CGqlEnum& value);
33 void InsertParam(const QByteArray& paramId, const CGqlParamObject& object);
34 void InsertParam(const QByteArray& paramId, const QList<CGqlParamObject>& objectList);
35 CGqlParamObject* AppendParamToArray(const QByteArray& paramId, const CGqlParamObject& object);
36 bool IsObject(const QByteArray& paramId) const;
37 bool IsEnum(const QByteArray& paramId) const;
38 bool IsObjectList(const QByteArray& paramId) const;
39
40 // comfort
41 Q_REQUIRED_RESULT QVariant operator[](const QByteArray& paramId) const;
42 Q_REQUIRED_RESULT bool ContainsParam(const QByteArray& paramId) const;
43
44 // reimplemented (iser::ISerializable)
45 virtual bool Serialize(iser::IArchive &archive) override;
46
47 // reimplemented (iser::IChangeable)
48 virtual bool CopyFrom(const IChangeable& object, CompatibilityMode mode = CM_WITHOUT_REFS) override;
49 virtual istd::IChangeableUniquePtr CloneMe(CompatibilityMode mode = CM_WITHOUT_REFS) const override;
50 virtual bool ResetData(CompatibilityMode mode = CM_WITHOUT_REFS) override;
51
52protected:
53 void RemoveParam(const QByteArray& paramId);
54
55protected:
56 QMap<QByteArray, QVariant> m_simpleParams;
57 QMap<QByteArray, istd::TSharedInterfacePtr<CGqlParamObject>> m_objectParams;
58 QMap<QByteArray, QList<istd::TSharedInterfacePtr<CGqlParamObject>>> m_objectParamsArray;
59 QByteArray m_objectId;
60 CGqlParamObject* m_parentPtr;
61};
62
63
64// inline methods
65inline QVariant CGqlParamObject::operator[](const QByteArray& paramId) const
66{
67 return GetParamArgumentValue(paramId);
68}
69
70
71inline bool CGqlParamObject::ContainsParam(const QByteArray& paramId) const
72{
73 if (m_simpleParams.contains(paramId)){
74 return true;
75 }
76 if (m_objectParams.contains(paramId)){
77 return true;
78 }
79 if (m_objectParamsArray.contains(paramId)){
80 return true;
81 }
82
83 return false;
84}
85
86
87} // namespace imtgql
88
89
90Q_DECLARE_METATYPE(const imtgql::CGqlParamObject*)
91
92