43#ifndef OPENSWMM_RENDER_ISUBLAYERHOST_H
44#define OPENSWMM_RENDER_ISUBLAYERHOST_H
79 [[nodiscard]]
virtual QList<ISublayer *>
sublayers()
const = 0;
121 if (
s &&
s->isDynamic())
135 Q_UNUSED(sublayersJson);
164 row.insert(QStringLiteral(
"id"),
s->id());
165 row.insert(QStringLiteral(
"visible"),
s->isVisible());
166 row.insert(QStringLiteral(
"opacity"),
s->opacity());
168 row.insert(QStringLiteral(
"style"), style->toJson());
172 obj.insert(QStringLiteral(
"sublayers"), arr);
191 [[nodiscard]]
static QList<LegendSymbolItem>
194 QList<LegendSymbolItem> out;
197 if (!
s || !
s->isVisible())
continue;
198 out.append(
s->legendSymbolItems());
214 if (
s &&
s->id() ==
id)
return s;
220 const QJsonArray arr = j.value(QStringLiteral(
"sublayers")).toArray();
223 QHash<QString, ISublayer *> byId;
225 if (
s) byId.insert(
s->id(),
s);
227 for (
const QJsonValue &val : arr)
229 const QJsonObject row = val.toObject();
230 const QString
id = row.value(QStringLiteral(
"id")).toString();
231 auto it = byId.constFind(
id);
232 if (it == byId.constEnd())
continue;
235 if (row.contains(QStringLiteral(
"visible")))
236 s->
setVisible(row.value(QStringLiteral(
"visible")).toBool());
237 if (row.contains(QStringLiteral(
"opacity")))
238 s->setOpacity(row.value(QStringLiteral(
"opacity")).toDouble());
239 if (row.contains(QStringLiteral(
"style")))
240 if (
auto *style =
s->style())
241 style->fromJson(row.value(QStringLiteral(
"style")).toObject());
250 for (
const QJsonValue &val : arr)
252 const QString
id = val.toObject()
253 .value(QStringLiteral(
"id")).toString();
256 for (
int i = 0;
i < cur.size(); ++
i)
257 if (cur[
i] && cur[
i]->
id() ==
id) { found =
i;
break; }
258 if (found < 0)
continue;
Mixin interface for layers that expose a list of ISublayers.
Definition isublayerhost.h:64
static QJsonObject saveSublayersToJson(const ISublayerHost &host)
Definition isublayerhost.h:157
static QList< LegendSymbolItem > aggregatedLegendSymbolItems(const ISublayerHost &host)
Aggregates every visible sublayer's legendSymbolItems() into a single flat list (Slice S4 / §J....
Definition isublayerhost.h:192
virtual void onSublayersJsonLoaded(const QJsonObject &sublayersJson)
Hook fired at the end of loadSublayersFromJson with the raw payload, so hosts can migrate style data ...
Definition isublayerhost.h:133
static ISublayer * findSublayer(const ISublayerHost &host, const QString &id)
O(N) lookup of a sublayer by its stable id. Returns nullptr when not found. Used by the legend dock's...
Definition isublayerhost.h:211
static void loadSublayersFromJson(ISublayerHost &host, const QJsonObject &j)
Definition isublayerhost.h:218
virtual void dispatchAnimationTick(int period)
Hook invoked by AnimationController on every time-step change.
Definition isublayerhost.h:116
virtual ~ISublayerHost()=default
virtual bool moveSublayer(int from, int to)
Move the sublayer at from to position to in paint order.
Definition isublayerhost.h:92
virtual QList< ISublayer * > sublayers() const =0
The ordered list of sublayers owned by this layer.
One toggleable visual aspect of a results / model layer.
Definition isublayer.h:87
virtual SublayerStyle * style()=0
Returns the property-bag QObject that owns this sublayer's style knobs.
virtual void setVisible(bool)=0
size_t i
Definition contourjob.cpp:27
double s
Scene px per model length unit.
Definition inletdrawingview.cpp:82
Toggleable visual aspect of an output layer.
hid_t id
Definition mesh2dh5reader.cpp:29
Definition gisrasterlayer.h:40
QObject base class for per-sublayer style property bags.