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
timeserieseditchartview.h
Go to the documentation of this file.
1
32#ifndef OPENSWMMVIS_UI_WIDGETS_TIMESERIESEDITCHARTVIEW_H
33#define OPENSWMMVIS_UI_WIDGETS_TIMESERIESEDITCHARTVIEW_H
34
36
37#include <QPoint>
38#include <QPointer>
39#include <QVector>
40
41class QChart;
42class QLineSeries;
43class QScatterSeries;
44namespace openswmmvis::plot { class UtcTimeAxis; }
45class QValueAxis;
46class QRubberBand;
47class QUndoStack;
48
50class TimeseriesProvider;
51}
52
53namespace openswmmvis::ui {
54
55class ChartAxisFormatController;
56
58{
59 Q_OBJECT
60
61public:
62 enum class EditMode {
63 None,
67 };
68 Q_ENUM(EditMode)
69
71 QWidget *parent = nullptr);
73
74 // ── MVC binding ─────────────────────────────────────────────────────────
75
77
83 void setProvider(openswmmvis::timeseries::TimeseriesProvider *p);
84
86 void setUndoStack(QUndoStack *stack);
87 QUndoStack *undoStack() const noexcept { return m_undoStack; }
88
92
93 // ── Edit mode ───────────────────────────────────────────────────────────
94
95 EditMode editMode() const noexcept { return m_editMode; }
97
98 // ── Snap ────────────────────────────────────────────────────────────────
99
100 bool snapToTimeStep() const noexcept { return m_snap; }
101 void setSnapToTimeStep(bool on) noexcept { m_snap = on; }
102
104 int snapStepSeconds() const noexcept { return m_snapSec; }
105 void setSnapStepSeconds(int secs) noexcept { m_snapSec = secs > 0 ? secs : 1; }
106
107 // ── Selection ───────────────────────────────────────────────────────────
108
110 QVector<int> selectedIndices() const { return m_selection; }
111 void clearSelection();
112 void setSelection(QVector<int> indices);
113
114 // ── Testing / introspection ─────────────────────────────────────────────
115
118 int hitTestPoint(const QPoint &viewportPx, int hitRadiusPx = 6) const;
119
120public slots:
125 void zoomToExtent();
126
127signals:
129 void selectionChanged(const QVector<int> &indices);
130
133
134protected:
135 void mousePressEvent(QMouseEvent *e) override;
136 void mouseMoveEvent(QMouseEvent *e) override;
137 void mouseReleaseEvent(QMouseEvent *e) override;
138 void contextMenuEvent(QContextMenuEvent *e) override;
139
140private slots:
141 void onProviderPointsChanged_(int firstIndex, int count);
142 void onProviderPointsInserted_(int at, int count);
143 void onProviderPointsRemoved_(int at, int count);
144
145private:
148 static QChart *buildChart_();
149
151 void refreshSeriesFromProvider_();
152
154 void refreshSelectionOverlay_();
155
157 QPointF viewportToValue_(const QPoint &px) const;
158
160 bool isEditingAllowed_() const;
161
162 QPointer<openswmmvis::timeseries::TimeseriesProvider> m_provider;
163 QUndoStack *m_undoStack = nullptr;
164
165 QLineSeries *m_line = nullptr;
166 QScatterSeries *m_scatter = nullptr;
167 QScatterSeries *m_selectedScatter = nullptr;
168 openswmmvis::plot::UtcTimeAxis *m_xAxis = nullptr;
169 QValueAxis *m_yAxis = nullptr;
170 ChartAxisFormatController *m_axisFmt = nullptr;
171
172 EditMode m_editMode = EditMode::None;
173 bool m_snap = false;
174 int m_snapSec = 300;
175
176 // ── Drag / selection state ──────────────────────────────────────────────
177 bool m_pointDragging = false;
178 bool m_rubberSelecting = false;
179 QPoint m_pressPos;
180 double m_pressValueY = 0.0;
181 QVector<int> m_dragIndices;
182 QVector<double> m_dragInitialValues;
183
184 QVector<int> m_selection;
185 QRubberBand *m_selectionBand = nullptr;
186};
187
188} // namespace openswmmvis::ui
189
190#endif // OPENSWMMVIS_UI_WIDGETS_TIMESERIESEDITCHARTVIEW_H
Definition utctimeaxis.h:57
Definition timeseriesprovider.h:43
Definition chartaxisformatcontroller.h:37
Definition interactivechartview.h:43
Definition timeserieseditchartview.h:58
void setSnapToTimeStep(bool on) noexcept
Definition timeserieseditchartview.h:101
EditMode editMode() const noexcept
Definition timeserieseditchartview.h:95
void clearSelection()
Definition timeserieseditchartview.cpp:248
void mouseMoveEvent(QMouseEvent *e) override
Definition timeserieseditchartview.cpp:368
void selectionChanged(const QVector< int > &indices)
Emitted after the selection set changes.
EditMode
Definition timeserieseditchartview.h:62
@ None
Base modes only (Select / Pan / Zoom).
@ EditPoints
Y-drag single + multi; rubber-band select; context insert/delete.
void zoomToExtent()
Fit the X and Y axes to the full extent of the provider's current points, with a small Y-padding....
Definition timeserieseditchartview.cpp:215
int hitTestPoint(const QPoint &viewportPx, int hitRadiusPx=6) const
Public for tests — convert a viewport pixel to the nearest point index, or -1 if no point lies within...
Definition timeserieseditchartview.cpp:298
void setSelection(QVector< int > indices)
Definition timeserieseditchartview.cpp:256
void setEditMode(EditMode m)
Definition timeserieseditchartview.cpp:144
void mousePressEvent(QMouseEvent *e) override
Definition timeserieseditchartview.cpp:323
void setProvider(openswmmvis::timeseries::TimeseriesProvider *p)
Rebind the chart to a different provider (or null to clear). Disconnects from the old provider's sign...
Definition timeserieseditchartview.cpp:122
void editModeChanged(EditMode m)
Emitted when the edit mode changes.
QUndoStack * undoStack() const noexcept
Definition timeserieseditchartview.h:87
int snapStepSeconds() const noexcept
Snap step in seconds (default 300 = 5 min).
Definition timeserieseditchartview.h:104
bool snapToTimeStep() const noexcept
Definition timeserieseditchartview.h:100
void setSnapStepSeconds(int secs) noexcept
Definition timeserieseditchartview.h:105
void contextMenuEvent(QContextMenuEvent *e) override
Definition timeserieseditchartview.cpp:444
QVector< int > selectedIndices() const
Currently-selected point indices, ascending.
Definition timeserieseditchartview.h:110
void setAxisFormatController(ChartAxisFormatController *c)
Bind the per-chart axis number-format controller so the context menu can offer "Chart Properties…"....
Definition timeserieseditchartview.h:91
void setUndoStack(QUndoStack *stack)
Bind the undo stack for committed edits. Null = apply directly.
Definition timeserieseditchartview.cpp:139
void mouseReleaseEvent(QMouseEvent *e) override
Definition timeserieseditchartview.cpp:391
openswmmvis::timeseries::TimeseriesProvider * provider() const noexcept
Definition timeserieseditchartview.cpp:117
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 chartproperties.h:34
Definition timeseriesprovider.h:34
Definition openswmmvislayer.h:43
Definition aquiferprovider.h:21
int count
Definition numberformat.cpp:101
QVector< int > parent
union-find
Definition pslgminsize.cpp:176