1 /******************************************************************************
2 *
3 * Copyright (C) 2004-2007, The Gentee Group. All rights reserved.
4 * This file is part of the Gentee open source project - http://www.gentee.com.
5 *
6 * THIS FILE IS PROVIDED UNDER THE TERMS OF THE GENTEE LICENSE ("AGREEMENT").
7 * ANY USE, REPRODUCTION OR DISTRIBUTION OF THIS FILE CONSTITUTES RECIPIENTS
8 * ACCEPTANCE OF THE AGREEMENT.
9 *
10 * ID: vis.dlgbtns 19.06.09 0.0.A.
11 *
12 * Author: Alexander Krivonogov ( gentee )
13 *
14 ******************************************************************************/
15
16 include {
17 "btnpic.g"
18 "panel.g"
19 }
20
21
22 type vDlgBtns <inherit = vPanel>
23 {
24 uint pIndent
25 uint pShowLine
26 uint pShowHelp
27 uint pShowApply
28 uint pShowCancel
29 uint pShowClose
30 uint pShowReady
31 uint pDisableNext
32 uint pWizard
33 uint pCurWizard
34 uint pMaxWizard
35 vPanel pLine
36 vBtnPic btnHelp
37 vBtnPic btnCancel
38 vBtnPic btnOk
39 vBtnPic btnApply
40 vBtnPic btnPrev
41 vBtnPic btnNext
42 vBtnPic btnClose
43 evValUint OnApply
44 evValUint OnWizard
45
46 }
47
48 /*define {
49 //Тип vDlgBtns.Wizard
50 dbNone = 0
51 dbFirst = 0x01
52 dbMedium = 0x11
53 dbLast = 0x10
54 }*/
55
56 /*------------------------------------------------------------------------------
57 Internal Methods
58 */
59 method vDlgBtns.iUpdate()
60 {
61 .pLine.Visible = .pShowLine
62 .pLine.Left = .pIndent
63 .pLine.Right = .pIndent
64
65 .btnHelp.Visible = .pShowHelp
66 .btnHelp.Left = .pIndent
67
68 .btnApply.Visible = .pShowApply
69
70 .btnCancel.Visible = .pShowCancel
71
72 if .pWizard
73 {
74 .btnOk.Caption = "done".ustr()
75 .btnPrev.Visible = 1
76 .btnPrev.Enabled = .pCurWizard//.pWizard & 0x10
77 .btnNext.Visible = .pShowReady || ( .pCurWizard < .pMaxWizard )//(.pWizard & 0x01)
78 .btnNext.Enabled = (!.pDisableNext) && ( .pCurWizard < .pMaxWizard )//(.pWizard & 0x01) &&
79 .btnOk.Visible = .pShowReady || !( .pCurWizard < .pMaxWizard )//!(.pWizard & 0x01)
80 //.btnOk.Enabled = !.pDisableNext
81 }
82 else
83 {
84 .btnOk.Caption = "ok".ustr()
85 .btnNext.Visible = 0
86 .btnPrev.Visible = 0
87 .btnOk.Visible = !.pShowClose
88 .btnClose.Visible = .pShowClose
89 }
90
91
92 uint right
93 if .pShowApply
94 {
95 .btnApply.Right = right + .pIndent
96 right = .btnApply.Right + .btnApply.Width
97 }
98 if .btnCancel.Visible
99 {
100 .btnCancel.Right = right + .pIndent
101 right = .btnCancel.Right + .btnCancel.Width
102 }
103 right += .pIndent
104 if .btnOk.Visible
105 {
106 .btnOk.Right = right
107 right = .btnOk.Right + .btnOk.Width
108 }
109 elif .btnClose.Visible
110 {
111 .btnClose.Right = right
112 right = .btnClose.Right + .btnClose.Width
113 }
114 if .btnNext.Visible
115 {
116 .btnNext.Right = right
117 right = .btnNext.Right + .btnNext.Width
118 }
119 if .btnPrev.Visible
120 {
121 .btnPrev.Right = right
122 }
123
124 }
125
126
127 /*------------------------------------------------------------------------------
128 Properties
129 */
130 /* Свойство uint vDlgBtns.ShowHelp - Get Set
131 Показывать кнопку help
132 */
133 property uint vDlgBtns.ShowHelp
134 {
135 return this.pShowHelp
136 }
137
138 property vDlgBtns.ShowHelp( uint val )
139 {
140 if val != this.pShowHelp
141 {
142 this.pShowHelp = val
143 .iUpdate()
144 }
145 }
146
147 /* Свойство uint vDlgBtns.ShowApply - Get Set
148 Показывать кнопку apply
149 */
150 property uint vDlgBtns.ShowApply
151 {
152 return this.pShowApply
153 }
154
155 property vDlgBtns.ShowApply( uint val )
156 {
157 if val != this.pShowApply
158 {
159 this.pShowApply = val
160 .iUpdate()
161 }
162 }
163
164 /* Свойство uint vDlgBtns.ShowCancel - Get Set
165 Показывать кнопку cancel
166 */
167 property uint vDlgBtns.ShowCancel
168 {
169 return this.pShowCancel
170 }
171
172 property vDlgBtns.ShowCancel( uint val )
173 {
174 if val != this.pShowCancel
175 {
176 this.pShowCancel = val
177 .iUpdate()
178 }
179 }
180
181 /* Свойство uint vDlgBtns.ShowClose - Get Set
182 Показывать кнопку close вместо cancel
183 */
184 property uint vDlgBtns.ShowClose
185 {
186 return this.pShowClose
187 }
188
189 property vDlgBtns.ShowClose( uint val )
190 {
191 if val != this.pShowClose
192 {
193 this.pShowClose = val
194 .iUpdate()
195 }
196 }
197
198 /* Свойство uint vDlgBtns.ShowLine - Get Set
199 Показывать кнопку help
200 */
201 property uint vDlgBtns.ShowLine
202 {
203 return this.pShowLine
204 }
205
206 property vDlgBtns.ShowLine( uint val )
207 {
208 if val != this.pShowLine
209 {
210 this.pShowLine = val
211 .iUpdate()
212 }
213 }
214
215 /* Свойство uint vDlgBtns.ShowReady - Get Set
216 Показывать кнопку готово если включен Wizard
217 */
218 property uint vDlgBtns.ShowReady
219 {
220 return this.pShowReady
221 }
222
223 property vDlgBtns.ShowReady( uint val )
224 {
225 if val != this.pShowReady
226 {
227 this.pShowReady = val
228 .iUpdate()
229 }
230 }
231
232 /* Свойство uint vDlgBtns.Wizard - Get Set
233 Показывать кнопки Назад Далее Готово
234 */
235 property uint vDlgBtns.Wizard
236 {
237 return this.pWizard
238 }
239
240 property vDlgBtns.Wizard( uint val )
241 {
242 if val != this.pWizard
243 {
244 this.pWizard = val
245 .iUpdate()
246 }
247 }
248
249 /* Свойство uint vDlgBtns.CurWizard - Get Set
250 Текущее положение Wizard
251 */
252 property uint vDlgBtns.CurWizard
253 {
254 return this.pCurWizard
255 }
256
257 property vDlgBtns.CurWizard( uint val )
258 {
259 val == min( val, .pMaxWizard )
260 if val != this.pCurWizard
261 {
262 this.pCurWizard = val
263 .iUpdate()
264 evparValUint evp
265 evp.val = .pCurWizard
266 .OnWizard.Run(evp, this)
267 }
268 }
269
270 /* Свойство uint vDlgBtns.MaxWizard - Get Set
271 Текущее положение Wizard
272 */
273 property uint vDlgBtns.MaxWizard
274 {
275 return this.pMaxWizard
276 }
277
278 property vDlgBtns.MaxWizard( uint val )
279 {
280 if val != this.pMaxWizard
281 {
282 this.pMaxWizard = val
283 .iUpdate()
284 }
285 }
286
287 /* Свойство uint vDlgBtns.DisableNext - Get Set
288 Показывать кнопки Назад Далее Готово
289 */
290 property uint vDlgBtns.DisableNext
291 {
292 return this.pDisableNext
293 }
294
295 property vDlgBtns.DisableNext( uint val )
296 {
297 if val != this.pDisableNext
298 {
299 this.pDisableNext = val
300 .iUpdate()
301 }
302 }
303
304 /* Свойство uint vDlgBtns.Indent - Get Set
305 Значение отступа
306 */
307 property uint vDlgBtns.Indent
308 {
309 return this.pIndent
310 }
311
312 property vDlgBtns.Indent( uint val )
313 {
314 if val != this.pIndent
315 {
316 this.pIndent = val
317 .iUpdate()
318 }
319 }
320
321 /*------------------------------------------------------------------------------
322 Event Processor
323 */
324 method uint vDlgBtns.Ok <alias=vDlgBtns_Ok>( evparEvent evn )
325 {
326 if !.OnApply.id || .OnApply.Run(evn) : .GetMainForm()->vForm.Result = 1
327 return 0
328 }
329
330 method uint vDlgBtns.Wizard <alias=vDlgBtns_Wizard>( evparEvent evn )
331 {
332 evparValUint evp
333 uint val = .pCurWizard
334 if evn.sender == &.btnNext : val++
335 else : val--
336 .CurWizard = val
337 //evp.val = .pCurWizard
338 //if !.pCurWizard : .Wizard = $dbFirst
339 //else : .Wizard = $dbMedium
340 //.OnWizard.Run(evp, this)
341 return 0
342 }
343
344 method uint vDlgBtns.Cancel <alias=vDlgBtns_Cancel>( evparEvent evn )
345 {
346 .GetMainForm()->vForm.Result = -1
347 return 0
348 }
349
350 method uint vDlgBtns.Help <alias=vDlgBtns_Help>( evparEvent evn )
351 {
352 .GetForm()->vCtrl.Help()
353 return 0
354 }
355
356 method uint vDlgBtns.Apply <alias=vDlgBtns_Apply>( evparEvent evn )
357 {
358 .OnApply.Run( evn )
359 return 0
360 }
361
362 /*------------------------------------------------------------------------------
363 Registration
364 */
365
366 method vDlgBtns vDlgBtns.init( )
367 {
368 this.pTypeId = vDlgBtns
369 .pAlign = $alhClient | $alvBottom
370 .loc.height = 60
371 .pBorder = $brdNone
372 .pShowHelp = 1
373 .pShowLine = 1
374 .pShowCancel = 1
375 .pIndent = 15
376 return this
377 }
378
379 method vDlgBtns vDlgBtns.mCreateWin <alias=vDlgBtns_mCreateWin>()
380 {
381 uint indent = 5
382 collection ccaption = %{ "prev", "next", "ok", "cancel", "help", "apply", "close" }
383 collection cimage = %{ "", "", "main\\bok", "main\\bcancel", "main\\bhelp", "main\\brefresh", "main\\bcancel" }
384 collection cbtn = %{ &.btnPrev, &.btnNext, &.btnOk, &.btnCancel, &.btnHelp, &.btnApply, &.btnClose }
385 collection cevent = %{ vDlgBtns_Wizard, vDlgBtns_Wizard, vDlgBtns_Ok, vDlgBtns_Cancel, vDlgBtns_Help, vDlgBtns_Apply, vDlgBtns_Cancel }
386 uint i, left
387 this->vPanel.mCreateWin()
388 fornum i=0, *cbtn
389 {
390 uint btn as cbtn[i]->vBtnPic
391 btn.Caption = ccaption[i]->str.ustr()
392 btn.Image = cimage[i]->str.ustr()
393 btn.VertAlign = $alvCenter
394 btn.Owner = this
395 btn.Height = 30
396 btn.OnClick.Set( &this, cevent[i] )
397 if &btn != &.btnHelp : btn.HorzAlign = $alhRight
398 }
399
400 .pLine.Top = 0
401 .pLine.Border = $brdLowered
402 .pLine.Caption = "".ustr()
403 .pLine.HorzAlign = $alhLeftRight
404 .pLine.Owner = this
405 .pLine.Height = 2
406 .Caption = "".ustr()
407 .iUpdate()
408 return this
409 }
410
411 func init_vDlgBtns <entry>()
412 {
413
414 regcomp( vDlgBtns, "vDlgBtns", vPanel, $vCtrl_last,
415 %{ %{ $mCreateWin, vDlgBtns_mCreateWin },
416 %{ $mSetName, 0 } },
417 0->collection )
418
419 ifdef $DESIGNING {
420 cm.AddComp( vDlgBtns, 1, "Windows", "dlgbtns" )
421 cm.AddProps( vDlgBtns, %{
422 "ShowLine" , uint, 0,
423 "ShowHelp" , uint, 0,
424 "ShowApply", uint, 0,
425 "ShowCancel", uint, 0,
426 "ShowClose", uint, 0,
427 "ShowReady", uint, 0,
428 "DisableNext", uint, 0,
429 "Wizard", uint, 0,
430 "Indent" , uint, 0,
431 "CurWizard", uint, 0,
432 "MaxWizard", uint, 0
433 } )
434 cm.AddEvents( vDlgBtns, %{
435 "OnApply" , "evparEvent",
436 "OnWizard" , "evparValUint"
437 } )
438
439 /* cm.AddPropVals( vDlgBtns, "Wizard", %{
440 "dbNone" ,$dbNone,
441 "dbFirst" ,$dbFirst,
442 "dbMedium" ,$dbMedium,
443 "dbLast" ,$dbLast
444 }) */
445 }
446 }