X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/debe6624c1e9d4bf3243381153d1e173c849bcd8..8ffd43c56b793781fde046aa532340b92a0067eb:/include/wx/layout.h diff --git a/include/wx/layout.h b/include/wx/layout.h index 13ae082ee2..960ad90716 100644 --- a/include/wx/layout.h +++ b/include/wx/layout.h @@ -6,11 +6,11 @@ // Created: 29/01/98 // RCS-ID: $Id$ // Copyright: (c) 1998 Julian Smart -// Licence: wxWindows license +// Licence: wxWindows license ///////////////////////////////////////////////////////////////////////////// -#ifndef __LAYOUTH__ -#define __LAYOUTH__ +#ifndef _WX_LAYOUTH__ +#define _WX_LAYOUTH__ #ifdef __GNUG__ #pragma interface "layout.h" @@ -48,6 +48,9 @@ class WXDLLEXPORT wxIndividualLayoutConstraint: public wxObject DECLARE_DYNAMIC_CLASS(wxIndividualLayoutConstraint) protected: + // To be allowed to modify the internal variables + friend class wxIndividualLayoutConstraint_Serialize; + // 'This' window is the parent or sibling of otherWin wxWindow *otherWin; @@ -60,8 +63,8 @@ class WXDLLEXPORT wxIndividualLayoutConstraint: public wxObject bool done; public: - wxIndividualLayoutConstraint(void); - ~wxIndividualLayoutConstraint(void); + wxIndividualLayoutConstraint(); + ~wxIndividualLayoutConstraint(); void Set(wxRelationship rel, wxWindow *otherW, wxEdge otherE, int val = 0, int marg = wxLAYOUT_DEFAULT_MARGIN); @@ -89,28 +92,28 @@ class WXDLLEXPORT wxIndividualLayoutConstraint: public wxObject // // Dimension is unconstrained // - inline void Unconstrained(void) { relationship = wxUnconstrained; } + inline void Unconstrained() { relationship = wxUnconstrained; } // // Dimension is 'as is' (use current size settings) // - inline void AsIs(void) { relationship = wxAsIs; } + inline void AsIs() { relationship = wxAsIs; } // // Accessors // - inline wxWindow *GetOtherWindow(void) { return otherWin; } - inline wxEdge GetMyEdge(void) { return myEdge; } + inline wxWindow *GetOtherWindow() { return otherWin; } + inline wxEdge GetMyEdge() const { return myEdge; } inline void SetEdge(wxEdge which) { myEdge = which; } inline void SetValue(int v) { value = v; } - inline int GetMargin(void) { return margin; } + inline int GetMargin() { return margin; } inline void SetMargin(int m) { margin = m; } - inline int GetValue(void) { return value; } - inline int GetPercent(void) { return percent; } - inline int GetOtherEdge(void) { return otherEdge; } - inline bool GetDone(void) { return done; } + inline int GetValue() const { return value; } + inline int GetPercent() const { return percent; } + inline int GetOtherEdge() const { return otherEdge; } + inline bool GetDone() const { return done; } inline void SetDone(bool d) { done = d; } - inline wxRelationship GetRelationship(void) { return relationship; } + inline wxRelationship GetRelationship() { return relationship; } inline void SetRelationship(wxRelationship r) { relationship = r; } // Reset constraint if it mentions otherWin @@ -121,7 +124,7 @@ class WXDLLEXPORT wxIndividualLayoutConstraint: public wxObject // Get the value of this edge or dimension, or if this // is not determinable, -1. - int GetEdge(wxEdge which, wxWindow *thisWin, wxWindow *other); + int GetEdge(wxEdge which, wxWindow *thisWin, wxWindow *other) const; }; class WXDLLEXPORT wxLayoutConstraints: public wxObject @@ -141,10 +144,15 @@ class WXDLLEXPORT wxLayoutConstraints: public wxObject wxIndividualLayoutConstraint centreX; wxIndividualLayoutConstraint centreY; - wxLayoutConstraints(void); - ~wxLayoutConstraints(void); + wxLayoutConstraints(); + ~wxLayoutConstraints(); bool SatisfyConstraints(wxWindow *win, int *noChanges); + bool AreSatisfied() const + { + return left.GetDone() && top.GetDone() && right.GetDone() && + bottom.GetDone() && centreX.GetDone() && centreY.GetDone(); + } }; bool WXDLLEXPORT wxOldDoLayout(wxWindow *win); @@ -156,7 +164,7 @@ Algorithm: Each sizer has a Layout function. wxExpandSizer::Layout ; E.g. for resizeable windows - + - parent size must be known (i.e. called from OnSize or explicitly) - call Layout on each child to give it a chance to resize @@ -166,7 +174,7 @@ Algorithm: wxShrinkSizer::Layout ; E.g. fit-to-contents windows ; Perhaps 2 rowcols, one above other. - + - call Layout on each child to give it a chance to resize (e.g. child shrinks around its own children): stop when each returns TRUE, or no change @@ -185,120 +193,120 @@ Algorithm: How to relayout if a child sizer/window changes? Need to go all the way to the top of the hierarchy and call Layout() again. - + wxRowColSizer::Layout - Similar to wxShrinkSizer only instead of shrinking to fit contents, more sophisticated layout of contents, and THEN shrinking (possibly). - Do the same parent window check/setsize as for wxShrinkSizer. - + */ -typedef enum { +enum wxSizerBehaviour +{ wxSizerShrink, wxSizerExpand, wxSizerNone -} wxSizerBehaviour; +}; #define wxTYPE_SIZER 90 -class WXDLLEXPORT wxSizer: public wxWindow +class WXDLLEXPORT wxSizer : public wxWindow { - DECLARE_DYNAMIC_CLASS(wxSizer) +DECLARE_DYNAMIC_CLASS(wxSizer) - private: - protected: - wxSizerBehaviour sizerBehaviour; - int borderX; - int borderY; - int sizerWidth; - int sizerHeight; - int sizerX; - int sizerY; - public: - wxSizer(void); - wxSizer(wxWindow *parent, wxSizerBehaviour behav = wxSizerNone); - ~wxSizer(void); - - bool Create(wxWindow *parent, wxSizerBehaviour behav = wxSizerNone); - virtual void SetSize(int x, int y, int w, int h, int flags = wxSIZE_AUTO); - // Avoid compiler warning - void SetSize(int w, int h) { wxWindow::SetSize(w, h); } - virtual void Move(int x, int y); - virtual void GetSize(int *w, int *h) const; - inline virtual void GetClientSize(int *w, int *h) const { GetSize(w, h); } - virtual void GetPosition(int *x, int *y) const; - - inline void SizerSetSize(int x, int y, int w, int h) - { SetSize(x, y, w, h); } - inline void SizerMove(int x, int y) - { Move(x, y); } - - virtual void SetBorder(int w, int h); - inline int GetBorderX(void) { return borderX ; } - inline int GetBorderY(void) { return borderY ; } - - virtual void AddSizerChild(wxWindow *child); - virtual void RemoveSizerChild(wxWindow *child); - - inline virtual void SetBehaviour(wxSizerBehaviour b) { sizerBehaviour = b; } - inline virtual wxSizerBehaviour GetBehaviour(void) { return sizerBehaviour; } - - virtual bool LayoutPhase1(int *); - virtual bool LayoutPhase2(int *); +protected: + wxSizerBehaviour sizerBehaviour; + int borderX; + int borderY; + int sizerWidth; + int sizerHeight; + int sizerX; + int sizerY; + +public: + wxSizer(); + wxSizer(wxWindow *parent, wxSizerBehaviour behav = wxSizerNone); + ~wxSizer(); + + bool Create(wxWindow *parent, wxSizerBehaviour behav = wxSizerNone); + + virtual void GetSize(int *w, int *h) const; + + virtual void GetClientSize(int *w, int *h) const { GetSize(w, h); } + + virtual void GetPosition(int *x, int *y) const; + + void SizerSetSize(int x, int y, int w, int h) { SetSize(x, y, w, h); } + void SizerMove(int x, int y) { Move(x, y); } + + virtual void SetBorder(int w, int h); + int GetBorderX() { return borderX ; } + int GetBorderY() { return borderY ; } + + virtual void AddSizerChild(wxWindow *child); + virtual void RemoveSizerChild(wxWindow *child); + + virtual void SetBehaviour(wxSizerBehaviour b) { sizerBehaviour = b; } + virtual wxSizerBehaviour GetBehaviour() { return sizerBehaviour; } + + virtual bool LayoutPhase1(int *); + virtual bool LayoutPhase2(int *); + +protected: + virtual void DoSetSize(int x, int y, + int width, int height, + int sizeFlags = wxSIZE_AUTO); }; #define wxSIZER_ROWS TRUE #define wxSIZER_COLS FALSE -class WXDLLEXPORT wxRowColSizer: public wxSizer +class WXDLLEXPORT wxRowColSizer : public wxSizer { - DECLARE_DYNAMIC_CLASS(wxRowColSizer) - - private: - protected: - bool rowOrCol; - int rowOrColSize; - int xSpacing; - int ySpacing; - public: - // rowOrCol = TRUE to be laid out in rows, otherwise in columns. - wxRowColSizer(void); - wxRowColSizer(wxWindow *parent, bool rowOrCol = wxSIZER_ROWS, int rowsOrColSize = 20, wxSizerBehaviour = wxSizerShrink); - ~wxRowColSizer(void); - - bool Create(wxWindow *parent, bool rowOrCol = wxSIZER_ROWS, int rowsOrColSize = 20, wxSizerBehaviour = wxSizerShrink); - void SetSize(int x, int y, int w, int h, int flags = wxSIZE_AUTO); - // Avoid compiler warning - void SetSize(int w, int h) { wxSizer::SetSize(w, h); } - - inline virtual void SetRowOrCol(bool rc) { rowOrCol = rc; } - inline virtual bool GetRowOrCol(void) { return rowOrCol; } - inline virtual void SetRowOrColSize(int n) { rowOrColSize = n; } - inline virtual int GetRowOrColSize(void) { return rowOrColSize; } - inline virtual void SetSpacing(int x, int y) { xSpacing = x; ySpacing = y; } - inline virtual void GetSpacing(int *x, int *y) { *x = xSpacing; *y = ySpacing; } - - bool LayoutPhase1(int *); - bool LayoutPhase2(int *); +DECLARE_DYNAMIC_CLASS(wxRowColSizer) + +protected: + bool rowOrCol; + int rowOrColSize; + int xSpacing; + int ySpacing; + +public: + // rowOrCol = TRUE to be laid out in rows, otherwise in columns. + wxRowColSizer(); + wxRowColSizer(wxWindow *parent, bool rowOrCol = wxSIZER_ROWS, + int rowsOrColSize = 20, wxSizerBehaviour = wxSizerShrink); + ~wxRowColSizer(); + + bool Create(wxWindow *parent, bool rowOrCol = wxSIZER_ROWS, + int rowsOrColSize = 20, wxSizerBehaviour = wxSizerShrink); + + virtual void SetRowOrCol(bool rc) { rowOrCol = rc; } + virtual bool GetRowOrCol() { return rowOrCol; } + virtual void SetRowOrColSize(int n) { rowOrColSize = n; } + virtual int GetRowOrColSize() { return rowOrColSize; } + virtual void SetSpacing(int x, int y) { xSpacing = x; ySpacing = y; } + virtual void GetSpacing(int *x, int *y) { *x = xSpacing; *y = ySpacing; } + + bool LayoutPhase1(int *); + bool LayoutPhase2(int *); }; -class WXDLLEXPORT wxSpacingSizer: public wxSizer +class WXDLLEXPORT wxSpacingSizer : public wxSizer { - DECLARE_DYNAMIC_CLASS(wxSpacingSizer) +DECLARE_DYNAMIC_CLASS(wxSpacingSizer) - private: - protected: - public: - wxSpacingSizer(void); - wxSpacingSizer(wxWindow *parent, wxRelationship rel, wxWindow *other, int spacing); - wxSpacingSizer(wxWindow *parent); - ~wxSpacingSizer(void); +public: + wxSpacingSizer(); + wxSpacingSizer(wxWindow *parent, wxRelationship rel, wxWindow *other, int spacing); + wxSpacingSizer(wxWindow *parent); + ~wxSpacingSizer(); - bool Create(wxWindow *parent, wxRelationship rel, wxWindow *other, int sp); - bool Create(wxWindow *parent); + bool Create(wxWindow *parent, wxRelationship rel, wxWindow *other, int sp); + bool Create(wxWindow *parent); }; #endif - // __LAYOUTH__ + // _WX_LAYOUTH__