1
0
Fork 0

Rename some methods to be more intuitive, add a close method for the

active dialog, and add lots of documentation.
This commit is contained in:
david 2003-01-20 16:03:09 +00:00
parent 123931834f
commit 9291bb510d
2 changed files with 119 additions and 18 deletions

View 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);

View 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 ();
/**
* 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);
virtual void display (const string &name);
virtual void setCurrentWidget (FGDialog * widget);
virtual FGDialog * getCurrentWidget ();
/**
* 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