]> git.mxchange.org Git - flightgear.git/blobdiff - src/GUI/new_gui.cxx
Launcher: Maintain aircraft selection better
[flightgear.git] / src / GUI / new_gui.cxx
index af073812173e1ad22587a82dce047778a5e7d687..bb8eb52dba624941d88c664b9c1f198935811ff4 100644 (file)
 #include "FGCocoaMenuBar.hxx"
 #endif
 
+#if defined(SG_WINDOWS)
+#include "FGWindowsMenuBar.hxx"
+#endif
+
 #include "FGPUIDialog.hxx"
 #include "FGFontCache.hxx"
 #include "FGColor.hxx"
@@ -63,23 +67,18 @@ NewGUI::~NewGUI ()
 void
 NewGUI::init ()
 {
-#if defined(SG_MAC)
-    if (fgGetBool("/sim/menubar/native", true)) {
-        _menubar.reset(new FGCocoaMenuBar);
-    }
-#endif
-    if (!_menubar.get()) {
-        _menubar.reset(new FGPUIMenuBar);
-    }
-    
+    createMenuBarImplementation();
     fgTie("/sim/menubar/visibility", this,
           &NewGUI::getMenuBarVisible, &NewGUI::setMenuBarVisible);
     
     setStyle();
     SGPath p(globals->get_fg_root(), "gui/dialogs");
     readDir(p);
-    const std::string aircraft_dir(fgGetString("/sim/aircraft-dir"));
-    readDir( SGPath(aircraft_dir, "gui/dialogs") );
+    
+    SGPath aircraftDialogDir(string(fgGetString("/sim/aircraft-dir")), "gui/dialogs");
+    if (aircraftDialogDir.exists()) {
+        readDir(aircraftDialogDir);
+    }
     
     // Fix for http://code.google.com/p/flightgear-bugs/issues/detail?id=947
     fgGetNode("sim/menubar")->setAttribute(SGPropertyNode::PRESERVE, true);
@@ -89,6 +88,12 @@ NewGUI::init ()
 void
 NewGUI::shutdown()
 {
+    DialogDict::iterator it = _active_dialogs.begin();
+    for (; it != _active_dialogs.end(); ++it) {
+        delete it->second;
+    }
+    _active_dialogs.clear();
+    
     fgUntie("/sim/menubar/visibility");
     _menubar.reset();
     _dialog_props.clear();
@@ -107,10 +112,30 @@ NewGUI::redraw ()
     reset(false);
 }
 
+void
+NewGUI::createMenuBarImplementation()
+{
+#if defined(SG_MAC)
+    if (fgGetBool("/sim/menubar/native", true)) {
+        _menubar.reset(new FGCocoaMenuBar);
+    }
+#endif
+#if defined(SG_WINDOWS)
+       if (fgGetBool("/sim/menubar/native", true)) {
+       // Windows-native menubar disabled for the moment, fall-through
+       // to PUI version
+   //     _menubar.reset(new FGWindowsMenuBar);
+    }
+#endif
+    if (!_menubar.get()) {
+        _menubar.reset(new FGPUIMenuBar);
+    }
+}
+
 void
 NewGUI::reset (bool reload)
 {
-    map<string,FGDialog *>::iterator iter;
+    DialogDict::iterator iter;
     string_list openDialogs;
     // close all open dialogs and remember them ...
     for (iter = _active_dialogs.begin(); iter != _active_dialogs.end(); ++iter)
@@ -122,15 +147,13 @@ NewGUI::reset (bool reload)
     setStyle();
 
     unbind();
-#if !defined(SG_MAC)
-    _menubar.reset(new FGPUIMenuBar);
-#endif
 
     if (reload) {
         _dialog_props.clear();
         _dialog_names.clear();
         init();
     } else {
+        createMenuBarImplementation();
         _menubar->init();
     }
 
@@ -392,7 +415,7 @@ NewGUI::setStyle (void)
 void
 NewGUI::setupFont (SGPropertyNode *node)
 {
-    _font = globals->get_fontcache()->get(node);
+    _font = FGFontCache::instance()->get(node);
     puSetDefaultFonts(*_font, *_font);
     return;
 }