]> git.mxchange.org Git - flightgear.git/commitdiff
Rename some methods to be more intuitive, add a close method for the
authordavid <david>
Mon, 20 Jan 2003 16:03:09 +0000 (16:03 +0000)
committerdavid <david>
Mon, 20 Jan 2003 16:03:09 +0000 (16:03 +0000)
active dialog, and add lots of documentation.

src/GUI/new_gui.cxx
src/GUI/new_gui.hxx

index 6e8dc5196af7ded24c4be005d732f92f76a2002c..2e9b4d5604537de0ed70cd67609737146e655e73 100644 (file)
@@ -20,7 +20,7 @@
 
 NewGUI::NewGUI ()
     : _menubar(new FGMenuBar),
-      _current_widget(0)
+      _active_dialog(0)
 {
 }
 
@@ -61,25 +61,40 @@ NewGUI::update (double delta_time_sec)
     // NO OP
 }
 
-void
-NewGUI::display (const string &name)
+bool
+NewGUI::showDialog (const string &name)
 {
-    if (_widgets.find(name) == _widgets.end())
+    if (_dialog_props.find(name) == _dialog_props.end()) {
         SG_LOG(SG_GENERAL, SG_ALERT, "Dialog " << name << " not defined");
-    else
-        new FGDialog(_widgets[name]);
+        return false;
+    } else {
+        new FGDialog(_dialog_props[name]); // it will be deleted by a callback
+        return true;
+    }
+}
+
+bool
+NewGUI::closeActiveDialog ()
+{
+    if (_active_dialog == 0) {
+        return false;
+    } else {
+        delete _active_dialog;
+        _active_dialog = 0;
+        return true;
+    }
 }
 
 void
-NewGUI::setCurrentWidget (FGDialog * widget)
+NewGUI::setActiveDialog (FGDialog * dialog)
 {
-    _current_widget = widget;
+    _active_dialog = dialog;
 }
 
 FGDialog *
-NewGUI::getCurrentWidget ()
+NewGUI::getActiveDialog ()
 {
-    return _current_widget;
+    return _active_dialog;
 }
 
 FGMenuBar *
@@ -136,7 +151,7 @@ NewGUI::readDir (const char * path)
             } else {
                 string name = props->getStringValue("name");
                 SG_LOG(SG_INPUT, SG_BULK, "Saving GUI node " << name);
-                _widgets[name] = props;
+                _dialog_props[name] = props;
             }
         }
         dirEnt = ulReadDir(dir);
index 75d910a541bc1240693a12d8b15ebfeef5e12ded..7936c8a17c5f77bbf864caeb00435fb052f37462 100644 (file)
@@ -1,4 +1,4 @@
-// new_gui.hxx - XML-configurable GUI subsystem.
+// new_gui.hxx - XML-configured GUI subsystem.
 
 #ifndef __NEW_GUI_HXX
 #define __NEW_GUI_HXX 1
@@ -26,40 +26,126 @@ class FGDialog;
 class FGBinding;
 
 
+/**
+ * XML-configured GUI subsystem.
+ *
+ * This subsystem manages the graphical user interface for FlightGear.
+ * It creates a menubar from the XML configuration file in
+ * $FG_ROOT/gui/menubar.xml, then stores the configuration properties
+ * for XML-configured dialog boxes in $FG_ROOT/gui/dialogs/*.  It
+ * can show or hide the menubar, and can display any dialog by name.
+ */
 class NewGUI : public FGSubsystem
 {
 public:
 
+    /**
+     * Constructor.
+     */
     NewGUI ();
+
+    /**
+     * Destructor.
+     */
     virtual ~NewGUI ();
+
+    /**
+     * Initialize the GUI subsystem.
+     */
     virtual void init ();
+
+    /**
+     * Bind properties for the GUI subsystem.
+     *
+     * Currently, this method binds the properties for showing and
+     * hiding the menu.
+     */
     virtual void bind ();
+
+    /**
+     * Unbind properties for the GUI subsystem.
+     */
     virtual void unbind ();
-    virtual void update (double delta_time_sec);
-    virtual void display (const string &name);
 
-    virtual void setCurrentWidget (FGDialog * widget);
-    virtual FGDialog * getCurrentWidget ();
+    /**
+     * Update the GUI subsystem.
+     *
+     * Currently, this method is a no-op, because nothing the GUI
+     * subsystem does is time-dependent.
+     */
+    virtual void update (double delta_time_sec);
 
+    /**
+     * Display a dialog box.
+     *
+     * At initialization time, the subsystem reads all of the XML
+     * configuration files from $FG_ROOT/gui/dialogs/*.  The
+     * configuration for each dialog specifies a name, and this method
+     * invokes the dialog with the name specified (if it exists).
+     *
+     * @param name The name of the dialog box.
+     * @return true if the dialog exists, false otherwise.
+     */
+    virtual bool showDialog (const string &name);
+
+
+    /**
+     * Close the currently-active dialog, if any.
+     *
+     * @return true if a dialog was active, false otherwise.
+     */
+    virtual bool closeActiveDialog ();
+
+
+    /**
+     * Return a pointer to the current menubar.
+     */
     virtual FGMenuBar * getMenuBar ();
 
+
+    /**
+     * Ignore this method.
+     *
+     * This method is for internal use only, but it has to be public
+     * so that a non-class callback can see it.
+     */
+    virtual void setActiveDialog (FGDialog * dialog);
+
+    /**
+     * Get the dialog currently active, if any.
+     *
+     * @return The active dialog, or 0 if none is active.
+     */
+    virtual FGDialog * getActiveDialog ();
+
 protected:
 
+    /**
+     * Test if the menubar is visible.
+     *
+     * This method exists only for binding.
+     */
     virtual bool getMenuBarVisible () const;
+
+    /**
+     * Show or hide the menubar.
+     *
+     * This method exists only for binding.
+     */
     virtual void setMenuBarVisible (bool visible);
 
 
 private:
 
+    // Read all the configuration files in a directory.
     void readDir (const char * path);
 
     FGMenuBar * _menubar;
-    FGDialog * _current_widget;
-    map<string,SGPropertyNode_ptr> _widgets;
+    FGDialog * _active_dialog;
+    map<string,SGPropertyNode_ptr> _dialog_props;
 
 };
 
 
 #endif // __NEW_GUI_HXX
 
-// end of new_gui.hxx