/////////////////////////////////////////////////////////////////////////////
-// Name: sizer.h
+// Name: wx/sizer.h
// Purpose: provide wxSizer class for layout
// Author: Robert Roebling and Robin Dunn
// Modified by: Ron Lee, Vadim Zeitlin (wxSizerFlags)
#include "wx/defs.h"
-#include "wx/button.h"
#include "wx/window.h"
-#include "wx/frame.h"
-#include "wx/dialog.h"
//---------------------------------------------------------------------------
// classes
//---------------------------------------------------------------------------
+class WXDLLEXPORT wxButton;
+class WXDLLEXPORT wxBoxSizer;
class WXDLLEXPORT wxSizerItem;
class WXDLLEXPORT wxSizer;
-class WXDLLEXPORT wxBoxSizer;
+#ifndef wxUSE_BORDER_BY_DEFAULT
+ #ifdef __SMARTPHONE__
+ // no borders by default on limited size screen
+ #define wxUSE_BORDER_BY_DEFAULT 0
+ #else
+ #define wxUSE_BORDER_BY_DEFAULT 1
+ #endif
+#endif
// ----------------------------------------------------------------------------
// wxSizerFlags: flags used for an item in the sizer
wxSizerFlags& Left() { return Align(wxALIGN_LEFT); }
wxSizerFlags& Right() { return Align(wxALIGN_RIGHT); }
+ // default border size used by Border() below
+ static int GetDefaultBorder()
+ {
+#if wxUSE_BORDER_BY_DEFAULT
+ // FIXME: default border size shouldn't be hardcoded and at the very
+ // least they should depend on the current font size
+ return 5;
+#else
+ return 0;
+#endif
+ }
+
wxSizerFlags& Border(int direction, int borderInPixels)
{
wxSizerFlags& Border(int direction = wxALL)
{
- // FIXME: default border size shouldn't be hardcoded
-#ifdef __SMARTPHONE__
+#if wxUSE_BORDER_BY_DEFAULT
+ return Border(direction, GetDefaultBorder());
+#else
// no borders by default on limited size screen
wxUnusedVar(direction);
return *this;
+#endif
+ }
+
+ wxSizerFlags& DoubleBorder(int direction = wxALL)
+ {
+#if wxUSE_BORDER_BY_DEFAULT
+ return Border(direction, 2*GetDefaultBorder());
#else
- return Border(direction, 5);
+ wxUnusedVar(direction);
+
+ return *this;
#endif
}
+ wxSizerFlags& TripleBorder(int direction = wxALL)
+ {
+#if wxUSE_BORDER_BY_DEFAULT
+ return Border(direction, 3*GetDefaultBorder());
+#else
+ wxUnusedVar(direction);
+
+ return *this;
+#endif
+ }
+
+ wxSizerFlags& HorzBorder()
+ {
+#if wxUSE_BORDER_BY_DEFAULT
+ return Border(wxLEFT | wxRIGHT, GetDefaultBorder());
+#else
+ return *this;
+#endif
+ }
+
+ wxSizerFlags& DoubleHorzBorder()
+ {
+#if wxUSE_BORDER_BY_DEFAULT
+ return Border(wxLEFT | wxRIGHT, 2*GetDefaultBorder());
+#else
+ return *this;
+#endif
+ }
// accessors for wxSizer only
int GetProportion() const { return m_proportion; }
bool IsSizer() const { return m_kind == Item_Sizer; }
bool IsSpacer() const { return m_kind == Item_Spacer; }
+#if WXWIN_COMPATIBILITY_2_6
// Deprecated in 2.6, use {G,S}etProportion instead.
wxDEPRECATED( void SetOption( int option ) );
wxDEPRECATED( int GetOption() const );
+#endif // WXWIN_COMPATIBILITY_2_6
void SetProportion( int proportion )
{ m_proportion = proportion; }
{ return m_kind == Item_Sizer ? m_sizer : NULL; }
wxSize GetSpacer() const;
+ // this function behaves obviously for the windows and spacers but for the
+ // sizers it returns true if any sizer element is shown and only returns
+ // false if all of them are hidden
+ bool IsShown() const;
void Show(bool show);
void SetUserData(wxObject* userData)
void SetSpacer(const wxSize& size);
void SetSpacer(int width, int height) { SetSpacer(wxSize(width, height)); }
- // this function is deprecated because if this item is a sizer, then it
- // doesn't really make sense: sizer is neither shown nor hidden, because
- // some of its elements may be hidden while others are shown
- wxDEPRECATED( bool IsShown() const );
-
protected:
// common part of several ctors
void Init() { m_userData = NULL; }
class WXDLLEXPORT wxSizer: public wxObject, public wxClientDataContainer
{
public:
- wxSizer() { }
- ~wxSizer();
+ wxSizer() { m_containingWindow = NULL; }
+ virtual ~wxSizer();
// methods for adding elements to the sizer: there are Add/Insert/Prepend
// overloads for each of window/sizer/spacer/wxSizerItem
- inline wxSizerItem* Add( wxWindow *window,
- int proportion = 0,
- int flag = 0,
- int border = 0,
- wxObject* userData = NULL );
- inline wxSizerItem* Add( wxSizer *sizer,
- int proportion = 0,
- int flag = 0,
- int border = 0,
- wxObject* userData = NULL );
- inline wxSizerItem* Add( int width,
- int height,
- int proportion = 0,
- int flag = 0,
- int border = 0,
- wxObject* userData = NULL );
- inline wxSizerItem* Add( wxWindow *window, const wxSizerFlags& flags );
- inline wxSizerItem* Add( wxSizer *sizer, const wxSizerFlags& flags );
- inline wxSizerItem* Add( wxSizerItem *item );
-
- inline wxSizerItem* AddSpacer(int size);
- inline wxSizerItem* AddStretchSpacer(int prop = 1);
-
- inline wxSizerItem* Insert( size_t index,
- wxWindow *window,
- int proportion = 0,
- int flag = 0,
- int border = 0,
- wxObject* userData = NULL );
- inline wxSizerItem* Insert( size_t index,
- wxSizer *sizer,
- int proportion = 0,
- int flag = 0,
- int border = 0,
- wxObject* userData = NULL );
- inline wxSizerItem* Insert( size_t index,
- int width,
- int height,
- int proportion = 0,
- int flag = 0,
- int border = 0,
- wxObject* userData = NULL );
- inline wxSizerItem* Insert( size_t index,
- wxWindow *window,
- const wxSizerFlags& flags );
- inline wxSizerItem* Insert( size_t index,
- wxSizer *sizer,
- const wxSizerFlags& flags );
- virtual wxSizerItem* Insert( size_t index, wxSizerItem *item );
-
- inline wxSizerItem* InsertSpacer(size_t index, int size);
- inline wxSizerItem* InsertStretchSpacer(size_t index, int prop = 1);
-
- inline wxSizerItem* Prepend( wxWindow *window,
- int proportion = 0,
- int flag = 0,
- int border = 0,
- wxObject* userData = NULL );
- inline wxSizerItem* Prepend( wxSizer *sizer,
- int proportion = 0,
- int flag = 0,
- int border = 0,
- wxObject* userData = NULL );
- inline wxSizerItem* Prepend( int width,
- int height,
- int proportion = 0,
- int flag = 0,
- int border = 0,
- wxObject* userData = NULL );
- inline wxSizerItem* Prepend( wxWindow *window, const wxSizerFlags& flags );
- inline wxSizerItem* Prepend( wxSizer *sizer, const wxSizerFlags& flags );
- inline wxSizerItem* Prepend( wxSizerItem *item );
-
- inline wxSizerItem* PrependSpacer(int size);
- inline wxSizerItem* PrependStretchSpacer(int prop = 1);
-
-
+ wxSizerItem* Add(wxWindow *window,
+ int proportion = 0,
+ int flag = 0,
+ int border = 0,
+ wxObject* userData = NULL);
+ wxSizerItem* Add(wxSizer *sizer,
+ int proportion = 0,
+ int flag = 0,
+ int border = 0,
+ wxObject* userData = NULL);
+ wxSizerItem* Add(int width,
+ int height,
+ int proportion = 0,
+ int flag = 0,
+ int border = 0,
+ wxObject* userData = NULL);
+ wxSizerItem* Add( wxWindow *window, const wxSizerFlags& flags);
+ wxSizerItem* Add( wxSizer *sizer, const wxSizerFlags& flags);
+ wxSizerItem* Add( wxSizerItem *item);
+
+ wxSizerItem* AddSpacer(int size);
+ wxSizerItem* AddStretchSpacer(int prop = 1);
+
+ wxSizerItem* Insert(size_t index,
+ wxWindow *window,
+ int proportion = 0,
+ int flag = 0,
+ int border = 0,
+ wxObject* userData = NULL);
+ wxSizerItem* Insert(size_t index,
+ wxSizer *sizer,
+ int proportion = 0,
+ int flag = 0,
+ int border = 0,
+ wxObject* userData = NULL);
+ wxSizerItem* Insert(size_t index,
+ int width,
+ int height,
+ int proportion = 0,
+ int flag = 0,
+ int border = 0,
+ wxObject* userData = NULL);
+ wxSizerItem* Insert(size_t index,
+ wxWindow *window,
+ const wxSizerFlags& flags);
+ wxSizerItem* Insert(size_t index,
+ wxSizer *sizer,
+ const wxSizerFlags& flags);
+ virtual wxSizerItem* Insert( size_t index, wxSizerItem *item);
+
+ wxSizerItem* InsertSpacer(size_t index, int size);
+ wxSizerItem* InsertStretchSpacer(size_t index, int prop = 1);
+
+ wxSizerItem* Prepend(wxWindow *window,
+ int proportion = 0,
+ int flag = 0,
+ int border = 0,
+ wxObject* userData = NULL);
+ wxSizerItem* Prepend(wxSizer *sizer,
+ int proportion = 0,
+ int flag = 0,
+ int border = 0,
+ wxObject* userData = NULL);
+ wxSizerItem* Prepend(int width,
+ int height,
+ int proportion = 0,
+ int flag = 0,
+ int border = 0,
+ wxObject* userData = NULL);
+ wxSizerItem* Prepend(wxWindow *window, const wxSizerFlags& flags);
+ wxSizerItem* Prepend(wxSizer *sizer, const wxSizerFlags& flags);
+ wxSizerItem* Prepend(wxSizerItem *item);
+
+ wxSizerItem* PrependSpacer(int size);
+ wxSizerItem* PrependStretchSpacer(int prop = 1);
+
+ // set (or possibly unset if window is NULL) or get the window this sizer
+ // is used in
+ void SetContainingWindow(wxWindow *window);
+ wxWindow *GetContainingWindow() const { return m_containingWindow; }
+
+#if WXWIN_COMPATIBILITY_2_6
// Deprecated in 2.6 since historically it does not delete the window,
// use Detach instead.
wxDEPRECATED( virtual bool Remove( wxWindow *window ) );
+#endif // WXWIN_COMPATIBILITY_2_6
+
virtual bool Remove( wxSizer *sizer );
virtual bool Remove( int index );
virtual bool Detach( wxSizer *sizer );
virtual bool Detach( int index );
+ virtual bool Replace( wxWindow *oldwin, wxWindow *newwin, bool recursive = false );
+ virtual bool Replace( wxSizer *oldsz, wxSizer *newsz, bool recursive = false );
+ virtual bool Replace( size_t index, wxSizerItem *newitem );
+
virtual void Clear( bool delete_windows = false );
virtual void DeleteWindows();
wxPoint m_position;
wxSizerItemList m_children;
+ // the window this sizer is used in, can be NULL
+ wxWindow *m_containingWindow;
+
wxSize GetMaxWindowSize( wxWindow *window ) const;
wxSize GetMinWindowSize( wxWindow *window );
wxSize GetMaxClientSize( wxWindow *window ) const;
public:
wxStaticBoxSizer(wxStaticBox *box, int orient);
wxStaticBoxSizer(int orient, wxWindow *win, const wxString& label = wxEmptyString);
+ virtual ~wxStaticBoxSizer();
void RecalcSizes();
wxSize CalcMin();
// override to hide/show the static box as well
virtual void ShowItems (bool show);
+ virtual bool Detach( wxWindow *window );
+ virtual bool Detach( wxSizer *sizer ) { return wxBoxSizer::Detach(sizer); }
+ virtual bool Detach( int index ) { return wxBoxSizer::Detach(index); }
+
protected:
wxStaticBox *m_staticBox;
class WXDLLEXPORT wxBookCtrlSizer : public wxSizer
{
public:
+#if WXWIN_COMPATIBILITY_2_6
wxDEPRECATED( wxBookCtrlSizer(wxBookCtrlBase *bookctrl) );
+#endif // WXWIN_COMPATIBILITY_2_6
wxBookCtrlBase *GetControl() const { return m_bookctrl; }
class WXDLLEXPORT wxNotebookSizer : public wxBookCtrlSizer
{
public:
+#if WXWIN_COMPATIBILITY_2_6
wxDEPRECATED( wxNotebookSizer(wxNotebook *nb) );
+#endif // WXWIN_COMPATIBILITY_2_6
wxNotebook *GetNotebook() const { return (wxNotebook *)m_bookctrl; }
// inline functions implementation
// ----------------------------------------------------------------------------
+inline wxSizerItem*
+wxSizer::Add( wxSizerItem *item )
+{
+ return Insert( m_children.GetCount(), item );
+}
+
inline wxSizerItem*
wxSizer::Add( wxWindow *window, int proportion, int flag, int border, wxObject* userData )
{
return Add( new wxSizerItem(sizer, flags) );
}
-inline wxSizerItem*
-wxSizer::Add( wxSizerItem *item )
-{
- return Insert( m_children.GetCount(), item );
-}
-
inline wxSizerItem*
wxSizer::AddSpacer(int size)
{
return Add(0, 0, prop);
}
+inline wxSizerItem*
+wxSizer::Prepend( wxSizerItem *item )
+{
+ return Insert( 0, item );
+}
+
inline wxSizerItem*
wxSizer::Prepend( wxWindow *window, int proportion, int flag, int border, wxObject* userData )
{
return Prepend( new wxSizerItem( width, height, proportion, flag, border, userData ) );
}
-inline wxSizerItem*
-wxSizer::Prepend( wxSizerItem *item )
-{
- return Insert( 0, item );
-}
-
inline wxSizerItem*
wxSizer::PrependSpacer(int size)
{
#endif // __WXSIZER_H__
-