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
profileattributetrackoptions.h
Go to the documentation of this file.
1
21#ifndef OPENSWMMVIS_PLOT_PROFILEATTRIBUTETRACKOPTIONS_H
22#define OPENSWMMVIS_PLOT_PROFILEATTRIBUTETRACKOPTIONS_H
23
24#include "plot/plotattribute.h"
25
26#include <QHash>
27#include <QObject>
28#include <QPen>
29#include <QString>
30#include <QVector>
31
32class QSettings;
33
34class ProfileAttributeTrackOptions : public QObject
35{
36 Q_OBJECT
37
38 // ── Pane chrome ─────────────────────────────────────────────────────
39 Q_PROPERTY(int trackHeightPx READ trackHeightPx WRITE setTrackHeightPx NOTIFY changed)
40 Q_PROPERTY(bool showTrackTitles READ showTrackTitles WRITE setShowTrackTitles NOTIFY changed)
42 Q_PROPERTY(double envelopeOpacity READ envelopeOpacity WRITE setEnvelopeOpacity NOTIFY changed)
43
44 // ── Per-attribute visibility ────────────────────────────────────────
46 Q_PROPERTY(bool nodeHeadVisible READ nodeHeadVisible WRITE setNodeHeadVisible NOTIFY changed)
51 Q_PROPERTY(bool linkFlowVisible READ linkFlowVisible WRITE setLinkFlowVisible NOTIFY changed)
56
57 // ── Per-attribute pens (line color / width / style per track) ───────
58 Q_PROPERTY(QPen nodeDepthPen READ nodeDepthPen WRITE setNodeDepthPen NOTIFY changed)
59 Q_PROPERTY(QPen nodeHeadPen READ nodeHeadPen WRITE setNodeHeadPen NOTIFY changed)
60 Q_PROPERTY(QPen nodeVolumePen READ nodeVolumePen WRITE setNodeVolumePen NOTIFY changed)
63 Q_PROPERTY(QPen nodeOverflowPen READ nodeOverflowPen WRITE setNodeOverflowPen NOTIFY changed)
64 Q_PROPERTY(QPen linkFlowPen READ linkFlowPen WRITE setLinkFlowPen NOTIFY changed)
65 Q_PROPERTY(QPen linkDepthPen READ linkDepthPen WRITE setLinkDepthPen NOTIFY changed)
66 Q_PROPERTY(QPen linkVelocityPen READ linkVelocityPen WRITE setLinkVelocityPen NOTIFY changed)
67 Q_PROPERTY(QPen linkVolumePen READ linkVolumePen WRITE setLinkVolumePen NOTIFY changed)
68 Q_PROPERTY(QPen linkCapacityPen READ linkCapacityPen WRITE setLinkCapacityPen NOTIFY changed)
69
70public:
71 explicit ProfileAttributeTrackOptions(QObject *parent = nullptr);
72
73 // ── Generic accessors (the API the widget / menus actually use) ────
74 [[nodiscard]] bool isAttributeVisible(openswmmvis::plot::PlotAttribute a) const;
75 void setAttributeVisible(openswmmvis::plot::PlotAttribute a, bool on);
76 [[nodiscard]] QPen penFor(openswmmvis::plot::PlotAttribute a) const;
77 void setPenFor(openswmmvis::plot::PlotAttribute a, const QPen &pen);
78
81 [[nodiscard]] QVector<openswmmvis::plot::PlotAttribute> visibleAttributes() const;
82
83 // ── Species tracks (Y2b-2 follow-up, amendment D-Y4) ────────────────
84 // A species (pollutant or the reserved water-age column) is carried BY
85 // NAME, never by enum — the run's live list resolves it at fetch time.
86 // Each species can be tracked in node scope and link scope
87 // independently (concentration at the path's nodes vs in its links),
88 // so every accessor takes the scope alongside the name. State for a
89 // species the current run doesn't carry is kept verbatim (the Y2b-3
90 // save-then-reopen semantic): it simply isn't offered until a run
91 // with that species is loaded again.
92
93 [[nodiscard]] bool isSpeciesTrackVisible(const QString &species,
94 bool nodeScope) const;
95 void setSpeciesTrackVisible(const QString &species, bool nodeScope,
96 bool on);
97 [[nodiscard]] QPen speciesTrackPenFor(const QString &species,
98 bool nodeScope) const;
99 void setSpeciesTrackPenFor(const QString &species, bool nodeScope,
100 const QPen &pen);
101
105 [[nodiscard]] QVector<QPair<QString, bool>> visibleSpeciesTracks() const;
106
109 [[nodiscard]] bool anyAttributeVisible() const;
110
111 // ── Chrome ──────────────────────────────────────────────────────────
112 [[nodiscard]] int trackHeightPx() const { return m_trackHeightPx; }
113 [[nodiscard]] bool showTrackTitles() const { return m_showTrackTitles; }
114 [[nodiscard]] bool envelopesVisible() const { return m_envelopesVisible; }
115 [[nodiscard]] double envelopeOpacity() const { return m_envelopeOpacity; }
116 void setTrackHeightPx(int px);
117 void setShowTrackTitles(bool on);
118 void setEnvelopesVisible(bool on);
119 void setEnvelopeOpacity(double opacity01);
120
121 // ── Persistence (mirrors SWMMResultsLayer::write/readProfileStyle) ──
123 void writeTo(QSettings &s) const;
126 void readFrom(QSettings &s);
127
130 Q_INVOKABLE QString displayLabelFor(const QString &propertyName) const;
131
132 // Named getters/setters backing the Q_PROPERTYs — all forward to the
133 // generic per-attribute maps. Written out longhand rather than macro-
134 // generated: moc's handling of user macros around member declarations
135 // is fragile, and 44 one-liners in the .cpp beat a moc mystery.
136
137 [[nodiscard]] bool nodeDepthVisible() const;
138 void setNodeDepthVisible(bool on);
139 [[nodiscard]] bool nodeHeadVisible() const;
140 void setNodeHeadVisible(bool on);
141 [[nodiscard]] bool nodeVolumeVisible() const;
142 void setNodeVolumeVisible(bool on);
143 [[nodiscard]] bool nodeLateralInflowVisible() const;
144 void setNodeLateralInflowVisible(bool on);
145 [[nodiscard]] bool nodeTotalInflowVisible() const;
146 void setNodeTotalInflowVisible(bool on);
147 [[nodiscard]] bool nodeOverflowVisible() const;
148 void setNodeOverflowVisible(bool on);
149 [[nodiscard]] bool linkFlowVisible() const;
150 void setLinkFlowVisible(bool on);
151 [[nodiscard]] bool linkDepthVisible() const;
152 void setLinkDepthVisible(bool on);
153 [[nodiscard]] bool linkVelocityVisible() const;
154 void setLinkVelocityVisible(bool on);
155 [[nodiscard]] bool linkVolumeVisible() const;
156 void setLinkVolumeVisible(bool on);
157 [[nodiscard]] bool linkCapacityVisible() const;
158 void setLinkCapacityVisible(bool on);
159
160 [[nodiscard]] QPen nodeDepthPen() const;
161 void setNodeDepthPen(const QPen &p);
162 [[nodiscard]] QPen nodeHeadPen() const;
163 void setNodeHeadPen(const QPen &p);
164 [[nodiscard]] QPen nodeVolumePen() const;
165 void setNodeVolumePen(const QPen &p);
166 [[nodiscard]] QPen nodeLateralInflowPen() const;
167 void setNodeLateralInflowPen(const QPen &p);
168 [[nodiscard]] QPen nodeTotalInflowPen() const;
169 void setNodeTotalInflowPen(const QPen &p);
170 [[nodiscard]] QPen nodeOverflowPen() const;
171 void setNodeOverflowPen(const QPen &p);
172 [[nodiscard]] QPen linkFlowPen() const;
173 void setLinkFlowPen(const QPen &p);
174 [[nodiscard]] QPen linkDepthPen() const;
175 void setLinkDepthPen(const QPen &p);
176 [[nodiscard]] QPen linkVelocityPen() const;
177 void setLinkVelocityPen(const QPen &p);
178 [[nodiscard]] QPen linkVolumePen() const;
179 void setLinkVolumePen(const QPen &p);
180 [[nodiscard]] QPen linkCapacityPen() const;
181 void setLinkCapacityPen(const QPen &p);
182
183signals:
185 void changed();
186
187private:
191 [[nodiscard]] static QString speciesKey(const QString &species,
192 bool nodeScope);
193
194 QHash<int, bool> m_visible;
195 QHash<int, QPen> m_pens;
196
197 QHash<QString, bool> m_speciesVisible;
198 QHash<QString, QPen> m_speciesPens;
199
200 int m_trackHeightPx = 110;
201 bool m_showTrackTitles = true;
202 bool m_envelopesVisible = true;
203 double m_envelopeOpacity = 0.25;
204};
205
206#endif // OPENSWMMVIS_PLOT_PROFILEATTRIBUTETRACKOPTIONS_H
Definition profileattributetrackoptions.h:35
void setNodeOverflowVisible(bool on)
Definition profileattributetrackoptions.cpp:333
bool showTrackTitles
Definition profileattributetrackoptions.h:40
bool nodeDepthVisible
Definition profileattributetrackoptions.h:45
QPen linkDepthPen
Definition profileattributetrackoptions.h:65
QPen nodeTotalInflowPen
Definition profileattributetrackoptions.h:62
void setLinkVolumeVisible(bool on)
Definition profileattributetrackoptions.cpp:349
QPen nodeVolumePen
Definition profileattributetrackoptions.h:60
void setNodeLateralInflowPen(const QPen &p)
Definition profileattributetrackoptions.cpp:370
QPen penFor(openswmmvis::plot::PlotAttribute a) const
Definition profileattributetrackoptions.cpp:92
Q_INVOKABLE QString displayLabelFor(const QString &propertyName) const
Definition profileattributetrackoptions.cpp:273
bool isSpeciesTrackVisible(const QString &species, bool nodeScope) const
Definition profileattributetrackoptions.cpp:123
void setAttributeVisible(openswmmvis::plot::PlotAttribute a, bool on)
Definition profileattributetrackoptions.cpp:85
void setSpeciesTrackPenFor(const QString &species, bool nodeScope, const QPen &pen)
Definition profileattributetrackoptions.cpp:146
bool linkFlowVisible
Definition profileattributetrackoptions.h:51
bool nodeOverflowVisible
Definition profileattributetrackoptions.h:50
void setNodeOverflowPen(const QPen &p)
Definition profileattributetrackoptions.cpp:378
bool nodeLateralInflowVisible
Definition profileattributetrackoptions.h:48
void setTrackHeightPx(int px)
Definition profileattributetrackoptions.cpp:186
bool envelopesVisible
Definition profileattributetrackoptions.h:41
void setNodeVolumeVisible(bool on)
Definition profileattributetrackoptions.cpp:321
bool isAttributeVisible(openswmmvis::plot::PlotAttribute a) const
Definition profileattributetrackoptions.cpp:80
void setShowTrackTitles(bool on)
Definition profileattributetrackoptions.cpp:194
bool linkVolumeVisible
Definition profileattributetrackoptions.h:54
void setLinkVolumePen(const QPen &p)
Definition profileattributetrackoptions.cpp:394
void setNodeTotalInflowPen(const QPen &p)
Definition profileattributetrackoptions.cpp:374
void setLinkFlowPen(const QPen &p)
Definition profileattributetrackoptions.cpp:382
int trackHeightPx
Definition profileattributetrackoptions.h:39
void readFrom(QSettings &s)
Definition profileattributetrackoptions.cpp:242
void setLinkFlowVisible(bool on)
Definition profileattributetrackoptions.cpp:337
void setNodeVolumePen(const QPen &p)
Definition profileattributetrackoptions.cpp:366
QPen nodeDepthPen
Definition profileattributetrackoptions.h:58
void setEnvelopeOpacity(double opacity01)
Definition profileattributetrackoptions.cpp:208
QPen linkVolumePen
Definition profileattributetrackoptions.h:67
QPen speciesTrackPenFor(const QString &species, bool nodeScope) const
Definition profileattributetrackoptions.cpp:139
void setLinkDepthPen(const QPen &p)
Definition profileattributetrackoptions.cpp:386
QPen linkCapacityPen
Definition profileattributetrackoptions.h:68
void setNodeDepthPen(const QPen &p)
Definition profileattributetrackoptions.cpp:358
void setNodeHeadVisible(bool on)
Definition profileattributetrackoptions.cpp:317
void writeTo(QSettings &s) const
Definition profileattributetrackoptions.cpp:218
void setNodeLateralInflowVisible(bool on)
Definition profileattributetrackoptions.cpp:325
bool nodeHeadVisible
Definition profileattributetrackoptions.h:46
void setLinkVelocityVisible(bool on)
Definition profileattributetrackoptions.cpp:345
void setLinkCapacityPen(const QPen &p)
Definition profileattributetrackoptions.cpp:398
bool nodeVolumeVisible
Definition profileattributetrackoptions.h:47
QPen linkVelocityPen
Definition profileattributetrackoptions.h:66
bool linkVelocityVisible
Definition profileattributetrackoptions.h:53
void setLinkCapacityVisible(bool on)
Definition profileattributetrackoptions.cpp:353
QPen nodeHeadPen
Definition profileattributetrackoptions.h:59
void setPenFor(openswmmvis::plot::PlotAttribute a, const QPen &pen)
Definition profileattributetrackoptions.cpp:97
QPen linkFlowPen
Definition profileattributetrackoptions.h:64
bool nodeTotalInflowVisible
Definition profileattributetrackoptions.h:49
QVector< openswmmvis::plot::PlotAttribute > visibleAttributes() const
Definition profileattributetrackoptions.cpp:104
bool linkDepthVisible
Definition profileattributetrackoptions.h:52
QPen nodeOverflowPen
Definition profileattributetrackoptions.h:63
bool envelopesVisible() const
Definition profileattributetrackoptions.h:114
QVector< QPair< QString, bool > > visibleSpeciesTracks() const
Definition profileattributetrackoptions.cpp:158
void setNodeHeadPen(const QPen &p)
Definition profileattributetrackoptions.cpp:362
double envelopeOpacity
Definition profileattributetrackoptions.h:42
bool showTrackTitles() const
Definition profileattributetrackoptions.h:113
QPen nodeLateralInflowPen
Definition profileattributetrackoptions.h:61
bool anyAttributeVisible() const
Definition profileattributetrackoptions.cpp:176
void setNodeDepthVisible(bool on)
Definition profileattributetrackoptions.cpp:313
void setLinkDepthVisible(bool on)
Definition profileattributetrackoptions.cpp:341
double envelopeOpacity() const
Definition profileattributetrackoptions.h:115
bool linkCapacityVisible
Definition profileattributetrackoptions.h:55
void setSpeciesTrackVisible(const QString &species, bool nodeScope, bool on)
Definition profileattributetrackoptions.cpp:129
void setEnvelopesVisible(bool on)
Definition profileattributetrackoptions.cpp:201
void setLinkVelocityPen(const QPen &p)
Definition profileattributetrackoptions.cpp:390
void setNodeTotalInflowVisible(bool on)
Definition profileattributetrackoptions.cpp:329
double s
Scene px per model length unit.
Definition inletdrawingview.cpp:82
ArrowPlacement p
Definition linesymbollayer.cpp:27
int a
Definition meshquadmatch.cpp:46
Definition aquiferprovider.h:21
Slice BL — canonical enumeration of plottable result attributes.
QVector< int > parent
union-find
Definition pslgminsize.cpp:176