ImagingTools Core SDK
TQmlGuiObserverCompWrap.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// ACF includes
6#include <imod/TSingleModelObserverBase.h>
7#include <iqtgui/TGuiObserverWrap.h>
8
9// ImtCore includes
10#include <imtqml/CQmlGuiCompBase.h>
11
12
13namespace imtqml
14{
15
16
17template <class QmlAdapter, class ModelInterface>
18class TQmlGuiObserverCompWrap: public iqtgui::TGuiObserverWrap<
19 CQmlGuiCompBase,
20 imod::TSingleModelObserverBase<ModelInterface>>
21{
22public:
23 typedef iqtgui::TGuiObserverWrap<
24 CQmlGuiCompBase,
25 imod::TSingleModelObserverBase<ModelInterface>> BaseClass;
26
27 I_BEGIN_BASE_COMPONENT(TQmlGuiObserverCompWrap)
28 I_REGISTER_INTERFACE(imod::IObserver)
29 I_END_COMPONENT;
30
31 // reimplemented (iqtgui::IGuiObject)
32 virtual bool CreateGui(QWidget* parentPtr) override;
33 virtual bool DestroyGui() override;
34
35protected:
36 virtual void OnQmlAdapterInitialized();
37
38protected:
39 struct QObjectDeleter
40 {
41 Q_ALWAYS_INLINE void operator()(QObject* objectPtr) const
42 {
43 if (objectPtr != nullptr){
44 objectPtr->deleteLater();
45 }
46 }
47 };
48
49protected:
50 std::unique_ptr<QmlAdapter, QObjectDeleter> m_qmlAdapterPtr;
51};
52
53
54// reimplemented (iqtgui::IGuiObject)
55
56template <class QmlAdapter, class ModelInterface>
57bool TQmlGuiObserverCompWrap<QmlAdapter, ModelInterface>::CreateGui(QWidget* parentPtr)
58{
59 bool retVal = BaseClass::CreateGui(parentPtr);
60
61 if (retVal){
62 Q_ASSERT(m_qmlAdapterPtr == nullptr);
63
64 if (BaseClass::m_quickWidget == nullptr){
65 qCritical() << "QuickObject is NOT VALID!";
66
67 return retVal;
68 }
69
70 QQuickItem* quickItemPtr = BaseClass::m_quickWidget->rootObject();
71 if (quickItemPtr == nullptr){
72 qCritical() << "QuickObject hasn't a valid item!";
73
74 return retVal;
75 }
76
77 m_qmlAdapterPtr.reset(new QmlAdapter(this, quickItemPtr));
78
79 OnQmlAdapterInitialized();
80 }
81
82 return retVal;
83}
84
85
86template <class QmlAdapter, class ModelInterface>
87bool TQmlGuiObserverCompWrap<QmlAdapter, ModelInterface>::DestroyGui()
88{
89 Q_ASSERT(m_qmlAdapterPtr != nullptr);
90
91 m_qmlAdapterPtr.release()->deleteLater();
92
93 return BaseClass::DestroyGui();
94}
95
96
97// protected methods
98
99template <class QmlAdapter, class ModelInterface>
100void TQmlGuiObserverCompWrap<QmlAdapter, ModelInterface>::OnQmlAdapterInitialized()
101{
102}
103
104
105} // namespace imtqml
106
107
108