ImagingTools Core SDK
CRepresentationControllerCompBase.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// Qt includes
6#include <QtCore/QThread>
7#include <QtCore/QQueue>
8
9// ACF includes
10#include <iprm/IEnableableParam.h>
11#include <imod/TModelWrap.h>
12#include <imod/TSingleModelObserverBase.h>
13#include <icomp/CComponentBase.h>
14
15// ImtCore includes
16#include <imtlog/IEventFilter.h>
17#include <imtlog/IEventProvider.h>
18#include <imtlog/IMessageFilterParams.h>
19#include <imtbase/ITimeRangeProvider.h>
20#include <imtlog/CWorkerBase.h>
21
22
23namespace imtloggui
24{
25
26
27class CRepresentationControllerCompBase:
28 public QObject,
29 public icomp::CComponentBase,
30 protected imod::TSingleModelObserverBase<imtbase::ITimeRangeProvider>,
31 virtual public iprm::IEnableableParam
32{
33 Q_OBJECT
34public:
35 typedef CComponentBase BaseClass;
36
37 I_BEGIN_BASE_COMPONENT(CRepresentationControllerCompBase)
38 I_REGISTER_INTERFACE(imod::IObserver);
39 I_REGISTER_INTERFACE(iprm::IEnableableParam);
40 I_ASSIGN(m_eventProviderCompPtr, "EventProvider", "Event provider", true, "EventProvider");
41 I_ASSIGN_TO(m_eventProviderModelCompPtr, m_eventProviderCompPtr, true);
42 I_ASSIGN(m_timeRangeProviderCompPtr, "TimeRangeProvider", "TimeRangeProvider", false, "TimeRangeProvider");
43 I_ASSIGN_TO(m_timeRangeProviderModelCompPtr, m_timeRangeProviderCompPtr, true);
44 I_ASSIGN(m_representationCompPtr, "RepresentationData", "Representation data model", true, "RepresentationData");
45 I_ASSIGN(m_eventFilterCompPtr, "EventFilter", "Event filter", false, "EventFilter");
46 I_ASSIGN(m_messageFilterParamsCompPtr, "MessageFilterParams", "Message filter params", false, "MessageFilterParams");
47 I_ASSIGN(m_representationFactPtr, "RepresentationFactory", "Factory used for creation of the working instance", true, "RepresentationFactory");
48 I_END_COMPONENT
49
50 CRepresentationControllerCompBase();
51
52 // reimplemented (iprm::IEnableableParam)
53 virtual bool IsEnabled() const override;
54 virtual bool IsEnablingAllowed() const override;
55 virtual bool SetEnabled(bool isEnabled = true) override;
56
57 // reimplemented (iser::ISerializable)
58 virtual bool Serialize(iser::IArchive& archive) override;
59
60protected:
61 virtual void BuildRepresentation(
62 istd::IChangeable& representation,
63 imtlog::IEventProvider::EventContainerPtr containerPtr,
64 const imtbase::CTimeRange& timeRange) const = 0;
65
66 // reimplemented (imod::CSingleModelObserverBase)
67 virtual void OnUpdate(const istd::IChangeable::ChangeSet& changeSet) override;
68
69 // reimplemented (icomp::CComponentBase)
70 virtual void OnComponentCreated() override;
71 virtual void OnComponentDestroyed() override;
72
73protected:
74 I_REF(imtlog::IEventProvider, m_eventProviderCompPtr);
75 I_REF(imod::IModel, m_eventProviderModelCompPtr);
76 I_REF(imtbase::ITimeRangeProvider, m_timeRangeProviderCompPtr);
77 I_REF(imod::IModel, m_timeRangeProviderModelCompPtr);
78 I_REF(istd::IChangeable, m_representationCompPtr);
79 I_REF(imtlog::IEventFilter, m_eventFilterCompPtr);
80 I_REF(imtlog::IMessageFilterParams, m_messageFilterParamsCompPtr);
81 I_FACT(istd::IChangeable, m_representationFactPtr);
82
83Q_SIGNALS:
84 void EmitRepresentationCreated();
85
86private Q_SLOTS:
87 void OnRepresentationCreated();
88
89private:
90 typedef icomp::IComponentSharedPtr RepresentationCompPtr;
91
92 class EventProviderObserver: public imod::TSingleModelObserverBase<imtlog::IEventProvider>
93 {
94 public:
95 EventProviderObserver(CRepresentationControllerCompBase& parent);
96
97 protected:
98 // reimplemented (imod::CSingleModelObserverBase)
99 virtual void OnUpdate(const istd::IChangeable::ChangeSet& changeSet) override;
100 private:
101 CRepresentationControllerCompBase& m_parent;
102 };
103
104 class Worker: public QThread
105 {
106 public:
107 Worker(CRepresentationControllerCompBase& parent);
108
109 protected:
110 virtual void run() override;
111
112 private:
113 CRepresentationControllerCompBase& m_parent;
114 };
115
116private:
117 EventProviderObserver m_eventProviderObserver;
118
119 Worker m_worker;
120 QQueue<imtbase::CTimeRange> m_workerQueue;
121 QMutex m_workerQueueMutex;
122 QQueue<RepresentationCompPtr> m_representationQueue;
123 QMutex m_representationQueueMutex;
124
125 bool m_isEnabled;
126};
127
128
129} // namespace imtloggui
130
131