1
0
Fork 0
flightgear/src/GUI/new_gui.hxx
curt 2119db35c3 This is step "1" of probably "many" in the process of separating out the
scene management code and organizing it within simgear.  My strategy is
to identify the code I want to move, and break it's direct flightgear
dependencies.  Then it will be free to move over into the simgear package.

- Moved some property specific code into simgear/props/
- Split out the condition code from fgfs/src/Main/fg_props and put it
  in it's own source file in simgear/props/
- Created a scene subdirectory for scenery, model, and material property
  related code.
- Moved location.[ch]xx into simgear/scene/model/
- The location and condition code had dependencies on flightgear's global
  state (all the globals-> stuff, the flightgear property tree, etc.)  SimGear
  code can't depend on it so that data has to be passed as parameters to the
  functions/methods/constructors.
- This need to pass data as function parameters had a dramatic cascading
  effect throughout the FlightGear code.
2003-05-06 23:46:24 +00:00

160 lines
3.4 KiB
C++

// new_gui.hxx - XML-configured GUI subsystem.
#ifndef __NEW_GUI_HXX
#define __NEW_GUI_HXX 1
#ifndef __cplusplus
# error This library requires C++
#endif
#include <plib/pu.h>
#include <simgear/compiler.h> // for SG_USING_STD
#include <simgear/props/props.hxx>
#include <vector>
SG_USING_STD(vector);
#include <map>
SG_USING_STD(map);
#include <Main/fgfs.hxx>
#include <Main/fg_props.hxx>
class FGMenuBar;
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 found 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 ();
/**
* Reinitialize the GUI subsystem.
*/
virtual void reinit ();
/**
* 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);
/**
* Display a dialog box.
*
* At initialization time, the subsystem reads all of the XML
* configuration files from the directory $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:
// Free all allocated memory.
void clear ();
// Read all the configuration files in a directory.
void readDir (const char * path);
FGMenuBar * _menubar;
FGDialog * _active_dialog;
map<string,SGPropertyNode *> _dialog_props;
};
#endif // __NEW_GUI_HXX