void BaseManager::setupResources() { MyGUI::xml::Document doc; if (!doc.open(std::string("resources.xml"))) doc.getLastError(); MyGUI::xml::ElementPtr root = doc.getRoot(); if (root == nullptr || root->getName() != "Paths") return; MyGUI::xml::ElementEnumerator node = root->getElementEnumerator(); while (node.next()) { if (node->getName() == "Path") { if (node->findAttribute("root") != "") { bool root = MyGUI::utility::parseBool(node->findAttribute("root")); if (root) mRootMedia = node->getContent(); } addResourceLocation(node->getContent(), false); } } addResourceLocation(getRootMedia() + "/Common/Base"); }
void MYGUIManager::setupResources() { MyGUI::xml::Document doc; if ( !_platform || !doc.open(_resourcePathFile) ) doc.getLastError(); MyGUI::xml::ElementPtr root = doc.getRoot(); if ( root==nullptr || root->getName()!="Paths" ) return; MyGUI::xml::ElementEnumerator node = root->getElementEnumerator(); while ( node.next() ) { if ( node->getName()=="Path" ) { bool root = false, recursive = false; if (!node->findAttribute("root").empty()) { root = MyGUI::utility::parseBool( node->findAttribute("root") ); if ( root ) _rootMedia = node->getContent(); } if (!node->findAttribute("recursive").empty()) { recursive = MyGUI::utility::parseBool(node->findAttribute("recursive")); } _platform->getDataManagerPtr()->addResourceLocation(node->getContent(), recursive); } } }
bool EditorState::isMetaSolution(const MyGUI::UString& _fileName) { MyGUI::xml::Document doc; if (!doc.open(_fileName)) { return false; } MyGUI::xml::ElementPtr root = doc.getRoot(); if (!root || (root->getName() != "MyGUI")) { return false; } std::string type; if (root->findAttribute("type", type)) { if (type == "MetaSolution") { return true; } } return false; }
//-------------------------------------------------------------------------------- void System::Setup() { MyGUI::xml::Document doc; if (!doc.open(std::string("resources.xml"))) doc.getLastError(); MyGUI::xml::ElementPtr root = doc.getRoot(); if (root == nullptr || root->getName() != "Paths") return; MyGUI::xml::ElementEnumerator node = root->getElementEnumerator(); while (node.next()) { if (node->getName() == "Path") { bool root = false; if (node->findAttribute("root") != "") { root = MyGUI::utility::parseBool(node->findAttribute("root")); if (root) mRootMedia = node->getContent(); } mPlatform->getDataManagerPtr()->addResourceLocation(node->getContent(), false); } } }
void TestWindow::generateSkin() { if (MyGUI::ResourceManager::getInstance().isExist(mSkinName)) MyGUI::ResourceManager::getInstance().removeByName(mSkinName); pugi::xml_document doc; pugi::xml_node decl = doc.prepend_child(pugi::node_declaration); decl.append_attribute("version") = "1.0"; decl.append_attribute("encoding") = "UTF-8"; pugi::xml_node root = doc.append_child("MyGUI"); root.append_attribute("type").set_value("Resource"); root.append_attribute("version").set_value("1.1"); SkinExportSerializer* serializer = new SkinExportSerializer(); serializer->writeSkin(root, mSkinItem); delete serializer; root.select_single_node("Resource/@name").attribute().set_value(mSkinName.c_str()); bool result = doc.save_file(mTestSkinFileName.c_str(), "\t", (pugi::format_indent | pugi::format_write_bom | pugi::format_win_new_line) & (~pugi::format_space_before_slash)); MyGUI::xml::Document docLoad; docLoad.open(mTestSkinFileName); MyGUI::xml::Element* resourceNode = docLoad.getRoot(); MyGUI::ResourceManager::getInstance().loadFromXmlNode(resourceNode, "", MyGUI::Version(1, 1, 0)); }
void FontPanel::saveFontTTFXml(const std::string& _fontName, const std::string& _fileName) { MyGUI::xml::Document document; document.createDeclaration(); MyGUI::xml::ElementPtr root = document.createRoot("MyGUI"); generateFontTTFXml(root, _fontName); if (document.save(_fileName)) MyGUI::Message::createMessageBox("Message", "success", _fileName, MyGUI::MessageBoxStyle::Ok | MyGUI::MessageBoxStyle::IconInfo); else MyGUI::Message::createMessageBox("Message", "error", document.getLastError(), MyGUI::MessageBoxStyle::Ok | MyGUI::MessageBoxStyle::IconError); }
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 FontPanel::notifyMouseButtonClick(MyGUI::Widget* _widget) { // шрифтов нету if (mComboFont->getOnlyText().empty()) return; if (mEditSaveFileName->getOnlyText().empty() && _widget == mButtonSave) return; if (_widget == mButtonSave) { std::string textureName = mEditSaveFileName->getOnlyText() + ".png"; saveTexture(mFontName, textureName); std::string fontName = MyGUI::utility::toString(mEditSaveFileName->getOnlyText(), ".ttf.", mFontHeight); std::string fileName = mEditSaveFileName->getOnlyText() + ".ttf.xml"; saveFontTTFXml(fontName, fileName); fontName = MyGUI::utility::toString(mEditSaveFileName->getOnlyText(), ".manual.", mFontHeight); fileName = mEditSaveFileName->getOnlyText() + ".manual.xml"; saveFontManualXml(fontName, textureName, fileName); } else if (_widget == mButtonGenerate) { MyGUI::ResourceManager& manager = MyGUI::ResourceManager::getInstance(); if (manager.isExist(mFontName)) { manager.removeByName(mFontName); } MyGUI::xml::Document document; document.createDeclaration(); MyGUI::xml::ElementPtr root = document.createRoot("MyGUI"); generateFontTTFXml(root, mFontName); MyGUI::ResourceManager::getInstance().loadFromXmlNode(root, "", MyGUI::Version()); MyGUI::IResource* resource = manager.getByName(mFontName, false); MYGUI_ASSERT(resource != nullptr, "Could not find font '" << mFontName << "'"); MyGUI::IFont* font = resource->castType<MyGUI::IFont>(); // вывод реального размера шрифта mFontHeight = font->getDefaultHeight(); mTextPix->setCaption(MyGUI::utility::toString("Height of a font is ", mFontHeight, " pixels")); mFontView->setFontName(mFontName); mTextureView->setFontName(mFontName); } }
MyGUI::UString EditorState::convertProjectName(const MyGUI::UString& _fileName) { size_t pos = mFileName.find_last_of("\\/"); MyGUI::UString shortName = pos == MyGUI::UString::npos ? mFileName : mFileName.substr(pos + 1); addUserTag("ResourceName", shortName); size_t index = _fileName.find("|"); if (index == MyGUI::UString::npos) return _fileName; MyGUI::UString fileName = _fileName.substr(0, index); MyGUI::UString itemIndexName = _fileName.substr(index + 1); size_t itemIndex = MyGUI::utility::parseValue<size_t>(itemIndexName); MyGUI::xml::Document doc; if (!doc.open(fileName)) return _fileName; MyGUI::xml::ElementPtr root = doc.getRoot(); if ((nullptr == root) || (root->getName() != "MyGUI")) return _fileName; if (root->findAttribute("type") == "Resource") { // берем детей и крутимся MyGUI::xml::ElementEnumerator element = root->getElementEnumerator(); while (element.next("Resource")) { if (element->findAttribute("type") == "ResourceLayout") { if (itemIndex == 0) { // поменять на теги std::string resourceName = element->findAttribute("name"); addUserTag("ResourceName", resourceName); return MyGUI::utility::toString(fileName, " [", resourceName, "]"); } else { itemIndex --; } } } } return _fileName; }
void FontPanel::notifyMouseButtonClick(MyGUI::Widget* _widget) { // шрифто?нету if (mComboFont->getOnlyText().empty()) return; if (mEditSaveFileName->getOnlyText().empty() && _widget == mButtonSave) return; MyGUI::xml::Document document; document.createDeclaration(); MyGUI::xml::ElementPtr root = document.createRoot("MyGUI"); generateFontTTFXml(root); if (_widget == mButtonSave) { if (!document.save(mEditSaveFileName->getOnlyText() + ".xml")) { /*MyGUI::Message* message =*/ MyGUI::Message::createMessageBox("Message", "error", document.getLastError(), MyGUI::MessageBoxStyle::Ok | MyGUI::MessageBoxStyle::IconError); } else { /*MyGUI::Message* message =*/ MyGUI::Message::createMessageBox("Message", "success", mEditSaveFileName->getOnlyText() + ".xml", MyGUI::MessageBoxStyle::Ok | MyGUI::MessageBoxStyle::IconInfo); } MyGUI::IFont* font = MyGUI::FontManager::getInstance().getByName(mFontName); MyGUI::ITexture* texture = font->getTextureFont(); texture->saveToFile(mEditSaveFileName->getOnlyText() + ".png"); } else if (_widget == mButtonGenerate) { MyGUI::ResourceManager& manager = MyGUI::ResourceManager::getInstance(); if (manager.isExist(mFontName)) { manager.removeByName(mFontName); } MyGUI::ResourceManager::getInstance().loadFromXmlNode(root, "", MyGUI::Version()); MyGUI::IResource* resource = manager.getByName(mFontName, false); MYGUI_ASSERT(resource != nullptr, "Could not find font '" << mFontName << "'"); MyGUI::IFont* font = resource->castType<MyGUI::IFont>(); // выво?реальног?размер?шрифта mFontHeight = font->getDefaultHeight(); mTextPix->setCaption(MyGUI::utility::toString("Height of a font is ", mFontHeight, " pixels")); mFontView->setFontName(mFontName); mTextureView->setFontName(mFontName); } }
void SettingsManager::saveSettings(const MyGUI::UString& _fileName) { std::string _instance = "Editor"; MyGUI::xml::Document doc; doc.createDeclaration(); MyGUI::xml::ElementPtr root = doc.createRoot("MyGUI"); root->addAttribute("type", "Settings"); saveSectors(root); if (!doc.save(_fileName)) { MYGUI_LOGGING(LogSection, Error, _instance << " : " << doc.getLastError()); return; } }
bool FontExportSerializer::exportData(const MyGUI::UString& _folderName, const MyGUI::UString& _fileName) { MyGUI::xml::Document document; document.createDeclaration(); MyGUI::xml::ElementPtr root = document.createRoot("MyGUI"); root->addAttribute("type", "Resource"); root->addAttribute("version", "1.1"); DataPtr data = DataManager::getInstance().getRoot(); for (Data::VectorData::const_iterator child = data->getChilds().begin(); child != data->getChilds().end(); child ++) { generateFont((*child)); generateFontManualXml(root, _folderName, (*child)); } return document.save(common::concatenatePath(_folderName, _fileName)); }
bool HotkeyManager::save( string xml ) { MyGUI::xml::Document doc; string path = Game::getSingleton().getResourcePath() + xml; MyGUI::xml::ElementPtr root = doc.createRoot("HKS"); doc.createDeclaration(); MyGUI::xml::ElementPtr node; for( HotkeyTable::iterator it = mHotkeys.begin();it!=mHotkeys.end();++it ) { node = root->createChild("hotkey"); node->addAttribute("name",it->mName); node->addAttribute("caption",it->mCaption); node->addAttribute("tip",it->mTip); node->addAttribute("key",it->mHotkey); } return doc.save( path ); }
void EditorState::saveSettings(const MyGUI::UString& _fileName) { std::string _instance = "Editor"; MyGUI::xml::Document doc; doc.createDeclaration(); MyGUI::xml::ElementPtr root = doc.createRoot("MyGUI"); root->addAttribute("type", "Settings"); mPropertiesPanelView->save(root); mSettingsWindow->save(root); mWidgetsWindow->save(root); mMetaSolutionWindow->save(root); // cleanup for duplicates std::reverse(recentFiles.begin(), recentFiles.end()); for (size_t i = 0; i < recentFiles.size(); ++i) recentFiles.erase(std::remove(recentFiles.begin() + i + 1, recentFiles.end(), recentFiles[i]), recentFiles.end()); // remove old files while (recentFiles.size() > MAX_RECENT_FILES) recentFiles.pop_back(); std::reverse(recentFiles.begin(), recentFiles.end()); for (std::vector<MyGUI::UString>::iterator iter = recentFiles.begin(); iter != recentFiles.end(); ++iter) { MyGUI::xml::ElementPtr nodeProp = root->createChild("RecentFile"); nodeProp->addAttribute("name", *iter); } for (std::vector<MyGUI::UString>::iterator iter = additionalPaths.begin(); iter != additionalPaths.end(); ++iter) { MyGUI::xml::ElementPtr nodeProp = root->createChild("AdditionalPath"); nodeProp->addAttribute("name", *iter); } if (!doc.save(_fileName)) { MYGUI_LOGGING(LogSection, Error, _instance << " : " << doc.getLastError()); return; } }
/*从xml加载热键 */ bool HotkeyManager::load( string xml ) { MyGUI::xml::Document doc; string path = Game::getSingleton().getResourcePath() + xml; if( !doc.open( path ) ) { MyGUI::IDataStream* pdata = MyGUI::DataManager::getInstance().getData(xml); if( pdata ) doc.open( pdata ); MyGUI::DataManager::getInstance().freeData(pdata); } MyGUI::xml::ElementPtr root = doc.getRoot(); if( root ) { _load( root,xml ); return true; } WARNING_LOG("HotkeyManager can't load "<<xml); return false; }
void SettingsManager::loadSettings(const MyGUI::UString& _fileName, bool _internal) { std::string _instance = "Editor"; MyGUI::xml::Document doc; if (_internal) { MyGUI::DataStreamHolder data = MyGUI::DataManager::getInstance().getData(_fileName); if (data.getData() != nullptr) { if (!doc.open(data.getData())) { MYGUI_LOGGING(LogSection, Error, _instance << " : " << doc.getLastError()); return; } } } else { if (!doc.open(_fileName)) { MYGUI_LOGGING(LogSection, Error, _instance << " : " << doc.getLastError()); return; } } MyGUI::xml::ElementPtr root = doc.getRoot(); if (!root || (root->getName() != "MyGUI")) { MYGUI_LOGGING(LogSection, Error, _instance << " : '" << _fileName << "', tag 'MyGUI' not found"); return; } std::string type; if (root->findAttribute("type", type)) { if (type == "Settings") { // берем детей и крутимся MyGUI::xml::ElementEnumerator field = root->getElementEnumerator(); while (field.next()) loadSector(field.current()); } } }
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 DemoKeeper::loadFromFile(const std::string& _filename) { MyGUI::xml::Document doc; if (!doc.open(_filename)) return; MyGUI::xml::ElementPtr root = doc.getRoot(); if (root == nullptr || root->getName() != "AnimationGraph") return; MyGUI::xml::ElementEnumerator node = root->getElementEnumerator(); while (node.next()) { if (node->getName() == "Node") { BaseAnimationNode* anim_node = createNode(node->findAttribute("type"), node->findAttribute("name")); anim_node->deserialization(node.current()); } else if (node->getName() == "Connections") { MyGUI::xml::ElementEnumerator conn = node->getElementEnumerator(); BaseAnimationNode* anim_node = getNodeByName(node.current()->findAttribute("node")); if (anim_node) { while (conn.next("Connection")) { BaseAnimationNode* anim_node2 = getNodeByName(conn.current()->findAttribute("node")); if (anim_node2) { //соединить точки в ноде const std::string& from_point = conn.current()->findAttribute("from"); const std::string& to_point = conn.current()->findAttribute("to"); wraps::BaseGraphConnection* from_conn = anim_node->getConnectionByName(from_point, "EventOut"); if (!from_conn) from_conn = anim_node->getConnectionByName(from_point, "PositionOut"); if (!from_conn) from_conn = anim_node->getConnectionByName(from_point, "WeightOut"); wraps::BaseGraphConnection* to_conn = anim_node2->getConnectionByName(to_point, "EventIn"); if (!to_conn) to_conn = anim_node2->getConnectionByName(to_point, "PositionIn"); if (!to_conn) to_conn = anim_node2->getConnectionByName(to_point, "WeightIn"); if (from_conn && to_conn) { from_conn->addConnectionPoint(to_conn); connectPoints(anim_node, anim_node2, from_point, to_point); } } } } } else if (node->getName() == "EditorData") { MyGUI::xml::ElementEnumerator item_data = node->getElementEnumerator(); while (item_data.next("Node")) { BaseAnimationNode* anim_node = getNodeByName(item_data.current()->findAttribute("name")); if (anim_node) { anim_node->setCoord(MyGUI::IntCoord::parse(item_data.current()->findAttribute("coord"))); } } } } }
void DemoKeeper::saveToFile(const std::string& _filename) { MyGUI::xml::Document doc; // есть такой файл if (!doc.open(_filename)) { doc.clear(); } doc.createDeclaration(); MyGUI::xml::ElementPtr root = doc.createRoot("AnimationGraph"); // сохраняем сами ноды wraps::BaseGraphView::EnumeratorNode node = mGraphView->getNodeEnumerator(); while (node.next()) { BaseAnimationNode* anim_node = dynamic_cast<BaseAnimationNode*>(node.current()); if (anim_node) { MyGUI::xml::ElementPtr node_type = root->createChild("Node"); node_type->addAttribute("type", anim_node->getType()); node_type->addAttribute("name", anim_node->getName()); anim_node->serialization(node_type); } } // сохраняем соединения node = mGraphView->getNodeEnumerator(); while (node.next()) { BaseAnimationNode* anim_node = dynamic_cast<BaseAnimationNode*>(node.current()); if (anim_node && anim_node->isAnyConnection()) { MyGUI::xml::ElementPtr connection = root->createChild("Connections"); connection->addAttribute("node", anim_node->getName()); wraps::EnumeratorConnection node_conn = anim_node->getConnectionEnumerator(); while (node_conn.next()) { wraps::EnumeratorConnection conn = node_conn->getConnectionEnumerator(); while (conn.next()) { BaseAnimationNode* anim_node2 = dynamic_cast<BaseAnimationNode*>(conn->getOwnerNode()); if (anim_node2) { MyGUI::xml::ElementPtr item = connection->createChild("Connection"); item->addAttribute("node", anim_node2->getName()); item->addAttribute("from", node_conn->getName()); item->addAttribute("to", conn->getName()); } } } } } // сохраняем данные для редактора MyGUI::xml::ElementPtr data = root->createChild("EditorData"); node = mGraphView->getNodeEnumerator(); while (node.next()) { BaseAnimationNode* anim_node = dynamic_cast<BaseAnimationNode*>(node.current()); if (anim_node) { MyGUI::xml::ElementPtr item_data = data->createChild("Node"); item_data->addAttribute("name", anim_node->getName()); item_data->addAttribute("coord", anim_node->getCoord().print()); } } doc.save(_filename); }
bool BaseManager::loadBase( const string& filename, LuaVector& doScript, LuaVector& locationScript, LuaVector& loadScript ) { MyGUI::xml::Document doc; if( !doc.open(mResourcePath+filename) ) { if( !doc.open(filename) ) { MyGUI::IDataStream* pdata = MyGUI::DataManager::getInstance().getData(filename); if( pdata ) { if( !doc.open(pdata) ) { MyGUI::DataManager::getInstance().freeData(pdata); ERROR_LOG(doc.getLastError()); return false; } MyGUI::DataManager::getInstance().freeData(pdata); } else { ERROR_LOG(doc.getLastError()); return false; } } } MyGUI::xml::ElementPtr root = doc.getRoot(); if (root == nullptr || root->getName() != "base") return false; // LuaVector groups; MyGUI::xml::ElementEnumerator node = root->getElementEnumerator(); while( node.next() ) { string name = node->getName(); if( name == "script" ) { string lua; if( node->findAttribute("do",lua) ) doScript.push_back( lua ); //等到LuaManager被创建后在一起执行 if( node->findAttribute("location",lua) ) { if( find(locationScript.begin(),locationScript.end(),lua)==locationScript.end() ) locationScript.push_back( lua ); } if( node->findAttribute("load",lua) ) { loadScript.push_back(lua); } } else if( name == "group" ) { string name; if( node->findAttribute("name",name) ) { // if( find(groups.begin(),groups.end(),name)==groups.end() ) // groups.push_back(name); MyGUI::xml::ElementEnumerator child = node->getElementEnumerator(); while( child.next() ) { string type,location,recursive; if( child->getName() == "repository" ) { if( child->findAttribute("type",type) && child->findAttribute("recursive",recursive) && child->findAttribute("location",location) ) { //加入组 addGroupLocation(name,type,location,recursive=="true"?true:false); } } } } } } return true; }
void FontLoader::loadFont(const std::string &fileName, bool exportToFile) { Ogre::DataStreamPtr file = Ogre::ResourceGroupManager::getSingleton().openResource(fileName); float fontSize; int one; file->read(&fontSize, sizeof(fontSize)); file->read(&one, sizeof(int)); assert(one == 1); file->read(&one, sizeof(int)); assert(one == 1); char name_[284]; file->read(name_, sizeof(name_)); std::string name(name_); GlyphInfo data[256]; file->read(data, sizeof(data)); file->close(); // Create the font texture std::string bitmapFilename = "Fonts/" + std::string(name) + ".tex"; Ogre::DataStreamPtr bitmapFile = Ogre::ResourceGroupManager::getSingleton().openResource(bitmapFilename); int width, height; bitmapFile->read(&width, sizeof(int)); bitmapFile->read(&height, sizeof(int)); std::vector<Ogre::uchar> textureData; textureData.resize(width*height*4); bitmapFile->read(&textureData[0], width*height*4); bitmapFile->close(); std::string resourceName; if (name.size() >= 5 && Misc::StringUtils::ciEqual(name.substr(0, 5), "magic")) resourceName = "Magic Cards"; else if (name.size() >= 7 && Misc::StringUtils::ciEqual(name.substr(0, 7), "century")) resourceName = "Century Gothic"; else if (name.size() >= 7 && Misc::StringUtils::ciEqual(name.substr(0, 7), "daedric")) resourceName = "Daedric"; else return; // no point in loading it, since there is no way of using additional fonts std::string textureName = name; Ogre::Image image; image.loadDynamicImage(&textureData[0], width, height, Ogre::PF_BYTE_RGBA); Ogre::TexturePtr texture = Ogre::TextureManager::getSingleton().createManual(textureName, Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, Ogre::TEX_TYPE_2D, width, height, 0, Ogre::PF_BYTE_RGBA); texture->loadImage(image); if (exportToFile) image.save(resourceName + ".png"); // Register the font with MyGUI MyGUI::ResourceManualFont* font = static_cast<MyGUI::ResourceManualFont*>( MyGUI::FactoryManager::getInstance().createObject("Resource", "ResourceManualFont")); // We need to emulate loading from XML because the data members are private as of mygui 3.2.0 MyGUI::xml::Document xmlDocument; MyGUI::xml::ElementPtr root = xmlDocument.createRoot("ResourceManualFont"); root->addAttribute("name", resourceName); MyGUI::xml::ElementPtr defaultHeight = root->createChild("Property"); defaultHeight->addAttribute("key", "DefaultHeight"); defaultHeight->addAttribute("value", fontSize); MyGUI::xml::ElementPtr source = root->createChild("Property"); source->addAttribute("key", "Source"); source->addAttribute("value", std::string(textureName)); MyGUI::xml::ElementPtr codes = root->createChild("Codes"); for(int i = 0; i < 256; i++) { float x1 = data[i].top_left.x*width; float y1 = data[i].top_left.y*height; float w = data[i].top_right.x*width - x1; float h = data[i].bottom_left.y*height - y1; ToUTF8::Utf8Encoder encoder(mEncoding); unsigned long unicodeVal = utf8ToUnicode(getUtf8(i, encoder, mEncoding)); MyGUI::xml::ElementPtr code = codes->createChild("Code"); code->addAttribute("index", unicodeVal); code->addAttribute("coord", MyGUI::utility::toString(x1) + " " + MyGUI::utility::toString(y1) + " " + MyGUI::utility::toString(w) + " " + MyGUI::utility::toString(h)); code->addAttribute("advance", data[i].width); code->addAttribute("bearing", MyGUI::utility::toString(data[i].kerning) + " " + MyGUI::utility::toString((fontSize-data[i].ascent))); code->addAttribute("size", MyGUI::IntSize(data[i].width, data[i].height)); // More hacks! The french game uses several win1252 characters that are not included // in the cp437 encoding of the font. Fall back to similar available characters. if (mEncoding == ToUTF8::CP437) { std::multimap<int, int> additional; // <cp437, unicode> additional.insert(std::make_pair(39, 0x2019)); // apostrophe additional.insert(std::make_pair(45, 0x2013)); // dash additional.insert(std::make_pair(45, 0x2014)); // dash additional.insert(std::make_pair(34, 0x201D)); // right double quotation mark additional.insert(std::make_pair(34, 0x201C)); // left double quotation mark additional.insert(std::make_pair(44, 0x201A)); additional.insert(std::make_pair(44, 0x201E)); additional.insert(std::make_pair(43, 0x2020)); additional.insert(std::make_pair(94, 0x02C6)); additional.insert(std::make_pair(37, 0x2030)); additional.insert(std::make_pair(83, 0x0160)); additional.insert(std::make_pair(60, 0x2039)); additional.insert(std::make_pair(79, 0x0152)); additional.insert(std::make_pair(90, 0x017D)); additional.insert(std::make_pair(39, 0x2019)); additional.insert(std::make_pair(126, 0x02DC)); additional.insert(std::make_pair(84, 0x2122)); additional.insert(std::make_pair(83, 0x0161)); additional.insert(std::make_pair(62, 0x203A)); additional.insert(std::make_pair(111, 0x0153)); additional.insert(std::make_pair(122, 0x017E)); additional.insert(std::make_pair(89, 0x0178)); additional.insert(std::make_pair(156, 0x00A2)); additional.insert(std::make_pair(46, 0x2026)); for (std::multimap<int, int>::iterator it = additional.begin(); it != additional.end(); ++it) { if (it->first != i) continue; MyGUI::xml::ElementPtr code = codes->createChild("Code"); code->addAttribute("index", it->second); code->addAttribute("coord", MyGUI::utility::toString(x1) + " " + MyGUI::utility::toString(y1) + " " + MyGUI::utility::toString(w) + " " + MyGUI::utility::toString(h)); code->addAttribute("advance", data[i].width); code->addAttribute("bearing", MyGUI::utility::toString(data[i].kerning) + " " + MyGUI::utility::toString((fontSize-data[i].ascent))); code->addAttribute("size", MyGUI::IntSize(data[i].width, data[i].height)); } } // ASCII vertical bar, use this as text input cursor if (i == 124) { MyGUI::xml::ElementPtr cursorCode = codes->createChild("Code"); cursorCode->addAttribute("index", MyGUI::FontCodeType::Cursor); cursorCode->addAttribute("coord", MyGUI::utility::toString(x1) + " " + MyGUI::utility::toString(y1) + " " + MyGUI::utility::toString(w) + " " + MyGUI::utility::toString(h)); cursorCode->addAttribute("advance", data[i].width); cursorCode->addAttribute("bearing", MyGUI::utility::toString(data[i].kerning) + " " + MyGUI::utility::toString((fontSize-data[i].ascent))); cursorCode->addAttribute("size", MyGUI::IntSize(data[i].width, data[i].height)); } // Question mark, use for NotDefined marker (used for glyphs not existing in the font) if (i == 63) { MyGUI::xml::ElementPtr cursorCode = codes->createChild("Code"); cursorCode->addAttribute("index", MyGUI::FontCodeType::NotDefined); cursorCode->addAttribute("coord", MyGUI::utility::toString(x1) + " " + MyGUI::utility::toString(y1) + " " + MyGUI::utility::toString(w) + " " + MyGUI::utility::toString(h)); cursorCode->addAttribute("advance", data[i].width); cursorCode->addAttribute("bearing", MyGUI::utility::toString(data[i].kerning) + " " + MyGUI::utility::toString((fontSize-data[i].ascent))); cursorCode->addAttribute("size", MyGUI::IntSize(data[i].width, data[i].height)); } } // These are required as well, but the fonts don't provide them for (int i=0; i<2; ++i) { MyGUI::FontCodeType::Enum type; if(i == 0) type = MyGUI::FontCodeType::Selected; else if (i == 1) type = MyGUI::FontCodeType::SelectedBack; MyGUI::xml::ElementPtr cursorCode = codes->createChild("Code"); cursorCode->addAttribute("index", type); cursorCode->addAttribute("coord", "0 0 0 0"); cursorCode->addAttribute("advance", "0"); cursorCode->addAttribute("bearing", "0 0"); cursorCode->addAttribute("size", "0 0"); } if (exportToFile) { xmlDocument.createDeclaration(); xmlDocument.save(resourceName + ".xml"); } font->deserialization(root, MyGUI::Version(3,2,0)); MyGUI::ResourceManager::getInstance().removeByName(font->getResourceName()); MyGUI::ResourceManager::getInstance().addResource(font); }
//=================================================================================== void EditorState::loadSettings(const MyGUI::UString& _fileName, bool _internal) { std::string _instance = "Editor"; MyGUI::xml::Document doc; if (_internal) { MyGUI::IDataStream* data = MyGUI::DataManager::getInstance().getData(_fileName); if (data) { PtrHolder<MyGUI::IDataStream> holder = PtrHolder<MyGUI::IDataStream>(data); if (!doc.open(data)) { MYGUI_LOGGING(LogSection, Error, _instance << " : " << doc.getLastError()); return; } } } else { if (!doc.open(_fileName)) { MYGUI_LOGGING(LogSection, Error, _instance << " : " << doc.getLastError()); return; } } MyGUI::xml::ElementPtr root = doc.getRoot(); if (!root || (root->getName() != "MyGUI")) { MYGUI_LOGGING(LogSection, Error, _instance << " : '" << _fileName << "', tag 'MyGUI' not found"); return; } std::string type; if (root->findAttribute("type", type)) { if (type == "Settings") { // берем детей и крутимс¤ MyGUI::xml::ElementEnumerator field = root->getElementEnumerator(); while (field.next()) { if (field->getName() == "PropertiesPanelView") mPropertiesPanelView->load(field); else if (field->getName() == "SettingsWindow") mSettingsWindow->load(field); else if (field->getName() == "WidgetsWindow") mWidgetsWindow->load(field); else if (field->getName() == "MetaSolutionWindow") { if (isNeedSolutionLoad(field)) { clearWidgetWindow(); mMetaSolutionWindow->load(field); } } else if (field->getName() == "RecentFile") { std::string name; if (!field->findAttribute("name", name)) continue; recentFiles.push_back(name); } else if (field->getName() == "AdditionalPath") { std::string name; if (!field->findAttribute("name", name)) continue; additionalPaths.push_back(name); } } } } }