X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;ds=sidebyside;f=src%2FGUI%2Fnew_gui.cxx;h=5d52b1c1dbb3b306e23b121ecd88a17497ee7661;hb=02fb83c774020633cb62e3b8154337510bed1de3;hp=b17c0b021d10cd4fd84a5fb0e0ac056be5ea5450;hpb=75c508b82cd734552ccf3468a0e73bf1df51ad30;p=flightgear.git diff --git a/src/GUI/new_gui.cxx b/src/GUI/new_gui.cxx index b17c0b021..5d52b1c1d 100644 --- a/src/GUI/new_gui.cxx +++ b/src/GUI/new_gui.cxx @@ -1,18 +1,22 @@ // new_gui.cxx: implementation of XML-configurable GUI support. + +#ifdef HAVE_CONFIG_H +# include +#endif + +#include "new_gui.hxx" + #include #include #include #include -#include - -#include "new_gui.hxx" #include -#include #include #include #include +#include #include @@ -51,11 +55,8 @@ void NewGUI::init () { setStyle(); - char path1[1024]; - char path2[1024]; - ulMakePath(path1, globals->get_fg_root().c_str(), "gui"); - ulMakePath(path2, path1, "dialogs"); - readDir(path2); + SGPath p(globals->get_fg_root(), "gui/dialogs"); + readDir(p); _menubar->init(); } @@ -228,19 +229,6 @@ NewGUI::setMenuBarVisible (bool visible) _menubar->hide(); } -static bool -test_extension (const char * path, const char * ext) -{ - int pathlen = strlen(path); - int extlen = strlen(ext); - - for (int i = 1; i <= pathlen && i <= extlen; i++) { - if (path[pathlen-i] != ext[extlen-i]) - return false; - } - return true; -} - void NewGUI::newDialog (SGPropertyNode* props) { @@ -255,49 +243,31 @@ NewGUI::newDialog (SGPropertyNode* props) } void -NewGUI::readDir (const char * path) +NewGUI::readDir (const SGPath& path) { - ulDir * dir = ulOpenDir(path); - - if (dir == 0) { - SG_LOG(SG_GENERAL, SG_ALERT, "Failed to read GUI files from " - << path); - return; - } - - for (ulDirEnt * dirEnt = ulReadDir(dir); - dirEnt != 0; - dirEnt = ulReadDir(dir)) { - - char subpath[1024]; - - ulMakePath(subpath, path, dirEnt->d_name); - - if (!dirEnt->d_isdir && test_extension(subpath, ".xml")) { - SGPropertyNode * props = new SGPropertyNode; - try { - readProperties(subpath, props); - } catch (const sg_exception &) { - SG_LOG(SG_INPUT, SG_ALERT, "Error parsing dialog " - << subpath); - delete props; - continue; - } - SGPropertyNode *nameprop = props->getNode("name"); - if (!nameprop) { - SG_LOG(SG_INPUT, SG_WARN, "dialog " << subpath - << " has no name; skipping."); - delete props; - continue; - } - string name = nameprop->getStringValue(); - if (_dialog_props[name]) - delete (SGPropertyNode *)_dialog_props[name]; - - _dialog_props[name] = props; - } + simgear::Dir dir(path); + simgear::PathList xmls = dir.children(simgear::Dir::TYPE_FILE, ".xml"); + + for (unsigned int i=0; igetNode("name"); + if (!nameprop) { + SG_LOG(SG_INPUT, SG_WARN, "dialog " << xmls[i].str() + << " has no name; skipping."); + delete props; + continue; + } + string name = nameprop->getStringValue(); + _dialog_props[name] = props; } - ulCloseDir(dir); }