]> git.saurik.com Git - wxWidgets.git/blobdiff - interface/wx/sizer.h
Fix scrolling to the bottom in wxTextCtrl::AppendText().
[wxWidgets.git] / interface / wx / sizer.h
index 3aaae6dfbf67319f676141efa48d9cfb52c669ee..4021991990a9a88003399559bc3b222c30b3e726 100644 (file)
@@ -291,13 +291,15 @@ public:
                      wxObject* userData = NULL);
 
     /**
-        Adds non-stretchable space to the sizer.
+        This base function adds non-stretchable space to both the horizontal
+        and vertical orientation of the sizer.
         More readable way of calling:
         @code
         wxSizer::Add(size, size, 0).
         @endcode
+        @see wxBoxSizer::AddSpacer()
     */
-    wxSizerItem* AddSpacer(int size);
+    virtual wxSizerItem *AddSpacer(int size);
 
     /**
         Adds stretchable space to the sizer.
@@ -568,7 +570,7 @@ public:
 
     /**
         Inserts non-stretchable space to the sizer.
-        More readable way of calling wxSizer::Insert(size, size, 0).
+        More readable way of calling wxSizer::Insert(index, size, size).
     */
     wxSizerItem* InsertSpacer(size_t index, int size);
 
@@ -783,35 +785,28 @@ public:
     /**
         Set an item's minimum size by window, sizer, or position.
 
-        The item will be found recursively in the sizer's descendants.
         This function enables an application to set the size of an item after
         initial creation.
 
+        The @a window or @a sizer will be found recursively in the sizer's
+        descendants.
+
         @see wxSizerItem::SetMinSize()
+
+        @return
+            @true if the minimal size was successfully set or @false if the
+            item was not found.
     */
+    //@{
     bool SetItemMinSize(wxWindow* window, int width, int height);
+    bool SetItemMinSize(wxWindow* window, const wxSize& size);
 
-    /**
-        Set an item's minimum size by window, sizer, or position.
-
-        The item will be found recursively in the sizer's descendants.
-        This function enables an application to set the size of an item after
-        initial creation.
-
-        @see wxSizerItem::SetMinSize()
-    */
     bool SetItemMinSize(wxSizer* sizer, int width, int height);
+    bool SetItemMinSize(wxSizer* sizer, const wxSize& size);
 
-    /**
-        Set an item's minimum size by window, sizer, or position.
-
-        The item will be found recursively in the sizer's descendants.
-        This function enables an application to set the size of an item after
-        initial creation.
-
-        @see wxSizerItem::SetMinSize()
-    */
     bool SetItemMinSize(size_t index, int width, int height);
+    bool SetItemMinSize(size_t index, const wxSize& size);
+    //@}
 
     /**
         Call this to give the sizer a minimal size.
@@ -1022,6 +1017,30 @@ public:
     */
     virtual ~wxSizerItem();
 
+    /**
+        Set the window to be tracked by this item.
+
+        The old window isn't deleted as it is now owned by the sizer item.
+    */
+    void AssignWindow(wxWindow *window);
+
+    /**
+        Set the sizer tracked by this item.
+
+        Old sizer, if any, is deleted.
+    */
+    void AssignSizer(wxSizer *sizer);
+
+    //@{
+    /**
+        Set the size of the spacer tracked by this item.
+
+        Old spacer, if any, is deleted.
+    */
+    void AssignSpacer(const wxSize& size);
+    void AssignSpacer(int w, int h) { AssignSpacer(wxSize(w, h)); }
+    //@}
+
     /**
         Calculates the minimum desired size for the item, including any space
         needed by borders.
@@ -1191,13 +1210,17 @@ public:
 
     /**
         Set the sizer tracked by this item.
-        @deprecated @todo provide deprecation description
+
+        @deprecated This function does not free the old sizer which may result
+        in memory leaks, use AssignSizer() which does free it instead.
     */
     void SetSizer(wxSizer* sizer);
 
     /**
         Set the size of the spacer tracked by this item.
-        @deprecated @todo provide deprecation description
+
+        @deprecated This function does not free the old spacer which may result
+        in memory leaks, use AssignSpacer() which does free it instead.
     */
     void SetSpacer(const wxSize& size);
 
@@ -1435,17 +1458,17 @@ class wxFlexGridSizer : public wxGridSizer
 public:
     //@{
     /**
-        Constructor for a wxFlexGridSizer.
+        wxFlexGridSizer constructors.
 
-        @a rows and @a cols determine the number of columns and rows in the sizer -
-        if either of the parameters is zero, it will be calculated to form the
-        total number of children in the sizer, thus making the sizer grow
-        dynamically.
+        Please see wxGridSizer::wxGridSizer documentation.
 
-        @a vgap and @a hgap define extra space between all children.
+        @since 2.9.1 (except for the four argument overload)
     */
-    wxFlexGridSizer(int rows, int cols, int vgap, int hgap);
-    wxFlexGridSizer(int cols, int vgap = 0, int hgap = 0);
+    wxFlexGridSizer( int cols, int vgap, int hgap );
+    wxFlexGridSizer( int cols, const wxSize& gap = wxSize(0, 0) );
+
+    wxFlexGridSizer( int rows, int cols, int vgap, int hgap );
+    wxFlexGridSizer( int rows, int cols, const wxSize& gap );
     //@}
 
     /**
@@ -1580,18 +1603,27 @@ public:
     /**
         wxGridSizer constructors.
 
-        Usually only the number of columns in the grid sizer needs to be
+        Usually only the number of columns in the flex grid sizer needs to be
         specified using @a cols argument. The number of rows will be deduced
         automatically depending on the number of the elements added to the
-        sizer. If the number of @a rows is explicitly specified (and not zero),
-        the sizer will check that it no more than @code cols*rows @endcode
-        elements are added to it.
+        sizer.
+
+        If a constructor form with @a rows parameter is used (and the value of
+        @a rows argument is not zero, meaning "unspecified") the sizer will
+        check that no more than @c cols*rows elements are added to it, i.e.
+        that no more than the given number of @a rows is used. Adding less than
+        maximally allowed number of items is not an error however.
+
+        Finally, it is also possible to specify the number of rows and use 0
+        for @a cols. In this case, the sizer will use the given fixed number of
+        rows and as many columns as necessary.
 
-        The @a gap (or @a vgap and @a hgap, which correspond to @c y and @c x
-        fields of the wxSize object) argument defines the size of the padding
-        between the grid rows (its vertical component, or @a vgap) and columns
+        The @a gap (or @a vgap and @a hgap, which correspond to the height and
+        width of the wxSize object) argument defines the size of the padding
+        between the rows (its vertical component, or @a vgap) and columns
         (its horizontal component, or @a hgap), in pixels.
 
+
         @since 2.9.1 (except for the four argument overload)
     */
     wxGridSizer( int cols, int vgap, int hgap );
@@ -1602,19 +1634,49 @@ public:
     //@}
 
     /**
-        Returns the number of columns in the sizer.
+        Returns the number of columns that has been specified for the
+        sizer.
+
+        Returns zero if the sizer is automatically adjusting the number of
+        columns depending on number of its children. To get the effective
+        number of columns or rows being currently used, see GetEffectiveColsCount()
     */
     int GetCols() const;
+    
+    /**
+        Returns the number of rows that has been specified for the
+        sizer.
+
+        Returns zero if the sizer is automatically adjusting the number of
+        rows depending on number of its children. To get the effective
+        number of columns or rows being currently used, see GetEffectiveRowsCount().
+    */
+    int GetRows() const;
 
     /**
-        Returns the horizontal gap (in pixels) between cells in the sizer.
+        Returns the number of columns currently used by the sizer.
+
+        This will depend on the number of children the sizer has if
+        the sizer is automatically adjusting the number of columns/rows.
+
+        @since 2.9.1
     */
-    int GetHGap() const;
+    int GetEffectiveColsCount() const;
+    
+    /**
+        Returns the number of rows currently used by the sizer.
+
+        This will depend on the number of children the sizer has if
+        the sizer is automatically adjusting the number of columns/rows.
+
+        @since 2.9.1
+    */
+    int GetEffectiveRowsCount() const;
 
     /**
-        Returns the number of rows in the sizer.
+        Returns the horizontal gap (in pixels) between cells in the sizer.
     */
-    int GetRows() const;
+    int GetHGap() const;
 
     /**
         Returns the vertical gap (in pixels) between the cells in the sizer.
@@ -1647,25 +1709,29 @@ public:
 /**
     @class wxStaticBoxSizer
 
-    wxStaticBoxSizer is a sizer derived from wxBoxSizer but adds a static box around 
+    wxStaticBoxSizer is a sizer derived from wxBoxSizer but adds a static box around
     the sizer.
 
-    The static box may be either created independently or the sizer may create it 
+    The static box may be either created independently or the sizer may create it
     itself as a convenience. In any case, the sizer owns the wxStaticBox control
     and will delete it in the wxStaticBoxSizer destructor.
-    
-    Note that since wxWidgets 2.9.0 you are encouraged to build the windows which are
-    placed inside wxStaticBoxes as children of the wxStaticBox itself:
+
+    Note that since wxWidgets 2.9.1 you are encouraged to create the windows
+    which are added to wxStaticBoxSizer as children of wxStaticBox itself, see
+    this class documentation for more details.
+
+    Example of use of this class:
     @code
-        ...
-        wxStaticBoxSizer *sz = new wxStaticBoxSizer(wxVERTICAL, parentWindow, "StaticBox");
-        sz->Add(new wxStaticText(sz->GetStaticBox(), "This window is a child of the staticbox"));
-        ...
+        void MyFrame::CreateControls()
+        {
+            wxPanel *panel = new wxPanel(this);
+            ...
+            wxStaticBoxSizer *sz = new wxStaticBoxSizer(wxVERTICAL, panel, "Box");
+            sz->Add(new wxStaticText(sz->GetStaticBox(), wxID_ANY,
+                                     "This window is a child of the staticbox"));
+            ...
+        }
     @endcode
-    
-    Creating the windows which are placed inside wxStaticBoxes as siblings of the
-    wxStaticBox is still allowed but it's deprecated as it gives some problems
-    (e.g. relative to tooltips) on some ports.
 
     @library{wxcore}
     @category{winlayout}
@@ -1723,6 +1789,22 @@ public:
     */
     wxBoxSizer(int orient);
 
+    /**
+        Adds non-stretchable space to the main orientation of the sizer only.
+        More readable way of calling:
+        @code
+        if ( wxBoxSizer::IsVertical() )
+        {
+            wxBoxSizer::Add(0, size, 0).
+        }
+        else
+        {
+            wxBoxSizer::Add(size, 0, 0).
+        }
+        @endcode
+    */
+    virtual wxSizerItem *AddSpacer(int size);
+
     /**
         Implements the calculation of a box sizer's minimal.