ACF $AcfVersion:0$
TDesignSchemaHandlerWrap.h
Go to the documentation of this file.
1// SPDX-License-Identifier: LGPL-2.1-or-later OR GPL-2.0-or-later OR GPL-3.0-or-later OR LicenseRef-ACF-Commercial
2#pragma once
3
4
5// Qt includes
6#include <QtCore/QObject>
7#include <QtCore/QCoreApplication>
8
9// ACF includes
11
12
13namespace iqtgui
14{
15
16
17template <class Base>
18class TDesignSchemaHandlerWrap: public Base
19{
20public:
21 typedef Base BaseClass;
22
24
28 virtual void EnableDesignHandler(bool enable = true);
29
30protected:
31 virtual void OnDesignSchemaChanged(const QByteArray& themeId) = 0;
32
33private:
34 class DesignSchemaEventsFilter: public QObject
35 {
36 public:
37 typedef QObject BaseClass;
38
39 explicit DesignSchemaEventsFilter(TDesignSchemaHandlerWrap& parent);
40
41 protected:
42 // reimplemented (QObject)
43 virtual bool eventFilter(QObject* sourcePtr, QEvent* eventPtr) override;
44
45 private:
47 };
48
49 DesignSchemaEventsFilter m_designSchemaEventsFilter;
50 bool m_isFilterInstalled;
51};
52
53
54// public methods of class TDesignSchemaHandlerWrap
55
56template <class Base>
58 :m_designSchemaEventsFilter(*this),
59 m_isFilterInstalled(false)
60{
61}
62
63
64template <class Base>
66{
67 QCoreApplication* applicationPtr = QCoreApplication::instance();
68 if (applicationPtr != NULL){
69 if (enable){
70 if (!m_isFilterInstalled){
71 applicationPtr->installEventFilter(&m_designSchemaEventsFilter);
72
73 m_isFilterInstalled = true;
74 }
75 }
76 else{
77 if (m_isFilterInstalled){
78 applicationPtr->removeEventFilter(&m_designSchemaEventsFilter);
79
80 m_isFilterInstalled = false;
81 }
82 }
83 }
84}
85
86
87// public methods of the embedded class DesignSchemaEventsFilter
88
89template <class Base>
91 :m_parent(parent)
92{
93}
94
95
96// protected methods of the embedded class DesignSchemaEventsFilter
97
98// reimplemented (QObject)
99
100template <class Base>
101bool TDesignSchemaHandlerWrap<Base>::DesignSchemaEventsFilter::eventFilter(QObject* sourcePtr, QEvent* eventPtr)
102{
103 if (sourcePtr == QCoreApplication::instance()){
104 if (eventPtr->type() == iqt::CDesignThemeEvent::s_eventType){
105 const iqt::CDesignThemeEvent* designEventPtr = dynamic_cast<const iqt::CDesignThemeEvent*>(eventPtr);
106 Q_ASSERT(designEventPtr != nullptr);
107
108 m_parent.OnDesignSchemaChanged(designEventPtr->GetThemeId());
109 }
110 }
111
112 return BaseClass::eventFilter(sourcePtr, eventPtr);
113}
114
115
116} // namespace iqtgui
117
118
QByteArray GetThemeId() const
virtual void EnableDesignHandler(bool enable=true)
If enabled, listen to the design schema change events from the application context.
virtual void OnDesignSchemaChanged(const QByteArray &themeId)=0
#define NULL
Definition istd.h:74
Standard GUI specific interfaces and components based on Qt.