147 auto* j=
dynamic_cast<const T*
>(i);
151 if (
auto v=i->variableCast())
152 if (
auto g=dynamic_cast<minsky::GodleyIcon*>(v->controller.lock().get()))
153 for (
size_t i=0; !g->variableDisplay() && i<2; ++i)
154 if (
auto p=v->ports(i).lock())
155 if (p->wires().empty())
158 items.emplace_back(
at(i), *j,
at(*j));
159 if (
auto* g=dynamic_cast<const minsky::GodleyIcon*>(i))
162 items.back().ports.clear();
163 for (
const auto& v: g->flowVars())
164 items.back().ports.push_back(
at(v->ports(1).lock().get()));
165 for (
const auto& v: g->stockVars())
166 items.back().ports.push_back(
at(v->ports(0).lock().get()));
168 if (
auto* d=dynamic_cast<const minsky::DataOp*>(i))
170 items.back().dataOpData=d->data;
171 items.back().name=d->description();
173 if (
auto* s=dynamic_cast<const minsky::Sheet*>(i))
175 items.back().showSlice=
s->showRowSlice;
176 items.back().showColSlice=
s->showColSlice;
178 if (
auto* d=dynamic_cast<const minsky::UserFunction*>(i))
180 items.back().expression=d->expression;
181 items.back().name=d->description();
183 if (
auto* r=dynamic_cast<const minsky::Ravel*>(i))
187 auto s=r->getState();
188 if (!
s.handleStates.empty())
190 items.back().ravelState=
s;
191 items.back().dimensions=r->axisDimensions;
192 items.back().editorMode=r->editorMode();
194 if (r->flipped) items.back().rotation=180;
196 if (
auto* l=dynamic_cast<const minsky::Lock*>(i))
198 items.back().ravelState=l->lockedState;
set< minsky::RavelLockGroup * > lockGroups