1 ///////////////////////////////////////////////////////////////////////////// 2 // Name: wx/layout.h 3 // Purpose: OBSOLETE layout constraint classes, use sizers instead 4 // Author: Julian Smart 5 // Modified by: 6 // Created: 29/01/98 7 // RCS-ID: $Id: layout.h 49563 2007-10-31 20:46:21Z VZ $ 8 // Copyright: (c) 1998 Julian Smart 9 // Licence: wxWindows licence 10 ///////////////////////////////////////////////////////////////////////////// 11 12 #ifndef _WX_LAYOUT_H_ 13 #define _WX_LAYOUT_H_ 14 15 // ---------------------------------------------------------------------------- 16 // headers 17 // ---------------------------------------------------------------------------- 18 19 #include "wx/object.h" 20 21 // X stupidly defines these in X.h 22 #ifdef Above 23 #undef Above 24 #endif 25 #ifdef Below 26 #undef Below 27 #endif 28 29 #if wxUSE_CONSTRAINTS 30 31 // ---------------------------------------------------------------------------- 32 // forward declrations 33 // ---------------------------------------------------------------------------- 34 35 class WXDLLIMPEXP_FWD_CORE wxWindowBase; 36 class WXDLLIMPEXP_FWD_CORE wxLayoutConstraints; 37 38 // ---------------------------------------------------------------------------- 39 // constants 40 // ---------------------------------------------------------------------------- 41 42 #define wxLAYOUT_DEFAULT_MARGIN 0 43 44 enum wxEdge 45 { 46 wxLeft, wxTop, wxRight, wxBottom, wxWidth, wxHeight, 47 wxCentre, wxCenter = wxCentre, wxCentreX, wxCentreY 48 }; 49 50 enum wxRelationship 51 { 52 wxUnconstrained = 0, 53 wxAsIs, 54 wxPercentOf, 55 wxAbove, 56 wxBelow, 57 wxLeftOf, 58 wxRightOf, 59 wxSameAs, 60 wxAbsolute 61 }; 62 63 // ---------------------------------------------------------------------------- 64 // wxIndividualLayoutConstraint: a constraint on window position 65 // ---------------------------------------------------------------------------- 66 67 class WXDLLEXPORT wxIndividualLayoutConstraint : public wxObject 68 { 69 public: 70 wxIndividualLayoutConstraint(); 71 72 // note that default copy ctor and assignment operators are ok 73 ~wxIndividualLayoutConstraint()74 virtual ~wxIndividualLayoutConstraint(){} 75 76 void Set(wxRelationship rel, wxWindowBase *otherW, wxEdge otherE, int val = 0, int marg = wxLAYOUT_DEFAULT_MARGIN); 77 78 // 79 // Sibling relationships 80 // 81 void LeftOf(wxWindowBase *sibling, int marg = wxLAYOUT_DEFAULT_MARGIN); 82 void RightOf(wxWindowBase *sibling, int marg = wxLAYOUT_DEFAULT_MARGIN); 83 void Above(wxWindowBase *sibling, int marg = wxLAYOUT_DEFAULT_MARGIN); 84 void Below(wxWindowBase *sibling, int marg = wxLAYOUT_DEFAULT_MARGIN); 85 86 // 87 // 'Same edge' alignment 88 // 89 void SameAs(wxWindowBase *otherW, wxEdge edge, int marg = wxLAYOUT_DEFAULT_MARGIN); 90 91 // The edge is a percentage of the other window's edge 92 void PercentOf(wxWindowBase *otherW, wxEdge wh, int per); 93 94 // 95 // Edge has absolute value 96 // 97 void Absolute(int val); 98 99 // 100 // Dimension is unconstrained 101 // Unconstrained()102 void Unconstrained() { relationship = wxUnconstrained; } 103 104 // 105 // Dimension is 'as is' (use current size settings) 106 // AsIs()107 void AsIs() { relationship = wxAsIs; } 108 109 // 110 // Accessors 111 // GetOtherWindow()112 wxWindowBase *GetOtherWindow() { return otherWin; } GetMyEdge()113 wxEdge GetMyEdge() const { return myEdge; } SetEdge(wxEdge which)114 void SetEdge(wxEdge which) { myEdge = which; } SetValue(int v)115 void SetValue(int v) { value = v; } GetMargin()116 int GetMargin() { return margin; } SetMargin(int m)117 void SetMargin(int m) { margin = m; } GetValue()118 int GetValue() const { return value; } GetPercent()119 int GetPercent() const { return percent; } GetOtherEdge()120 int GetOtherEdge() const { return otherEdge; } GetDone()121 bool GetDone() const { return done; } SetDone(bool d)122 void SetDone(bool d) { done = d; } GetRelationship()123 wxRelationship GetRelationship() { return relationship; } SetRelationship(wxRelationship r)124 void SetRelationship(wxRelationship r) { relationship = r; } 125 126 // Reset constraint if it mentions otherWin 127 bool ResetIfWin(wxWindowBase *otherW); 128 129 // Try to satisfy constraint 130 bool SatisfyConstraint(wxLayoutConstraints *constraints, wxWindowBase *win); 131 132 // Get the value of this edge or dimension, or if this 133 // is not determinable, -1. 134 int GetEdge(wxEdge which, wxWindowBase *thisWin, wxWindowBase *other) const; 135 136 protected: 137 // To be allowed to modify the internal variables 138 friend class wxIndividualLayoutConstraint_Serialize; 139 140 // 'This' window is the parent or sibling of otherWin 141 wxWindowBase *otherWin; 142 143 wxEdge myEdge; 144 wxRelationship relationship; 145 int margin; 146 int value; 147 int percent; 148 wxEdge otherEdge; 149 bool done; 150 151 DECLARE_DYNAMIC_CLASS(wxIndividualLayoutConstraint) 152 }; 153 154 // ---------------------------------------------------------------------------- 155 // wxLayoutConstraints: the complete set of constraints for a window 156 // ---------------------------------------------------------------------------- 157 158 class WXDLLEXPORT wxLayoutConstraints : public wxObject 159 { 160 public: 161 // Edge constraints 162 wxIndividualLayoutConstraint left; 163 wxIndividualLayoutConstraint top; 164 wxIndividualLayoutConstraint right; 165 wxIndividualLayoutConstraint bottom; 166 // Size constraints 167 wxIndividualLayoutConstraint width; 168 wxIndividualLayoutConstraint height; 169 // Centre constraints 170 wxIndividualLayoutConstraint centreX; 171 wxIndividualLayoutConstraint centreY; 172 173 wxLayoutConstraints(); 174 175 // note that default copy ctor and assignment operators are ok 176 ~wxLayoutConstraints()177 virtual ~wxLayoutConstraints(){} 178 179 bool SatisfyConstraints(wxWindowBase *win, int *noChanges); AreSatisfied()180 bool AreSatisfied() const 181 { 182 return left.GetDone() && top.GetDone() && 183 width.GetDone() && height.GetDone(); 184 } 185 186 DECLARE_DYNAMIC_CLASS(wxLayoutConstraints) 187 }; 188 189 #endif // wxUSE_CONSTRAINTS 190 191 #endif // _WX_LAYOUT_H_ 192