1 #include "PropertyEdits.h"
2
3 #define TEXT_DEFAULT_LEFT 5
4 #define TEXT_DEFAULT_RIGHT 120
5 #define EDIT_DEFAULT_LEFT 120
6 #define EDIT_DEFAULT_RIGHT 5
7
8 // Edit field for text
CEditField()9 CEditField::CEditField()
10 {
11 _Label.HSizePosZ(TEXT_DEFAULT_LEFT, TEXT_DEFAULT_RIGHT);
12 _Edit.HSizePosZ(EDIT_DEFAULT_LEFT, EDIT_DEFAULT_RIGHT);
13 _Edit.WhenAction = THISBACK(Notify);
14 }
15
CEditField(int (* filter)(int))16 CEditField::CEditField(int (*filter)(int))
17 {
18 _Label.HSizePosZ(TEXT_DEFAULT_LEFT, TEXT_DEFAULT_RIGHT);
19 _Edit.HSizePosZ(EDIT_DEFAULT_LEFT, EDIT_DEFAULT_RIGHT);
20 _Edit.WhenAction = THISBACK(Notify);
21 _Edit.SetFilter(filter);
22 }
23
Set(Ctrl & c,int & cy)24 void CEditField::Set(Ctrl& c, int& cy)
25 {
26 _Label.TopPosZ(cy, _Edit.GetStdSize().cy);
27 _Edit.TopPosZ(cy, _Edit.GetStdSize().cy);
28 cy += _Edit.GetStdSize().cy;
29 c.Add(_Label);
30 c.Add(_Edit);
31 }
32
33 // Button
CButton(const char * label,const Callback & call)34 CButton::CButton(const char* label, const Callback& call)
35 {
36 _Label.HSizePosZ(TEXT_DEFAULT_LEFT, TEXT_DEFAULT_RIGHT);
37 _Edit.HSizePosZ(EDIT_DEFAULT_LEFT, EDIT_DEFAULT_RIGHT);
38
39 _Edit.SetLabel(label);
40 _Edit.WhenPush = call;
41 }
42
Set(Ctrl & c,int & cy)43 void CButton::Set(Ctrl& c, int& cy)
44 {
45 _Label.TopPosZ(cy, EditField().GetStdSize().cy);
46 _Edit.TopPosZ(cy, EditField().GetStdSize().cy);
47 cy += _Edit.GetStdSize().cy;
48 c.Add(_Label);
49 c.Add(_Edit);
50 }
51
52 // Edit field for numbers
CEditIntSpin(int min,int max)53 CEditIntSpin::CEditIntSpin(int min, int max)
54 {
55 _Label.HSizePosZ(TEXT_DEFAULT_LEFT, TEXT_DEFAULT_RIGHT);
56 _Edit.HSizePosZ(EDIT_DEFAULT_LEFT, EDIT_DEFAULT_RIGHT);
57 _Edit.Min(min).Max(max);
58 _Edit.WhenAction = THISBACK(Notify);
59 }
60
Set(Ctrl & c,int & cy)61 void CEditIntSpin::Set(Ctrl& c, int& cy)
62 {
63 _Label.TopPosZ(cy, _Edit.GetStdSize().cy);
64 _Edit.TopPosZ(cy, _Edit.GetStdSize().cy);
65 cy += _Edit.GetStdSize().cy;
66 c.Add(_Label);
67 c.Add(_Edit);
68 }
69
SetData(const Value & data)70 void CEditIntSpin::SetData(const Value& data)
71 {
72 if (data.GetType() == INT_V)
73 _Edit.SetData(data);
74 else
75 _Edit.SetData(10);
76 }
77
78 // Edit field for double-type
CEditDouble(double min,double max)79 CEditDouble::CEditDouble(double min, double max)
80 {
81 _Label.HSizePosZ(TEXT_DEFAULT_LEFT, TEXT_DEFAULT_RIGHT);
82 _Edit.HSizePosZ(EDIT_DEFAULT_LEFT, EDIT_DEFAULT_RIGHT);
83 _Edit.Min(min).Max(max);
84 _Edit.WhenAction = THISBACK(Notify);
85 }
86
Set(Ctrl & c,int & cy)87 void CEditDouble::Set(Ctrl& c, int& cy)
88 {
89 _Label.TopPosZ(cy, _Edit.GetStdSize().cy);
90 _Edit.TopPosZ(cy, _Edit.GetStdSize().cy);
91 cy += _Edit.GetStdSize().cy;
92 c.Add(_Label);
93 c.Add(_Edit);
94 }
95
SetData(const Value & data)96 void CEditDouble::SetData(const Value& data)
97 {
98 _Edit.SetData(ScanDouble(data.ToString()));
99 }
100
101 // Edit field for boolean
CEditBool()102 CEditBool::CEditBool()
103 {
104 _Edit.HSizePosZ(10, 10);
105 _Edit.WhenAction = THISBACK(Notify);
106 }
107
Set(Ctrl & c,int & cy)108 void CEditBool::Set(Ctrl& c, int& cy)
109 {
110 _Edit.TopPosZ(cy, _Edit.GetStdSize().cy);
111 cy += _Edit.GetStdSize().cy;
112 c.Add(_Edit);
113 }
114
SetData(const Value & data)115 void CEditBool::SetData(const Value& data)
116 {
117 if (data.GetType() == BOOL_V || data.GetType() == INT_V)
118 _Edit.Set(data);
119 }
120
121 // Dropping list
CDropList(const VectorMapEx<String,Value> & list,int defaultIndex)122 CDropList::CDropList(const VectorMapEx<String, Value>& list, int defaultIndex)
123 {
124 _Label.HSizePosZ(TEXT_DEFAULT_LEFT, TEXT_DEFAULT_RIGHT);
125 _Edit .HSizePosZ(EDIT_DEFAULT_LEFT, EDIT_DEFAULT_RIGHT);
126 _Edit .WhenAction = THISBACK(Notify);
127
128 for (int i = 0; i < list.GetCount(); ++i)
129 _Edit.Add(list.GetKey(i), list[i]);
130 if (_Edit.GetCount()) _Edit.SetIndex(defaultIndex);
131 }
132
Set(Ctrl & c,int & cy)133 void CDropList::Set(Ctrl& c, int& cy)
134 {
135 _Label.TopPosZ(cy, _Edit.GetStdSize().cy);
136 _Edit.TopPosZ(cy, _Edit.GetStdSize().cy);
137 cy += _Edit.GetStdSize().cy;
138 c.Add(_Label);
139 c.Add(_Edit);
140 }
141
SetData(const Value & data)142 void CDropList::SetData(const Value& data)
143 {
144 bool found = false;
145 for (int i = 0; i < _Edit.GetCount(); ++i)
146 if (_Edit.GetValue(i) == data)
147 {
148 _Edit.SetIndex(i);
149 found = true;
150 break;
151 }
152 if (!found)
153 _Edit.SetData(data);
154 }
155
156 // Edit field for text
CEditColor()157 CEditColor::CEditColor()
158 {
159 _Label.HSizePosZ(TEXT_DEFAULT_LEFT, TEXT_DEFAULT_RIGHT);
160 _Edit.HSizePosZ(EDIT_DEFAULT_LEFT, EDIT_DEFAULT_RIGHT);
161 _Edit.WhenAction = THISBACK(Notify);
162 }
163
Set(Ctrl & c,int & cy)164 void CEditColor::Set(Ctrl& c, int& cy)
165 {
166 _Label.TopPosZ(cy, _Edit.GetStdSize().cy);
167 _Edit.TopPosZ(cy, _Edit.GetStdSize().cy);
168 cy += _Edit.GetStdSize().cy;
169 c.Add(_Label);
170 c.Add(_Edit);
171 }
172
173 // Edit field for simple doc
CDocEdit()174 CDocEdit::CDocEdit()
175 {
176 _Label.HSizePosZ(TEXT_DEFAULT_LEFT, TEXT_DEFAULT_RIGHT);
177 _Edit.HSizePosZ(EDIT_DEFAULT_LEFT, EDIT_DEFAULT_RIGHT);
178 _Edit.WhenAction = THISBACK(Notify);
179 }
180
Set(Ctrl & c,int & cy)181 void CDocEdit::Set(Ctrl& c, int& cy)
182 {
183 _Label.TopPosZ(cy, _Label.GetStdSize().cy);
184 _Edit.TopPosZ(cy, 100);
185 cy += 100;
186 c.Add(_Label);
187 c.Add(_Edit);
188 }
189
190 // Edit field for size
CEditSize(int min,int max)191 CEditSize::CEditSize(int min, int max)
192 {
193 _CX.Min(min).Max(max);
194 _CY.Min(min).Max(max);
195 _CX.WhenAction = THISBACK(Notify);
196 _CY.WhenAction = THISBACK(Notify);
197 _Label.HSizePosZ(TEXT_DEFAULT_LEFT, TEXT_DEFAULT_RIGHT);
198 _Size.HSizePosZ(EDIT_DEFAULT_LEFT, EDIT_DEFAULT_RIGHT);
199 _Size.Add(_CX.SizePos());
200 _Size.Add(_CY.SizePos());
201 }
202
Set(Ctrl & c,int & cy)203 void CEditSize::Set(Ctrl& c, int& cy)
204 {
205 c.Add(_Label.TopPosZ(cy, _CY.GetStdSize().cy));
206 c.Add(_Size.TopPosZ(cy, _CY.GetStdSize().cy));
207
208 cy += _CY.GetStdSize().cy;
209 }
210
SetData(const Value & data)211 void CEditSize::SetData(const Value& data)
212 {
213 if (data.GetType() == SIZE_V)
214 {
215 Size sz = data;
216 _CX.SetData(sz.cx);
217 _CY.SetData(sz.cy);
218 }
219 }
220
221 // Edit field for point
SetData(const Value & data)222 void CEditPoint::SetData(const Value& data)
223 {
224 if (data.GetType() == POINT_V)
225 {
226 Point p = data;
227 _CX.SetData(p.x);
228 _CY.SetData(p.y);
229 }
230 }
231