]> git.saurik.com Git - wxWidgets.git/blob - samples/layout/expt.cpp
af2c089b84e6c64db72df536930ab2041cedba9b
[wxWidgets.git] / samples / layout / expt.cpp
1 /*
2 * Experimental code to use operators for constraint specification.
3 * In the end, the syntax didn't look much clearer than
4 * the original, so abandoned.
5
6 Example:
7
8 wxConstrain(frame->panel,
9
10 ( leftOf (frame->panel) = leftOf (frame),
11 topOf (frame->panel) = topOf (frame),
12 rightOf (frame->panel) = rightOf (frame),
13 heightOf (frame->panel) = 50 % heightOf (frame)
14 )
15 );
16 */
17
18 // Operator experiments
19 #define wxCONSTRAINT_OP_REL 1
20 #define wxCONSTRAINT_OP_PERCENT 2
21 #define wxCONSTRAINT_OP_EDGE 3
22 #define wxCONSTRAINT_OP_ABS 4
23 #define wxCONSTRAINT_OP_AND 5
24
25 class wxConstraintOp: public wxObject
26 {
27 public:
28 int opType;
29 wxEdge edge;
30 wxRelationship relationship;
31 wxWindow *win;
32 int value;
33 int margin;
34 wxConstraintOp *lhs;
35 wxConstraintOp *rhs;
36 wxConstraintOp(int typ)
37 {
38 opType = typ;
39 edge = wxLeft;
40 win = NULL;
41 value = 0;
42 margin = 0;
43 relationship = wxSameAs;
44 lhs = 0; rhs = 0;
45 }
46 wxConstraintOp(const wxConstraintOp& op)
47 {
48 opType = op.opType;
49 edge = op.edge;
50 relationship = op.relationship;
51 win = op.win;
52 value = op.value;
53 margin = op.margin;
54 if (op.lhs)
55 lhs = new wxConstraintOp(*op.lhs);
56 else
57 lhs = NULL;
58 if (op.rhs)
59 rhs = new wxConstraintOp(*op.rhs);
60 else
61 rhs = NULL;
62 }
63 ~wxConstraintOp(void)
64 {
65 if (lhs)
66 delete lhs;
67 if (rhs)
68 delete rhs;
69 }
70
71 wxConstraintOp operator = (const wxConstraintOp& arg2);
72 wxConstraintOp operator = (const int value);
73
74 friend wxConstraintOp operator % (const int perCent, const wxConstraintOp& arg2);
75 friend wxConstraintOp operator + (wxConstraintOp& arg1, int margin);
76 friend wxConstraintOp operator - (wxConstraintOp& arg1, int margin);
77 friend wxConstraintOp operator , (const wxConstraintOp& arg1, const wxConstraintOp& arg2);
78 };
79
80 wxConstraintOp leftOf(wxWindow *win)
81 {
82 wxConstraintOp thing(wxCONSTRAINT_OP_EDGE);
83 thing.win = win;
84 thing.edge = wxLeft;
85 return thing;
86 }
87
88 wxConstraintOp topOf(wxWindow *win)
89 {
90 wxConstraintOp thing(wxCONSTRAINT_OP_EDGE);
91 thing.win = win;
92 thing.edge = wxTop;
93 return thing;
94 }
95
96 wxConstraintOp widthOf(wxWindow *win)
97 {
98 wxConstraintOp thing(wxCONSTRAINT_OP_EDGE);
99 thing.win = win;
100 thing.edge = wxWidth;
101 return thing;
102 }
103
104 wxConstraintOp wxConstraintOp::operator = (const wxConstraintOp& arg2)
105 {
106 wxConstraintOp op3(wxCONSTRAINT_OP_REL);
107 op3.relationship = wxPercentOf;
108 op3.value = 100;
109 if ((op3.relationship == wxPercentOf) && (op3.value > 0))
110 op3.value = this->value;
111 op3.lhs = new wxConstraintOp(*this);
112 op3.rhs = new wxConstraintOp(arg2);
113
114 return op3;
115 }
116
117 wxConstraintOp wxConstraintOp::operator = (const int value)
118 {
119 wxConstraintOp op3(wxCONSTRAINT_OP_REL);
120 op3.relationship = wxAbsolute;
121
122 op3.lhs = new wxConstraintOp(*this);
123 op3.rhs = new wxConstraintOp(wxCONSTRAINT_OP_ABS);
124 op3.value = value;
125
126 return op3;
127 }
128
129 wxConstraintOp operator % (const int perCent, const wxConstraintOp& arg2)
130 {
131 wxConstraintOp op3(arg2);
132 op3.opType = wxCONSTRAINT_OP_EDGE;
133 op3.value = perCent;
134 if (op3.value > 0)
135 op3.value = arg2.value;
136
137 return op3;
138 }
139
140 wxConstraintOp operator + (wxConstraintOp& arg1, int margin)
141 {
142 wxConstraintOp op3(arg1);
143 op3.margin = margin;
144 return op3;
145 }
146
147 wxConstraintOp operator - (wxConstraintOp& arg1, int margin)
148 {
149 wxConstraintOp op3(arg1);
150 op3.margin = - margin;
151 return op3;
152 }
153
154 wxConstraintOp operator , (const wxConstraintOp& arg1, const wxConstraintOp& arg2)
155 {
156 wxConstraintOp op3(wxCONSTRAINT_OP_AND);
157 op3.lhs = new wxConstraintOp(arg1);
158 op3.rhs = new wxConstraintOp(arg2);
159
160 return op3;
161 }