// headers
// ----------------------------------------------------------------------------
-#ifdef __GNUG__
+#if defined(__GNUG__) && !defined(__APPLE__)
#pragma interface "layout.h"
#endif
-#include "wx/defs.h"
+#include "wx/object.h"
// X stupidly defines these in X.h
#ifdef Above
wxAbsolute
};
-enum wxSizerBehaviour
-{
- wxSizerShrink,
- wxSizerExpand,
- wxSizerNone
-};
-
-#define wxTYPE_SIZER 90
-
-// =============================================================================
-// classes
-// =============================================================================
-
// ----------------------------------------------------------------------------
// wxIndividualLayoutConstraint: a constraint on window position
// ----------------------------------------------------------------------------
bool SatisfyConstraints(wxWindowBase *win, int *noChanges);
bool AreSatisfied() const
{
- return left.GetDone() && top.GetDone() && right.GetDone() &&
- bottom.GetDone() && centreX.GetDone() && centreY.GetDone();
+ return left.GetDone() && top.GetDone() &&
+ width.GetDone() && height.GetDone();
}
};
-// ----------------------------------------------------------------------------
-// sizers
-// ----------------------------------------------------------------------------
-
-/*
-
-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
- (e.g. child shrinks around its own children):
- stop when all children return TRUE, or no change
- - evaluate constraints on self to set size
-
- 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
- - fit around children
- (what if some want to be centred? E.g. OK/Cancel rowcol.
- - done by centring e.g. bottom sizer w.r.t. top sizer.
- (sibling relationship only))
- - evaluate own constraints (e.g. may be below another window)
- - IF parent is a real window (remember: a real window can
- have only one child sizer, although a sizer can have several child
- (real) windows), then resize this parent WITHOUT invoking Layout
- again.
- Frame and dialog box OnSizes can check if the sizer is a shrink
- sizer; if not, can call layout. Maybe have virtual bool AutoSizeLayout()
- to determine this.
-
-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.
-
-*/
-
-class WXDLLEXPORT wxSizer : public wxWindow
-{
- DECLARE_DYNAMIC_CLASS(wxSizer)
-
-protected:
- wxSizerBehaviour sizerBehaviour;
- int borderX;
- int borderY;
- int sizerWidth;
- int sizerHeight;
- int sizerX;
- int sizerY;
-
-public:
- wxSizer();
- wxSizer(wxWindowBase *parent, wxSizerBehaviour behav = wxSizerNone);
- ~wxSizer();
-
- bool Create(wxWindowBase *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(wxWindowBase *child);
- virtual void RemoveSizerChild(wxWindowBase *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
-{
- 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(wxWindowBase *parent, bool rowOrCol = wxSIZER_ROWS,
- int rowsOrColSize = 20, wxSizerBehaviour = wxSizerShrink);
- ~wxRowColSizer();
-
- bool Create(wxWindowBase *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
-{
- DECLARE_DYNAMIC_CLASS(wxSpacingSizer)
-
-public:
- wxSpacingSizer();
- wxSpacingSizer(wxWindowBase *parent, wxRelationship rel, wxWindowBase *other, int spacing);
- wxSpacingSizer(wxWindowBase *parent);
- ~wxSpacingSizer();
-
- 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__