#include "iceViewSerializer.h" #include #include using namespace Slicer; class Assign : public ValueSource, public TValueSource { public: Assign(const VariableType & v) : vt(v) { } void set(boost::posix_time::ptime & v) const override { v = vt; } void set(bool & v) const override { v = vt; } void set(Ice::Byte & v) const override { v = boost::numeric_cast(vt.as()); } void set(Ice::Short & v) const override { v = boost::numeric_cast(vt.as()); } void set(Ice::Int & v) const override { v = vt; } void set(Ice::Long & v) const override { v = vt; } void set(Ice::Float & v) const override { v = vt.as(); } void set(Ice::Double & v) const override { v = vt; } void set(std::string & v) const override { v = vt.as(); } private: const VariableType & vt; }; IceViewSerializer::IceViewSerializer(ModelPartPtr m) : mpp(m) { } void IceViewSerializer::addNamedValue(const Glib::ustring & name, const VariableType & vt) const { if (rowmpp) { ModelPartPtr field = rowmpp->GetChild(name); if (field) { field->SetValue(new Assign(vt)); } else { Logger()->messagebf(LOG_INFO, "%s: Field not found", __PRETTY_FUNCTION__); } } else { Logger()->messagebf(LOG_WARNING, "%s: No active row", __PRETTY_FUNCTION__); } } void IceViewSerializer::addNewRow(const Glib::ustring & name) const { if (mpp->GetType() == Slicer::mpt_Complex) { rowmpp = mpp; rowmpp->Create(); } else { rowmpp = mpp->GetChild(name); if (rowmpp) { rowmpp->Create(); } } } void IceViewSerializer::finishRow() const { rowmpp->Complete(); rowmpp = NULL; }