// 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"
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;
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);
//
// 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
// 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
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);
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
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
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(const int x, const int y, const int w, const int h, const int flags = wxSIZE_AUTO);
- // Avoid compiler warning
- void SetSize(const int w, const int h) { wxWindow::SetSize(w, h); }
- virtual void Move(const int x, const 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(const int x, const int y, const int w, const int h)
- { SetSize(x, y, w, h); }
- inline void SizerMove(const int x, const 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(const int x, const int y, const int w, const int h, const int flags = wxSIZE_AUTO);
- // Avoid compiler warning
- void SetSize(const int w, const 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__