]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/sizer.h
do platform-specific checks after ensuring that the symbols we use are defined; extra...
[wxWidgets.git] / include / wx / sizer.h
index ce2341c36fd3d97416ddbe78befcb58f74ba265d..40f32e6e19be39dd58fdb93cba0cfcacabc4ff1d 100644 (file)
 // classes
 //---------------------------------------------------------------------------
 
-class WXDLLEXPORT wxButton;
-class WXDLLEXPORT wxBoxSizer;
-class WXDLLEXPORT wxSizerItem;
-class WXDLLEXPORT wxSizer;
+class WXDLLIMPEXP_FWD_CORE wxButton;
+class WXDLLIMPEXP_FWD_CORE wxBoxSizer;
+class WXDLLIMPEXP_FWD_CORE wxSizerItem;
+class WXDLLIMPEXP_FWD_CORE wxSizer;
 
 #ifndef wxUSE_BORDER_BY_DEFAULT
     #ifdef __SMARTPHONE__
@@ -73,7 +73,7 @@ public:
     }
 
     // some shortcuts for Align()
-    wxSizerFlags& Centre() { return Align(wxCENTRE); }
+    wxSizerFlags& Centre() { return Align(wxALIGN_CENTRE); }
     wxSizerFlags& Center() { return Centre(); }
     wxSizerFlags& Top() { return Align(wxALIGN_TOP); }
     wxSizerFlags& Left() { return Align(wxALIGN_LEFT); }
@@ -569,8 +569,12 @@ public:
     // Calculate the minimal size or return m_minSize if bigger.
     wxSize GetMinSize();
 
-    virtual void RecalcSizes() = 0;
+    // These virtual functions are used by the layout algorithm: first
+    // CalcMin() is called to calculate the minimal size of the sizer and
+    // prepare for laying it out and then RecalcSizes() is called to really
+    // update all the sizer items
     virtual wxSize CalcMin() = 0;
+    virtual void RecalcSizes() = 0;
 
     virtual void Layout();
 
@@ -730,8 +734,7 @@ public:
 
 protected:
     void AdjustForFlexDirection();
-    void AdjustForGrowables(const wxSize& sz, const wxSize& minsz,
-                            int nrows, int ncols);
+    void AdjustForGrowables(const wxSize& sz);
 
     // the heights/widths of all rows/columns
     wxArrayInt  m_rowHeights,
@@ -765,24 +768,80 @@ private:
 class WXDLLEXPORT wxBoxSizer: public wxSizer
 {
 public:
-    wxBoxSizer( int orient );
+    wxBoxSizer(int orient)
+    {
+        m_orient = orient;
 
-    void RecalcSizes();
-    wxSize CalcMin();
+        wxASSERT_MSG( m_orient == wxHORIZONTAL || m_orient == wxVERTICAL,
+                      _T("invalid value for wxBoxSizer orientation") );
+    }
+
+    int GetOrientation() const { return m_orient; }
 
-    int GetOrientation() const
-        { return m_orient; }
+    bool IsVertical() const { return m_orient == wxVERTICAL; }
 
-    void SetOrientation(int orient)
-        { m_orient = orient; }
+    void SetOrientation(int orient) { m_orient = orient; }
+
+    // implementation of our resizing logic
+    virtual wxSize CalcMin();
+    virtual void RecalcSizes();
 
 protected:
+    // helpers for our code: this returns the component of the given wxSize in
+    // the direction of the sizer and in the other direction, respectively
+    int SizeInMajorDir(const wxSize& sz) const
+    {
+        return m_orient == wxHORIZONTAL ? sz.x : sz.y;
+    }
+
+    int& SizeInMajorDir(wxSize& sz)
+    {
+        return m_orient == wxHORIZONTAL ? sz.x : sz.y;
+    }
+
+    int& PosInMajorDir(wxPoint& pt)
+    {
+        return m_orient == wxHORIZONTAL ? pt.x : pt.y;
+    }
+
+    int SizeInMinorDir(const wxSize& sz) const
+    {
+        return m_orient == wxHORIZONTAL ? sz.y : sz.x;
+    }
+
+    int& SizeInMinorDir(wxSize& sz)
+    {
+        return m_orient == wxHORIZONTAL ? sz.y : sz.x;
+    }
+
+    int& PosInMinorDir(wxPoint& pt)
+    {
+        return m_orient == wxHORIZONTAL ? pt.y : pt.x;
+    }
+
+    // another helper: creates wxSize from major and minor components
+    wxSize SizeFromMajorMinor(int major, int minor) const
+    {
+        if ( m_orient == wxHORIZONTAL )
+        {
+            return wxSize(major, minor);
+        }
+        else // wxVERTICAL
+        {
+            return wxSize(minor, major);
+        }
+    }
+
+
+    // either wxHORIZONTAL or wxVERTICAL
     int m_orient;
-    int m_stretchable;
-    int m_minWidth;
-    int m_minHeight;
-    int m_fixedWidth;
-    int m_fixedHeight;
+
+    // the sum of proportion of all of our elements
+    int m_totalProportion;
+
+    // the minimal size needed for this sizer as calculated by the last call to
+    // our CalcMin()
+    wxSize m_minSize;
 
 private:
     DECLARE_CLASS(wxBoxSizer)
@@ -794,7 +853,7 @@ private:
 
 #if wxUSE_STATBOX
 
-class WXDLLEXPORT wxStaticBox;
+class WXDLLIMPEXP_FWD_CORE wxStaticBox;
 
 class WXDLLEXPORT wxStaticBoxSizer: public wxBoxSizer
 {