ImagingTools Core SDK
TPopupControllerCompWrap.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// ImtCore includes
6#include <imtgui/CPopupController.h>
7
8
9namespace imtgui
10{
11
12
13template<class GuiObject>
14class TPopupControllerCompWrap: public GuiObject
15{
16public:
17 typedef GuiObject BaseClass;
18
19 I_BEGIN_COMPONENT(TPopupControllerCompWrap);
20 I_REGISTER_SUBELEMENT(PopupController)
21 I_REGISTER_SUBELEMENT_INTERFACE(PopupController, IPopupController, ExtractPopupController);
22 I_REGISTER_SUBELEMENT_INTERFACE(PopupController, ilog::IMessageConsumer, ExtractPopupController);
23 I_ASSIGN(m_popupWidgetFactoryCompPtr, "PopupWidgetFactory", "Widget factory for popup messages and content widgets", false, "StandardPopupWidgetFactory");
24 I_ASSIGN_MULTI_0(m_popupEventHandlerCompPtr, "PopupEventHandler", "Popup event handlers", false);
25 I_ASSIGN(m_popupAnchorAttrPtr, "PopupAnchorCorner", "0 - TopLeft\n1 - TopRight\n2 - BottomLeft\n3 - BottomRight", true, 3);
26 I_ASSIGN(m_popupSpacingAttrPtr, "PopupSpacing", "Spacing between adjacent popups", true, 5);
27 I_ASSIGN(m_popupDefaultTimeoutAttrPtr, "PopupDefaultTimeout", "Timeout value in msecs before the popup closes, a zero or negative value requires user action to close", true, 3000);
28 I_ASSIGN_MULTI_0(m_exclusiveMessageSourcesAttrPtr, "ExclusiveMessageSources", "Sources of exclusive messages", false);
29 I_END_COMPONENT;
30
31 // pseudo-reimplemented (iqtgui::CGuiComponentBase)
32 virtual void OnGuiCreated() override;
33 virtual void OnGuiShown() override;
34 virtual void OnGuiHidden() override;
35 virtual void OnGuiDestroyed() override;
36
37 // reimplemented (icomp::CComponentBase)
38 void OnComponentCreated() override;
39
40private:
41 template <class InteraceType>
42 static InteraceType* ExtractPopupController(TPopupControllerCompWrap<GuiObject>& parent)
43 {
44 return &parent.m_controller;
45 }
46
47private:
48 I_REF(IPopupWidgetFactory, m_popupWidgetFactoryCompPtr);
49 I_MULTIREF(IPopupEventHandler, m_popupEventHandlerCompPtr);
50 I_ATTR(int, m_popupAnchorAttrPtr);
51 I_ATTR(int, m_popupSpacingAttrPtr);
52 I_ATTR(int, m_popupDefaultTimeoutAttrPtr);
53 I_MULTIATTR(QString, m_exclusiveMessageSourcesAttrPtr);
54
55 CPopupController m_controller;
56};
57
58
59template<class GuiObject>
60void TPopupControllerCompWrap<GuiObject>::OnGuiCreated()
61{
62 BaseClass::OnGuiCreated();
63
64 m_controller.SetParentWidget(BaseClass::GetWidget());
65}
66
67
68template<class GuiObject>
69void TPopupControllerCompWrap<GuiObject>::OnGuiShown()
70{
71 BaseClass::OnGuiShown();
72
73 m_controller.SetEnabled(true);
74}
75
76
77template<class GuiObject>
78void TPopupControllerCompWrap<GuiObject>::OnGuiHidden()
79{
80 m_controller.SetEnabled(false);
81
82 BaseClass::OnGuiHidden();
83}
84
85
86template<class GuiObject>
87void TPopupControllerCompWrap<GuiObject>::OnGuiDestroyed()
88{
89 m_controller.SetParentWidget(nullptr);
90
91 BaseClass::OnGuiDestroyed();
92}
93
94
95template<class GuiObject>
96void TPopupControllerCompWrap<GuiObject>::OnComponentCreated()
97{
98 BaseClass::OnComponentCreated();
99
100 m_controller.SetAnchorCorner((Qt::Corner)*m_popupAnchorAttrPtr);
101 m_controller.SetSpacing(*m_popupSpacingAttrPtr);
102 m_controller.SetDefaultTimeOut(*m_popupDefaultTimeoutAttrPtr);
103 m_controller.SetPopupWidgetFactory(m_popupWidgetFactoryCompPtr.GetPtr());
104
105 QStringList sources;
106 for (int i = 0; i < m_exclusiveMessageSourcesAttrPtr.GetCount(); i++){
107 QString source = m_exclusiveMessageSourcesAttrPtr[i];
108 if (!source.isEmpty() && !sources.contains(source)){
109 sources.append(source);
110 }
111 }
112 m_controller.SetExclusiveMessageSources(sources);
113
114 for (int i = 0; i < m_popupEventHandlerCompPtr.GetCount(); i++){
115 if (m_popupEventHandlerCompPtr[i] != nullptr){
116 m_controller.RegisterEventHandler(m_popupEventHandlerCompPtr[i]);
117 }
118 }
119}
120
121
122} // namespace imtgui
123
124