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
curveeditordialog.h
Go to the documentation of this file.
1
28#ifndef OPENSWMMVIS_UI_DIALOGS_CURVEEDITORDIALOG_H
29#define OPENSWMMVIS_UI_DIALOGS_CURVEEDITORDIALOG_H
30
31#include <QDialog>
32#include <QPointer>
33
34class QChart;
35class QAction;
36class QToolBar;
37class QChartView;
38namespace openswmmvis::ui {
39class InteractiveChartView;
40class CurveEditChartView;
41class ChartAxisFormatController;
42}
43class QLineSeries;
44class QScatterSeries;
45class QValueAxis;
46class QComboBox;
47class QFrame;
48class QLabel;
49class QLineEdit;
50class QListView;
51class QPushButton;
52class QSplitter;
53class QStandardItem;
54class QStandardItemModel;
55class QSortFilterProxyModel;
56class QStatusBar;
57class QTableView;
58class QToolButton;
59class QUndoStack;
60
61namespace openswmmvis::curve {
62class CurveProvider;
63class CurveRegistry;
64}
65
66namespace openswmmvis::ui {
67
68class CurvePointTableModel;
69
70class CurveEditorDialog : public QDialog
71{
72 Q_OBJECT
73public:
74 enum class Mode { Edit, CreateNew };
75 Q_ENUM(Mode)
76
78 QUndoStack *undoStack,
79 QWidget *parent = nullptr);
81
84 QUndoStack *undoStack,
85 QWidget *parent = nullptr);
86
95 static QString pickCurve(openswmmvis::curve::CurveRegistry *registry,
96 QUndoStack *undoStack,
97 const QString &initialName,
98 QWidget *parent = nullptr);
99
100 void openForCurve(const QString &name);
101
102 Mode mode() const noexcept { return m_mode; }
104
105 // ── Test hooks ──────────────────────────────────────────────────────────
106
107 QListView *listView() const noexcept { return m_listView; }
108 QTableView *pointTable() const noexcept { return m_table; }
109 CurveEditChartView *chartView() const noexcept { return m_chartView; }
110 CurvePointTableModel *tableModel() const noexcept { return m_tableModel; }
111
112 QString pendingName() const;
113 int pendingType() const;
114 bool isCreateEnabled() const;
115 void submitCreateNew();
116 void invokeAddRow();
117 void invokeDeleteRows();
118
120 void invokeNew();
121
124 bool renameCurrent(const QString &newName);
125
129
130private slots:
131 void onListSelectionChanged_();
132 void onListContextMenu_(const QPoint &pos);
133 void onAddRowClicked_();
134 void onDeleteRowsClicked_();
135 void onCopyRowsClicked_();
136 void onPasteRowsClicked_();
137 void onTableContextMenu_(const QPoint &pos);
138 void onTypeComboChanged_(int index);
139 void onNewClicked_();
140 void onRenameClicked_();
141 void onDeleteCurveClicked_();
142 void onCancelCreateClicked_();
143 void onProviderAdded_(openswmmvis::curve::CurveProvider *p);
144 void onProviderRemoved_(openswmmvis::curve::CurveProvider *p);
145 void onProviderRenamed_(openswmmvis::curve::CurveProvider *p,
146 const QString &prev, const QString &now);
147 void onProviderPointsChanged_();
148 void onProviderTypeChanged_();
149 void onMutationRejected_(const QString &reason);
150 void onCreateNewNameChanged_(const QString &text);
151 void onCreateNewSubmit_();
152 void onListItemRenamed_(QStandardItem *item);
153
154private:
155 void buildUi_();
156 void buildCreateCard_();
157 void rebuildListModel_();
158 void selectProviderInList_(openswmmvis::curve::CurveProvider *p);
159 void bindProvider_(openswmmvis::curve::CurveProvider *p);
160 void refreshChart_();
161 void updateStatusBar_();
162 void populateTypeCombo_(QComboBox *combo) const;
163 void applyTypeFilter_();
164
165 QPointer<openswmmvis::curve::CurveRegistry> m_registry;
166 QUndoStack *m_undoStack = nullptr;
167 QPointer<openswmmvis::curve::CurveProvider> m_current;
168 Mode m_mode = Mode::Edit;
169
170 QSplitter *m_splitter = nullptr;
171 QListView *m_listView = nullptr;
172 QStandardItemModel *m_listModel = nullptr;
173 QSortFilterProxyModel *m_listProxy = nullptr;
174 QComboBox *m_filterCombo = nullptr;
175
176 QComboBox *m_typeCombo = nullptr;
177 QLabel *m_typeHint = nullptr;
178 QTableView *m_table = nullptr;
179 CurvePointTableModel *m_tableModel = nullptr;
180 QPushButton *m_addRowBtn = nullptr;
181 QPushButton *m_delRowBtn = nullptr;
182 QAction *m_copyAct = nullptr;
183 QAction *m_pasteAct = nullptr;
184 QStatusBar *m_status = nullptr;
185 QLabel *m_countLabel = nullptr;
186
187 CurveEditChartView *m_chartView = nullptr;
188 QToolBar *m_chartToolBar = nullptr;
189 QAction *m_chartPanAction = nullptr;
190 QAction *m_chartZoomInAction = nullptr;
191 QAction *m_chartZoomOutAction = nullptr;
192 QAction *m_chartEditAction = nullptr;
193 QAction *m_chartLockXAction = nullptr;
194 QAction *m_chartLockYAction = nullptr;
195 QChart *m_chart = nullptr;
196 ChartAxisFormatController *m_axisFmt = nullptr;
197 QLineSeries *m_line = nullptr;
198 QScatterSeries *m_scatter = nullptr;
199 QValueAxis *m_xAxis = nullptr;
200 QValueAxis *m_yAxis = nullptr;
201
202 // CreateNew-mode UI (always built; hidden in Edit mode and revealed
203 // by the "+ New" button or the createNew factory).
204 QFrame *m_createCard = nullptr;
205 QLineEdit *m_nameEdit = nullptr;
206 QLabel *m_nameValidationLabel = nullptr;
207 QComboBox *m_createTypeCombo = nullptr;
208 QPushButton *m_createBtn = nullptr;
209 QPushButton *m_cancelCreateBtn = nullptr;
210
211 // List-pane CRUD buttons.
212 QPushButton *m_newBtn = nullptr;
213 QPushButton *m_renameBtn = nullptr;
214 QPushButton *m_deleteBtn = nullptr;
215
216 // Suppress feedback loop when we set the type combo programmatically.
217 bool m_suppressTypeSignal = false;
218 // Suppress feedback loop when we reset list item text on collision.
219 bool m_suppressListItemRename = false;
220 // Guards to break the chart<->table selection feedback loop.
221 bool m_suppressTableSelectionSync = false;
222 bool m_suppressChartSelectionSync = false;
223};
224
225} // namespace openswmmvis::ui
226
227#endif // OPENSWMMVIS_UI_DIALOGS_CURVEEDITORDIALOG_H
Definition curveprovider.h:56
Definition curveregistry.h:26
Definition chartaxisformatcontroller.h:37
Definition curveeditchartview.h:55
Definition curveeditordialog.h:71
static CurveEditorDialog * createNew(openswmmvis::curve::CurveRegistry *registry, QUndoStack *undoStack, QWidget *parent=nullptr)
Definition curveeditordialog.cpp:119
CurvePointTableModel * tableModel() const noexcept
Definition curveeditordialog.h:110
void submitCreateNew()
Definition curveeditordialog.cpp:1210
QListView * listView() const noexcept
Definition curveeditordialog.h:107
QString pendingName() const
Definition curveeditordialog.cpp:1195
void deleteCurrentSilently()
Delete the currently selected curve from the registry (bypasses the confirmation dialog).
Definition curveeditordialog.cpp:1170
Mode
Definition curveeditordialog.h:74
bool renameCurrent(const QString &newName)
Rename the currently selected curve. Returns false if no selection or the new name collides.
Definition curveeditordialog.cpp:1150
Mode mode() const noexcept
Definition curveeditordialog.h:102
void openForCurve(const QString &name)
Definition curveeditordialog.cpp:164
void invokeDeleteRows()
Definition curveeditordialog.cpp:865
int pendingType() const
Definition curveeditordialog.cpp:1200
QTableView * pointTable() const noexcept
Definition curveeditordialog.h:108
openswmmvis::curve::CurveProvider * currentProvider() const noexcept
Definition curveeditordialog.cpp:174
void invokeNew()
Reveal the create-card (mirrors the "+ New" button).
Definition curveeditordialog.cpp:1106
CurveEditChartView * chartView() const noexcept
Definition curveeditordialog.h:109
void invokeAddRow()
Definition curveeditordialog.cpp:851
static QString pickCurve(openswmmvis::curve::CurveRegistry *registry, QUndoStack *undoStack, const QString &initialName, QWidget *parent=nullptr)
Modal pick / create / edit entry point for callers that round-trip a curve selection inline (e....
Definition curveeditordialog.cpp:131
bool isCreateEnabled() const
Definition curveeditordialog.cpp:1205
Definition curvepointtablemodel.h:31
ArrowPlacement p
Definition linesymbollayer.cpp:27
int index
Position in m_quadRegions / m_quadReports.
Definition meshgenerator.cpp:153
Definition curveprovider.h:31
Definition openswmmvislayer.h:43
QVector< int > parent
union-find
Definition pslgminsize.cpp:176
int pos
Definition queryparser.cpp:36
QString text
Definition queryparser.cpp:35
QString name
Definition sectionmodelbuilders.cpp:474