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:
parent
123931834f
commit
9291bb510d
2 changed files with 119 additions and 18 deletions
|
@ -20,7 +20,7 @@
|
||||||
|
|
||||||
NewGUI::NewGUI ()
|
NewGUI::NewGUI ()
|
||||||
: _menubar(new FGMenuBar),
|
: _menubar(new FGMenuBar),
|
||||||
_current_widget(0)
|
_active_dialog(0)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -61,25 +61,40 @@ NewGUI::update (double delta_time_sec)
|
||||||
// NO OP
|
// NO OP
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
bool
|
||||||
NewGUI::display (const string &name)
|
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");
|
SG_LOG(SG_GENERAL, SG_ALERT, "Dialog " << name << " not defined");
|
||||||
else
|
return false;
|
||||||
new FGDialog(_widgets[name]);
|
} 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
|
void
|
||||||
NewGUI::setCurrentWidget (FGDialog * widget)
|
NewGUI::setActiveDialog (FGDialog * dialog)
|
||||||
{
|
{
|
||||||
_current_widget = widget;
|
_active_dialog = dialog;
|
||||||
}
|
}
|
||||||
|
|
||||||
FGDialog *
|
FGDialog *
|
||||||
NewGUI::getCurrentWidget ()
|
NewGUI::getActiveDialog ()
|
||||||
{
|
{
|
||||||
return _current_widget;
|
return _active_dialog;
|
||||||
}
|
}
|
||||||
|
|
||||||
FGMenuBar *
|
FGMenuBar *
|
||||||
|
@ -136,7 +151,7 @@ NewGUI::readDir (const char * path)
|
||||||
} else {
|
} else {
|
||||||
string name = props->getStringValue("name");
|
string name = props->getStringValue("name");
|
||||||
SG_LOG(SG_INPUT, SG_BULK, "Saving GUI node " << name);
|
SG_LOG(SG_INPUT, SG_BULK, "Saving GUI node " << name);
|
||||||
_widgets[name] = props;
|
_dialog_props[name] = props;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
dirEnt = ulReadDir(dir);
|
dirEnt = ulReadDir(dir);
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
// new_gui.hxx - XML-configurable GUI subsystem.
|
// new_gui.hxx - XML-configured GUI subsystem.
|
||||||
|
|
||||||
#ifndef __NEW_GUI_HXX
|
#ifndef __NEW_GUI_HXX
|
||||||
#define __NEW_GUI_HXX 1
|
#define __NEW_GUI_HXX 1
|
||||||
|
@ -26,40 +26,126 @@ class FGDialog;
|
||||||
class FGBinding;
|
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
|
class NewGUI : public FGSubsystem
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor.
|
||||||
|
*/
|
||||||
NewGUI ();
|
NewGUI ();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Destructor.
|
||||||
|
*/
|
||||||
virtual ~NewGUI ();
|
virtual ~NewGUI ();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initialize the GUI subsystem.
|
||||||
|
*/
|
||||||
virtual void init ();
|
virtual void init ();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Bind properties for the GUI subsystem.
|
||||||
|
*
|
||||||
|
* Currently, this method binds the properties for showing and
|
||||||
|
* hiding the menu.
|
||||||
|
*/
|
||||||
virtual void bind ();
|
virtual void bind ();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Unbind properties for the GUI subsystem.
|
||||||
|
*/
|
||||||
virtual void unbind ();
|
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 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 ();
|
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:
|
protected:
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test if the menubar is visible.
|
||||||
|
*
|
||||||
|
* This method exists only for binding.
|
||||||
|
*/
|
||||||
virtual bool getMenuBarVisible () const;
|
virtual bool getMenuBarVisible () const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Show or hide the menubar.
|
||||||
|
*
|
||||||
|
* This method exists only for binding.
|
||||||
|
*/
|
||||||
virtual void setMenuBarVisible (bool visible);
|
virtual void setMenuBarVisible (bool visible);
|
||||||
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
// Read all the configuration files in a directory.
|
||||||
void readDir (const char * path);
|
void readDir (const char * path);
|
||||||
|
|
||||||
FGMenuBar * _menubar;
|
FGMenuBar * _menubar;
|
||||||
FGDialog * _current_widget;
|
FGDialog * _active_dialog;
|
||||||
map<string,SGPropertyNode_ptr> _widgets;
|
map<string,SGPropertyNode_ptr> _dialog_props;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
#endif // __NEW_GUI_HXX
|
#endif // __NEW_GUI_HXX
|
||||||
|
|
||||||
// end of new_gui.hxx
|
|
||||||
|
|
Loading…
Reference in a new issue