void SkinItem::deserialization(MyGUI::xml::Element* _node, MyGUI::Version _version) { mName = _node->findAttribute("name"); mStates.destroyAllChilds(); mSeparators.destroyAllChilds(); mRegions.destroyAllChilds(); MyGUI::xml::ElementEnumerator nodes = _node->getElementEnumerator(); while (nodes.next()) { MyGUI::xml::Element* node = nodes.current(); if (node->getName() == "PropertySet") { mPropertySet->deserialization(node, _version); } else if (node->getName() == "StateItem") { StateItem* item = mStates.createChild(); item->deserialization(node, _version); } else if (node->getName() == "SeparatorItem") { SeparatorItem* item = mSeparators.createChild(); item->deserialization(node, _version); } else if (node->getName() == "RegionItem") { RegionItem* item = mRegions.createChild(); item->deserialization(node, _version); } } }
void FontPanel::addCode(MyGUI::xml::Element* _node, MyGUI::Char _code, MyGUI::IFont* _font) { MyGUI::GlyphInfo* info = _font->getGlyphInfo(_code); MyGUI::xml::Element* node = _node->createChild("Code"); node->addAttribute("index", _code); node->addAttribute("coord", getCoord(info->uvRect, _font->getTextureFont()->getWidth(), _font->getTextureFont()->getHeight(), info->width, _font->getDefaultHeight())); }
void SettingsSector::serialization(MyGUI::xml::Element* _node, MyGUI::Version _version) { MyGUI::xml::Element* element = _node->createChild(mName); for (MapUString::const_iterator item = mProperties.begin(); item != mProperties.end(); ++item) { MyGUI::xml::Element* prop = element->createChild("Property"); prop->addAttribute("key", (*item).first); prop->addAttribute("value", (*item).second); } }
void EditorState::load() { SkinManager::getInstance().clear(); MyGUI::xml::Document doc; if (doc.open(mFileName)) { bool result = false; MyGUI::xml::Element* root = doc.getRoot(); if (root->getName() == "Root") { MyGUI::xml::ElementEnumerator nodes = root->getElementEnumerator(); while (nodes.next("SkinManager")) { SkinManager::getInstance().deserialization(nodes.current(), MyGUI::Version()); result = true; if (mFileName != mDefaultFileName) RecentFilesManager::getInstance().addRecentFile(mFileName); break; } } if (!result) { /*MyGUI::Message* message =*/ MessageBoxManager::getInstance().create( replaceTags("Error"), replaceTags("MessageIncorrectFileFormat"), MyGUI::MessageBoxStyle::IconError | MyGUI::MessageBoxStyle::Yes); mFileName = mDefaultFileName; addUserTag("CurrentFileName", mFileName); updateCaption(); } } else { /*MyGUI::Message* message =*/ MessageBoxManager::getInstance().create( replaceTags("Error"), doc.getLastError(), MyGUI::MessageBoxStyle::IconError | MyGUI::MessageBoxStyle::Yes); } ActionManager::getInstance().setChanges(false); }
void EditorState::save() { MyGUI::xml::Document doc; doc.createDeclaration(); MyGUI::xml::Element* root = doc.createRoot("Root"); MyGUI::xml::Element* skins = root->createChild("SkinManager"); SkinManager::getInstance().serialization(skins, MyGUI::Version()); doc.save(mFileName); if (mFileName != mDefaultFileName) RecentFilesManager::getInstance().addRecentFile(mFileName); ActionManager::getInstance().setChanges(false); }
void addCode(MyGUI::xml::Element* _node, MyGUI::Char _code, MyGUI::ResourceTrueTypeFont* _font, bool _isSubstitute) { MyGUI::xml::Element* codeNode = _node->createChild("Code"); if (!_isSubstitute) { switch (_code) { case MyGUI::FontCodeType::Selected: codeNode->addAttribute("index", "selected"); break; case MyGUI::FontCodeType::SelectedBack: codeNode->addAttribute("index", "selected_back"); break; case MyGUI::FontCodeType::Cursor: codeNode->addAttribute("index", "cursor"); break; default: codeNode->addAttribute("index", _code); break; } } else { codeNode->addAttribute("index", "substitute"); } MyGUI::GlyphInfo* info = _font->getGlyphInfo(_code); MyGUI::ITexture* texture = _font->getTextureFont(); MyGUI::FloatCoord coord(info->uvRect.left * (float)texture->getWidth(), info->uvRect.top * (float)texture->getHeight(), info->width, info->height); if (!coord.empty()) codeNode->addAttribute("coord", coord); if (info->bearingX != 0.0f || info->bearingY != 0.0f) codeNode->addAttribute("bearing", MyGUI::FloatPoint(info->bearingX, info->bearingY)); if (info->advance != info->width) codeNode->addAttribute("advance", info->advance); }
void ExportManager::exportSkin(const MyGUI::UString& _fileName) { MyGUI::xml::Document doc; MyGUI::xml::Element* root = doc.createRoot("Root"); SkinManager::getInstance().serialization(root, MyGUI::Version()); MyGUI::xml::Document docOut; docOut.createDeclaration(); MyGUI::xml::Element* rootOut = docOut.createRoot("MyGUI"); rootOut->addAttribute("type", "Resource"); rootOut->addAttribute("version", "1.1"); MyGUI::xml::ElementEnumerator skins = root->getElementEnumerator(); while (skins.next()) convertSkin(skins.current(), rootOut->createChild("Resource")); docOut.save(_fileName); }
void ExportManager::convertSkin(MyGUI::xml::Element* _from, MyGUI::xml::Element* _to) { _to->addAttribute("type", "ResourceSkin"); _to->addAttribute("name", _from->findAttribute("name")); MyGUI::xml::ElementEnumerator nodes = _from->getElementEnumerator(); while (nodes.next()) { MyGUI::UString coordValue; MyGUI::UString textureValue; MyGUI::xml::Element* node = nodes.current(); if (node->getName() == "PropertySet") { MyGUI::xml::ElementEnumerator propertyNodes = node->getElementEnumerator(); while (propertyNodes.next("Property")) { MyGUI::xml::Element* propertyNode = propertyNodes.current(); std::string name; if (propertyNode->findAttribute("name", name)) { if (name == "Coord") { MyGUI::IntCoord coord = MyGUI::IntCoord::parse(propertyNode->getContent()); coordValue = coord.size().print(); } else if (name == "Texture") { textureValue = propertyNode->getContent(); } } } _to->addAttribute("size", coordValue); _to->addAttribute("texture", textureValue); break; } else if (node->getName() == "RegionItem") { bool regionVisible = true; MyGUI::xml::ElementEnumerator regionNodes = node->getElementEnumerator(); while (regionNodes.next("PropertySet")) { MyGUI::xml::ElementEnumerator propertyNodes = regionNodes->getElementEnumerator(); while (propertyNodes.next("Property")) { MyGUI::xml::Element* propertyNode = propertyNodes.current(); std::string name; if (propertyNode->findAttribute("name", name)) { if (name == "Visible") { if (propertyNode->getContent() != "True") regionVisible = false; } else if (name == "Enabled") { if (propertyNode->getContent() != "True") regionVisible = false; } } } break; } if (!regionVisible) continue; MyGUI::xml::Element* region = _to->createChild("BasisSkin"); MyGUI::IntCoord regionCoord; MyGUI::UString regionTypeValue; MyGUI::UString regionOffsetValue; MyGUI::UString alignValue; regionNodes = node->getElementEnumerator(); while (regionNodes.next("PropertySet")) { MyGUI::xml::ElementEnumerator regionPropertyNode = regionNodes->getElementEnumerator(); while (regionPropertyNode.next("Property")) { std::string name; if (regionPropertyNode->findAttribute("name", name)) { if (name == "RegionType") { regionTypeValue = regionPropertyNode->getContent(); } else if (name == "Position") { regionCoord = MyGUI::IntCoord::parse(regionPropertyNode->getContent()); regionOffsetValue = regionCoord.print(); } else if (name == "Align") { alignValue = regionPropertyNode->getContent(); } } } bool tileHor = true; bool tileVer = true; if (regionTypeValue == "TileRect Hor") { regionTypeValue = "TileRect"; tileVer = false; } else if (regionTypeValue == "TileRect Ver") { regionTypeValue = "TileRect"; tileHor = false; } region->addAttribute("type", regionTypeValue); region->addAttribute("offset", regionOffsetValue); region->addAttribute("align", alignValue); MyGUI::xml::ElementEnumerator stateNodes = _from->getElementEnumerator(); while (stateNodes.next("StateItem")) { bool stateVisible = true; MyGUI::xml::ElementEnumerator propertySetNodes = stateNodes->getElementEnumerator(); while (propertySetNodes.next("PropertySet")) { MyGUI::xml::ElementEnumerator statePropertyNode = propertySetNodes->getElementEnumerator(); while (statePropertyNode.next("Property")) { std::string name; if (statePropertyNode->findAttribute("name", name)) { if (name == "Visible") { if (statePropertyNode->getContent() != "True") stateVisible = false; } } } break; } if (!stateVisible) continue; MyGUI::xml::Element* state = region->createChild("State"); MyGUI::UString stateOffsetValue; MyGUI::UString textColourValue; MyGUI::UString textShiftValue; propertySetNodes = stateNodes->getElementEnumerator(); while (propertySetNodes.next("PropertySet")) { MyGUI::xml::ElementEnumerator propertyNodes = propertySetNodes->getElementEnumerator(); while (propertyNodes.next("Property")) { MyGUI::xml::Element* propertyNode = propertyNodes.current(); std::string name; if (propertyNode->findAttribute("name", name)) { if (name == "Position") { MyGUI::IntCoord coord = regionCoord + MyGUI::IntPoint::parse(propertyNode->getContent()); stateOffsetValue = coord.print(); } else if (name == "TextColour") { textColourValue = propertyNode->getContent(); } else if (name == "TextShift") { textShiftValue = propertyNode->getContent(); } } } break; } MyGUI::UString stateNameValue = stateNodes->findAttribute("name"); state->addAttribute("name", convertStateName(stateNameValue)); if (regionTypeValue == "SimpleText" || regionTypeValue == "EditText") { state->addAttribute("colour", textColourValue); state->addAttribute("shift", textShiftValue); } else { state->addAttribute("offset", stateOffsetValue); if (stateNameValue == "Normal") { if (regionTypeValue == "TileRect") { MyGUI::xml::Element* prop = state->createChild("Property"); prop->addAttribute("key", "TileSize"); prop->addAttribute("value", regionCoord.size().print()); prop = state->createChild("Property"); prop->addAttribute("key", "TileH"); prop->addAttribute("value", MyGUI::utility::toString(tileHor)); prop = state->createChild("Property"); prop->addAttribute("key", "TileV"); prop->addAttribute("value", MyGUI::utility::toString(tileVer)); } } } } break; } } } }