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
patterneditchartview.h
Go to the documentation of this file.
1
28#ifndef OPENSWMMVIS_UI_WIDGETS_PATTERNEDITCHARTVIEW_H
29#define OPENSWMMVIS_UI_WIDGETS_PATTERNEDITCHARTVIEW_H
30
32
33#include <QPoint>
34#include <QPointer>
35#include <QVector>
36
37class QChart;
38class QLineSeries;
39class QScatterSeries;
40class QRubberBand;
41class QUndoStack;
42
43namespace openswmmvis::pattern {
44class PatternProvider;
45}
46
47namespace openswmmvis::ui {
48
50{
51 Q_OBJECT
52
53public:
54 enum class EditMode {
55 None,
57 };
58 Q_ENUM(EditMode)
59
60
63 PatternEditChartView(QChart *chart,
64 QLineSeries *referenceSeries,
65 QWidget *parent = nullptr);
67
68 // ── MVC binding ─────────────────────────────────────────────────────────
69
72
73 void setUndoStack(QUndoStack *stack);
74 QUndoStack *undoStack() const noexcept { return m_undoStack; }
75
76 // ── Edit mode ───────────────────────────────────────────────────────────
77
78 EditMode editMode() const noexcept { return m_editMode; }
80
81 // ── Selection ───────────────────────────────────────────────────────────
82
83 QVector<int> selectedIndices() const { return m_selection; }
84 void clearSelection();
85 void setSelection(QVector<int> indices);
86
87 // ── Testing / introspection ─────────────────────────────────────────────
88
91 int hitTestSlot(const QPoint &viewportPx, int hitRadiusPx = 10) const;
92
93signals:
94 void selectionChanged(const QVector<int> &indices);
96
97protected:
98 void mousePressEvent(QMouseEvent *e) override;
99 void mouseMoveEvent(QMouseEvent *e) override;
100 void mouseReleaseEvent(QMouseEvent *e) override;
101 void contextMenuEvent(QContextMenuEvent *e) override;
102
103private slots:
104 void onProviderFactorChanged_(int i);
105 void onProviderFactorsChanged_();
106
107private:
108 void refreshSelectionOverlay_();
109 QPointF viewportToValue_(const QPoint &px) const;
110 double slotCenterX_(int i) const noexcept { return double(i) + 0.5; }
111
112 QPointer<openswmmvis::pattern::PatternProvider> m_provider;
113 QUndoStack *m_undoStack = nullptr;
114 QLineSeries *m_referenceSeries = nullptr;
115 QScatterSeries *m_selectedScatter = nullptr;
116
117 EditMode m_editMode = EditMode::None;
118
119 // Drag state.
120 bool m_dragging = false;
121 bool m_horizontalDrag = false;
122 bool m_dragAxisLocked = false;
123 QPoint m_pressPos;
124 QPointF m_pressValue;
125 int m_dragSlot = -1;
126 int m_dragStartSlot = -1;
127 double m_dragInitialValue = 0.0;
128 QVector<int> m_swapHistory;
129
130 QVector<int> m_selection;
131};
132
133} // namespace openswmmvis::ui
134
135#endif // OPENSWMMVIS_UI_WIDGETS_PATTERNEDITCHARTVIEW_H
Definition patternprovider.h:49
Definition interactivechartview.h:43
Definition patterneditchartview.h:50
void mouseMoveEvent(QMouseEvent *e) override
Definition patterneditchartview.cpp:191
int hitTestSlot(const QPoint &viewportPx, int hitRadiusPx=10) const
Convert a viewport pixel to the slot index whose centre is closest, or -1 if no slot lies within hitR...
Definition patterneditchartview.cpp:140
void selectionChanged(const QVector< int > &indices)
void mouseReleaseEvent(QMouseEvent *e) override
Definition patterneditchartview.cpp:238
QUndoStack * undoStack() const noexcept
Definition patterneditchartview.h:74
void mousePressEvent(QMouseEvent *e) override
Definition patterneditchartview.cpp:161
QVector< int > selectedIndices() const
Definition patterneditchartview.h:83
EditMode
Definition patterneditchartview.h:54
@ EditPoints
Y-drag = factor edit; X-drag = adjacent-slot swap.
void contextMenuEvent(QContextMenuEvent *e) override
Definition patterneditchartview.cpp:286
void setProvider(openswmmvis::pattern::PatternProvider *p)
Definition patterneditchartview.cpp:57
openswmmvis::pattern::PatternProvider * provider() const noexcept
Definition patterneditchartview.cpp:52
void setEditMode(EditMode m)
Definition patterneditchartview.cpp:74
void clearSelection()
Definition patterneditchartview.cpp:117
void setUndoStack(QUndoStack *stack)
Definition patterneditchartview.cpp:72
EditMode editMode() const noexcept
Definition patterneditchartview.h:78
void setSelection(QVector< int > indices)
Definition patterneditchartview.cpp:125
size_t i
Definition contourjob.cpp:27
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 patternprovider.h:36
Definition openswmmvislayer.h:43
Definition aquiferprovider.h:21
QVector< int > parent
union-find
Definition pslgminsize.cpp:176
double
Definition swmmpollutantpropertyadapter.cpp:50