ImagingTools Core SDK
CEventGraphicsView.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/QDateTime>
7#include <QtWidgets/QGraphicsView>
8
9// ImtCore includes
10#include <imtloggui/CTimeAxis.h>
11#include <imtloggui/IViewPropertyManager.h>
12
13
14namespace imtloggui
15{
16
17
18class CEventGraphicsView:
19 public QGraphicsView,
20 virtual public IViewPropertyManager
21{
22 Q_OBJECT
23
24public:
25 typedef QGraphicsView BaseClass;
26
27 CEventGraphicsView(QWidget* parent = nullptr);
28
29 // reimplemented (imtloggui::IViewPropertyProvider)
30 virtual QRectF GetSceneRect() const override;
31 virtual QRectF GetViewRect() const override;
32 virtual QMargins GetMargins() const override;
33 virtual istd::CRange GetScaleRangeX() const override;
34 virtual istd::CRange GetScaleRangeY() const override;
35 virtual double GetScaleX() const override;
36 virtual double GetScaleY() const override;
37
38 // reimplemented (imtloggui::IViewPropertyManager)
39 virtual bool SetSceneRect(const QRectF& rect) override;
40 virtual bool SetViewRect(const QRectF& rect) override;
41 virtual bool SetMargins(const QMargins& margins) override;
42 virtual bool SetScaleRangeX(const istd::CRange& range) override;
43 virtual bool SetScaleRangeY(const istd::CRange& range) override;
44
45Q_SIGNALS:
46 void EmitViewPortChanged(bool userAction);
47
48public Q_SLOTS:
49 void OnShowAll();
50
51protected:
52 // reimplemented (QGraphicsView)
53 virtual void wheelEvent(QWheelEvent* event) override;
54 virtual void resizeEvent(QResizeEvent* event) override;
55 virtual void mouseMoveEvent(QMouseEvent *event) override;
56 virtual void mousePressEvent(QMouseEvent *event) override;
57 virtual void mouseReleaseEvent(QMouseEvent *event) override;
58
59private:
60 void MoveViewRect(double dX, double dY);
61 void ScaleViewRect(const QPointF& center, double scaleX, double scaleY);
62 void ValidateViewRect();
63 void UpdateViewRect();
64
65private:
66 QPointF m_lockedScenePoint;
67
68 double m_userAction;
69 double m_minimumVerticalScale;
70 QRectF m_sceneRect;
71 QRectF m_viewRect;
72 QMargins m_margins;
73 istd::CRange m_scaleRangeX;
74 istd::CRange m_scaleRangeY;
75};
76
77
78} // namespace imtloggui
79
80