6#include <imod/TSingleModelObserverBase.h>
7#include <imod/CMultiModelDispatcherBase.h>
8#include <imod/TModelWrap.h>
9#include <icomp/CComponentBase.h>
12#include <imtbase/IObjectCollection.h>
13#include <imtbase/ITimeRangeProvider.h>
14#include <imtloggui/IGraphicsController.h>
15#include <imtloggui/IGraphicsSceneProvider.h>
16#include <imtloggui/IViewPropertyProvider.h>
17#include <imtloggui/IViewPropertyManager.h>
18#include <imtloggui/IEventNavigationController.h>
19#include <imtloggui/IEventScenePositionProvider.h>
20#include <imtloggui/CTimeAxis.h>
21#include <imtloggui/CEventGroupLabelItem.h>
28class CGraphicsControllerComp:
30 public icomp::CComponentBase,
31 virtual public IGraphicsController,
32 virtual public IEventNavigationController
37 typedef icomp::CComponentBase BaseClass;
39 I_BEGIN_COMPONENT(CGraphicsControllerComp)
40 I_REGISTER_INTERFACE(IGraphicsController);
41 I_REGISTER_INTERFACE(IEventNavigationController);
42 I_REGISTER_SUBELEMENT(ScenePositionProvider);
43 I_REGISTER_SUBELEMENT_INTERFACE(ScenePositionProvider, IEventScenePositionProvider, ExtractPositionProvider);
44 I_REGISTER_SUBELEMENT(VisibleTimeRangeProvider);
45 I_REGISTER_SUBELEMENT_INTERFACE(VisibleTimeRangeProvider, imtbase::ITimeRangeProvider, ExtractVisibleTimeRangeProvider);
46 I_REGISTER_SUBELEMENT_INTERFACE(VisibleTimeRangeProvider, istd::IChangeable, ExtractVisibleTimeRangeProvider);
47 I_REGISTER_SUBELEMENT_INTERFACE(VisibleTimeRangeProvider, imod::IModel, ExtractVisibleTimeRangeProvider);
48 I_ASSIGN(m_graphicsSceneProviderCompPtr,
"GraphicsSceneProvider",
"Graphics scene provider",
true,
"GraphicsSceneProvider");
49 I_ASSIGN(m_groupProviderCompPtr,
"GroupProvider",
"Event groups provider",
true,
"GroupProvider");
50 I_ASSIGN(m_groupViewProviderCompPtr,
"GroupViewProvider",
"Event groups view provider",
true,
"GroupViewProvider");
51 I_ASSIGN(m_groupViewVisualSettingsCompPtr,
"GroupVisualSettingsCollection",
"Collection of visual settings for group view",
false,
"GroupVisualSettingsCollection");
52 I_ASSIGN(m_viewportGeometryProviderCompPtr,
"ViewportGeometryProvider",
"Graphics view property provider",
true,
"ViewportGeometryProvider");
53 I_ASSIGN_TO(m_viewportGeometryManagerModelCompPtr, m_viewportGeometryProviderCompPtr,
true);
54 I_ASSIGN_TO(m_viewportGeometryManagerCompPtr, m_viewportGeometryProviderCompPtr,
true);
55 I_ASSIGN(m_timeRangeProviderCompPtr,
"EventHistoryTimeRangeProvider",
"Time range provider for the time axis of the whole event history",
true,
"EventHistoryTimeRangeProvider");
56 I_ASSIGN_TO(m_timeRangeModelCompPtr, m_timeRangeProviderCompPtr,
true);
59 CGraphicsControllerComp();
62 virtual void JumpToFirstEvent()
const override;
63 virtual void JumpToPreviousEvent()
const override;
64 virtual void JumpToNextEvent()
const override;
65 virtual void JumpToLastEvent()
const override;
68 virtual void InitScene()
override;
71 virtual void OnComponentCreated()
override;
72 virtual void OnComponentDestroyed()
override;
75 void OnAxisBeginTimeChanged(
const QDateTime& oldTime,
const QDateTime& newTime);
76 void OnAxisEndTimeChanged(
const QDateTime& oldTime,
const QDateTime& newTime);
79 void OnViewportGeometryUpdate(IViewPropertyProvider* propertyPtr,
const istd::IChangeable::ChangeSet& changeSet);
80 void ConnectObserversToModels();
81 void DisconnectObserversFromModels();
82 void OnGroupChanged(
int modelId);
85 typedef istd::TSmartPtr<QGraphicsItem> GraphicsItemPtr;
86 typedef QList<GraphicsItemPtr> GraphicsItemList;
88 template <
typename InterfaceType>
89 static InterfaceType* ExtractPositionProvider(CGraphicsControllerComp& component)
91 return component.m_timeAxisPtr;
94 template <
typename InterfaceType>
95 static InterfaceType* ExtractVisibleTimeRangeProvider(CGraphicsControllerComp& component)
97 return &component.m_visibleTimeRangeProvider;
101 class ViewportObserver:
public imod::TSingleModelObserverBase<IViewPropertyProvider>
106 void SetParent(CGraphicsControllerComp* parent);
110 virtual void OnUpdate(
const istd::IChangeable::ChangeSet& changeSet)
override;
113 CGraphicsControllerComp* m_parent;
116 class TimeRangeObserver:
public imod::TSingleModelObserverBase<imtbase::ITimeRangeProvider>
121 void SetParent(CGraphicsControllerComp* parent);
125 virtual void OnUpdate(
const istd::IChangeable::ChangeSet& changeSet)
override;
128 CGraphicsControllerComp* m_parent;
131 class TimeRangeProvider:
public imtbase::ITimeRangeProvider
136 void SetParent(CGraphicsControllerComp* parent);
137 void SetTimeRange(
const imtbase::CTimeRange& timeRange);
140 virtual imtbase::CTimeRange GetTimeRange()
const override;
143 CGraphicsControllerComp* m_parent;
144 imtbase::CTimeRange m_timeRange;
149 CEventGroupLabelItem* labelPtr;
150 QGraphicsRectItem* backgroundPtr;
153 class GroupsDispatcher:
public imod::CMultiModelDispatcherBase
156 GroupsDispatcher(CGraphicsControllerComp* parentPtr)
157 :m_parentPtr(parentPtr)
163 virtual void OnModelChanged(
int modelId,
const istd::IChangeable::ChangeSet& changeSet)
override;
166 CGraphicsControllerComp* m_parentPtr;
173 I_REF(IGraphicsSceneProvider, m_graphicsSceneProviderCompPtr);
174 I_REF(IEventScenePositionProvider, m_positionProviderCompPtr);
175 I_REF(IViewPropertyProvider, m_viewportGeometryProviderCompPtr);
176 I_REF(imod::IModel, m_viewportGeometryManagerModelCompPtr);
177 I_REF(IViewPropertyManager, m_viewportGeometryManagerCompPtr);
178 I_REF(imtbase::ITimeRangeProvider, m_timeRangeProviderCompPtr);
179 I_REF(imod::IModel, m_timeRangeModelCompPtr);
181 CTimeAxis* m_timeAxisPtr;
183 ViewportObserver m_viewportObserver;
184 TimeRangeObserver m_timeRangeObserver;
185 imod::TModelWrap<TimeRangeProvider> m_visibleTimeRangeProvider;
187 GroupsDispatcher m_groupDispatcher;
189 QMap<QByteArray, GroupItem> m_groupStaticItems;