MCPcopy Create free account
hub / github.com/PlotJuggler/PlotJuggler / saveChildNodesState

Function saveChildNodesState

pj_plotting/widget/src/PlotDocker.cpp:55–120  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

53}
54
55QDomElement saveChildNodesState(QDomDocument& doc, QWidget* widget) {
56 if (widget == nullptr) {
57 return {};
58 }
59
60 if (auto* splitter = qobject_cast<QSplitter*>(widget)) {
61 QDomElement splitter_element = doc.createElement(QStringLiteral("DockSplitter"));
62 splitter_element.setAttribute(
63 QStringLiteral("orientation"),
64 splitter->orientation() == Qt::Horizontal ? QStringLiteral("|") : QStringLiteral("-"));
65 splitter_element.setAttribute(QStringLiteral("count"), QString::number(splitter->count()));
66
67 QStringList normalized_sizes;
68 int total_size = 0;
69 for (int size : splitter->sizes()) {
70 total_size += size;
71 }
72 for (int index = 0; index < splitter->count(); ++index) {
73 const int size = splitter->sizes().value(index, 0);
74 const double normalized = total_size > 0 ? static_cast<double>(size) / static_cast<double>(total_size)
75 : 1.0 / static_cast<double>(std::max(1, splitter->count()));
76 normalized_sizes.push_back(QString::number(normalized, 'f', 8));
77 }
78 splitter_element.setAttribute(QStringLiteral("sizes"), normalized_sizes.join(QStringLiteral(";")));
79
80 for (int index = 0; index < splitter->count(); ++index) {
81 QDomElement child = saveChildNodesState(doc, splitter->widget(index));
82 if (!child.isNull()) {
83 splitter_element.appendChild(child);
84 }
85 }
86 return splitter_element;
87 }
88
89 auto* dock_area = qobject_cast<ads::CDockAreaWidget*>(widget);
90 if (dock_area == nullptr) {
91 return {};
92 }
93
94 QDomElement area_element = doc.createElement(QStringLiteral("DockArea"));
95 for (int index = 0; index < dock_area->dockWidgetsCount(); ++index) {
96 auto* dock_widget = dynamic_cast<DockWidget*>(dock_area->dockWidget(index));
97 if (dock_widget == nullptr) {
98 continue;
99 }
100 // Plot widgets emit <plot>; object widgets (Scene3DDockWidget, …)
101 // emit whatever their xmlSaveState returns (e.g. <scene3d>). A null
102 // QDomElement from an object widget means "I don't persist state yet",
103 // so we skip it honestly rather than writing an empty stub.
104 QDomElement payload;
105 if (auto* plot = dock_widget->plotWidget()) {
106 payload = plot->xmlSaveState(doc);
107 } else if (auto* obj = dock_widget->objectWidget()) {
108 payload = obj->xmlSaveState(doc);
109 if (payload.isNull()) {
110 continue;
111 }
112 } else {

Callers 1

xmlSaveStateMethod · 0.85

Calls 11

plotWidgetMethod · 0.80
objectWidgetMethod · 0.80
setAttributeMethod · 0.45
orientationMethod · 0.45
countMethod · 0.45
valueMethod · 0.45
widgetMethod · 0.45
isNullMethod · 0.45
xmlSaveStateMethod · 0.45
stateIdMethod · 0.45
nameMethod · 0.45

Tested by

no test coverage detected