31 #include "classdesc.h" 32 #include "polyXMLBase.h" 33 #include "polyJsonBase.h" 37 #include <xsd_generate_base.h> 51 using classdesc::shared_ptr;
55 virtual public PolyBase<string>,
56 virtual public PolyJsonBase,
57 virtual public PolyXMLBase
61 template <
class T,
class B1,
class B2=PolyBase<
string> >
62 struct SPoly:
virtual public B1,
virtual public B2
66 SPoly*
clone()
const override {
return new T(static_cast<const T&>(*
this));}
67 string type()
const override {
return classdesc::typeName<T>();}
69 void xml_pack(xml_pack_t& x,
const string& d)
const override 70 {
::xml_pack(x,d,static_cast<const T&>(*
this));}
72 void xml_unpack(xml_unpack_t& x,
const string& d)
override 75 void json_pack(json_pack_t& x,
const string& d)
const override 76 {::json_pack(x,d,static_cast<const T&>(*
this));}
79 {::json_unpack(x,d,static_cast<T&>(*
this));}
82 template <
class T,
class U>
83 struct Join:
virtual public T,
virtual public U
85 Join& operator=(
const Join&)=
default;
87 string type()
const override {
return "";}
88 void xml_pack(xml_pack_t& x,
const string& d)
const override {}
89 void xml_unpack(xml_unpack_t& x,
const string& d)
override {}
90 void json_pack(json_pack_t& x,
const string& d)
const override {}
91 void json_unpack(json_unpack_t& x,
const string& d)
override {}
102 id(id), detailedText(it.detailedText), tooltip(it.tooltip) {}
118 Wire(
int id,
int from,
int to):
Item(id), from(from), to(to) {}
131 Item(id), type(
op.m_type), value(
op.value),
133 name(
op.m_description.empty()?
op.description:
op.m_description),
152 typedef ecolab::Plot::Side
Side;
155 bool logx{0}, logy{0};
159 Item(id), ports(p.ports.begin(),p.ports.end()), logx(p.logx), logy(p.logy) {}
174 Item(id), items(g.operations), ports(g.m_ports.begin(),g.m_ports.end()) {
188 bool doubleEntryCompliant=
true;
196 doubleEntryCompliant(g.table.doubleEntryCompliant),
197 name(g.table.title), data(g.table.data),
198 assetClasses(g.table.m_assetClass)
200 for (
auto& i: g.
flowVars) ports.push_back(i.m_inPort);
201 for (
auto& i: g.
stockVars) ports.push_back(i.m_outPort);
221 Layout(id), x(item.m_x), y(item.m_y) {}
223 Layout(id), x(o.x), y(o.y) {}
225 Layout(id), x(v.x), y(v.y) {}
227 Layout(id), x(g.x), y(g.y) {}
229 Layout(id), x(p.x), y(p.y) {}
238 visible(item.visible()) {}
240 visible(item.visible) {}
242 visible(item.visible) {}
249 double width=-1, height=-1;
264 coords(
wire.coords.begin(),
wire.coords.end()) {}
269 Join<PositionLayout, VisibilityLayout> >
276 rotation(item.rotation) {}
283 double displayZoom=1;
299 bool sliderVisible=
false, sliderBoundsSet=
false, sliderStepRel=
false;
300 double sliderMin=0, sliderMax=0, sliderStep=0;
305 ItemLayout(id, item), sliderVisible(item.sliderVisible()),
306 sliderBoundsSet(item.sliderBoundsSet), sliderStepRel(item.sliderStepRel),
307 sliderMin(item.sliderMin), sliderMax(item.sliderMax),
308 sliderStep(item.sliderStep) {}
314 Join<SliderLayout, GroupLayout>,
315 Join<PlotLayout, WireLayout> >
339 static const int version=1;
348 Minsky(classdesc::xml_unpack_t& data): schemaVersion(0)
350 minsky::loadSchema<schema0::Minsky>(*
this,data,
"Minsky");
351 removeIntVarOrphans();
359 void removeIntVarOrphans();
365 template <
class T> std::unique_ptr<T>
factory(
const std::string&);
373 template <>
inline std::string typeName<shared_ptr<schema1::Layout> >()
374 {
return "schema1::Layout";}
383 void operator()(cd::xml_pack_t& x,
const cd::string& d, U& a)
391 void operator()(cd::xml_unpack_t& x,
const cd::string& d, U& a)
394 ::xml_unpack(x, d, dynamic_cast<schema1::UnionLayout&>(*a));
404 #pragma omit xsd_generate schema1::SPolyBase 405 #pragma omit xsd_generate schema1::SPoly 409 template <
class T,
class B1,
class B2>
415 inline void xsd_generate(classdesc::xsd_generate_t& x,
const std::string& d,
420 #include "schema1.cd" 421 #include "schema1.xcd"
represent objects whose layouts just have a position (ports, plots, godleyIcons)
void json_unpack(json_unpack_t &x, const string &d) override
void operator()(cd::xml_pack_t &x, const cd::string &d, U &a)
void xml_unpack(classdesc::xml_unpack_t &, const classdesc::string &, classdesc::ref< ecolab::urand > &)
describes item with sliders - currently just constants
vector< minsky::GodleyTable::AssetClass > assetClasses
shared_ptr< Side > legend
Operation(int id, const schema0::Operation &op)
ItemLayout(int id, const T &item)
VisibilityLayout(const schema0::Operation &item)
vector< shared_ptr< Layout > > layout
Item(int id, const T &it)
VisibilityLayout(const schema0::GroupIcon &item)
void xsd_generate(xsd_generate_t &g, const string &d, const minsky::Optional< T > &a)
Wire(int id, int from, int to)
minsky::Simulation rungeKutta
PositionLayout(int id, const T &item)
void xml_unpack(xml_unpack_t &x, const string &d) override
WireLayout(int id, const schema0::Wire &wire)
void json_unpack(json_unpack_t &x, const string &d) override
represents layouts of objects like variables and operators
minsky::OperationType::Type type
PositionLayout(int id, const schema0::Operation &o)
map< double, double > data
represents layouts of wires
string type() const override
SPoly * clone() const override
void xml_pack(xml_pack_t &x, const string &d) const override
group layouts also have a width & height
Variable(int id, const schema0::VariablePtr &v)
struct TCLcmd::trap::init_t init
structure representing a union of all of the above Layout classes, for xml_unpack ...
void operator()(cd::xml_unpack_t &x, const cd::string &d, U &a)
Creation and access to the minskyTCL_obj object, which has code to record whenever Minsky's state cha...
string type() const override
PositionLayout(int id, const schema0::Variable &v)
Group(int id, const schema0::GroupIcon &g)
note this assumes that ids have been uniquified prior to this call
PositionLayout(int id, double x, double y)
vector< Operation > operations
VisibilityLayout(const T &item)
SizeLayout(const schema0::PlotWidget &)
PlotLayout(int id, const schema0::PlotWidget &p)
PositionLayout(int id, const schema0::PlotWidget &p)
std::unique_ptr< T > factory(const std::string &)
Godley(int id, const schema0::GodleyIcon &g)
int m_inPort
where wires connect to
Plot(int id, const schema0::PlotWidget &p)
PositionLayout(int id, const schema0::GroupIcon &g)
void xsd_generate(classdesc::xsd_generate_t &, const std::string &, const schema1::SPolyBase &)
vector< Variable > variables
void xml_pack(xml_pack_t &t, const string &d, minsky::Optional< T > &a)
void xml_unpack(xml_unpack_t &x, const string &d) override
std::vector< VariablePtr > stockVars
Minsky(classdesc::xml_unpack_t &data)
populate schema from XML data
vector< int > createdVars
std::vector< VariablePtr > flowVars
vector< vector< string > > data
GroupLayout(int id, const schema0::GroupIcon &g)
represents items with a visibility attribute
vector< Item > notes
descriptive notes
VisibilityLayout(const schema0::Variable &item)
vector< Switch > switches
void json_pack(json_pack_t &x, const string &d) const override
void json_pack(json_pack_t &x, const string &d) const override
SliderLayout(int id, const T &item)
VisibilityLayout(bool visible=true)
minsky::VariableType::Type type
Join * clone() const override
void xml_pack(xml_pack_t &x, const string &d) const override
std::vector< int > variables