# error This library requires C++
#endif
-#include <plib/pu.h>
+#include <plib/puAux.h>
#include <plib/sg.h>
#include <simgear/compiler.h> // for SG_USING_STD
#include <simgear/props/props.hxx>
#include <simgear/misc/sg_path.hxx>
+#undef PUCLASS_LIST
+#include "puList.hxx"
+
#include <vector>
SG_USING_STD(vector);
+
+// ugly temproary workaround for plib's lack of user defined class ids FIXME
+#define FGCLASS_LIST 0x00000001
+#define FGCLASS_AIRPORTLIST 0x00000002
+#define FGCLASS_PROPERTYLIST 0x00000004
+class GUI_ID { public: GUI_ID(int id) : id(id) {} int id; };
+
+
+
class FGDialog;
-class FGBinding;
class NewGUI;
class FGColor;
/**
- * Update the values of all GUI objects with a specific name.
+ * Update the values of all GUI objects with a specific name,
+ * or all if name is 0 (default).
*
* 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.
* Use the empty name for all unnamed objects.
*/
- virtual void updateValue (const char * objectName);
+ virtual void updateValues (const char * objectName = 0);
/**
- * Apply the values of all GUI objects with a specific name.
+ * Apply the values of all GUI objects with a specific name,
+ * or all if name is 0 (default)
*
* 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.
* Use the empty name for all unnamed objects.
*/
- virtual void applyValue (const char * objectName);
-
-
- /**
- * Update the values of all GUI objects.
- *
- * This method copies values from the FlightGear property tree to
- * the GUI objects.
- */
- virtual void updateValues ();
-
-
- /**
- * Apply the values of all GUI objects.
- *
- * This method copies from the GUI objects to the FlightGear
- * property tree properties.
- */
- virtual void applyValues ();
+ virtual void applyValues (const char * objectName = 0);
/**
HIGHLIGHT = 0x04,
LABEL = 0x08,
LEGEND = 0x10,
- MISC = 0x20
+ MISC = 0x20,
+ EDITFIELD = 0x40
};
// Private copy constructor to avoid unpleasant surprises.
// The GUI subsystem.
NewGUI * _gui;
+ // The dialog font. Defaults to the global gui font, but can get
+ // overridden by a top level font definition.
+ puFont * _font;
+
+ // The source xml tree, so that we can pass data back, such as the
+ // last position.
+ SGPropertyNode_ptr _props;
+
+ // Nasal module.
+ string _module;
+ SGPropertyNode_ptr _nasal_close;
+
// 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
};
vector<PropertyObject *> _propertyObjects;
vector<PropertyObject *> _liveObjects;
-
- // 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;
-
- SGPath _font_path;
};
//
int _dX, _dY;
};
+
+class fgValueList {
+public:
+ fgValueList(SGPropertyNode *p);
+ virtual ~fgValueList();
+ virtual void update();
+
+protected:
+ char **_list;
+
+private:
+ void make_list();
+ void destroy_list();
+ SGPropertyNode_ptr _props;
+};
+
+
+class fgList : public fgValueList, public puList, public GUI_ID {
+public:
+ fgList(int x1, int y1, int x2, int y2, SGPropertyNode *p, int sw) :
+ fgValueList(p), puList(x1, y1, x2, y2, _list, sw), GUI_ID(FGCLASS_LIST) {}
+ void update();
+};
+
+class fgComboBox : public fgValueList, public puaComboBox {
+public:
+ fgComboBox(int x1, int y1, int x2, int y2, SGPropertyNode *p, bool editable) :
+ fgValueList(p), puaComboBox(x1, y1, x2, y2, _list, editable) {}
+};
+
+class fgSelectBox : public fgValueList, public puaSelectBox {
+public:
+ fgSelectBox(int x1, int y1, int x2, int y2, SGPropertyNode *p) :
+ fgValueList(p), puaSelectBox(x1, y1, x2, y2, _list) {}
+};
+
#endif // __DIALOG_HXX