1
0
Fork 0

Add more documentation comments.

Fix memory leaks (PUI doesn't make copies of lists, so we have to make
our own copies and keep pointers to them).

Adjust for new method names in NewGUI.

Move the GUIInfo struct into the cxx file so that it's not part of the
public interface.
This commit is contained in:
david 2003-01-20 16:01:54 +00:00
parent bbff86ed36
commit 4dc28f11f4

View file

@ -1,4 +1,4 @@
// dialog.hxx - XML-configurable dialog box. // dialog.hxx - XML-configured dialog box.
#ifndef __DIALOG_HXX #ifndef __DIALOG_HXX
#define __DIALOG_HXX 1 #define __DIALOG_HXX 1
@ -20,28 +20,25 @@ class FGBinding;
/** /**
* PUI userdata describing a GUI object. * An XML-configured dialog box.
*/ *
struct GUIInfo * The GUI manager stores only the property tree for the dialog
{ * boxes. This class creates a PUI dialog box on demand from
GUIInfo (FGDialog * w); * the properties in that tree. The manager recreates the dialog
virtual ~GUIInfo (); * every time it needs to show it.
FGDialog * widget;
vector <FGBinding *> bindings;
};
/**
* Top-level GUI widget.
*/ */
class FGDialog class FGDialog
{ {
public: public:
/** /**
* Construct a new GUI widget configured by a property tree. * Construct a new GUI widget configured by a property tree.
*
* The configuration properties are not part of the main
* FlightGear property tree; the GUI manager reads them
* from individual configuration files.
*
* @param props A property tree describing the dialog.
*/ */
FGDialog (SGPropertyNode_ptr props); FGDialog (SGPropertyNode_ptr props);
@ -55,7 +52,8 @@ public:
/** /**
* Update the values of all GUI objects with a specific name. * Update the values of all GUI objects with a specific name.
* *
* This method copies from the property to the GUI object. * This method copies values from the FlightGear property tree to
* the GUI object(s).
* *
* @param objectName The name of the GUI object(s) to update. * @param objectName The name of the GUI object(s) to update.
* Use the empty name for all unnamed objects. * Use the empty name for all unnamed objects.
@ -66,7 +64,8 @@ public:
/** /**
* Apply the values of all GUI objects with a specific name. * Apply the values of all GUI objects with a specific name.
* *
* This method copies from the GUI object to the property. * This method copies values from the GUI object(s) to the
* FlightGear property tree.
* *
* @param objectName The name of the GUI object(s) to update. * @param objectName The name of the GUI object(s) to update.
* Use the empty name for all unnamed objects. * Use the empty name for all unnamed objects.
@ -77,7 +76,8 @@ public:
/** /**
* Update the values of all GUI objects. * Update the values of all GUI objects.
* *
* This method copies from the properties to the GUI objects. * This method copies values from the FlightGear property tree to
* the GUI objects.
*/ */
virtual void updateValues (); virtual void updateValues ();
@ -85,23 +85,39 @@ public:
/** /**
* Apply the values of all GUI objects. * Apply the values of all GUI objects.
* *
* This method copies from the GUI objects to the properties. * This method copies from the GUI objects to the FlightGear
* property tree properties.
*/ */
virtual void applyValues (); virtual void applyValues ();
private: private:
FGDialog (const FGDialog &); // just for safety
// Private copy constructor to avoid unpleasant surprises.
FGDialog (const FGDialog &);
// Show the dialog.
void display (SGPropertyNode_ptr props); void display (SGPropertyNode_ptr props);
// Build the dialog or a subobject of it.
puObject * makeObject (SGPropertyNode * props, puObject * makeObject (SGPropertyNode * props,
int parentWidth, int parentHeight); int parentWidth, int parentHeight);
// Common configuration for all GUI objects.
void setupObject (puObject * object, SGPropertyNode * props); void setupObject (puObject * object, SGPropertyNode * props);
// Common configuration for all GUI group objects.
void setupGroup (puGroup * group, SGPropertyNode * props, void setupGroup (puGroup * group, SGPropertyNode * props,
int width, int height, bool makeFrame = false); int width, int height, bool makeFrame = false);
// The top-level PUI object.
puObject * _object; puObject * _object;
vector<GUIInfo *> _info;
// PUI provides no way for userdata to be deleted automatically
// with a GUI object, so we have to keep track of all the special
// data we allocated and then free it manually when the dialog
// closes.
vector<void *> _info;
struct PropertyObject { struct PropertyObject {
PropertyObject (const char * name, PropertyObject (const char * name,
puObject * object, puObject * object,
@ -111,6 +127,12 @@ private:
SGPropertyNode_ptr node; SGPropertyNode_ptr node;
}; };
vector<PropertyObject *> _propertyObjects; vector<PropertyObject *> _propertyObjects;
// PUI doesn't copy arrays, so we have to allocate string arrays
// and then keep pointers so that we can delete them when the
// dialog closes.
char ** make_char_array (int size);
vector<char **> _char_arrays;
}; };
#endif // __DIALOG_HXX #endif // __DIALOG_HXX