ImagingTools Core SDK
TValidatedEditorCompWrap.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#include <icomp/CComponentBase.h>
5
6// Qt includes
7#include <QtCore/QMap>
8
9// ACF includes
10#include <ilog/IMessageConsumer.h>
11
12namespace imtgui
13{
14
15template <class Editor>
16class TValidatedEditorCompWrap: public Editor, virtual public ilog::IMessageConsumer
17{
18public:
19 typedef Editor BaseClass;
20
21 I_BEGIN_COMPONENT(Editor);
22 I_REGISTER_INTERFACE(ilog::IMessageConsumer);
23 I_ASSIGN_MULTI_0(m_validationMessageIdAttrPtr, "ValidationMessageIds", "Validation message ids", false);
24 I_ASSIGN_MULTI_0(m_validationMessageWidgetPropertyAttrPtr, "ValidationMessageWidget properties", "Properties for identifying the validation message widgets", false);
25 I_END_COMPONENT;
26
27protected:
28 // reimplemented (ilog::IMessageConsumer)
29 virtual bool IsMessageSupported(
30 int messageCategory = -1,
31 int messageId = -1,
32 const istd::IInformationProvider* messagePtr = NULL) const override;
33 virtual void AddMessage(const MessagePtr& messagePtr) override;
34
35
36 // reimplemented (icomp::CComponentBase)
37 virtual void OnComponentCreated() override;
38
39private:
40 I_MULTIATTR(int, m_validationMessageIdAttrPtr);
41 I_MULTIATTR(QByteArray, m_validationMessageWidgetPropertyAttrPtr);
42
43 QMap<int, QByteArray> m_propertyMap;
44};
45
46
47template <class Editor>
48bool TValidatedEditorCompWrap<Editor>::IsMessageSupported(
49 int messageCategory,
50 int messageId,
51 const istd::IInformationProvider* messagePtr) const
52{
53 return true;
54}
55
56
57template <class Editor>
58void TValidatedEditorCompWrap<Editor>::AddMessage(const MessagePtr& messagePtr)
59{
60 QWidget* widget = GetQtWidget();
61 QWidget* validationMessageWidgetPtr = nullptr;
62
63 QByteArray property = m_propertyMap[messagePtr->GetInformationId()];
64
65 QList<QWidget*> widgetList = widget->findChildren<QWidget*>();
66 for (const QWidget* widgetPtr : widgetList){
67 if (widgetPtr->property(property).isValid()){
68 switch (messagePtr->GetInformationCategory()){
69 case istd::IInformationProvider::IC_ERROR:
70 case istd::IInformationProvider::IC_CRITICAL:
71 widgetPtr->setProperty("text", messagePtr->GetInformationDescription());
72 widgetPtr->setStyleSheet("color : red;");
73 widgetPtr->show();
74 break;
75 case istd::IInformationProvider::IC_WARNING:
76 widgetPtr->setProperty("text", messagePtr->GetInformationDescription());
77 widgetPtr->setStyleSheet("color : yellow;");
78 widgetPtr->show();
79 break;
80 default:
81 widgetPtr->hide();
82 break;
83 }
84
85 break;
86 }
87 }
88}
89
90
91// reimplemented (icomp::CComponentBase)
92
93template <class Editor>
94void TValidatedEditorCompWrap<Editor>::OnComponentCreated()
95{
96 int count = m_validationMessageIdAttrPtr.GetCount();
97 count = qMin(count, m_validationMessageWidgetPropertyAttrPtr.GetCount());
98
99 for (int i = 0; i < count; i++){
100 m_propertyMap[m_validationMessageIdAttrPtr[i]] = m_validationMessageWidgetPropertyAttrPtr[i];
101 }
102}
103
104
105} // namespace imtgui
106
107