]> git.mxchange.org Git - flightgear.git/blobdiff - src/GUI/dialog.hxx
Autopilot: clean up the helpers code (which drives the various /internal/) properties...
[flightgear.git] / src / GUI / dialog.hxx
index 802dea963f299d54c5d4dd19398f0054ef668a81..63aef704b1d2ec3354c7b4261749a2054db43515 100644 (file)
@@ -8,23 +8,25 @@
 #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>
-
-#undef PUCLASS_LIST
-#include "puList.hxx"
+#include <simgear/props/condition.hxx>
 
 #include <vector>
-SG_USING_STD(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) {} virtual ~GUI_ID() {} int id; };
 
-#include "AirportList.hxx"
 
 
 class FGDialog;
-class FGBinding;
 class NewGUI;
 class FGColor;
 
@@ -90,6 +92,15 @@ public:
      */
     virtual void update ();
 
+    /**
+     * Recompute the dialog's layout
+     */
+    void relayout();
+    
+    
+    void setNeedsLayout() {
+      _needsRelayout = true;
+    }
 private:
 
     enum {
@@ -126,6 +137,11 @@ private:
     // return key code number for keystring
     int getKeyCode(const char *keystring);
 
+    /**
+     * Apply layout sizes to a tree of puObjects
+     */
+    void applySize(puObject *object);
+
     // The top-level PUI object.
     puObject * _object;
 
@@ -140,6 +156,8 @@ private:
     // last position.
     SGPropertyNode_ptr _props;
 
+    bool _needsRelayout;
+
     // Nasal module.
     string _module;
     SGPropertyNode_ptr _nasal_close;
@@ -159,6 +177,24 @@ private:
     };
     vector<PropertyObject *> _propertyObjects;
     vector<PropertyObject *> _liveObjects;
+    
+    class ConditionalObject : public SGConditional
+    {
+    public:
+      ConditionalObject(const std::string& aName, puObject* aPu) :
+        _name(aName),
+        _pu(aPu)
+      { ; }
+    
+      void update(FGDialog* aDlg);
+    
+    private:
+      const std::string _name;
+      puObject* _pu;      
+    };
+    
+    typedef SGSharedPtr<ConditionalObject> ConditionalObjectRef;
+    vector<ConditionalObjectRef> _conditionalObjects;
 };
 
 //
@@ -173,16 +209,25 @@ private:
 //
 class fgPopup : public puPopup {
 public:
-    fgPopup(int x, int y, bool d = true) : puPopup(x, y) { _dragging = false; _draggable = d;}
+    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 _dX, _dY;
+    int _resizing;
+    int _start_cursor;
+    int _cursor;
+    int _dlgX, _dlgY, _dlgW, _dlgH;
+    int _startX, _startY;
 };
 
 
@@ -202,10 +247,10 @@ private:
 };
 
 
-class fgList : public fgValueList, public puList, public GUI_ID {
+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), puList(x1, y1, x2, y2, _list, sw), GUI_ID(FGCLASS_LIST) {}
+            fgValueList(p), puaList(x1, y1, x2, y2, _list, sw), GUI_ID(FGCLASS_LIST) {}
     void update();
 };
 
@@ -213,6 +258,8 @@ 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) {}
+        
+    void update();
 };
 
 class fgSelectBox : public fgValueList, public puaSelectBox {