void ObjectGroup::UnserializeFrom(std::vector < gd::ObjectGroup > & list, const SerializerElement & element) { element.ConsiderAsArrayOf("group", "Groupe"); for (unsigned int i = 0; i < element.GetChildrenCount(); ++i) { SerializerElement & groupElement = element.GetChild(i); gd::ObjectGroup objectGroup; objectGroup.SetName(groupElement.GetStringAttribute("name", "", "nom")); //Compatibility with GD <= 3.3 if ( groupElement.HasChild("Objet") ) { for (unsigned int j = 0; j < groupElement.GetChildrenCount("Objet"); ++j) objectGroup.AddObject(groupElement.GetChild("Objet", j).GetStringAttribute("nom")); } //End of compatibility code else { SerializerElement & objectsElement = groupElement.GetChild("objects"); objectsElement.ConsiderAsArrayOf("object"); for (unsigned int j = 0; j < objectsElement.GetChildrenCount(); ++j) objectGroup.AddObject(objectsElement.GetChild(j).GetStringAttribute("name")); } list.push_back( objectGroup ); } }
void ClassWithObjects::SerializeObjectsTo(SerializerElement & element) const { element.ConsiderAsArrayOf("object"); for ( std::size_t j = 0;j < initialObjects.size();j++ ) { initialObjects[j]->SerializeTo(element.AddChild("object")); } }
void EventsListSerialization::SerializeEventsTo(const EventsList & list, SerializerElement & events) { events.ConsiderAsArrayOf("event"); for ( unsigned int j = 0;j < list.size();j++ ) { const gd::BaseEvent & event = list.GetEvent(j); SerializerElement & eventElem = events.AddChild("event"); eventElem.SetAttribute( "disabled", event.IsDisabled()); eventElem.SetAttribute( "folded", event.folded); eventElem.AddChild("type").SetValue(event.GetType()); event.SerializeTo(eventElem); } }
void ObjectGroup::SerializeTo(const std::vector < gd::ObjectGroup > & list, SerializerElement & element) { element.ConsiderAsArrayOf("group"); for ( unsigned int j = 0;j < list.size();j++ ) { SerializerElement & groupElement = element.AddChild("group"); groupElement.SetAttribute("name", list[j].GetName()); SerializerElement & objectsElement = groupElement.AddChild("objects"); objectsElement.ConsiderAsArrayOf("object"); vector < string > allObjects = list[j].GetAllObjectsNames(); for ( unsigned int k = 0;k < allObjects.size();k++ ) objectsElement.AddChild("object").SetAttribute( "name", allObjects[k] ); } }
void gd::EventsListSerialization::OpenConditions(gd::Project & project, gd::InstructionsList & conditions, const SerializerElement & elem) { elem.ConsiderAsArrayOf("condition", "Condition"); for(std::size_t i = 0; i<elem.GetChildrenCount(); ++i) { gd::Instruction instruction; const SerializerElement & conditionElem = elem.GetChild(i); instruction.SetType(conditionElem.GetChild("type", 0, "Type").GetStringAttribute("value") .FindAndReplace("Automatism", "Behavior")); //Compatibility with GD <= 4 instruction.SetInverted(conditionElem.GetChild("type", 0, "Type").GetBoolAttribute("inverted", false, "Contraire")); //Read parameters vector < gd::Expression > parameters; //Compatibility with GD <= 3.3 if (conditionElem.HasChild("Parametre")) { for (std::size_t j = 0;j<conditionElem.GetChildrenCount("Parametre");++j) parameters.push_back(gd::Expression(conditionElem.GetChild("Parametre", j).GetValue().GetString())); } //end of compatibility code else { const SerializerElement & parametersElem = conditionElem.GetChild("parameters"); parametersElem.ConsiderAsArrayOf("parameter"); for (std::size_t j = 0;j<parametersElem.GetChildrenCount();++j) parameters.push_back(gd::Expression(parametersElem.GetChild(j).GetValue().GetString())); } instruction.SetParameters( parameters ); //Read sub conditions if ( conditionElem.HasChild("subConditions", "SubConditions") ) OpenConditions(project, instruction.GetSubInstructions(), conditionElem.GetChild("subConditions", 0, "SubConditions" )); conditions.Insert( instruction ); } if ( project.GetLastSaveGDMajorVersion() < 3 || (project.GetLastSaveGDMajorVersion() == 3 && project.GetLastSaveGDMinorVersion() <= 1 ) ) UpdateInstructionsFromGD31x(project, conditions, false); if ( project.GetLastSaveGDMajorVersion() < 3 ) UpdateInstructionsFromGD2x(project, conditions, false); }
void gd::EventsListSerialization::OpenActions(gd::Project & project, vector < gd::Instruction > & actions, const SerializerElement & elem) { elem.ConsiderAsArrayOf("action", "Action"); for(unsigned int i = 0; i<elem.GetChildrenCount(); ++i) { gd::Instruction instruction; const SerializerElement & actionElem = elem.GetChild(i); instruction.SetType( actionElem.GetChild("type", 0, "Type").GetStringAttribute("value") ); //Read parameters vector < gd::Expression > parameters; //Compatibility with GD <= 3.3 if (actionElem.HasChild("Parametre")) { for (unsigned int j = 0;j<actionElem.GetChildrenCount("Parametre");++j) parameters.push_back(gd::Expression(actionElem.GetChild("Parametre", j).GetValue().GetString())); } //end of compatibility code else { const SerializerElement & parametersElem = actionElem.GetChild("parameters"); parametersElem.ConsiderAsArrayOf("parameter"); for (unsigned int j = 0;j<parametersElem.GetChildrenCount();++j) parameters.push_back(gd::Expression(parametersElem.GetChild(j).GetValue().GetString())); } instruction.SetParameters( parameters ); //Read sub actions if ( actionElem.HasChild("subActions", "SubActions") ) OpenActions(project, instruction.GetSubInstructions(), actionElem.GetChild("subActions", 0, "SubActions" )); actions.push_back( instruction ); } if ( project.GetLastSaveGDMajorVersion() < 3 || (project.GetLastSaveGDMajorVersion() == 3 && project.GetLastSaveGDMinorVersion() <= 1 ) ) UpdateInstructionsFromGD31x(project, actions, true); if ( project.GetLastSaveGDMajorVersion() < 3 ) UpdateInstructionsFromGD2x(project, actions, true); }
void gd::EventsListSerialization::SaveConditions(const vector < gd::Instruction > & list, SerializerElement & conditions) { conditions.ConsiderAsArrayOf("condition"); for ( unsigned int k = 0;k < list.size();k++ ) { SerializerElement & condition = conditions.AddChild("condition"); condition.AddChild("type") .SetAttribute("value", list[k].GetType()) .SetAttribute("inverted", list[k].IsInverted()); //Parameters SerializerElement & parameters = condition.AddChild("parameters"); parameters.ConsiderAsArrayOf("parameter"); for ( unsigned int l = 0;l < list[k].GetParameters().size();l++ ) parameters.AddChild("parameter").SetValue(list[k].GetParameter(l).GetPlainString()); //Sub instructions SerializerElement & subConditions = condition.AddChild("subConditions"); SaveConditions(list[k].GetSubInstructions(), subConditions); } }
void ClassWithObjects::UnserializeObjectsFrom(gd::Project & project, const SerializerElement & element) { initialObjects.clear(); element.ConsiderAsArrayOf("object", "Objet"); for (std::size_t i = 0; i < element.GetChildrenCount(); ++i) { const SerializerElement & objectElement = element.GetChild(i); gd::String type = objectElement.GetStringAttribute("type"); std::shared_ptr<gd::Object> newObject = project.CreateObject(type, objectElement.GetStringAttribute("name", "", "nom")); if ( newObject != std::shared_ptr<gd::Object>() ) { newObject->UnserializeFrom(project, objectElement); initialObjects.push_back( newObject ); } else std::cout << "WARNING: Unknown object type \"" << type << "\"" << std::endl; } }
void gd::EventsListSerialization::SaveActions(const gd::InstructionsList & list, SerializerElement & actions) { actions.ConsiderAsArrayOf("action"); for ( std::size_t k = 0;k < list.size();k++ ) { SerializerElement & action = actions.AddChild("action"); action.AddChild("type") .SetAttribute("value", list[k].GetType()) .SetAttribute("inverted", list[k].IsInverted()); //Parameters SerializerElement & parameters = action.AddChild("parameters"); parameters.ConsiderAsArrayOf("parameter"); for ( std::size_t l = 0;l < list[k].GetParameters().size();l++ ) parameters.AddChild("parameter").SetValue(list[k].GetParameter(l).GetPlainString()); //Sub instructions SerializerElement & subActions = action.AddChild("subActions"); SaveActions(list[k].GetSubInstructions(), subActions); } }
void EventsListSerialization::UnserializeEventsFrom(gd::Project & project, EventsList & list, const SerializerElement & events) { events.ConsiderAsArrayOf("event", "Event"); for(unsigned int i = 0; i<events.GetChildrenCount(); ++i) { SerializerElement & eventElem = events.GetChild(i); std::string type = eventElem.GetChild("type", 0, "Type").GetValue().GetString(); gd::BaseEventSPtr event = project.CreateEvent(type); if ( event != std::shared_ptr<gd::BaseEvent>()) event->UnserializeFrom(project, eventElem); else { std::cout << "WARNING: Unknown event of type " << type << std::endl; event = std::shared_ptr<gd::BaseEvent>(new EmptyEvent); } event->SetDisabled(eventElem.GetBoolAttribute("disabled")); event->folded = eventElem.GetBoolAttribute("folded"); list.InsertEvent(event, list.GetEventsCount()); } }