]> git.mxchange.org Git - flightgear.git/blobdiff - src/GUI/dialog.hxx
Support for multiple data dirs.
[flightgear.git] / src / GUI / dialog.hxx
index 0751a4a4fd108b315a89fdb7f1c0ec61b5fef06f..7aa4adc80e6e57ce82afe9846c1ea379fda0ed27 100644 (file)
@@ -7,29 +7,8 @@
 # error This library requires C++
 #endif
 
-#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>
-
-#include <vector>
-using std::vector;
-
-
-// ugly temporary 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 NewGUI;
-class FGColor;
-
+// forward decls
+class SGPropertyNode;
 
 /**
  * An XML-configured dialog box.
@@ -43,16 +22,6 @@ class FGDialog
 {
 public:
 
-    /**
-     * 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 * props);
 
 
     /**
@@ -71,7 +40,7 @@ public:
      * @param objectName The name of the GUI object(s) to update.
      *        Use the empty name for all unnamed objects.
      */
-    virtual void updateValues (const char * objectName = 0);
+    virtual void updateValues (const char * objectName = 0) = 0;
 
 
     /**
@@ -84,152 +53,28 @@ public:
      * @param objectName The name of the GUI object(s) to update.
      *        Use the empty name for all unnamed objects.
      */
-    virtual void applyValues (const char * objectName = 0);
+    virtual void applyValues (const char * objectName = 0) = 0;
 
 
     /**
      * Update state.  Called on active dialogs before rendering.
      */
-    virtual void update ();
-
-private:
-
-    enum {
-        BACKGROUND = 0x01,
-        FOREGROUND = 0x02,
-        HIGHLIGHT = 0x04,
-        LABEL = 0x08,
-        LEGEND = 0x10,
-        MISC = 0x20,
-        EDITFIELD = 0x40
-    };
-
-    // Private copy constructor to avoid unpleasant surprises.
-    FGDialog (const FGDialog &);
-
-    // Show the dialog.
-    void display (SGPropertyNode * props);
-
-    // Build the dialog or a subobject of it.
-    puObject * makeObject (SGPropertyNode * props,
-                           int parentWidth, int parentHeight);
-
-    // Common configuration for all GUI objects.
-    void setupObject (puObject * object, SGPropertyNode * props);
-
-    // Common configuration for all GUI group objects.
-    void setupGroup (puGroup * group, SGPropertyNode * props,
-                     int width, int height, bool makeFrame = false);
-
-    // Set object colors: the "which" argument defines which color qualities
-    // (PUCOL_LABEL, etc.) should pick up the <color> property.
-    void setColor(puObject * object, SGPropertyNode * props, int which = 0);
-
-    // return key code number for keystring
-    int getKeyCode(const char *keystring);
-
-    // The top-level PUI object.
-    puObject * _object;
-
-    // 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
-    // closes.
-    vector<void *> _info;
-    struct PropertyObject {
-        PropertyObject (const char * name,
-                        puObject * object,
-                        SGPropertyNode_ptr node);
-        string name;
-        puObject * object;
-        SGPropertyNode_ptr node;
-    };
-    vector<PropertyObject *> _propertyObjects;
-    vector<PropertyObject *> _liveObjects;
-};
-
-//
-// Custom subclass of puPopup to implement "draggable" windows in the
-// interface.  Note that this is a subclass of puPopup, not
-// puDialogBox.  Sadly, PUI (mis)uses subclassing to implement a
-// boolean property: modality.  That means that we can't implement
-// dragging of both puPopup windows and puDialogBoxes with the same
-// code.  Rather than duplicate code, I've chosen to implement only
-// "non-modal dragability" here.  Modal dialog boxes (like the exit
-// confirmation) are not draggable.
-//
-class fgPopup : public puPopup {
-public:
-    fgPopup(int x, int y, bool r = true, bool d = true) :
-            puPopup(x, y), _draggable(d), _resizable(r), _dragging(false)
-    {}
-    int checkHit(int b, int up, int x, int y);
-    int checkKey(int key, int updown);
-    int getHitObjects(puObject *, int x, int y);
-    puObject *getKeyObject(puObject *, int key);
-    puObject *getActiveInputField(puObject *);
-    void applySize(puObject *);
-private:
-    enum { LEFT = 1, RIGHT = 2, TOP = 4, BOTTOM = 8 };
-    bool _draggable;
-    bool _resizable;
-    bool _dragging;
-    int _resizing;
-    int _start_cursor;
-    int _cursor;
-    int _dlgX, _dlgY, _dlgW, _dlgH;
-    int _startX, _startY;
-};
-
-
-class fgValueList {
-public:
-    fgValueList(SGPropertyNode *p);
-    virtual ~fgValueList();
-    virtual void update();
+    virtual void update () = 0;
 
 protected:
-    char **_list;
+    /**
+     * 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 * props);
 
 private:
-    void make_list();
-    void destroy_list();
-    SGPropertyNode_ptr _props;
-};
-
-
-class fgList : public fgValueList, public puaList, public GUI_ID {
-public:
-    fgList(int x1, int y1, int x2, int y2, SGPropertyNode *p, int sw) :
-            fgValueList(p), puaList(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