void ImageExportSerializer::parseFrame(pugi::xml_node _node, DataPtr _parent) { DataPtr data = Data::CreateInstance(); data->setType(DataTypeManager::getInstance().getType("Frame")); data->setPropertyValue("Point", _node.attribute("point").value()); std::string value = _node.attribute("count").value(); if (value.empty()) value = "1"; data->setPropertyValue("Count", value); _parent->addChild(data); }
void ImageExportSerializer::parseIndex(pugi::xml_node _node, DataPtr _parent) { DataPtr data = Data::CreateInstance(); data->setType(DataTypeManager::getInstance().getType("Index")); std::string value = _node.attribute("name").value(); if (value.empty()) value = "unnamed"; data->setPropertyValue("Name", value); data->setPropertyValue("Rate", _node.attribute("rate").value()); _parent->addChild(data); pugi::xpath_node_set nodes = _node.select_nodes("Frame"); for (pugi::xpath_node_set::const_iterator node = nodes.begin(); node != nodes.end(); node ++) parseFrame((*node).node(), data); }
void ImageExportSerializer::parseGroup(pugi::xml_node _node, DataPtr _parent) { DataPtr data = Data::CreateInstance(); data->setType(DataTypeManager::getInstance().getType("Group")); std::string value = _node.attribute("name").value(); if (value.empty()) value = "unnamed"; data->setPropertyValue("Name", value); data->setPropertyValue("Texture", _node.attribute("texture").value()); MyGUI::IntSize size = MyGUI::IntSize::parse(_node.attribute("size").value()); data->setPropertyValue("Size", MyGUI::IntCoord(0, 0, size.width, size.height).print()); _parent->addChild(data); pugi::xpath_node_set nodes = _node.select_nodes("Index"); for (pugi::xpath_node_set::const_iterator node = nodes.begin(); node != nodes.end(); node ++) parseIndex((*node).node(), data); }
void DataUtility::cloneData(DataPtr _target, DataPtr _prototype) { MYGUI_ASSERT(_target != _prototype, "Error clone self"); MYGUI_ASSERT(_target->getType() == _prototype->getType(), "Error clone different types"); MYGUI_ASSERT(_target->getChilds().size() == 0, "Target not empty"); copyProperty(_target, _prototype); for (Data::VectorData::const_iterator child = _prototype->getChilds().begin(); child != _prototype->getChilds().end(); child ++) { DataPtr data = Data::CreateInstance(); data->setType((*child)->getType()); _target->addChild(data); cloneData(data, *child); } }
void SkinExportSerializer::fillStateData(DataPtr _data, pugi::xml_node _node) { typedef std::map<std::string, MyGUI::IntPoint> MapPoint; MapPoint values; pugi::xpath_node_set states = _node.select_nodes("BasisSkin/State"); for (pugi::xpath_node_set::const_iterator state = states.begin(); state != states.end(); state ++) { MyGUI::IntCoord coord((std::numeric_limits<int>::max)(), (std::numeric_limits<int>::max)(), 0, 0); pugi::xml_attribute attribute = (*state).node().attribute("offset"); if (!attribute.empty()) coord = MyGUI::IntCoord::parse(attribute.value()); std::string name = (*state).node().attribute("name").value(); MapPoint::iterator valuesIterator = values.find(name); if (valuesIterator != values.end()) { (*valuesIterator).second = MyGUI::IntPoint( (std::min)((*valuesIterator).second.left, coord.left), (std::min)((*valuesIterator).second.top, coord.top)); } else { values[name] = coord.point(); } // create, if there is no data name = convertExportToEditorStateName(name); DataPtr childData = getChildData(_data, "State", name); if (childData == nullptr) { childData = Data::CreateInstance(); childData->setType(DataTypeManager::getInstance().getType("State")); childData->setPropertyValue("Name", name); _data->addChild(childData); } } for (Data::VectorData::const_iterator child = _data->getChilds().begin(); child != _data->getChilds().end(); child ++) { if ((*child)->getType()->getName() != "State") continue; DataPtr childData = (*child); MapPoint::iterator result = values.find(convertEditorToExportStateName(childData->getPropertyValue("Name"))); if (result != values.end()) { childData->setPropertyValue("Visible", "True"); if ((*result).second.left != (std::numeric_limits<int>::max)() && (*result).second.top != (std::numeric_limits<int>::max)()) childData->setPropertyValue("Point", (*result).second); } } states = _node.select_nodes("BasisSkin/State[@colour]"); for (pugi::xpath_node_set::const_iterator state = states.begin(); state != states.end(); state ++) { std::string name = (*state).node().attribute("name").value(); int textShift = MyGUI::utility::parseValue<int>((*state).node().attribute("shift").value()); MyGUI::Colour textColour = MyGUI::utility::parseValue<MyGUI::Colour>((*state).node().attribute("colour").value()); for (Data::VectorData::const_iterator child = _data->getChilds().begin(); child != _data->getChilds().end(); child ++) { if ((*child)->getType()->getName() != "State") continue; DataPtr childData = (*child); if (convertEditorToExportStateName(childData->getPropertyValue("Name")) == name) { childData->setPropertyValue("TextShift", textShift); childData->setPropertyValue("TextColour", MyGUI::utility::toString(textColour.red, " ", textColour.green, " ", textColour.blue)); } } } }