SWMMVis  6.0.0-alpha.4
Qt6/C++ GIS-based graphical user interface for the SWMMVis engine (6.0.0-alpha.4)
Loading...
Searching...
No Matches
interactivechartview.h
Go to the documentation of this file.
1
26#ifndef OPENSWMMVIS_UI_WIDGETS_INTERACTIVECHARTVIEW_H
27#define OPENSWMMVIS_UI_WIDGETS_INTERACTIVECHARTVIEW_H
28
29#include <QChartView>
30#include <QDateTime>
31#include <QPoint>
32#include <QRect>
33#include <QTimer>
34
35class QAbstractAxis;
36class QChart;
37class QRubberBand;
38class QVariant;
39
40namespace openswmmvis::ui {
41
42class InteractiveChartView : public QChartView
43{
44 Q_OBJECT
45public:
46 enum class Mode {
47 Select = 0,
48 Pan,
49 ZoomIn,
50 ZoomOut,
51 };
52 Q_ENUM(Mode)
53
54 enum class AxisEdge {
55 None = 0,
60 };
61 Q_ENUM(AxisEdge)
62
63 explicit InteractiveChartView(QChart *chart, QWidget *parent = nullptr);
65
66 Mode mode() const noexcept { return m_mode; }
67 void setMode(Mode m);
68
71 [[nodiscard]] AxisEdge axisEdgeAt(const QPoint &viewportPx) const;
72
75 bool setAxisEdgeValue(AxisEdge edge, const QVariant &value);
76
80 void resetZoom();
81
82signals:
85
88 void chartContextMenuRequested(const QPoint &globalPos);
89
94 void xRangeSelectionChanged(QDateTime lo, QDateTime hi);
95
96protected:
97 void mousePressEvent(QMouseEvent *e) override;
98 void mouseMoveEvent(QMouseEvent *e) override;
99 void mouseReleaseEvent(QMouseEvent *e) override;
100 void wheelEvent(QWheelEvent *e) override;
101 void keyPressEvent(QKeyEvent *e) override;
102 void leaveEvent(QEvent *e) override;
103
104private:
105 void applyModeCursor();
107 static bool isClick(const QPoint &press, const QPoint &release) noexcept;
109 void zoomAroundViewportPoint(const QPointF &viewportPx, qreal factor);
110 QAbstractAxis *axisForEdge(AxisEdge edge) const;
111 bool editAxisEdge(AxisEdge edge);
116 void updateHoverTooltip(const QPointF &viewportPx);
117
118 Mode m_mode = Mode::Select;
119 bool m_pressed = false;
120 bool m_middlePanning = false;
121 bool m_xSelecting = false;
122 AxisEdge m_pressedAxisEdge = AxisEdge::None;
123 QPoint m_pressPos;
124 QPoint m_lastPos;
125 QRubberBand *m_rubberBand = nullptr;
126 QPoint m_rubberOrigin;
127
130 QTimer m_hoverTimer;
131 QPointF m_hoverPx;
132};
133
134} // namespace openswmmvis::ui
135
136#endif // OPENSWMMVIS_UI_WIDGETS_INTERACTIVECHARTVIEW_H
Definition interactivechartview.h:43
void resetZoom()
Reset zoom to whatever the chart's initial zoom level was. Equivalent to chart()->zoomReset() plus a ...
Definition interactivechartview.cpp:121
void wheelEvent(QWheelEvent *e) override
Definition interactivechartview.cpp:597
void keyPressEvent(QKeyEvent *e) override
Definition interactivechartview.cpp:614
Mode
Definition interactivechartview.h:46
@ ZoomOut
Click = 0.5× out around cursor; drag-rect = inverse zoom.
@ ZoomIn
Click = 2× in around cursor; drag-rect = zoom-to-rect.
@ Select
Default: events pass through; arrow cursor.
@ Pan
Left-button drag → chart->scroll(-dx, dy); hand cursor.
Mode mode() const noexcept
Definition interactivechartview.h:66
void mousePressEvent(QMouseEvent *e) override
Definition interactivechartview.cpp:360
AxisEdge axisEdgeAt(const QPoint &viewportPx) const
Returns the editable min/max axis label under viewportPx, or AxisEdge::None when the point is not in ...
Definition interactivechartview.cpp:170
AxisEdge
Definition interactivechartview.h:54
void xRangeSelectionChanged(QDateTime lo, QDateTime hi)
Slice AT.3 — Shift-drag X-range selection ended on this view. Carries selected [lo,...
void mouseReleaseEvent(QMouseEvent *e) override
Definition interactivechartview.cpp:494
void mouseMoveEvent(QMouseEvent *e) override
Definition interactivechartview.cpp:432
void modeChanged(Mode m)
Fired whenever the mode changes (toolbar reflection).
bool setAxisEdgeValue(AxisEdge edge, const QVariant &value)
Programmatically set one visible axis edge. Numeric axes accept a numeric QVariant; date-time axes ac...
Definition interactivechartview.cpp:243
void chartContextMenuRequested(const QPoint &globalPos)
Fired on right-click. Carries global screen position so the parent dialog can pop its own row-aware c...
void leaveEvent(QEvent *e) override
Definition interactivechartview.cpp:637
void setMode(Mode m)
Definition interactivechartview.cpp:109
int e
Definition inpmeshreader.cpp:41
MaskMode m
Definition maskspec.cpp:18
Definition openswmmvislayer.h:43
QVector< int > parent
union-find
Definition pslgminsize.cpp:176