ImagingTools Core SDK
CQmlGuiCompBase.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/QObject>
7#include <QtQuickWidgets/QQuickWidget>
8#include <QtWidgets/QVBoxLayout>
9
10// ACF includes
11#include <ibase/TLocalizableWrap.h>
12#include <icomp/CComponentBase.h>
13#include <imod/TModelWrap.h>
14#include <iqtgui/IVisualStatus.h>
15#include <iqtgui/IGuiObject.h>
16#include <iqtgui/TMakeIconProviderCompWrap.h>
17
18// ImtCore includes
19#include <imtqml/CQuickObjectCompBase.h>
20
21
22namespace imtqml
23{
24
25
30 public QObject,
31 public ibase::TLocalizableWrap<iqtgui::TMakeIconProviderCompWrap<icomp::CComponentBase>>,
32 virtual public iqtgui::IGuiObject
33{
34 Q_OBJECT
35public:
36 typedef ibase::TLocalizableWrap<iqtgui::TMakeIconProviderCompWrap<icomp::CComponentBase>> BaseClass;
37
38 I_BEGIN_BASE_COMPONENT(CQmlGuiCompBase);
39 I_REGISTER_INTERFACE(iqtgui::IGuiObject);
40 I_REGISTER_SUBELEMENT(VisualStatus);
41 I_REGISTER_SUBELEMENT_INTERFACE_T(VisualStatus, iqtgui::IVisualStatus, ExtractVisualStatus);
42 I_REGISTER_SUBELEMENT_INTERFACE_T(VisualStatus, istd::IChangeable, ExtractVisualStatus);
43 I_REGISTER_SUBELEMENT_INTERFACE_T(VisualStatus, imod::IModel, ExtractVisualStatus);
44 I_ASSIGN(m_pathToQmlAttrPtr, "QmlFilePath", "This path used for load QML file", true, "");
45 I_ASSIGN(m_defaultStatusIconPathAttrPtr, "DefaultStatusIcon", "Path of status icon used by default", false, "");
46 I_ASSIGN(m_defaultStatusTextAttrPtr, "DefaultStatusText", "Status text used by default", true, "");
47 I_END_COMPONENT;
48
50
51 bool IsGuiShown() const;
52
53 // reimplemented (iqtgui::IGuiObject)
54 virtual bool IsGuiCreated() const override;
55 virtual bool CreateGui(QWidget* parentPtr) override;
56 virtual bool DestroyGui() override;
57 virtual QWidget* GetWidget() const override;
58 virtual void OnTryClose(bool* ignoredPtr = NULL) override;
59
60protected:
61 virtual void OnGuiDesignChanged();
62 virtual void OnGuiShown();
63 virtual void OnGuiHidden();
64 virtual void OnRetranslate();
65 virtual void OnGuiRetranslate();
66 virtual void OnGuiCreated();
67 virtual void OnGuiDestroyed();
68
69 // reimplemented (ibase::TLocalizableWrap)
70 virtual void OnLanguageChanged() override;
71
72 // reimplemented (ibase::TDesignSchemaHandlerWrap)
73 virtual void OnDesignSchemaChanged(const QByteArray& themeId) override;
74
75 // reimplemented (icomp::CComponentBase)
76 virtual void OnComponentCreated() override;
77
78 // reimplemented (QObject)
79 virtual bool eventFilter(QObject* senderPtr, QEvent* eventPtr) override;
80
81protected Q_SLOTS:
82 virtual void OnQuickItemDestroyed();
83
84protected:
85 class VisualStatus: virtual public iqtgui::IVisualStatus
86 {
87 public:
88 // reimplemented (iqtgui::IVisualStatus)
89 virtual QIcon GetStatusIcon() const override;
90 virtual QString GetStatusText() const override;
91
92 friend class CQmlGuiCompBase;
93
94 private:
95 QIcon m_statusIcon;
96 QString m_statusText;
97 };
98
99 // static template methods for subelement access
100 template <class InterfaceType>
101 static InterfaceType* ExtractVisualStatus(CQmlGuiCompBase& component)
102 {
103 return &component.m_visualStatus;
104 }
105
106protected:
107 I_ATTR(QString, m_pathToQmlAttrPtr);
108 I_ATTR(QString, m_defaultStatusIconPathAttrPtr);
109 I_TEXTATTR(m_defaultStatusTextAttrPtr);
110
111 QQuickWidget* m_quickWidget = nullptr;
112 imod::TModelWrap<VisualStatus> m_visualStatus;
113
114private:
115 bool m_isGuiShown = false;
116 bool m_hasPendingDesignChanges = false;
117};
118
119
120} // namespace imtqml
121
122