ImagingTools Core SDK
CEventViewComp.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/QTimer>
7#include <QtCore/QMutexLocker>
8#include <QtWidgets/QGraphicsScene>
9#include <QtWidgets/QSplitter>
10#include <QtWidgets/QStackedWidget>
11
12// ACF includes
13#include <ibase/ICommandsProvider.h>
14#include <ilog/IMessageConsumer.h>
15#include <imeas/INumericConstraints.h>
16#include <imod/TSingleModelObserverBase.h>
17#include <ilog/TMessageDelegatorComp.h>
18#include <iqtgui/TRestorableGuiWrap.h>
19#include <iqtgui/TDesignerGuiCompBase.h>
20#include <iqtgui/CHierarchicalCommand.h>
21#include <imod/CModelProxy.h>
22#include <istd/TChangeDelegator.h>
23
24// ImtCore includes
25#include <imtloggui/IEventItem.h>
26#include <imtloggui/IGraphicsController.h>
27#include <imtloggui/IGraphicsSceneProvider.h>
28#include <imtloggui/CEventGraphicsView.h>
29#include <imtloggui/CTimeAxis.h>
30
31// Acula includes
32#include <GeneratedFiles/imtloggui/ui_CEventViewComp.h>
33
34
35namespace imtloggui
36{
37
38
39class CEventViewComp:
40 public iqtgui::TRestorableGuiWrap<
41 iqtgui::TDesignerGuiCompBase<Ui::CEventViewComp>>,
42 virtual public IViewPropertyManager,
43 virtual public IGraphicsSceneProvider
44{
45 Q_OBJECT
46public:
47 typedef iqtgui::TRestorableGuiWrap<
48 iqtgui::TDesignerGuiCompBase<Ui::CEventViewComp>> BaseClass;
49
50 I_BEGIN_COMPONENT(CEventViewComp);
51 I_REGISTER_INTERFACE(ilog::IMessageConsumer);
52 I_REGISTER_INTERFACE(IViewPropertyManager);
53 I_REGISTER_INTERFACE(IViewPropertyProvider);
54 I_REGISTER_INTERFACE(IGraphicsSceneProvider);
55 I_REGISTER_SUBELEMENT(Commands);
56 I_REGISTER_SUBELEMENT_INTERFACE(Commands, ibase::ICommandsProvider, ExtractCommands);
57 I_REGISTER_SUBELEMENT_INTERFACE(Commands, istd::IChangeable, ExtractCommands);
58 I_REGISTER_SUBELEMENT_INTERFACE(Commands, imod::IModel, ExtractCommands);
59 I_ASSIGN(m_statisticsViewCompPtr, "EventStatisticsView", "Event statistics for groups", true, "EventStatisticsView");
60 I_ASSIGN(m_metainfoViewCompPtr, "EventItemMetaInfoView", "Event metainfo viewer", true, "EventItemMetaInfoView");
61 I_ASSIGN(m_graphicsControllerCompPtr, "GraphicsController", "Graphics controller", true, "GraphicsController");
62 I_END_COMPONENT;
63
64 CEventViewComp();
65
66 // reimplemented (imtloggui::IGraphicsSceneProvider)
67 virtual QGraphicsScene* GetGraphicsScene() override;
68
69 // reimplemented (imtloggui::IViewPropertyProvider)
70 virtual QRectF GetSceneRect() const override;
71 virtual QRectF GetViewRect() const override;
72 virtual QMargins GetMargins() const override;
73 virtual istd::CRange GetScaleRangeX() const override;
74 virtual istd::CRange GetScaleRangeY() const override;
75 virtual double GetScaleX() const override;
76 virtual double GetScaleY() const override;
77
78 // reimplemented (imtloggui::IViewPropertyManager)
79 virtual bool SetSceneRect(const QRectF& rect) override;
80 virtual bool SetViewRect(const QRectF& rect) override;
81 virtual bool SetMargins(const QMargins& margins) override;
82 virtual bool SetScaleRangeX(const istd::CRange& range) override;
83 virtual bool SetScaleRangeY(const istd::CRange& range) override;
84
85 // reimplemented (iqtgui::TRestorableGuiWrap)
86 virtual void OnRestoreSettings(const QSettings& settings) override;
87 virtual void OnSaveSettings(QSettings& settings) const override;
88
89 // reimplemented (iqtgui::CGuiComponentBase)
90 virtual void OnGuiCreated() override;
91 virtual void OnGuiDestroyed() override;
92 virtual void OnGuiRetranslate() override;
93
94 // reimplemented (icomp::CComponentBase)
95 virtual void OnComponentCreated() override;
96
97Q_SIGNALS:
98 void EmitShowAll();
99
100private Q_SLOTS:
101 void OnMoveToFirstCommand();
102 void OnMoveToPreviousCommand();
103 void OnMoveToNextCommand();
104 void OnMoveToLastCommand();
105 void OnZoomInCommand();
106 void OnZoomOutCommand();
107 void OnZoomReset();
108 void OnSelectionChanged();
109
110
111private:
112 QRectF GetSceneVisibleRect() const;
113 double GetCurrentScaleX() const;
114 void UpdateCommands();
115 void MoveToTime(const QDateTime& time);
116 bool UpdateMetaInfoPanel(const IEventItem* eventItem);
117
118private:
119 class Commands: virtual public ibase::ICommandsProvider
120 {
121 public:
122 Commands();
123
124 void SetParent(CEventViewComp* parentPtr);
125
126 protected:
127 // reimplemented (ibase::ICommandsProvider)
128 virtual const ibase::IHierarchicalCommand* GetCommands() const override;
129
130 private:
131 CEventViewComp* m_parentPtr;
132 };
133
134 template <typename InterfaceType>
135 static InterfaceType* ExtractCommands(CEventViewComp& component)
136 {
137 return &component.m_commands;
138 }
139
140private:
141 //I_REF(IEventGroupController, m_groupControllerCompPtr);
142 I_REF(iqtgui::IGuiObject, m_statisticsViewCompPtr);
143 I_REF(iqtgui::IGuiObject, m_metainfoViewCompPtr);
144 I_REF(imtloggui::IGraphicsController, m_graphicsControllerCompPtr);
145
146 imod::TModelWrap<Commands> m_commands;
147 iqtgui::CHierarchicalCommand m_rootCommands;
148 iqtgui::CHierarchicalCommand m_moveToFirstCommand;
149 iqtgui::CHierarchicalCommand m_moveToPreviousCommand;
150 iqtgui::CHierarchicalCommand m_moveToNextCommand;
151 iqtgui::CHierarchicalCommand m_moveToLastCommand;
152 iqtgui::CHierarchicalCommand m_zoomInCommand;
153 iqtgui::CHierarchicalCommand m_zoomOutCommand;
154 iqtgui::CHierarchicalCommand m_zoomReset;
155
156 QGraphicsScene m_scene;
157 istd::TChangeDelegator<imod::TModelWrap<CEventGraphicsView>>* m_viewPtr;
158 double m_scaleFactor;
159
160 QDateTime m_currentCommandTime;
161
162 imod::CModelProxy m_modelProxy;
163
164 QSplitter* m_splitterPtr;
165 QStackedWidget* m_panelsStackPtr;
166 QWidget* m_statisticsPanelPtr;
167 QWidget* m_metaInfoPanelPtr;
168
169 QRectF m_sceneRect;
170 QRectF m_viewRect;
171 QMargins m_margins;
172 istd::CRange m_scaleRangeX;
173};
174
175
176} // namespace imtloggui
177
178