]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/sizer.h
removed style parameter from MSWCreate(), it is unneeded
[wxWidgets.git] / include / wx / sizer.h
index 76b3f14090a8267be280a0ddb1cccfa43e8f9891..3c41d70a55586d84056dc6ba916b1bb77117f96d 100644 (file)
@@ -6,13 +6,14 @@
 // Created:
 // RCS-ID:      $Id$
 // Copyright:   (c) Robin Dunn, Dirk Holtwick and Robert Roebling
 // Created:
 // RCS-ID:      $Id$
 // Copyright:   (c) Robin Dunn, Dirk Holtwick and Robert Roebling
+//              (c) 2003, Ron Lee
 // Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
 #ifndef __WXSIZER_H__
 #define __WXSIZER_H__
 
 // Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
 #ifndef __WXSIZER_H__
 #define __WXSIZER_H__
 
-#ifdef __GNUG__
+#if defined(__GNUG__) && !defined(__APPLE__)
 #pragma interface "sizer.h"
 #endif
 
 #pragma interface "sizer.h"
 #endif
 
@@ -38,24 +39,43 @@ class WXDLLEXPORT wxSizerItem: public wxObject
 {
 public:
     // spacer
 {
 public:
     // spacer
-    wxSizerItem( int width, int height, int option, int flag, int border, wxObject* userData);
+    wxSizerItem( int width,
+                 int height,
+                 int proportion,
+                 int flag,
+                 int border,
+                 wxObject* userData);
 
     // window
 
     // window
-    wxSizerItem( wxWindow *window, int option, int flag, int border, wxObject* userData );
+    wxSizerItem( wxWindow *window,
+                 int proportion,
+                 int flag,
+                 int border,
+                 wxObject* userData );
 
     // subsizer
 
     // subsizer
-    wxSizerItem( wxSizer *sizer, int option, int flag, int border, wxObject* userData );
+    wxSizerItem( wxSizer *sizer,
+                 int proportion,
+                 int flag,
+                 int border,
+                 wxObject* userData );
 
     ~wxSizerItem();
     
     virtual void DeleteWindows();
 
 
     ~wxSizerItem();
     
     virtual void DeleteWindows();
 
+    // Enable deleting the SizerItem without destroying the contained sizer.
+    void DetachSizer()
+        { m_sizer = 0; }
+
     virtual wxSize GetSize();
     virtual wxSize CalcMin();
     virtual void SetDimension( wxPoint pos, wxSize size );
 
     wxSize GetMinSize()
         { return m_minSize; }
     virtual wxSize GetSize();
     virtual wxSize CalcMin();
     virtual void SetDimension( wxPoint pos, wxSize size );
 
     wxSize GetMinSize()
         { return m_minSize; }
+    void SetInitSize( int x, int y )
+        { m_minSize.x = x; m_minSize.y = y; }
 
     void SetRatio( int width, int height )
         // if either of dimensions is zero, ratio is assumed to be 1
 
     void SetRatio( int width, int height )
         // if either of dimensions is zero, ratio is assumed to be 1
@@ -72,14 +92,22 @@ public:
     bool IsSizer();
     bool IsSpacer();
 
     bool IsSizer();
     bool IsSpacer();
 
-    void SetInitSize( int x, int y )
-        { m_minSize.x = x; m_minSize.y = y; }
-    void SetOption( int option )
-        { m_option = option; }
+    // Deprecated in 2.6, use {G,S}etProportion instead.
+    wxDEPRECATED( void SetOption( int option ) );
+    wxDEPRECATED( int GetOption() const );
+
+    void SetProportion( int proportion )
+        { m_proportion = proportion; }
+    int GetProportion() const
+        { return m_proportion; }
     void SetFlag( int flag )
         { m_flag = flag; }
     void SetFlag( int flag )
         { m_flag = flag; }
+    int GetFlag() const
+        { return m_flag; }
     void SetBorder( int border )
         { m_border = border; }
     void SetBorder( int border )
         { m_border = border; }
+    int GetBorder() const
+        { return m_border; }
 
     wxWindow *GetWindow() const
         { return m_window; }
 
     wxWindow *GetWindow() const
         { return m_window; }
@@ -89,12 +117,15 @@ public:
         { return m_sizer; }
     void SetSizer( wxSizer *sizer )
         { m_sizer = sizer; }
         { return m_sizer; }
     void SetSizer( wxSizer *sizer )
         { m_sizer = sizer; }
-    int GetOption() const
-        { return m_option; }
-    int GetFlag() const
-        { return m_flag; }
-    int GetBorder() const
-        { return m_border; }
+    const wxSize &GetSpacer() const
+        { return m_size; }
+    void SetSpacer( const wxSize &size )
+        { m_size = size; m_minSize = size; }
+
+    void Show ( bool show );
+    bool IsShown() const
+        { return m_show; }
+
     wxObject* GetUserData()
         { return m_userData; }
     wxPoint GetPosition()
     wxObject* GetUserData()
         { return m_userData; }
     wxPoint GetPosition()
@@ -106,19 +137,28 @@ protected:
     wxSize       m_size;
     wxPoint      m_pos;
     wxSize       m_minSize;
     wxSize       m_size;
     wxPoint      m_pos;
     wxSize       m_minSize;
-    int          m_option;
+    int          m_proportion;
     int          m_border;
     int          m_flag;
     int          m_border;
     int          m_flag;
-    // als: aspect ratio can always be calculated from m_size,
-    //      but this would cause precision loss when the window
-    //      is shrinked.  it is safer to preserve initial value.
+
+    // If true, then this item is considered in the layout
+    // calculation.  Otherwise, it is skipped over. 
+    bool         m_show;
+
+    // Aspect ratio can always be calculated from m_size,
+    // but this would cause precision loss when the window
+    // is shrunk.  It is safer to preserve the initial value.
     float        m_ratio;
     float        m_ratio;
+
     wxObject    *m_userData;
 
     wxObject    *m_userData;
 
-private:
-    DECLARE_CLASS(wxSizerItem);
+    DECLARE_DYNAMIC_CLASS(wxSizerItem);
+    DECLARE_NO_COPY_CLASS(wxSizerItem)
 };
 
 };
 
+WX_DECLARE_EXPORTED_LIST( wxSizerItem, wxSizerItemList );
+
+
 //---------------------------------------------------------------------------
 // wxSizer
 //---------------------------------------------------------------------------
 //---------------------------------------------------------------------------
 // wxSizer
 //---------------------------------------------------------------------------
@@ -130,23 +170,75 @@ public:
     ~wxSizer();
 
     /* These should be called Append() really. */
     ~wxSizer();
 
     /* These should be called Append() really. */
-    virtual void Add( wxWindow *window, int option = 0, int flag = 0, int border = 0, wxObject* userData = NULL );
-    virtual void Add( wxSizer *sizer, int option = 0, int flag = 0, int border = 0, wxObject* userData = NULL );
-    virtual void Add( int width, int height, int option = 0, int flag = 0, int border = 0, wxObject* userData = NULL );
-
-    virtual void Insert( int before, wxWindow *window, int option = 0, int flag = 0, int border = 0, wxObject* userData = NULL );
-    virtual void Insert( int before, wxSizer *sizer, int option = 0, int flag = 0, int border = 0, wxObject* userData = NULL );
-    virtual void Insert( int before, int width, int height, int option = 0, int flag = 0, int border = 0, wxObject* userData = NULL );
+    virtual void Add( wxWindow *window,
+                      int proportion = 0,
+                      int flag = 0,
+                      int border = 0,
+                      wxObject* userData = NULL );
+    virtual void Add( wxSizer *sizer,
+                      int proportion = 0,
+                      int flag = 0,
+                      int border = 0,
+                      wxObject* userData = NULL );
+    virtual void Add( int width,
+                      int height,
+                      int proportion = 0,
+                      int flag = 0,
+                      int border = 0,
+                      wxObject* userData = NULL );
+    virtual void Add( wxSizerItem *item );
+
+    virtual void Insert( size_t index,
+                         wxWindow *window,
+                         int proportion = 0,
+                         int flag = 0,
+                         int border = 0,
+                         wxObject* userData = NULL );
+    virtual void Insert( size_t index,
+                         wxSizer *sizer,
+                         int proportion = 0,
+                         int flag = 0,
+                         int border = 0,
+                         wxObject* userData = NULL );
+    virtual void Insert( size_t index,
+                         int width,
+                         int height,
+                         int proportion = 0,
+                         int flag = 0,
+                         int border = 0,
+                         wxObject* userData = NULL );
+    virtual void Insert( size_t index,
+                         wxSizerItem *item );
+
+    virtual void Prepend( wxWindow *window,
+                          int proportion = 0,
+                          int flag = 0,
+                          int border = 0,
+                          wxObject* userData = NULL );
+    virtual void Prepend( wxSizer *sizer,
+                          int proportion = 0,
+                          int flag = 0,
+                          int border = 0,
+                          wxObject* userData = NULL );
+    virtual void Prepend( int width,
+                          int height,
+                          int proportion = 0,
+                          int flag = 0,
+                          int border = 0,
+                          wxObject* userData = NULL );
+    virtual void Prepend( wxSizerItem *item );
+
+    // Deprecated in 2.6 since historically it does not delete the window,
+    // use Detach instead.
+    wxDEPRECATED( virtual bool Remove( wxWindow *window ) );
+    virtual bool Remove( wxSizer *sizer );
+    virtual bool Remove( size_t index );
 
 
-    virtual void Prepend( wxWindow *window, int option = 0, int flag = 0, int border = 0, wxObject* userData = NULL );
-    virtual void Prepend( wxSizer *sizer, int option = 0, int flag = 0, int border = 0, wxObject* userData = NULL );
-    virtual void Prepend( int width, int height, int option = 0, int flag = 0, int border = 0, wxObject* userData = NULL );
+    virtual bool Detach( wxWindow *window );
+    virtual bool Detach( wxSizer *sizer );
+    virtual bool Detach( size_t index );
 
 
-    virtual bool Remove( wxWindow *window );
-    virtual bool Remove( wxSizer *sizer );
-    virtual bool Remove( int pos );
-    
-    virtual void Clear( bool delete_windows=FALSE );
+    virtual void Clear( bool delete_windows=false );
     virtual void DeleteWindows();
 
     void SetMinSize( int width, int height )
     virtual void DeleteWindows();
 
     void SetMinSize( int width, int height )
@@ -166,10 +258,10 @@ public:
     bool SetItemMinSize( wxSizer *sizer, wxSize size )
         { return DoSetItemMinSize( sizer, size.x, size.y ); }
 
     bool SetItemMinSize( wxSizer *sizer, wxSize size )
         { return DoSetItemMinSize( sizer, size.x, size.y ); }
 
-    bool SetItemMinSize( int pos, int width, int height )
-        { return DoSetItemMinSize( pos, width, height ); }
-    bool SetItemMinSize( int pos, wxSize size )
-        { return DoSetItemMinSize( pos, size.x, size.y ); }
+    bool SetItemMinSize( size_t index, int width, int height )
+        { return DoSetItemMinSize( index, width, height ); }
+    bool SetItemMinSize( size_t index, wxSize size )
+        { return DoSetItemMinSize( index, size.x, size.y ); }
 
     wxSize GetSize()
         { return m_size; }
 
     wxSize GetSize()
         { return m_size; }
@@ -189,16 +281,36 @@ public:
     void SetSizeHints( wxWindow *window );
     void SetVirtualSizeHints( wxWindow *window );
 
     void SetSizeHints( wxWindow *window );
     void SetVirtualSizeHints( wxWindow *window );
 
-    wxList& GetChildren()
+    wxSizerItemList& GetChildren()
         { return m_children; }
 
     void SetDimension( int x, int y, int width, int height );
 
         { return m_children; }
 
     void SetDimension( int x, int y, int width, int height );
 
+    // Manage whether individual scene items are considered
+    // in the layout calculations or not.
+    void Show( wxWindow *window, bool show = true );
+    void Show( wxSizer *sizer, bool show = true );
+    void Show( size_t index, bool show = true );
+
+    void Hide( wxSizer *sizer )
+        { Show( sizer, false ); }
+    void Hide( wxWindow *window )
+        { Show( window, false ); }
+    void Hide( size_t index )
+        { Show( index, false ); }
+
+    bool IsShown( wxWindow *window );
+    bool IsShown( wxSizer *sizer );
+    bool IsShown( size_t index );
+    
+    // Recursively call wxWindow::Show () on all sizer items.
+    void ShowItems (bool show);
+
 protected:
 protected:
-    wxSize  m_size;
-    wxSize  m_minSize;
-    wxPoint m_position;
-    wxList  m_children;
+    wxSize              m_size;
+    wxSize              m_minSize;
+    wxPoint             m_position;
+    wxSizerItemList     m_children;
 
     wxSize GetMaxWindowSize( wxWindow *window );
     wxSize GetMinWindowSize( wxWindow *window );
 
     wxSize GetMaxWindowSize( wxWindow *window );
     wxSize GetMinWindowSize( wxWindow *window );
@@ -210,10 +322,9 @@ protected:
     virtual void DoSetMinSize( int width, int height );
     virtual bool DoSetItemMinSize( wxWindow *window, int width, int height );
     virtual bool DoSetItemMinSize( wxSizer *sizer, int width, int height );
     virtual void DoSetMinSize( int width, int height );
     virtual bool DoSetItemMinSize( wxWindow *window, int width, int height );
     virtual bool DoSetItemMinSize( wxSizer *sizer, int width, int height );
-    virtual bool DoSetItemMinSize( int pos, int width, int height );
+    virtual bool DoSetItemMinSize( size_t index, int width, int height );
 
 
-private:
-    DECLARE_CLASS(wxSizer);
+    DECLARE_DYNAMIC_CLASS(wxSizer);
 };
 
 //---------------------------------------------------------------------------
 };
 
 //---------------------------------------------------------------------------
@@ -244,10 +355,12 @@ protected:
     int    m_vgap;
     int    m_hgap;
 
     int    m_vgap;
     int    m_hgap;
 
+    // return the number of total items and the number of columns and rows
+    int CalcRowsCols(int& rows, int& cols) const;
+
     void SetItemBounds( wxSizerItem *item, int x, int y, int w, int h );
 
     void SetItemBounds( wxSizerItem *item, int x, int y, int w, int h );
 
-private:
-    DECLARE_CLASS(wxGridSizer);
+    DECLARE_DYNAMIC_CLASS(wxGridSizer);
 };
 
 //---------------------------------------------------------------------------
 };
 
 //---------------------------------------------------------------------------
@@ -277,8 +390,8 @@ protected:
 
     void CreateArrays();
 
 
     void CreateArrays();
 
-private:
-    DECLARE_CLASS(wxFlexGridSizer);
+    DECLARE_DYNAMIC_CLASS(wxFlexGridSizer);
+    DECLARE_NO_COPY_CLASS(wxFlexGridSizer)
 };
 
 //---------------------------------------------------------------------------
 };
 
 //---------------------------------------------------------------------------
@@ -296,6 +409,9 @@ public:
     int GetOrientation()
         { return m_orient; }
 
     int GetOrientation()
         { return m_orient; }
 
+    void SetOrientation(int orient)
+        { m_orient = orient; }
+
 protected:
     int m_orient;
     int m_stretchable;
 protected:
     int m_orient;
     int m_stretchable;
@@ -304,8 +420,7 @@ protected:
     int m_fixedWidth;
     int m_fixedHeight;
 
     int m_fixedWidth;
     int m_fixedHeight;
 
-private:
-    DECLARE_CLASS(wxBoxSizer);
+    DECLARE_DYNAMIC_CLASS(wxBoxSizer);
 };
 
 //---------------------------------------------------------------------------
 };
 
 //---------------------------------------------------------------------------
@@ -330,8 +445,8 @@ public:
 protected:
     wxStaticBox   *m_staticBox;
 
 protected:
     wxStaticBox   *m_staticBox;
 
-private:
-    DECLARE_CLASS(wxStaticBoxSizer);
+    DECLARE_DYNAMIC_CLASS(wxStaticBoxSizer);
+    DECLARE_NO_COPY_CLASS(wxStaticBoxSizer)
 };
 
 #endif // wxUSE_STATBOX
 };
 
 #endif // wxUSE_STATBOX
@@ -358,8 +473,8 @@ public:
 protected:
     wxNotebook   *m_notebook;
 
 protected:
     wxNotebook   *m_notebook;
 
-private:
-    DECLARE_CLASS(wxNotebookSizer);
+    DECLARE_DYNAMIC_CLASS(wxNotebookSizer);
+    DECLARE_NO_COPY_CLASS(wxNotebookSizer)
 };
 
 #endif // wxUSE_NOTEBOOK
 };
 
 #endif // wxUSE_NOTEBOOK