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