X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/bfc6fde4b1dd5bfd8ae22839ff9a69cf24eb9120..1a519eb0074879b00b3134211f237637b6c6c066:/include/wx/layout.h diff --git a/include/wx/layout.h b/include/wx/layout.h index 960ad90716..f0affc67ed 100644 --- a/include/wx/layout.h +++ b/include/wx/layout.h @@ -12,150 +12,192 @@ #ifndef _WX_LAYOUTH__ #define _WX_LAYOUTH__ +// ---------------------------------------------------------------------------- +// headers +// ---------------------------------------------------------------------------- + #ifdef __GNUG__ -#pragma interface "layout.h" + #pragma interface "layout.h" #endif #include "wx/defs.h" -class WXDLLEXPORT wxWindow; - // X stupidly defines these in X.h #ifdef Above -#undef Above + #undef Above #endif #ifdef Below -#undef Below + #undef Below #endif +// ---------------------------------------------------------------------------- +// forward declrations +// ---------------------------------------------------------------------------- + +class WXDLLEXPORT wxWindowBase; +class WXDLLEXPORT wxLayoutConstraints; + +// ---------------------------------------------------------------------------- +// constants +// ---------------------------------------------------------------------------- + #define wxLAYOUT_DEFAULT_MARGIN 0 -enum wxEdge { wxLeft, wxTop, wxRight, wxBottom, wxWidth, wxHeight, - wxCentre, wxCenter = wxCentre, wxCentreX, wxCentreY }; -enum wxRelationship { wxUnconstrained = 0, - wxAsIs, - wxPercentOf, - wxAbove, - wxBelow, - wxLeftOf, - wxRightOf, - wxSameAs, - wxAbsolute }; +enum wxEdge +{ + wxLeft, wxTop, wxRight, wxBottom, wxWidth, wxHeight, + wxCentre, wxCenter = wxCentre, wxCentreX, wxCentreY +}; -class WXDLLEXPORT wxLayoutConstraints; -class WXDLLEXPORT wxIndividualLayoutConstraint: public wxObject +enum wxRelationship { - 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; - - wxEdge myEdge; - wxRelationship relationship; - int margin; - int value; - int percent; - wxEdge otherEdge; - bool done; - - public: - wxIndividualLayoutConstraint(); - ~wxIndividualLayoutConstraint(); - - void Set(wxRelationship rel, wxWindow *otherW, wxEdge otherE, int val = 0, int marg = wxLAYOUT_DEFAULT_MARGIN); - - // - // Sibling relationships - // - void LeftOf(wxWindow *sibling, int marg = wxLAYOUT_DEFAULT_MARGIN); - void RightOf(wxWindow *sibling, int marg = wxLAYOUT_DEFAULT_MARGIN); - void Above(wxWindow *sibling, int marg = wxLAYOUT_DEFAULT_MARGIN); - void Below(wxWindow *sibling, int marg = wxLAYOUT_DEFAULT_MARGIN); - - // - // 'Same edge' alignment - // - void SameAs(wxWindow *otherW, wxEdge edge, int marg = wxLAYOUT_DEFAULT_MARGIN); - - // The edge is a percentage of the other window's edge - void PercentOf(wxWindow *otherW, wxEdge wh, int per); - - // - // Edge has absolute value - // - void Absolute(int val); - - // - // Dimension is unconstrained - // - inline void Unconstrained() { relationship = wxUnconstrained; } - - // - // Dimension is 'as is' (use current size settings) - // - inline void AsIs() { relationship = wxAsIs; } - - // - // Accessors - // - 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() { return margin; } - inline void SetMargin(int m) { margin = m; } - 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() { return relationship; } - inline void SetRelationship(wxRelationship r) { relationship = r; } - - // Reset constraint if it mentions otherWin - bool ResetIfWin(wxWindow *otherW); - - // Try to satisfy constraint - bool SatisfyConstraint(wxLayoutConstraints *constraints, wxWindow *win); - - // Get the value of this edge or dimension, or if this - // is not determinable, -1. - int GetEdge(wxEdge which, wxWindow *thisWin, wxWindow *other) const; + wxUnconstrained = 0, + wxAsIs, + wxPercentOf, + wxAbove, + wxBelow, + wxLeftOf, + wxRightOf, + wxSameAs, + wxAbsolute }; -class WXDLLEXPORT wxLayoutConstraints: public wxObject +enum wxSizerBehaviour { - DECLARE_DYNAMIC_CLASS(wxLayoutConstraints) - - public: - // Edge constraints - wxIndividualLayoutConstraint left; - wxIndividualLayoutConstraint top; - wxIndividualLayoutConstraint right; - wxIndividualLayoutConstraint bottom; - // Size constraints - wxIndividualLayoutConstraint width; - wxIndividualLayoutConstraint height; - // Centre constraints - wxIndividualLayoutConstraint centreX; - wxIndividualLayoutConstraint centreY; - - wxLayoutConstraints(); - ~wxLayoutConstraints(); - - bool SatisfyConstraints(wxWindow *win, int *noChanges); - bool AreSatisfied() const - { - return left.GetDone() && top.GetDone() && right.GetDone() && - bottom.GetDone() && centreX.GetDone() && centreY.GetDone(); - } + wxSizerShrink, + wxSizerExpand, + wxSizerNone }; -bool WXDLLEXPORT wxOldDoLayout(wxWindow *win); +#define wxTYPE_SIZER 90 + +// ============================================================================= +// classes +// ============================================================================= + +// ---------------------------------------------------------------------------- +// wxIndividualLayoutConstraint: a constraint on window position +// ---------------------------------------------------------------------------- + +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 + wxWindowBase *otherWin; + + wxEdge myEdge; + wxRelationship relationship; + int margin; + int value; + int percent; + wxEdge otherEdge; + bool done; + +public: + wxIndividualLayoutConstraint(); + ~wxIndividualLayoutConstraint(); + + void Set(wxRelationship rel, wxWindowBase *otherW, wxEdge otherE, int val = 0, int marg = wxLAYOUT_DEFAULT_MARGIN); + + // + // Sibling relationships + // + void LeftOf(wxWindowBase *sibling, int marg = wxLAYOUT_DEFAULT_MARGIN); + void RightOf(wxWindowBase *sibling, int marg = wxLAYOUT_DEFAULT_MARGIN); + void Above(wxWindowBase *sibling, int marg = wxLAYOUT_DEFAULT_MARGIN); + void Below(wxWindowBase *sibling, int marg = wxLAYOUT_DEFAULT_MARGIN); + + // + // 'Same edge' alignment + // + void SameAs(wxWindowBase *otherW, wxEdge edge, int marg = wxLAYOUT_DEFAULT_MARGIN); + + // The edge is a percentage of the other window's edge + void PercentOf(wxWindowBase *otherW, wxEdge wh, int per); + + // + // Edge has absolute value + // + void Absolute(int val); + + // + // Dimension is unconstrained + // + void Unconstrained() { relationship = wxUnconstrained; } + + // + // Dimension is 'as is' (use current size settings) + // + void AsIs() { relationship = wxAsIs; } + + // + // Accessors + // + wxWindowBase *GetOtherWindow() { return otherWin; } + wxEdge GetMyEdge() const { return myEdge; } + void SetEdge(wxEdge which) { myEdge = which; } + void SetValue(int v) { value = v; } + int GetMargin() { return margin; } + void SetMargin(int m) { margin = m; } + int GetValue() const { return value; } + int GetPercent() const { return percent; } + int GetOtherEdge() const { return otherEdge; } + bool GetDone() const { return done; } + void SetDone(bool d) { done = d; } + wxRelationship GetRelationship() { return relationship; } + void SetRelationship(wxRelationship r) { relationship = r; } + + // Reset constraint if it mentions otherWin + bool ResetIfWin(wxWindowBase *otherW); + + // Try to satisfy constraint + bool SatisfyConstraint(wxLayoutConstraints *constraints, wxWindowBase *win); + + // Get the value of this edge or dimension, or if this + // is not determinable, -1. + int GetEdge(wxEdge which, wxWindowBase *thisWin, wxWindowBase *other) const; +}; + +// ---------------------------------------------------------------------------- +// wxLayoutConstraints: the complete set of constraints for a window +// ---------------------------------------------------------------------------- + +class WXDLLEXPORT wxLayoutConstraints : public wxObject +{ + DECLARE_DYNAMIC_CLASS(wxLayoutConstraints) + +public: + // Edge constraints + wxIndividualLayoutConstraint left; + wxIndividualLayoutConstraint top; + wxIndividualLayoutConstraint right; + wxIndividualLayoutConstraint bottom; + // Size constraints + wxIndividualLayoutConstraint width; + wxIndividualLayoutConstraint height; + // Centre constraints + wxIndividualLayoutConstraint centreX; + wxIndividualLayoutConstraint centreY; + + wxLayoutConstraints(); + ~wxLayoutConstraints(); + + bool SatisfyConstraints(wxWindowBase *win, int *noChanges); + bool AreSatisfied() const + { + return left.GetDone() && top.GetDone() && right.GetDone() && + bottom.GetDone() && centreX.GetDone() && centreY.GetDone(); + } +}; + +// ---------------------------------------------------------------------------- +// sizers +// ---------------------------------------------------------------------------- /* @@ -203,18 +245,9 @@ to the top of the hierarchy and call Layout() again. */ -enum wxSizerBehaviour -{ - wxSizerShrink, - wxSizerExpand, - wxSizerNone -}; - -#define wxTYPE_SIZER 90 - class WXDLLEXPORT wxSizer : public wxWindow { -DECLARE_DYNAMIC_CLASS(wxSizer) + DECLARE_DYNAMIC_CLASS(wxSizer) protected: wxSizerBehaviour sizerBehaviour; @@ -227,16 +260,14 @@ protected: public: wxSizer(); - wxSizer(wxWindow *parent, wxSizerBehaviour behav = wxSizerNone); + wxSizer(wxWindowBase *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); } + bool Create(wxWindowBase *parent, wxSizerBehaviour behav = wxSizerNone); - virtual void GetPosition(int *x, int *y) const; + virtual void DoGetSize(int *w, int *h) const; + virtual void DoGetClientSize(int *w, int *h) const { GetSize(w, h); } + virtual void DoGetPosition(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); } @@ -245,8 +276,8 @@ public: int GetBorderX() { return borderX ; } int GetBorderY() { return borderY ; } - virtual void AddSizerChild(wxWindow *child); - virtual void RemoveSizerChild(wxWindow *child); + virtual void AddSizerChild(wxWindowBase *child); + virtual void RemoveSizerChild(wxWindowBase *child); virtual void SetBehaviour(wxSizerBehaviour b) { sizerBehaviour = b; } virtual wxSizerBehaviour GetBehaviour() { return sizerBehaviour; } @@ -265,7 +296,7 @@ protected: class WXDLLEXPORT wxRowColSizer : public wxSizer { -DECLARE_DYNAMIC_CLASS(wxRowColSizer) + DECLARE_DYNAMIC_CLASS(wxRowColSizer) protected: bool rowOrCol; @@ -276,11 +307,11 @@ protected: public: // rowOrCol = TRUE to be laid out in rows, otherwise in columns. wxRowColSizer(); - wxRowColSizer(wxWindow *parent, bool rowOrCol = wxSIZER_ROWS, + wxRowColSizer(wxWindowBase *parent, bool rowOrCol = wxSIZER_ROWS, int rowsOrColSize = 20, wxSizerBehaviour = wxSizerShrink); ~wxRowColSizer(); - bool Create(wxWindow *parent, bool rowOrCol = wxSIZER_ROWS, + bool Create(wxWindowBase *parent, bool rowOrCol = wxSIZER_ROWS, int rowsOrColSize = 20, wxSizerBehaviour = wxSizerShrink); virtual void SetRowOrCol(bool rc) { rowOrCol = rc; } @@ -296,17 +327,25 @@ public: class WXDLLEXPORT wxSpacingSizer : public wxSizer { -DECLARE_DYNAMIC_CLASS(wxSpacingSizer) + DECLARE_DYNAMIC_CLASS(wxSpacingSizer) public: wxSpacingSizer(); - wxSpacingSizer(wxWindow *parent, wxRelationship rel, wxWindow *other, int spacing); - wxSpacingSizer(wxWindow *parent); + wxSpacingSizer(wxWindowBase *parent, wxRelationship rel, wxWindowBase *other, int spacing); + wxSpacingSizer(wxWindowBase *parent); ~wxSpacingSizer(); - bool Create(wxWindow *parent, wxRelationship rel, wxWindow *other, int sp); - bool Create(wxWindow *parent); + bool Create(wxWindowBase *parent, wxRelationship rel, wxWindowBase *other, int sp); + bool Create(wxWindowBase *parent); }; +// ---------------------------------------------------------------------------- +// global functions +// ---------------------------------------------------------------------------- + +#if WXWIN_COMPATIBILITY + extern bool WXDLLEXPORT wxOldDoLayout(wxWindowBase *win); +#endif // WXWIN_COMPATIBILITY + #endif // _WX_LAYOUTH__