ImagingTools Core SDK
TGraphicsElement.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/QMap>
7
8// ACF includes
9#include <istd/CClassInfo.h>
10#include <i2d/CRectangle.h>
11#include <i2d/CCircle.h>
12#include <i2d/CPolygon.h>
13
14// ImtCore includes
15#include <imtreport/CGraphicsElementBase.h>
16#include <imtreport/CTextLabel.h>
17#include <imtreport/CImageRectangle.h>
18
19
20namespace imtreport
21{
22
23
24template <class Object2dType>
25class TGraphicsElement: public Object2dType, public CGraphicsElementBase
26{
27public:
28 typedef Object2dType BaseClass;
29 typedef CGraphicsElementBase BaseClass2;
30
31 static QByteArray GetTypeName();
32
33 // reimplemented (iser::IObject)
34 virtual QByteArray GetFactoryId() const override;
35
36 // reimplemented (iser::ISerializeable)
37 virtual bool Serialize(iser::IArchive& archive) override;
38
39 // reimplemented (istd::IChangeable)
40 virtual bool CopyFrom(const istd::IChangeable& object, CompatibilityMode mode = CM_WITHOUT_REFS) override;
41 virtual istd::IChangeableUniquePtr CloneMe(CompatibilityMode mode = CM_WITHOUT_REFS) const override;
42};
43
44
45template <class Object2dType>
46QByteArray TGraphicsElement<Object2dType>::GetTypeName()
47{
48 QMap<QByteArray, QByteArray> knownTypesMap;
49 knownTypesMap[istd::CClassInfo::GetName<i2d::CLine2d>()] = "Line";
50 knownTypesMap[istd::CClassInfo::GetName<i2d::CRectangle>()] = "Rectangle";
51 knownTypesMap[istd::CClassInfo::GetName<i2d::CCircle>()] = "Circle";
52 knownTypesMap[istd::CClassInfo::GetName<i2d::CPolygon>()] = "Polygon";
53 knownTypesMap[istd::CClassInfo::GetName<i2d::CLabel>()] = "Label";
54 knownTypesMap[istd::CClassInfo::GetName<CTextLabel>()] = "TextLabel";
55 knownTypesMap[istd::CClassInfo::GetName<CImageRectangle>()] = "Image";
56
57 QByteArray baseTypeName = istd::CClassInfo::GetName<Object2dType>();
58
59 if (knownTypesMap.contains(baseTypeName)){
60 return knownTypesMap[baseTypeName];
61 }
62
63 return istd::CClassInfo::GetName<TGraphicsElement<Object2dType> >();
64}
65
66
67// reimplemented (iser::IObject)
68
69template <class Object2dType>
70QByteArray TGraphicsElement<Object2dType>::GetFactoryId() const
71{
72 return GetTypeName();
73}
74
75
76// reimplemented (iser::ISerializeable)
77
78template <class Object2dType>
79bool TGraphicsElement<Object2dType>::Serialize(iser::IArchive& archive)
80{
81 bool retVal = BaseClass::Serialize(archive);
82
83 retVal = retVal && BaseClass2::Serialize(archive);
84
85 return retVal;
86}
87
88
89// reimplemented (istd::IChangeable)
90
91template <class Object2dType>
92bool TGraphicsElement<Object2dType>::CopyFrom(const istd::IChangeable& object, CompatibilityMode mode)
93{
94 return BaseClass2::CopyFrom(object, mode) && BaseClass::CopyFrom(object, mode);
95}
96
97
98template <class Object2dType>
99istd::IChangeableUniquePtr TGraphicsElement<Object2dType>::CloneMe(CompatibilityMode mode) const
100{
101 istd::IChangeableUniquePtr clonePtr(new TGraphicsElement<Object2dType>);
102 if (clonePtr->CopyFrom(*this, mode))
103 {
104 return clonePtr;
105 }
106
107 return nullptr;
108}
109
110
111typedef TGraphicsElement<i2d::CRectangle> CRectangleElement;
112typedef TGraphicsElement<i2d::CCircle> CCircleElement;
113typedef TGraphicsElement<i2d::CPolygon> CPolygonElement;
114typedef TGraphicsElement<i2d::CLine2d> CLineElement;
115typedef TGraphicsElement<CImageRectangle> CImageRectangleElement;
116
117
118class CTextLabelElement : public TGraphicsElement<CTextLabel>
119{
120public:
121 typedef TGraphicsElement<CTextLabel> BaseClass;
122
123 CTextLabelElement()
124 {
125 m_graphicsAttributes.strokeWidth = -1;
126 }
127};
128
129
130} // namespace imtreport
131
132