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
legendlayertreemodel.h
Go to the documentation of this file.
1
25#ifndef OPENSWMMVIS_UI_MODELS_LEGENDLAYERTREEMODEL_H
26#define OPENSWMMVIS_UI_MODELS_LEGENDLAYERTREEMODEL_H
27
28#include <QAbstractItemModel>
29#include <QColor>
30#include <QList>
31#include <QPointer>
32#include <QString>
33#include <QVector>
34
35class MapCanvas;
37
38namespace OpenSWMM::Render { class LegendOverlayStyle; }
39
40namespace openswmmvis::ui {
41
42class LegendLayerTreeModel : public QAbstractItemModel
43{
44 Q_OBJECT
45public:
46 enum Column {
49 ColSize = 2,
51 };
52
70
71 explicit LegendLayerTreeModel(MapCanvas *canvas, QObject *parent = nullptr);
72 ~LegendLayerTreeModel() override;
73
78
79 // QAbstractItemModel ─────────────────────────────────────────────
80 int columnCount(const QModelIndex &parent = {}) const override;
81 int rowCount(const QModelIndex &parent = {}) const override;
82 QModelIndex index(int row, int column, const QModelIndex &parent = {}) const override;
83 QModelIndex parent(const QModelIndex &child) const override;
84 QVariant data(const QModelIndex &idx, int role = Qt::DisplayRole) const override;
85 bool setData(const QModelIndex &idx, const QVariant &value, int role = Qt::EditRole) override;
86 Qt::ItemFlags flags(const QModelIndex &idx) const override;
87 QVariant headerData(int section, Qt::Orientation orientation,
88 int role = Qt::DisplayRole) const override;
89
90private slots:
91 void onCanvasLayersChanged(); // layerAdded/Removed/OrderChanged
92 void onLayerRepaintRequested(); // any layer's renderer state shifted
93
94private:
95 // Internal nodes: layer headers (top-level) + item rows (one per
96 // LegendSymbolItem inside a layer). Stored flat for fast lookup;
97 // index parent/child computed via internalId.
98 struct ItemRow {
99 QString classKey;
100 QString label;
101 QColor color;
102 bool visible = true;
103 qreal size = -1.0;
104 QString sublayerId;
107 };
108 struct LayerNode {
109 QPointer<OpenSWMMVisLayer> layer;
110 QString name;
111 QVector<ItemRow> items;
112 bool editableColor = false;
113 bool editableSize = false;
114 };
115
116 void rebuildLayerCache();
117 void connectLayer(OpenSWMMVisLayer *layer);
118 void disconnectAllLayers();
119
120 QPointer<MapCanvas> m_canvas;
121 QPointer<OpenSWMM::Render::LegendOverlayStyle> m_style;
122 QVector<LayerNode> m_layers;
123 QList<QPointer<OpenSWMMVisLayer>> m_connectedLayers;
124 // VS.9 — sublayer-host layers route each sublayer's invalidated()
125 // signal here so style/visibility edits on a sublayer refresh the
126 // legend live. Tracked as QObject* (ISublayer derives QObject) so the
127 // header needs no isublayer.h include; disconnected on every rebuild.
128 QList<QPointer<QObject>> m_connectedSublayers;
129};
130
131} // namespace openswmmvis::ui
132
133#endif // OPENSWMMVIS_UI_MODELS_LEGENDLAYERTREEMODEL_H
The central map display widget — QGIS-style hybrid rendering.
Definition mapcanvas.h:63
Model object holding the on-canvas legend's chrome configuration.
Definition legendoverlaystyle.h:50
Abstract base class for all layers displayed in the MapCanvas.
Definition openswmmvislayer.h:116
Definition legendlayertreemodel.h:43
QVariant data(const QModelIndex &idx, int role=Qt::DisplayRole) const override
Definition legendlayertreemodel.cpp:268
CustomRole
Roles used by LegendColorDelegate for direct access to the classKey and the layer pointer without goi...
Definition legendlayertreemodel.h:56
@ ClassKeyRole
Definition legendlayertreemodel.h:57
@ LayerPtrRole
Definition legendlayertreemodel.h:58
@ EditableRole
Definition legendlayertreemodel.h:59
@ SublayerIdRole
Definition legendlayertreemodel.h:61
~LegendLayerTreeModel() override
Definition legendlayertreemodel.cpp:64
bool setData(const QModelIndex &idx, const QVariant &value, int role=Qt::EditRole) override
Definition legendlayertreemodel.cpp:333
int rowCount(const QModelIndex &parent={}) const override
Definition legendlayertreemodel.cpp:238
int columnCount(const QModelIndex &parent={}) const override
Definition legendlayertreemodel.cpp:233
Column
Definition legendlayertreemodel.h:46
@ ColSize
Definition legendlayertreemodel.h:49
@ ColColor
Definition legendlayertreemodel.h:48
@ ColItem
Definition legendlayertreemodel.h:47
@ ColCount
Definition legendlayertreemodel.h:50
void setOverlayStyle(OpenSWMM::Render::LegendOverlayStyle *style)
Optional per-item override store. When set, the model reads visible / userLabel from the style and ro...
Definition legendlayertreemodel.cpp:69
Qt::ItemFlags flags(const QModelIndex &idx) const override
Definition legendlayertreemodel.cpp:398
QVariant headerData(int section, Qt::Orientation orientation, int role=Qt::DisplayRole) const override
Definition legendlayertreemodel.cpp:424
const char * label
Human label for the filter entry.
Definition gdaldrivers.cpp:22
SWMM_FilePathRole role
Definition ioportabilitynormalizer.cpp:22
int index
Position in m_quadRegions / m_quadReports.
Definition meshgenerator.cpp:153
int size()
Number of colors in one full cycle before the palette wraps.
Definition categoricalpalette.cpp:178
Definition gisrasterlayer.h:40
Definition openswmmvislayer.h:43
QVector< int > parent
union-find
Definition pslgminsize.cpp:176
QString name
Definition sectionmodelbuilders.cpp:474