]> git.mxchange.org Git - flightgear.git/blobdiff - src/GUI/dialog.hxx
Merge branch 'next' of git@gitorious.org:fg/flightgear into next
[flightgear.git] / src / GUI / dialog.hxx
index 0751a4a4fd108b315a89fdb7f1c0ec61b5fef06f..10739280d075fd74abc654fb3366966970641ce2 100644 (file)
@@ -8,11 +8,11 @@
 #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 <simgear/props/condition.hxx>
 
 #include <vector>
 using std::vector;
@@ -22,7 +22,9 @@ using std::vector;
 #define FGCLASS_LIST          0x00000001
 #define FGCLASS_AIRPORTLIST   0x00000002
 #define FGCLASS_PROPERTYLIST  0x00000004
-class GUI_ID { public: GUI_ID(int id) : id(id) {} int id; };
+#define FGCLASS_WAYPOINTLIST  0x00000008
+
+class GUI_ID { public: GUI_ID(int id) : id(id) {} virtual ~GUI_ID() {} int id; };
 
 
 
@@ -92,6 +94,15 @@ public:
      */
     virtual void update ();
 
+    /**
+     * Recompute the dialog's layout
+     */
+    void relayout();
+    
+    
+    void setNeedsLayout() {
+      _needsRelayout = true;
+    }
 private:
 
     enum {
@@ -128,6 +139,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;
 
@@ -142,8 +158,10 @@ private:
     // last position.
     SGPropertyNode_ptr _props;
 
+    bool _needsRelayout;
+
     // Nasal module.
-    string _module;
+    std::string _module;
     SGPropertyNode_ptr _nasal_close;
 
     // PUI provides no way for userdata to be deleted automatically
@@ -155,12 +173,30 @@ private:
         PropertyObject (const char * name,
                         puObject * object,
                         SGPropertyNode_ptr node);
-        string name;
+        std::string name;
         puObject * object;
         SGPropertyNode_ptr node;
     };
     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;
 };
 
 //
@@ -223,7 +259,17 @@ public:
 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) {}
+        fgValueList(p), 
+        puaComboBox(x1, y1, x2, y2, _list, editable),
+        _inHit(false)
+      {}
+        
+    void update();
+    
+    virtual int checkHit(int b, int up, int x, int y);
+
+private:
+    bool _inHit;
 };
 
 class fgSelectBox : public fgValueList, public puaSelectBox {