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
curveeditchartview.h
Go to the documentation of this file.
1
30#ifndef OPENSWMMVIS_UI_WIDGETS_CURVEEDITCHARTVIEW_H
31#define OPENSWMMVIS_UI_WIDGETS_CURVEEDITCHARTVIEW_H
32
34
35#include <QPoint>
36#include <QPointer>
37#include <QVector>
38
39class QChart;
40class QLineSeries;
41class QScatterSeries;
42class QRubberBand;
43class QUndoStack;
44
45namespace openswmmvis::curve {
46class CurveProvider;
47struct CurvePoint;
48}
49
50namespace openswmmvis::ui {
51
52class ChartAxisFormatController;
53
55{
56 Q_OBJECT
57
58public:
59 enum class EditMode {
60 None,
62 };
63 Q_ENUM(EditMode)
64
65
68 CurveEditChartView(QChart *chart,
69 QLineSeries *referenceSeries,
70 QWidget *parent = nullptr);
72
73 // ── MVC binding ─────────────────────────────────────────────────────────
74
77
79 void setUndoStack(QUndoStack *stack);
80 QUndoStack *undoStack() const noexcept { return m_undoStack; }
81
85
86 // ── Edit mode ───────────────────────────────────────────────────────────
87
88 EditMode editMode() const noexcept { return m_editMode; }
90
91 // ── Axis locks (per-dialog toolbar toggles) ─────────────────────────────
92
93 bool lockX() const noexcept { return m_lockX; }
94 bool lockY() const noexcept { return m_lockY; }
95 void setLockX(bool on);
96 void setLockY(bool on);
97
98 // ── Selection ───────────────────────────────────────────────────────────
99
100 QVector<int> selectedIndices() const { return m_selection; }
101 void clearSelection();
102 void setSelection(QVector<int> indices);
103
104 // ── Testing / introspection ─────────────────────────────────────────────
105
108 int hitTestPoint(const QPoint &viewportPx, int hitRadiusPx = 8) const;
109
110signals:
111 void selectionChanged(const QVector<int> &indices);
113 void lockXChanged(bool on);
114 void lockYChanged(bool on);
115
116protected:
117 void mousePressEvent(QMouseEvent *e) override;
118 void mouseMoveEvent(QMouseEvent *e) override;
119 void mouseReleaseEvent(QMouseEvent *e) override;
120 void contextMenuEvent(QContextMenuEvent *e) override;
121
122private slots:
123 void onProviderPointsChanged_();
124
125private:
126 void refreshSelectionOverlay_();
127 QPointF viewportToValue_(const QPoint &px) const;
128
129 QPointer<openswmmvis::curve::CurveProvider> m_provider;
130 QUndoStack *m_undoStack = nullptr;
131 QLineSeries *m_referenceSeries = nullptr;
132 QScatterSeries *m_selectedScatter = nullptr;
133 ChartAxisFormatController *m_axisFmt = nullptr;
134
135 EditMode m_editMode = EditMode::None;
136 bool m_lockX = false;
137 bool m_lockY = false;
138
139 // Drag / selection state.
140 bool m_pointDragging = false;
141 bool m_rubberSelecting = false;
142 QPoint m_pressPos;
143 QPointF m_pressValue;
144 QVector<int> m_dragIndices;
145 QVector<openswmmvis::curve::CurvePoint> m_dragInitial;
146
147 QVector<int> m_selection;
148 QRubberBand *m_selectionBand = nullptr;
149};
150
151} // namespace openswmmvis::ui
152
153#endif // OPENSWMMVIS_UI_WIDGETS_CURVEEDITCHARTVIEW_H
Definition curveprovider.h:56
Definition chartaxisformatcontroller.h:37
Definition curveeditchartview.h:55
void setUndoStack(QUndoStack *stack)
Bind the undo stack for drag-completion commands.
Definition curveeditchartview.cpp:81
bool lockX() const noexcept
Definition curveeditchartview.h:93
void setLockX(bool on)
Definition curveeditchartview.cpp:90
void setEditMode(EditMode m)
Definition curveeditchartview.cpp:83
void mouseReleaseEvent(QMouseEvent *e) override
Definition curveeditchartview.cpp:250
void contextMenuEvent(QContextMenuEvent *e) override
Definition curveeditchartview.cpp:320
int hitTestPoint(const QPoint &viewportPx, int hitRadiusPx=8) const
Public for tests — convert a viewport pixel to the nearest point index, or -1 if no point lies within...
Definition curveeditchartview.cpp:160
openswmmvis::curve::CurveProvider * provider() const noexcept
Definition curveeditchartview.cpp:59
QUndoStack * undoStack() const noexcept
Definition curveeditchartview.h:80
void selectionChanged(const QVector< int > &indices)
void clearSelection()
Definition curveeditchartview.cpp:137
bool lockY() const noexcept
Definition curveeditchartview.h:94
void setLockY(bool on)
Definition curveeditchartview.cpp:97
void mouseMoveEvent(QMouseEvent *e) override
Definition curveeditchartview.cpp:223
EditMode editMode() const noexcept
Definition curveeditchartview.h:88
EditMode
Definition curveeditchartview.h:59
@ None
Base modes only (Select / Pan / Zoom).
@ EditPoints
Drag vertex (X/Y per axis locks); rubber-band multi-select.
void setProvider(openswmmvis::curve::CurveProvider *p)
Definition curveeditchartview.cpp:64
void setSelection(QVector< int > indices)
Definition curveeditchartview.cpp:145
void mousePressEvent(QMouseEvent *e) override
Definition curveeditchartview.cpp:182
void setAxisFormatController(ChartAxisFormatController *c)
Bind the per-chart axis number-format controller so the context menu can offer "Chart Properties…"....
Definition curveeditchartview.h:84
QVector< int > selectedIndices() const
Definition curveeditchartview.h:100
Definition interactivechartview.h:43
int e
Definition inpmeshreader.cpp:41
Slice AT.2 — QChartView subclass with Select / Pan / ZoomIn / ZoomOut modes mirroring ProfilePlotDial...
ArrowPlacement p
Definition linesymbollayer.cpp:27
MaskMode m
Definition maskspec.cpp:18
Definition curveprovider.h:31
Definition openswmmvislayer.h:43
Definition aquiferprovider.h:21
QVector< int > parent
union-find
Definition pslgminsize.cpp:176