bool EditorWidgets::save(std::string _fileName) { std::string _instance = "Editor"; MyGUI::xml::xmlDocument doc; std::string file(MyGUI::helper::getResourcePath(_fileName, Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME)); if (file.empty()) { file = _fileName; } doc.createInfo(); MyGUI::xml::xmlNodePtr root = doc.createRoot("MyGUI"); root->addAttributes("type", "Layout"); for (std::vector<WidgetContainer*>::iterator iter = widgets.begin(); iter != widgets.end(); ++iter) { // в корень только сирот if (null == (*iter)->widget->getParent()) serialiseWidget(*iter, root); } if (false == doc.save(file)) { LOGGING(LogSection, Error, _instance << " : " << doc.getLastError()); return false; } return true; }
bool EditorWidgets::load(std::string _fileName) { std::string _instance = "Editor"; MyGUI::xml::xmlDocument doc; std::string file(MyGUI::helper::getResourcePath(_fileName, Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME)); if (file.empty()) { if (false == doc.open(_fileName)) { LOGGING(LogSection, Error, _instance << " : '" << _fileName << "' not found"); return false; } } else if (false == doc.open(file)) { LOGGING(LogSection, Error, _instance << " : " << doc.getLastError()); return false; } MyGUI::xml::xmlNodePtr root = doc.getRoot(); if ( (null == root) || (root->getName() != "MyGUI") ) { LOGGING(LogSection, Error, _instance << " : '" << _fileName << "', tag 'MyGUI' not found"); return false; } std::string type; if (root->findAttribute("type", type)) { if (type == "Layout") { // берем детей и крутимся MyGUI::xml::xmlNodeIterator widget = root->getNodeIterator(); while (widget.nextNode("Widget")) parseWidget(widget, 0); } } return true; }
void EditorWidgets::parseWidget(MyGUI::xml::xmlNodeIterator & _widget, MyGUI::WidgetPtr _parent) { WidgetContainer * container = new WidgetContainer(); // парсим атрибуты виджета MyGUI::IntCoord coord; MyGUI::Align align = MyGUI::ALIGN_DEFAULT; _widget->findAttribute("name", container->name); _widget->findAttribute("type", container->type); _widget->findAttribute("skin", container->skin); _widget->findAttribute("layer", container->layer); if (_widget->findAttribute("align", container->align)) align = MyGUI::SkinManager::getInstance().parseAlign(container->align); if (_widget->findAttribute("position", container->position)) coord = MyGUI::IntCoord::parse(container->position); if (_widget->findAttribute("position_real", container->position_real)) coord = MyGUI::Gui::getInstance().convertRelativeToInt(MyGUI::FloatCoord::parse(container->position_real), _parent); // в гуе на 2 одноименных виджета ругается и падает, а у нас будет просто переименовывать if (false == container->name.empty()) { WidgetContainer * iter = find(container->name); if (null != iter) { LOGGING(LogSection, Warning, "widget with same name name '" << container->name << "'. Renamed"); static long renameN=0; container->name = MyGUI::utility::toString(container->name, renameN++); } } std::string tmpname = container->name; if (tmpname.empty()) { tmpname = MyGUI::utility::toString(container->type, global_counter); global_counter++; } //может и не стоит tmpname = "LayoutEditor_" + tmpname; if (null == _parent) { container->widget = MyGUI::Gui::getInstance().createWidgetT(container->type, container->skin, coord, align, container->layer, tmpname); add(container); } else { container->widget = _parent->createWidgetT(container->type, container->skin, coord, align, tmpname); add(container); } // берем детей и крутимся MyGUI::xml::xmlNodeIterator widget = _widget->getNodeIterator(); while (widget.nextNode()) { std::string key, value; if (widget->getName() == "Widget") parseWidget(widget, container->widget); else if (widget->getName() == "Property") { // парсим атрибуты if (false == widget->findAttribute("key", key)) continue; if (false == widget->findAttribute("value", value)) continue; // и парсим свойство if (("Message_Modal" != key) && ("Window_AutoAlpha" != key)) MyGUI::WidgetManager::getInstance().parse(container->widget, key, value); container->mProperty.push_back(std::make_pair(key, value)); } else if (widget->getName() == "UserString") { // парсим атрибуты if (false == widget->findAttribute("key", key)) continue; if (false == widget->findAttribute("value", value)) continue; container->mUserString.insert(std::make_pair(key, value)); } }; }
void EditorWidgets::parseWidget(MyGUI::xml::xmlNodeIterator & _widget, MyGUI::WidgetPtr _parent) { WidgetContainer * container = new WidgetContainer(); // парсим атрибуты виджета MyGUI::IntCoord coord; MyGUI::Align align = MyGUI::ALIGN_DEFAULT; _widget->findAttribute("name", container->name); _widget->findAttribute("type", container->type); _widget->findAttribute("skin", container->skin); _widget->findAttribute("layer", container->layer); if (_widget->findAttribute("align", container->align)) align = MyGUI::SkinManager::getInstance().parseAlign(container->align); if (_widget->findAttribute("position", container->position)) coord = MyGUI::IntCoord::parse(container->position); if (_widget->findAttribute("position_real", container->position_real)) coord = MyGUI::Gui::getInstance().convertRelativeToInt(MyGUI::FloatCoord::parse(container->position_real), _parent); // в гуе на 2 одноименных виджета ругается и падает, а у нас будет просто переименовывать if (false == container->name.empty()) { WidgetContainer * iter = find(container->name); if (null != iter) { static long renameN=0; std::string mess = MyGUI::utility::toString("widget with same name name '", container->name, "'. Renamed to '", container->name, renameN, "'."); LOGGING(LogSection, Warning, mess); MyGUI::Message::_createMessage("Warning", mess, "", "LayoutEditor_Popup", true, null, MyGUI::Message::IconWarning | MyGUI::Message::Ok); container->name = MyGUI::utility::toString(container->name, renameN++); } } std::string tmpname = container->name; if (tmpname.empty()) { tmpname = MyGUI::utility::toString(container->type, global_counter); global_counter++; } //может и не стоит tmpname = "LayoutEditor_" + tmpname; if (null == _parent) { container->widget = MyGUI::Gui::getInstance().createWidgetT(container->type, container->skin, coord, align, container->layer, tmpname); add(container); } else { container->widget = _parent->createWidgetT(container->type, container->skin, coord, align, tmpname); add(container); } // берем детей и крутимся MyGUI::xml::xmlNodeIterator widget = _widget->getNodeIterator(); while (widget.nextNode()) { std::string key, value; if (widget->getName() == "Widget") parseWidget(widget, container->widget); else if (widget->getName() == "Property") { // парсим атрибуты if (false == widget->findAttribute("key", key)) continue; if (false == widget->findAttribute("value", value)) continue; // и парсим свойство try{ if (("Message_Modal" != key) && ("Window_AutoAlpha" != key) && ("Window_Snap" != key)) MyGUI::WidgetManager::getInstance().parse(container->widget, key, value); Ogre::Root::getSingleton().renderOneFrame(); } catch(...) { MyGUI::Message::_createMessage("Warning", "No such " + key + ": '" + value + "'", "", "LayoutEditor_Popup", true, null, MyGUI::Message::IconWarning | MyGUI::Message::Ok); if (key == "Image_Texture") MyGUI::WidgetManager::getInstance().parse(container->widget, key, ""); }// for incorrect meshes or textures container->mProperty.push_back(std::make_pair(key, value)); } else if (widget->getName() == "UserString") { // парсим атрибуты if (false == widget->findAttribute("key", key)) continue; if (false == widget->findAttribute("value", value)) continue; container->mUserString.insert(std::make_pair(key, value)); } }; }
~ScopedLogger() { LOGGING(logger_, str_ << " out "); }
ScopedLogger(Logger const &logger, std::string const& str):logger_(logger), str_(str) { LOGGING(logger_, str_ << " in "); }
int HDFSAccessor::initialize() { if (!m_initialized) { char dependenciesPath[MAX_PATH]; size_t pathSize = MAX_PATH; memset(dependenciesPath, 0, sizeof(dependenciesPath)); bool isNewEnv = false; JNIEnv* env = JVMState::instance()->getEnv(&isNewEnv); Utilities::getJavaDependenciesPath(dependenciesPath, &pathSize); jclass wfxLauncherClass = env->FindClass("org/cgc/wfx/FSClientLauncher"); if (JVMState::instance()->exceptionExists(env) || wfxLauncherClass == NULL) { LOGGING("Unable to find Java launcher jar %s", JAVA_LAUNCHER_VAL) assert(false); } jstring depsPathStr = env->NewStringUTF(dependenciesPath); jmethodID getPairInstanceMethodId = env->GetStaticMethodID(wfxLauncherClass, "getPairInstance", "(Ljava/lang/String;)Lorg/cgc/wfx/WfxPair;"); assert(getPairInstanceMethodId != NULL); jobject wfxPairObj = env->CallStaticObjectMethod(wfxLauncherClass, getPairInstanceMethodId, depsPathStr); if (!JVMState::instance()->exceptionExists(env) && wfxPairObj != NULL) { jclass wfxPairClass = env->GetObjectClass(wfxPairObj); s_WfxPairMetIdInitFS = env->GetMethodID(wfxPairClass, "initFS", "()V"); assert(s_WfxPairMetIdInitFS != NULL); s_WfxPairMetIdGetFolderContent = env->GetMethodID(wfxPairClass, "getFolderContent", "(Ljava/lang/String;)[Ljava/lang/String;"); assert(s_WfxPairMetIdGetFolderContent != NULL); s_WfxPairMetIdGetFileInfo = env->GetMethodID(wfxPairClass, "getFileInformation", "(Ljava/lang/String;Ljava/lang/String;)Lorg/cgc/wfx/FileInformation;"); assert(s_WfxPairMetIdGetFileInfo != NULL); s_WfxPairMetIdMkDir = env->GetMethodID(wfxPairClass, "mkDir", "(Ljava/lang/String;)Z"); assert(s_WfxPairMetIdMkDir != NULL); s_WfxPairMetIdDelPath = env->GetMethodID(wfxPairClass, "deletePath", "(Ljava/lang/String;)Z"); assert(s_WfxPairMetIdDelPath != NULL); s_WfxPairMetIdRenPath = env->GetMethodID(wfxPairClass, "renamePath", "(Ljava/lang/String;Ljava/lang/String;)Z"); assert(s_WfxPairMetIdRenPath != NULL); s_WfxPairMetIdCopyPath = env->GetMethodID(wfxPairClass, "copyPath", "(Ljava/lang/String;Ljava/lang/String;)Z"); assert(s_WfxPairMetIdCopyPath != NULL); s_WfxPairMetIdGetPath = env->GetMethodID(wfxPairClass, "getFile", "(Ljava/lang/String;Ljava/lang/String;Lorg/cgc/wfx/Progress;)V"); assert(s_WfxPairMetIdGetPath != NULL); s_WfxPairMetIdPutPath = env->GetMethodID(wfxPairClass, "putFile", "(Ljava/lang/String;Ljava/lang/String;ZLorg/cgc/wfx/Progress;)V"); assert(s_WfxPairMetIdPutPath != NULL); s_WfxPairMetIdfileExists = env->GetMethodID(wfxPairClass, "fileExists", "(Ljava/lang/String;)Z"); assert(s_WfxPairMetIdfileExists != NULL); initFileEnumerator(env); initProgressInfo(env); if (!JVMState::instance()->exceptionExists(env)) { m_wfxPairObj = env->NewGlobalRef(wfxPairObj); env->CallVoidMethod(m_wfxPairObj, s_WfxPairMetIdInitFS); if (JVMState::instance()->exceptionExists(env)) { assert(false); } } else { LOGGING("Fail on obtaining WfxPair instance. Please check the existence of hdfs_wfx.jar inside of ~/.config/hdfs_wfx/java/deps/ folder") assert(false); } env->DeleteLocalRef(depsPathStr); env->DeleteLocalRef(wfxPairObj); env->DeleteLocalRef(wfxPairClass); env->DeleteLocalRef(wfxLauncherClass); if (isNewEnv) { JVMState::instance()->releaseEnv(); } m_initialized = true; return 0; } else { LOGGING("Unable to find Java launcher jar %s and its WfxPair class", JAVA_LAUNCHER_VAL) assert(false); } if (isNewEnv) { JVMState::instance()->releaseEnv(); } return -1; } else { return 0; } }