7
#include "Precompiled.h"
8
#include "ImageExportSerializer.h"
9
#include "FactoryManager.h"
10
#include "DataManager.h"
11
#include "DataTypeManager.h"
12
#include "PropertyUtility.h"
17
FACTORY_ITEM_ATTRIBUTE(ImageExportSerializer)
19
ImageExportSerializer::ImageExportSerializer()
23
ImageExportSerializer::~ImageExportSerializer()
27
void ImageExportSerializer::serialization(pugi::xml_document& _doc)
29
pugi::xml_node root = _doc.append_child("MyGUI");
30
root.append_attribute("type").set_value("Resource");
31
root.append_attribute("version").set_value("1.1");
33
DataPtr data = DataManager::getInstance().getRoot();
34
for (Data::VectorData::const_iterator child = data->getChilds().begin(); child != data->getChilds().end(); child ++)
35
writeImage(root, (*child));
38
bool ImageExportSerializer::deserialization(pugi::xml_document& _doc)
40
if (_doc.select_single_node("MyGUI[@type=\"Resource\"]").node().empty())
43
pugi::xpath_node_set nodes = _doc.select_nodes("MyGUI/Resource[@type=\"ResourceImageSet\"]");
44
for (pugi::xpath_node_set::const_iterator node = nodes.begin(); node != nodes.end(); node ++)
45
parseImage((*node).node());
47
updateImageProperty(DataManager::getInstance().getRoot());
51
void ImageExportSerializer::parseImage(pugi::xml_node _node)
53
DataPtr data = Data::CreateInstance();
54
data->setType(DataTypeManager::getInstance().getType("Image"));
55
data->setPropertyValue("Name", _node.attribute("name").value());
57
DataManager::getInstance().getRoot()->addChild(data);
59
pugi::xpath_node_set nodes = _node.select_nodes("Group");
60
for (pugi::xpath_node_set::const_iterator node = nodes.begin(); node != nodes.end(); node ++)
61
parseGroup((*node).node(), data);
64
void ImageExportSerializer::parseGroup(pugi::xml_node _node, DataPtr _parent)
66
DataPtr data = Data::CreateInstance();
67
data->setType(DataTypeManager::getInstance().getType("Group"));
68
std::string value = _node.attribute("name").value();
71
data->setPropertyValue("Name", value);
72
data->setPropertyValue("Texture", _node.attribute("texture").value());
73
MyGUI::IntSize size = MyGUI::IntSize::parse(_node.attribute("size").value());
74
data->setPropertyValue("Size", MyGUI::IntCoord(0, 0, size.width, size.height).print());
76
_parent->addChild(data);
78
pugi::xpath_node_set nodes = _node.select_nodes("Index");
79
for (pugi::xpath_node_set::const_iterator node = nodes.begin(); node != nodes.end(); node ++)
80
parseIndex((*node).node(), data);
83
void ImageExportSerializer::parseIndex(pugi::xml_node _node, DataPtr _parent)
85
DataPtr data = Data::CreateInstance();
86
data->setType(DataTypeManager::getInstance().getType("Index"));
87
std::string value = _node.attribute("name").value();
90
data->setPropertyValue("Name", value);
91
data->setPropertyValue("Rate", _node.attribute("rate").value());
93
_parent->addChild(data);
95
pugi::xpath_node_set nodes = _node.select_nodes("Frame");
96
for (pugi::xpath_node_set::const_iterator node = nodes.begin(); node != nodes.end(); node ++)
97
parseFrame((*node).node(), data);
100
void ImageExportSerializer::parseFrame(pugi::xml_node _node, DataPtr _parent)
102
DataPtr data = Data::CreateInstance();
103
data->setType(DataTypeManager::getInstance().getType("Frame"));
104
data->setPropertyValue("Point", _node.attribute("point").value());
105
std::string value = _node.attribute("count").value();
108
data->setPropertyValue("Count", value);
110
_parent->addChild(data);
113
void ImageExportSerializer::writeImage(pugi::xml_node _parent, DataPtr _data)
115
pugi::xml_node node = _parent.append_child("Resource");
116
node.append_attribute("type").set_value("ResourceImageSet");
117
node.append_attribute("name").set_value(_data->getPropertyValue("Name").c_str());
119
for (Data::VectorData::const_iterator child = _data->getChilds().begin(); child != _data->getChilds().end(); child ++)
120
writeGroup(node, (*child));
123
void ImageExportSerializer::writeGroup(pugi::xml_node _parent, DataPtr _data)
125
pugi::xml_node node = _parent.append_child("Group");
126
node.append_attribute("name").set_value(_data->getPropertyValue("Name").c_str());
127
node.append_attribute("texture").set_value(_data->getPropertyValue("Texture").c_str());
128
node.append_attribute("size").set_value(MyGUI::IntCoord::parse(_data->getPropertyValue("Size")).size().print().c_str());
130
for (Data::VectorData::const_iterator child = _data->getChilds().begin(); child != _data->getChilds().end(); child ++)
131
writeIndex(node, (*child));
134
void ImageExportSerializer::writeIndex(pugi::xml_node _parent, DataPtr _data)
136
pugi::xml_node node = _parent.append_child("Index");
137
node.append_attribute("name").set_value(_data->getPropertyValue("Name").c_str());
139
std::string value = _data->getPropertyValue("Rate");
141
node.append_attribute("rate").set_value(value.c_str());
143
for (Data::VectorData::const_iterator child = _data->getChilds().begin(); child != _data->getChilds().end(); child ++)
144
writeFrame(node, (*child));
147
void ImageExportSerializer::writeFrame(pugi::xml_node _parent, DataPtr _data)
149
pugi::xml_node node = _parent.append_child("Frame");
150
node.append_attribute("point").set_value(_data->getPropertyValue("Point").c_str());
152
size_t count = MyGUI::utility::parseValue<size_t>(_data->getPropertyValue("Count"));
154
node.append_attribute("count").set_value(MyGUI::utility::toString(count).c_str());
157
void ImageExportSerializer::updateImageProperty(DataPtr _data)
159
const Data::VectorData& childs = _data->getChilds();
160
for (Data::VectorData::const_iterator child = childs.begin(); child != childs.end(); child++)
162
bool unique = PropertyUtility::isUniqueName((*child), "Name");
163
(*child)->setPropertyValue("UniqueName", unique);
164
updateGroupProperty(*child);
168
void ImageExportSerializer::updateGroupProperty(DataPtr _data)
170
const Data::VectorData& childs = _data->getChilds();
171
for (Data::VectorData::const_iterator child = childs.begin(); child != childs.end(); child++)
173
bool unique = PropertyUtility::isUniqueName((*child), "Name");
174
(*child)->setPropertyValue("UniqueName", unique);
175
updateIndexProperty(*child);
179
void ImageExportSerializer::updateIndexProperty(DataPtr _data)
181
const Data::VectorData& childs = _data->getChilds();
182
for (Data::VectorData::const_iterator child = childs.begin(); child != childs.end(); child++)
184
bool unique = PropertyUtility::isUniqueName((*child), "Name");
185
(*child)->setPropertyValue("UniqueName", unique);
188
MyGUI::IntPoint point = getFirstFramePoint(_data);
189
MyGUI::IntSize size = _data->getPropertyValue<MyGUI::IntCoord>("Size").size();
190
MyGUI::IntCoord coord(point, size);
191
_data->setPropertyValue("Size", coord);
194
MyGUI::IntPoint ImageExportSerializer::getFirstFramePoint(DataPtr _data)
196
if (_data->getType()->getName() != "Group")
197
return MyGUI::IntPoint();
199
if (_data->getChilds().size() != 0)
201
DataPtr child = _data->getChildByIndex(0);
202
if (child->getChilds().size() != 0)
204
return child->getChildByIndex(0)->getPropertyValue<MyGUI::IntPoint>("Point");
209
return MyGUI::IntPoint();