ACF $AcfVersion:0$
TStyledObjectWrap.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// ACF includes
6#include <iqtgui/iqtgui.h>
9
10// Qt includes
11#include <QtWidgets/QWidget>
12#include <QtCore/QCoreApplication>
13
14
15namespace iqtgui
16{
17
22template <class Base>
23class TStyledObjectWrap: public Base, public CIconProvider
24{
25 static_assert(std::is_base_of_v<QObject, Base>, "TStyledObjectWrap must wrap a QObject derived class");
26
27 typedef Base BaseClass;
28
29protected:
30
31 template<typename... Args>
32 TStyledObjectWrap(Args&&... args)
33 : Base(std::forward<Args>(args)...)
34 {
36 }
37
38 virtual void OnDesignChanged() = 0;
39
40 void EnableDesignHandler(bool enable)
41 {
42 auto* app = QCoreApplication::instance();
43 if (app != nullptr){
44 if (enable){
45 app->installEventFilter(this);
46 }
47 else{
48 app->removeEventFilter(this);
49 }
50 }
51 }
52
53 // reimplemented (QObject)
54 virtual bool eventFilter(QObject* sourcePtr, QEvent* eventPtr) override
55 {
56 if (sourcePtr == QCoreApplication::instance()){
57 if (eventPtr->type() == iqt::CDesignThemeEvent::s_eventType){
58 Q_ASSERT(dynamic_cast<const iqt::CDesignThemeEvent*>(eventPtr) != nullptr);
59 auto* designEventPtr = static_cast<const iqt::CDesignThemeEvent*>(eventPtr);
60
61 SetThemeId(designEventPtr->GetThemeId());
63 }
64 }
65
66 return BaseClass::eventFilter(sourcePtr, eventPtr);
67 }
68
69};
70
71
73
74
75} // namespace iqtgui
76
77
void SetThemeId(const QByteArray &themeId)
Wrapper for QWidget (or any QObject in general) which reacts to global style (DesignSchema) change ev...
TStyledObjectWrap(Args &&... args)
void EnableDesignHandler(bool enable)
virtual void OnDesignChanged()=0
virtual bool eventFilter(QObject *sourcePtr, QEvent *eventPtr) override
Standard GUI specific interfaces and components based on Qt.
TStyledObjectWrap< QWidget > StyledWidget