1import os
2from cudatext import *
3from random import randint
4from .repro_labels import *
5
6def callback_main_close(id_dlg, id_ctl, data='', info=''):
7    print('callback_main_close')
8
9    dlg_proc(id_dlg, DLG_HIDE)
10
11    #hide tab added to sidebar
12    app_proc(PROC_SIDEPANEL_REMOVE, 'Side dialog')
13    app_proc(PROC_SIDEPANEL_ACTIVATE, 'Tree')
14
15def callback_main_menu(id_dlg, id_ctl, data='', info=''):
16    print('callback_main_menu')
17    nctl = dlg_proc(id_dlg, DLG_CTL_FIND, prop='btn_menu')
18    d = dlg_proc(id_dlg, DLG_CTL_PROP_GET, index=nctl)
19
20    nx = d['x']
21    ny = d['y']+d['h']
22    nx, ny = dlg_proc(id_dlg, DLG_COORD_LOCAL_TO_SCREEN, index=nx, index2=ny)
23
24    h_menu = menu_proc(0, MENU_CREATE)
25    menu_proc(h_menu, MENU_ADD, command=2700, caption='About1')
26    menu_proc(h_menu, MENU_ADD, command=2700, caption='About2')
27    menu_proc(h_menu, MENU_ADD, command=2700, caption='About3')
28    menu_proc(h_menu, MENU_SHOW, command='%d,%d'%(nx, ny))
29
30
31class Command:
32    border = True
33    btn_overlay = 0
34
35    def run_modal(self):
36        print('run_modal begin')
37        h = self.init_maindlg()
38        dlg_proc(h, DLG_SHOW_MODAL)
39        self.show_form_prop(h)
40        dlg_proc(h, DLG_FREE)
41        print('run_modal end')
42
43    def run_nonmodal(self):
44        h = self.init_maindlg()
45        dlg_proc(h, DLG_SHOW_NONMODAL)
46
47    def run_dlgcustom(self):
48        dlg_custom('TestDlg', 200, 100, 'type=label\1pos=6,6,200,0\1cap=Test')
49
50    def callback_linklabel_click(self, id_dlg, id_ctl, data='', info=''):
51        msg_box('Linklabel clicked', MB_OK)
52
53    def callback_buttondlg(self, id_dlg, id_ctl, data='', info=''):
54        h = id_dlg
55        n_btn_border = dlg_proc(h, DLG_CTL_FIND, prop='btn_border')
56        n_btn_icon = dlg_proc(h, DLG_CTL_FIND, prop='btn_icon')
57
58        if id_ctl==n_btn_border:
59            self.border = not self.border
60            val = DBORDER_DIALOG if self.border else DBORDER_NONE
61            dlg_proc(h, DLG_PROP_SET, prop={'border': val} )
62
63        if id_ctl==n_btn_icon:
64            id_btn = dlg_proc(h, DLG_CTL_HANDLE, name='btn_icon')
65
66            #toggle button's checked
67            b = button_proc(id_btn, BTN_GET_CHECKED)
68            button_proc(id_btn, BTN_SET_CHECKED, not b)
69            button_proc(id_btn, BTN_SET_BOLD, not b)
70
71            #set imagelist+icon for button
72            id_imglist = app_proc(PROC_GET_TAB_IMAGELIST, '')
73            button_proc(id_btn, BTN_SET_KIND, BTNKIND_TEXT_ICON_VERT)
74            button_proc(id_btn, BTN_SET_IMAGELIST, id_imglist)
75            button_proc(id_btn, BTN_SET_IMAGEINDEX, int(b))
76
77            #set overlay text
78            self.btn_overlay+=1
79            button_proc(id_btn, BTN_SET_OVERLAY, self.btn_overlay)
80
81            #set colored lines
82            color1 = 0x00ff00
83            color2 = 0x0000ff
84            button_proc(id_btn, BTN_SET_COLOR_LINE, color1)
85            button_proc(id_btn, BTN_SET_COLOR_LINE2, color2)
86
87
88    def callback_splitter_left(self, id_dlg, id_ctl, data='', info=''):
89        h = id_dlg
90        print('callback_splitter_left')
91
92    def callback_combo_change(self, id_dlg, id_ctl, data='', info=''):
93
94        p = dlg_proc(id_dlg, DLG_CTL_PROP_GET, name='c1')
95        text = p['val']
96        dlg_proc(id_dlg, DLG_PROP_SET, prop={'cap': 'text: '+text})
97
98    def callback_combo_change2(self, id_dlg, id_ctl, data='', info=''):
99
100        p = dlg_proc(id_dlg, DLG_CTL_PROP_GET, name='c2')
101        index = p['val']
102        dlg_proc(id_dlg, DLG_PROP_SET, prop={'cap': 'index: '+str(index)})
103
104    def callback_maindlg(self, id_dlg, id_ctl, data='', info=''):
105        print('callback_maindlg(info=%s)' % repr(info))
106        h = id_dlg
107
108        n_chk_panel = dlg_proc(h, DLG_CTL_FIND, prop='chk_panel')
109        n_edit = dlg_proc(h, DLG_CTL_FIND, prop='edit1')
110        n_btn_cap = dlg_proc(h, DLG_CTL_FIND, prop='btn_caption')
111        n_btn_dlg = dlg_proc(h, DLG_CTL_FIND, prop='btn_dlg')
112        n_btn_paint = dlg_proc(h, DLG_CTL_FIND, prop='btn_paint')
113        n_color = dlg_proc(h, DLG_CTL_FIND, prop='color')
114        n_chk_dock = dlg_proc(h, DLG_CTL_FIND, prop='chk_dock')
115
116        if id_ctl==n_chk_panel:
117            d = dlg_proc(h, DLG_CTL_PROP_GET, index=n_color)
118            dlg_proc(h, DLG_CTL_PROP_SET, index=n_color, prop={'vis': not d['vis']} )
119
120        if id_ctl==n_btn_cap:
121            d = dlg_proc(h, DLG_CTL_PROP_GET, index=n_edit)
122            dlg_proc(h, DLG_PROP_SET, prop={'cap': 'entered: '+d['val'] } )
123
124        if id_ctl==n_btn_dlg:
125            hh = self.init_tempdlg()
126            docked = dlg_proc(h, DLG_CTL_PROP_GET, index=n_chk_dock)['val'] == '1'
127            if docked:
128                dlg_proc(hh, DLG_DOCK, prop='R', index=h)
129                dlg_proc(hh, DLG_SHOW_NONMODAL)
130            else:
131                dlg_proc(hh, DLG_SHOW_MODAL)
132
133
134    def callback_listbox_click_x(self, id_dlg, id_ctl, data='', info=''):
135
136        index_sel = listbox_proc(self.id_listbox, LISTBOX_GET_SEL)
137        print('listbox: x clicked for item %d'%index_sel)
138
139    def callback_listbox_click_header(self, id_dlg, id_ctl, data='', info=''):
140
141        print('listbox: header clicked for column %d'%data)
142
143    def callback_listbox_drawitem(self, id_dlg, id_ctl, data='', info=''):
144
145        #print('listbox on_draw_item, data:', data)
146        id_canvas = data['canvas']
147        index = data['index']
148        rect = data['rect']
149        index_sel = listbox_proc(self.id_listbox, LISTBOX_GET_SEL)
150
151        show_x = listbox_proc(self.id_listbox, LISTBOX_GET_SHOW_X)>0
152        inc_x = 14 if show_x else 0
153
154        #set bold for each 5th
155        if index%5==0:
156            style = FONT_B + FONT_I
157            color = 0xB00000
158        else:
159            style = 0
160            color = 0
161        canvas_proc(id_canvas, CANVAS_SET_FONT, text='default', color=color, style=style)
162
163        if index==index_sel:
164            back_color = 0x806000+(0xF<<index)
165            if back_color>0xFFFF00:
166                back_color = 0xFFFF00
167            canvas_proc(id_canvas, CANVAS_SET_BRUSH, color=back_color, style=BRUSH_SOLID)
168            canvas_proc(id_canvas, CANVAS_SET_PEN, color=0x00F0F0, size=1, style=PEN_STYLE_SOLID)
169            canvas_proc(id_canvas, CANVAS_RECT, x=rect[0], y=rect[1], x2=rect[2], y2=rect[3])
170        else:
171            canvas_proc(id_canvas, CANVAS_SET_BRUSH, color=0x6060D0, style=BRUSH_SOLID)
172            canvas_proc(id_canvas, CANVAS_RECT_FILL, x=rect[0], y=rect[1], x2=rect[2], y2=rect[3])
173
174        canvas_proc(id_canvas, CANVAS_TEXT,
175            text='item index %d'%index,
176            x=rect[0] + 20 + index*4 + inc_x,
177            y=rect[1] + 2 )
178
179        #this imagelist has 2 test icons: 0, 1
180        img_list = app_proc(PROC_GET_TAB_IMAGELIST, '')
181        imagelist_proc(img_list, IMAGELIST_PAINT, (id_canvas, rect[0]+inc_x, rect[1], index%2))
182
183
184    def callback_listbox_check(self, id_dlg, id_ctl, data='', info=''):
185
186        print('listbox option "owner" click')
187        prop = dlg_proc(id_dlg, DLG_CTL_PROP_GET, name='chk_owner')
188        chk = prop['val'] == '1'
189
190        listbox_proc(self.id_listbox, LISTBOX_SET_DRAWN, index=(1 if chk else 0))
191
192    def callback_listbox_check_x(self, id_dlg, id_ctl, data='', info=''):
193
194        val = listbox_proc(self.id_listbox, LISTBOX_GET_SHOW_X)
195        val = (val+1)%3 # possible values: 0..2
196        listbox_proc(self.id_listbox, LISTBOX_SET_SHOW_X, index=val)
197        listbox_proc(self.id_listbox, LISTBOX_SET_HOTTRACK, index=(1 if val>0 else 0))
198
199
200    def callback_listbox_columns(self, id_dlg, id_ctl, data='', info=''):
201
202        print('listbox columns click')
203
204        listbox_proc(self.id_listbox, LISTBOX_SET_COLUMN_SEP, text='|')
205        cols = listbox_proc(self.id_listbox, LISTBOX_GET_COLUMNS)
206        print('listbox columns:', cols)
207        if not cols:
208            listbox_proc(self.id_listbox, LISTBOX_SET_COLUMNS, text=[-50,30,0])
209        else:
210            listbox_proc(self.id_listbox, LISTBOX_SET_COLUMNS, text=[])
211
212
213    def callback_editor_on_change(self, id_dlg, id_ctl, data='', info=''):
214
215        print('editor on_change')
216
217    def callback_editor_on_caret(self, id_dlg, id_ctl, data='', info=''):
218
219        print('editor on_caret')
220
221    def callback_editor_on_scroll(self, id_dlg, id_ctl, data='', info=''):
222
223        print('editor on_scroll')
224
225    def callback_editor_on_paste(self, id_dlg, id_ctl, data='', info=''):
226
227        print('editor on_paste', data)
228
229    def callback_editor_on_menu(self, id_dlg, id_ctl, data='', info=''):
230
231        msg_box('Event handler on_menu blocked std context menu', MB_OK)
232        return False
233
234    def callback_editor_on_click_gutter(self, id_dlg, id_ctl, data='', info=''):
235
236        print('editor on_click_gutter', data)
237
238    def callback_editor_on_click_gap(self, id_dlg, id_ctl, data='', info=''):
239
240        print('editor on_click_gap', data)
241
242    def callback_editor_on_click_link(self, id_dlg, id_ctl, data='', info=''):
243
244        print('editor on_click_link', data)
245
246    def callback_editor_on_key_down(self, id_dlg, id_ctl, data='', info=''):
247
248        print('editor on_key_down', data)
249
250    def callback_editor_on_key_up(self, id_dlg, id_ctl, data='', info=''):
251
252        print('editor on_key_up', data)
253
254
255    def do_paint_mark(self, id_dlg, id_ctl):
256        print('do_paint_mark')
257
258        #paint circle of randon color
259        n = randint(0, 0xfffff)
260        canvas_id = dlg_proc(id_dlg, DLG_CTL_HANDLE, name='paint')
261        canvas_proc(canvas_id, CANVAS_SET_PEN, color=0xA0)
262        canvas_proc(canvas_id, CANVAS_SET_BRUSH, color=n+0xA0FF00)
263        canvas_proc(canvas_id, CANVAS_RECT, x=0, y=0, x2=50, y2=50)
264        canvas_proc(canvas_id, CANVAS_SET_BRUSH, color=n+0xA0A0)
265        canvas_proc(canvas_id, CANVAS_ELLIPSE, x=0, y=0, x2=50, y2=50)
266
267        #paint 2 first icons of standard file-tabs imagelist
268        il = app_proc(PROC_GET_TAB_IMAGELIST, '')
269        imagelist_proc(il, IMAGELIST_PAINT, (canvas_id, 0, 0, 0))
270        imagelist_proc(il, IMAGELIST_PAINT, (canvas_id, 16, 16, 1))
271
272    def callback_maindlg_paint_click(self, id_dlg, id_ctl, data='', info=''):
273        self.do_paint_mark(id_dlg, id_ctl)
274
275    def callback_maindlg_pos_save(self, id_dlg, id_ctl, data='', info=''):
276        self.pos_str = dlg_proc(id_dlg, DLG_POS_GET_STR)
277
278    def callback_maindlg_pos_load(self, id_dlg, id_ctl, data='', info=''):
279        if hasattr(self, 'pos_str'):
280            dlg_proc(id_dlg, DLG_POS_SET_FROM_STR, self.pos_str)
281
282    def callback_maindlg_setprops(self, id_dlg, id_ctl, data='', info=''):
283        res = dlg_input_ex(2,
284            'Set sidebar icon props',
285            'ImageIndex:',
286            '0',
287            'Hint:',
288            'test_panel')
289        if res is None: return
290        index = str(res[0])
291        title = res[1]
292        print('set sidebar props:', index, title)
293        app_proc(PROC_SIDEPANEL_SET_PROP, ('Side dialog', index, title))
294
295    def callback_tempdlg_on_key_down(self, id_dlg, id_ctl, data='', info=''):
296        print('callback_tempdlg_on_key_down')
297
298        state = data
299            #was needed before Cud 1.55.2:
300            #state = app_proc(PROC_GET_KEYSTATE, '')
301        str_key =\
302            ('Meta+' if 'm' in state else '')+\
303            ('Ctrl+' if 'c' in state else '')+\
304            ('Alt+' if 'a' in state else '')+\
305            ('Shift+' if 's' in state else '')+\
306            app_proc(PROC_HOTKEY_INT_TO_STR, str(id_ctl))
307
308        n_info = dlg_proc(id_dlg, DLG_CTL_FIND, 'label_info')
309        dlg_proc(id_dlg, DLG_CTL_PROP_SET, index=n_info, prop={'cap': 'keypress: '+str_key })
310        return True
311
312    def callback_tempdlg_on_close_query(self, id_dlg, id_ctl, data='', info=''):
313        print('callback_tempdlg_on_close_query')
314        n_canclose = dlg_proc(id_dlg, DLG_CTL_FIND, 'chk_canclose')
315        d = dlg_proc(id_dlg, DLG_CTL_PROP_GET, index=n_canclose)
316        return d['val']=='1'
317
318    def callback_tempdlg(self, id_dlg, id_ctl, data='', info=''):
319        print('callback_tempdlg')
320
321        n_close = dlg_proc(id_dlg, DLG_CTL_FIND, 'btn_close')
322        n_clone = dlg_proc(id_dlg, DLG_CTL_FIND, 'btn_clonedlg')
323
324        if id_ctl==n_close:
325            dlg_proc(id_dlg, DLG_HIDE)
326
327        if id_ctl==n_clone:
328            print('  tempdlg begin')
329            d = dlg_proc(id_dlg, DLG_PROP_GET)
330            hh = self.init_tempdlg(d['x']+20, d['y']+20)
331            dlg_proc(hh, DLG_SHOW_MODAL)
332            dlg_proc(hh, DLG_FREE)
333            print('  tempdlg end')
334
335
336    def callback_statusbar_click(self, id_dlg, id_ctl, data='', info=''):
337        print('callback_statusbar_click: id_dlg={}; id_ctl={}; data={}; info={};'.format(
338            id_dlg, id_ctl, data, info))
339
340    def callback_toolbar_menu(self, id_dlg, id_ctl, data='', info=''):
341        print('callback_toolbar_menu')
342        id_bar = dlg_proc(id_dlg, DLG_CTL_HANDLE, name='tb')
343        cnt = toolbar_proc(id_bar, TOOLBAR_GET_COUNT)
344        index = toolbar_proc(id_bar, TOOLBAR_GET_INDEX_HOVERED)
345        print('buttons count: %d, index hovered: %d'%(cnt, index))
346
347    def init_buttondlg(self):
348        h=dlg_proc(0, DLG_CREATE)
349        dlg_proc(h, DLG_PROP_SET, prop={
350            'cap': 'button test',
351            'w': 400,
352            'h': 300,
353            'w_min': 200,
354            'h_min': 250
355            })
356
357        n=dlg_proc(h, DLG_CTL_ADD, 'button_ex')
358        dlg_proc(h, DLG_CTL_PROP_SET, index=n, prop={
359            'name': 'btn_border',
360            'cap':'toggle window border',
361            'x': 10,
362            'y': 20,
363            'w': 200,
364            'on_change': 'cuda_testing_dlg_proc.callback_buttondlg'
365            })
366
367        n=dlg_proc(h, DLG_CTL_ADD, 'button_ex')
368        dlg_proc(h, DLG_CTL_PROP_SET, index=n, prop={
369            'name': 'btn_icon',
370            'cap':'toggle bold/icon/overlay',
371            'x': 10,
372            'y': 50,
373            'w': 200,
374            'h': 50,
375            'on_change': 'cuda_testing_dlg_proc.callback_buttondlg'
376            })
377
378        return h
379
380    def init_splitterdlg(self):
381        h=dlg_proc(0, DLG_CREATE)
382        dlg_proc(h, DLG_PROP_SET, prop={
383            'cap': 'splitter test',
384            'w': 650,
385            'h': 400,
386            'border': DBORDER_SIZE,
387            })
388
389        n=dlg_proc(h, DLG_CTL_ADD, 'panel')
390        dlg_proc(h, DLG_CTL_PROP_SET, index=n, prop={
391            'name': 'panel_L',
392            'cap': 'panel_L',
393            'x': 0,
394            'y': 0,
395            'w': 200,
396            'w_min': 150,
397            'align': ALIGN_LEFT,
398            'color': 0x60c060,
399            })
400
401        n=dlg_proc(h, DLG_CTL_ADD, 'panel')
402        dlg_proc(h, DLG_CTL_PROP_SET, index=n, prop={
403            'name': 'panel_R',
404            'cap': 'panel_R',
405            'x': 400,
406            'y': 0,
407            'w': 200,
408            'align': ALIGN_RIGHT,
409            'color': 0xd08060
410            })
411
412        n=dlg_proc(h, DLG_CTL_ADD, 'panel')
413        dlg_proc(h, DLG_CTL_PROP_SET, index=n, prop={
414            'name': 'panel_B',
415            'cap': 'panel_B',
416            'x': 0,
417            'y': 0,
418            'h': 100,
419            'align': ALIGN_BOTTOM,
420            'color': 0xa0e080
421            })
422
423        n=dlg_proc(h, DLG_CTL_ADD, 'panel')
424        dlg_proc(h, DLG_CTL_PROP_SET, index=n, prop={
425            'name': 'panel_LL',
426            'cap': 'LL',
427            'x': 150,
428            'y': 100,
429            'w': 60,
430            'h': 60,
431            'p': 'panel_L',
432            'a_l': None,
433            'a_t': ('','-'),
434            'a_r': ('',']'),
435            'color': 0x8080b0
436            })
437
438        n=dlg_proc(h, DLG_CTL_ADD, 'splitter')
439        dlg_proc(h, DLG_CTL_PROP_SET, index=n, prop={
440            'name': 'sp_L',
441            'x': 210,
442            'y': 0,
443            'align': ALIGN_LEFT,
444            'ex0': True,
445            'ex1': True,
446            'act': True,
447            'color': 0xff,
448            'on_change': self.callback_splitter_left,
449            })
450
451        n=dlg_proc(h, DLG_CTL_ADD, 'splitter')
452        dlg_proc(h, DLG_CTL_PROP_SET, index=n, prop={
453            'name': 'sp_R',
454            'x': 220,
455            'y': 0,
456            'align': ALIGN_RIGHT,
457            'ex0': True,
458            'ex1': True,
459            'color': 0xff,
460            })
461
462        n=dlg_proc(h, DLG_CTL_ADD, 'splitter')
463        dlg_proc(h, DLG_CTL_PROP_SET, index=n, prop={
464            'name': 'sp_B',
465            'x': 0,
466            'y': 0,
467            'align': ALIGN_BOTTOM,
468            'ex0': True,
469            'ex1': True,
470            })
471
472        return h
473
474    def init_maindlg(self):
475        h=dlg_proc(0, DLG_CREATE)
476        dlg_proc(h, DLG_PROP_SET, prop={
477            'cap': 'main dlg',
478            'x': 100,
479            'y': 50,
480            'w': 400,
481            'h': 380,
482            'w_min': 200,
483            'h_min': 300,
484            'border': DBORDER_SIZE,
485            'topmost': True,
486            })
487
488        n=dlg_proc(h, DLG_CTL_ADD, 'label')
489        dlg_proc(h, DLG_CTL_PROP_SET, index=n, prop={
490            'name': 'label0',
491            'cap': 'label',
492            'x': 10,
493            'y': 10,
494            'w': 50,
495            'tag': 'some_tag',
496            })
497
498        n=dlg_proc(h, DLG_CTL_ADD, 'check')
499        dlg_proc(h, DLG_CTL_PROP_SET, index=n, prop={
500            'name': 'chk_panel',
501            'cap': 'show panel',
502            'val': True,
503            'x': 60,
504            'y': 8,
505            'w': 200,
506            'act': True,
507            'on_change': 'cuda_testing_dlg_proc.callback_maindlg'
508            })
509
510        n=dlg_proc(h, DLG_CTL_ADD, 'edit')
511        dlg_proc(h, DLG_CTL_PROP_SET, index=n, prop={
512            'name': 'edit1',
513            'val':'edit1',
514            'x': 10,
515            'y': 30,
516            'w': 200,
517            })
518
519        n=dlg_proc(h, DLG_CTL_ADD, 'button')
520        dlg_proc(h, DLG_CTL_PROP_SET, index=n, prop={
521            'name': 'btn_caption',
522            'cap': 'upd caption',
523            'x': 10,
524            'y': 60,
525            'w': 100,
526            'on_change': 'cuda_testing_dlg_proc.callback_maindlg'
527            })
528
529        n=dlg_proc(h, DLG_CTL_ADD, 'button')
530        dlg_proc(h, DLG_CTL_PROP_SET, index=n, prop={
531            'name': 'btn_move',
532            'cap': 'move button',
533            'x': 120,
534            'y': 60,
535            'w': 100,
536            'on_change': 'cuda_testing_dlg_proc.callback_main_movebtn'
537            })
538
539        n=dlg_proc(h, DLG_CTL_ADD, 'colorpanel')
540        dlg_proc(h, DLG_CTL_PROP_SET, index=n, prop={
541            'name': 'color',
542            'cap': ' ',
543            'x': 380,
544            'y': 5,
545            'w': 15,
546            'h': 290,
547            'ex0': 1,
548            'ex1': 0xc0f0f0,
549            'on_mouse_enter': lambda id_dlg, id_ctl, data='', info='': print('panel on_mouse_enter'),
550            'on_mouse_exit': lambda id_dlg, id_ctl, data='', info='': print('panel on_mouse_exit'),
551            'on_mouse_down': lambda id_dlg, id_ctl, data='', info='': print('panel on_mouse_down', data),
552            'on_mouse_up': lambda id_dlg, id_ctl, data='', info='': print('panel on_mouse_up', data),
553            })
554        #anchors of colorpanel
555        dlg_proc(h, DLG_CTL_PROP_SET, index=n, prop={
556            'a_l': None,
557            'a_r': ('', ']'),
558            'a_b': ('', ']'),
559            'sp_a': 6,
560            })
561
562        n=dlg_proc(h, DLG_CTL_ADD, 'button')
563        dlg_proc(h, DLG_CTL_PROP_SET, index=n, prop={
564            'name': 'btn_x_panel',
565            'cap': '?',
566            'x': 0,
567            'y': 0,
568            'w': 15,
569            'h': 15,
570            'p': 'color',
571            'a_t': ('color', '-'),
572            'on_change': 'cuda_testing_dlg_proc.callback_maindlg'
573            })
574
575        n=dlg_proc(h, DLG_CTL_ADD, 'button')
576        dlg_proc(h, DLG_CTL_PROP_SET, index=n, prop={
577            'name': 'btn_dlg',
578            'cap': 'temp dlg',
579            'x': 10,
580            'y': 200,
581            'w': 100,
582            'on_change': 'cuda_testing_dlg_proc.callback_maindlg'
583            })
584
585        n=dlg_proc(h, DLG_CTL_ADD, 'button')
586        dlg_proc(h, DLG_CTL_PROP_SET, index=n, prop={
587            'name': 'btn_menu',
588            'cap': 'menu here',
589            'x': 10,
590            'y': 230,
591            'w': 100,
592            'on_change': callback_main_menu
593            })
594
595        n=dlg_proc(h, DLG_CTL_ADD, 'button')
596        dlg_proc(h, DLG_CTL_PROP_SET, index=n, prop={
597            'name': 'btn_paint',
598            'cap': 'paint here',
599            'x': 10,
600            'y': 260,
601            'w': 100,
602            'on_change': self.callback_maindlg_paint_click
603            })
604
605        n=dlg_proc(h, DLG_CTL_ADD, 'button')
606        dlg_proc(h, DLG_CTL_PROP_SET, index=n, prop={
607            'name': 'btn_pos_save',
608            'cap': 'pos: to str',
609            'x': 10,
610            'y': 290,
611            'w': 100,
612            'on_change': self.callback_maindlg_pos_save
613            })
614
615        n=dlg_proc(h, DLG_CTL_ADD, 'button')
616        dlg_proc(h, DLG_CTL_PROP_SET, index=n, prop={
617            'name': 'btn_pos_load',
618            'cap': 'pos: from str',
619            'x': 10,
620            'y': 320,
621            'w': 100,
622            'on_change': self.callback_maindlg_pos_load
623            })
624
625        n=dlg_proc(h, DLG_CTL_ADD, 'button')
626        dlg_proc(h, DLG_CTL_PROP_SET, index=n, prop={
627            'name': 'btn_setprops',
628            'cap': 'sidebar icon...',
629            'x': 10,
630            'y': 350,
631            'w': 100,
632            'on_change': self.callback_maindlg_setprops
633            })
634
635        n=dlg_proc(h, DLG_CTL_ADD, 'button')
636        dlg_proc(h, DLG_CTL_PROP_SET, index=n, prop={
637            'name': 'btn_callbk',
638            'cap': 'complex callback',
639            'x': 120,
640            'y': 200,
641            'w': 120,
642            'on_change': 'module=cuda_testing_dlg_proc.testcall;func=callback_main_complex;info=1234;'
643            })
644
645        n=dlg_proc(h, DLG_CTL_ADD, 'button')
646        dlg_proc(h, DLG_CTL_PROP_SET, index=n, prop={
647            'name': 'btn_ok',
648            'cap': 'close',
649            'x': 120,
650            'y': 230,
651            'w': 120,
652            'on_change': callback_main_close
653            })
654
655        n=dlg_proc(h, DLG_CTL_ADD, 'linklabel')
656        dlg_proc(h, DLG_CTL_PROP_SET, index=n, prop={
657            'name': 'link1',
658            'cap': 'linklabel',
659            'x': 10,
660            'y': 150,
661            'w': 120,
662            'on_click': self.callback_linklabel_click
663            })
664
665        n=dlg_proc(h, DLG_CTL_ADD, 'check')
666        dlg_proc(h, DLG_CTL_PROP_SET, index=n, prop={
667            'name': 'chk_dock',
668            'cap': 'temp dlg: docked',
669            'x': 10,
670            'y': 170,
671            'w': 120
672            })
673
674        #test for live callback
675        n=dlg_proc(h, DLG_CTL_ADD, 'paintbox')
676        dlg_proc(h, DLG_CTL_PROP_SET, index=n, prop={
677            'name': 'paint',
678            'x': 250,
679            'y': 200,
680            'w': 60,
681            'h': 60,
682            'on_click': self.callback_maindlg_paint_click
683            })
684
685        nfocus = dlg_proc(h, DLG_CTL_FIND, 'edit1')
686        dlg_proc(h, DLG_CTL_FOCUS, index=nfocus)
687        return h
688
689
690    def show_form_prop(self, h):
691        res = dlg_proc(h, DLG_PROP_GET)
692        print('form prop:', res)
693
694        cnt = dlg_proc(h, DLG_CTL_COUNT)
695        for n in range(cnt):
696            res = dlg_proc(h, DLG_CTL_PROP_GET, index=n)
697            print('c%d:'%n, res)
698
699
700    def init_listdlg(self):
701
702        h=dlg_proc(0, DLG_CREATE)
703        dlg_proc(h, DLG_PROP_SET, prop={
704            'cap': 'listbox test',
705            'w': 420,
706            'h': 300
707            })
708
709        n=dlg_proc(h, DLG_CTL_ADD, 'listbox_ex')
710        dlg_proc(h, DLG_CTL_PROP_SET, index=n, prop={
711            'name': 'list1',
712            'x': 10,
713            'y': 10,
714            'w': 400,
715            'h': 200,
716            'on_click_x': self.callback_listbox_click_x,
717            'on_click_header': self.callback_listbox_click_header,
718            'on_draw_item': self.callback_listbox_drawitem,
719            })
720
721        h_list = dlg_proc(h, DLG_CTL_HANDLE, index=n)
722        self.id_listbox = h_list
723
724        for i in range(40):
725            listbox_proc(h_list, LISTBOX_ADD, index=-1, text='first-%d|2-%d|3-%d'%(i,i,i))
726        listbox_proc(h_list, LISTBOX_SET_SEL, index=2)
727        listbox_proc(h_list, LISTBOX_SET_ITEM_H, index=28)
728        listbox_proc(h_list, LISTBOX_SET_DRAWN, index=1)
729        listbox_proc(h_list, LISTBOX_SET_HEADER, text='header0|header1|header2')
730
731        n=dlg_proc(h, DLG_CTL_ADD, 'check')
732        dlg_proc(h, DLG_CTL_PROP_SET, index=n, prop={
733            'name': 'chk_owner',
734            'cap': 'Owner-drawn listbox',
735            'x': 10,
736            'y': 220,
737            'w': 200,
738            'val': True,
739            'act': True,
740            'on_change': self.callback_listbox_check,
741            })
742
743        n=dlg_proc(h, DLG_CTL_ADD, 'button')
744        dlg_proc(h, DLG_CTL_PROP_SET, index=n, prop={
745            'name': 'btn_columns',
746            'cap': 'Make columns',
747            'x': 10,
748            'y': 250,
749            'w': 120,
750            'on_change': self.callback_listbox_columns,
751            })
752
753        n=dlg_proc(h, DLG_CTL_ADD, 'button')
754        dlg_proc(h, DLG_CTL_PROP_SET, index=n, prop={
755            'name': 'btn_x',
756            'cap': 'Toggle x marks',
757            'x': 130,
758            'y': 250,
759            'w': 140,
760            'on_change': self.callback_listbox_check_x,
761            })
762
763        return h
764
765
766    def init_combo_dlg(self):
767
768        h=dlg_proc(0, DLG_CREATE)
769        dlg_proc(h, DLG_PROP_SET, prop={
770            'cap': 'combo test',
771            'w': 420,
772            'h': 300
773            })
774
775        n=dlg_proc(h, DLG_CTL_ADD, 'combo')
776        dlg_proc(h, DLG_CTL_PROP_SET, index=n, prop={
777            'name': 'c1',
778            'x': 10,
779            'y': 10,
780            'w': 400,
781            'items': '\t'.join(['Aaa', 'Bbb', 'Ccc', 'Ddd']),
782            'val': 'init text',
783            'act': True, # for on_change
784            'on_change': self.callback_combo_change,
785            })
786
787        n=dlg_proc(h, DLG_CTL_ADD, 'combo_ro')
788        dlg_proc(h, DLG_CTL_PROP_SET, index=n, prop={
789            'name': 'c2',
790            'x': 10,
791            'y': 80,
792            'w': 400,
793            'items': '\t'.join(['Aaaaa', 'Bbbbb', 'Ccccc', 'Ddddd']),
794            'val': 1,
795            'act': True, # for on_change
796            'on_change': self.callback_combo_change2,
797            })
798
799        return h
800
801
802    def init_tempdlg(self, x=150, y=150):
803        h=dlg_proc(0, DLG_CREATE)
804        dlg_proc(h, DLG_PROP_SET, prop={
805            'cap': 'temp dlg',
806            'x': x,
807            'y': y,
808            'w': 300,
809            'h': 200,
810            'color': 0xc0c0c0,
811            'on_key_down': 'cuda_testing_dlg_proc.callback_tempdlg_on_key_down',
812            'on_close_query': 'cuda_testing_dlg_proc.callback_tempdlg_on_close_query',
813            })
814
815        n=dlg_proc(h, DLG_CTL_ADD, 'button')
816        dlg_proc(h, DLG_CTL_PROP_SET, index=n, prop={
817            'name': 'btn_close',
818            'cap': 'close',
819            'x': 20,
820            'y': 20,
821            'w': 100,
822            'on_change': 'cuda_testing_dlg_proc.callback_tempdlg'
823            })
824
825        n=dlg_proc(h, DLG_CTL_ADD, 'button')
826        dlg_proc(h, DLG_CTL_PROP_SET, index=n, prop={
827            'name': 'btn_clonedlg',
828            'cap': 'clone dlg',
829            'x': 20,
830            'y': 50,
831            'w': 100,
832            'on_change': 'cuda_testing_dlg_proc.callback_tempdlg'
833            })
834
835        n=dlg_proc(h, DLG_CTL_ADD, 'check')
836        dlg_proc(h, DLG_CTL_PROP_SET, index=n, prop={
837            'name': 'chk_canclose',
838            'cap': 'can close form',
839            'x': 20,
840            'y': 80,
841            'w': 100,
842            'val': True
843            })
844
845        n=dlg_proc(h, DLG_CTL_ADD, 'label')
846        dlg_proc(h, DLG_CTL_PROP_SET, index=n, prop={
847            'name': 'label_info',
848            'cap': '(shows key press)',
849            'x': 20,
850            'y': 160,
851            'w': 100
852            })
853
854        return h
855
856
857    def do_editor_gap(self, ed, num):
858
859        id_bitmap, id_canvas = ed.gap(GAP_MAKE_BITMAP, 600, 50)
860        canvas_proc(id_canvas, CANVAS_SET_BRUSH, color=0xa0ffa0)
861        canvas_proc(id_canvas, CANVAS_SET_ANTIALIAS, style=ANTIALIAS_ON)
862        canvas_proc(id_canvas, CANVAS_POLYGON, '200,0,300,30,200,49')
863        canvas_proc(id_canvas, CANVAS_SET_BRUSH, color=0xffffff, style=BRUSH_CLEAR)
864        canvas_proc(id_canvas, CANVAS_TEXT, x=230, y=10, text='gap %d'%(num+1))
865        canvas_proc(id_canvas, CANVAS_SET_BRUSH, color=0xffffff, style=BRUSH_SOLID)
866        ed.gap(GAP_ADD, num, id_bitmap, tag=10)
867
868
869    def init_editor_dlg(self):
870
871        h=dlg_proc(0, DLG_CREATE)
872        dlg_proc(h, DLG_PROP_SET, prop={
873            'cap': 'editor test',
874            'w': 750,
875            'h': 520
876            })
877
878        n=dlg_proc(h, DLG_CTL_ADD, 'editor')
879        dlg_proc(h, DLG_CTL_PROP_SET, index=n, prop={
880            'name': 'ed_main',
881            'align': ALIGN_TOP,
882            'sp_a': 6,
883            'h': 350,
884            'on_change': self.callback_editor_on_change,
885            'on_caret': self.callback_editor_on_caret,
886            'on_scroll': self.callback_editor_on_scroll,
887            'on_key_down': self.callback_editor_on_key_down,
888            'on_key_up': self.callback_editor_on_key_up,
889            'on_click_gutter': self.callback_editor_on_click_gutter,
890            'on_click_gap': self.callback_editor_on_click_gap,
891            'on_click_link': self.callback_editor_on_click_link,
892            'on_paste': self.callback_editor_on_paste,
893            'on_menu': self.callback_editor_on_menu,
894            })
895
896        h_editor = dlg_proc(h, DLG_CTL_HANDLE, name='ed_main')
897        ed0 = Editor(h_editor)
898        ed0.set_text_all(
899r"""#include <stdio.h>
900
901int main(int argc, char *argv[])
902{
903  printf("Hello.\n");
904  return 0;
905}
906
907/* clickable links: www.test.com , https://yahoo.com */
908""")
909        #ed0.set_caret(0, 3, 0, 2)
910        #ed0.set_prop(PROP_CARET_SHAPE, 2)
911        ed0.set_prop(PROP_MINIMAP, True)
912        ed0.set_prop(PROP_LEXER_FILE, 'C++')
913        self.do_editor_gap(ed0, 2)
914
915        #-----------------------------------------
916        idc=dlg_proc(h, DLG_CTL_ADD,"editor_edit");
917        dlg_proc(h, DLG_CTL_PROP_SET, index=idc, prop={
918            'name':'ed_edit', 'x':5, 'y':370, 'w':200, 'h':26
919            })
920        eh=dlg_proc(h, DLG_CTL_HANDLE, name='ed_edit')
921        e1=Editor(eh)
922        e1.set_prop(PROP_COMBO_ITEMS, '\n'.join(('aa','bb','ee')) )
923        e1.set_text_all('editor_edit')
924
925        #-----------------------------------------
926        idc=dlg_proc(h, DLG_CTL_ADD,"editor_combo");
927        dlg_proc(h, DLG_CTL_PROP_SET, index=idc, prop={
928            'name':'ed_combo', 'x':5, 'y':400, 'w':200, 'h':26
929            })
930
931        eh=dlg_proc(h, DLG_CTL_HANDLE, name='ed_combo')
932        e2=Editor(eh)
933        e2.set_prop(PROP_COMBO_ITEMS, '\n'.join(('aa','bb','dd')) )
934        e2.set_text_all('editor_combo')
935
936        dlg_proc(h, DLG_CTL_FOCUS, name='ed_main')
937
938        return h
939
940
941    def callback_main_movebtn(self, id_dlg, id_ctl):
942        print('callback_main_movebtn')
943        d = dlg_proc(id_dlg, DLG_CTL_PROP_GET, index=id_ctl)
944        dlg_proc(id_dlg, DLG_CTL_PROP_SET, index=id_ctl, prop={'x': d['x']+10, 'y': d['y']+8 } )
945
946
947    def test_pages(self):
948        id = dlg_proc(0, DLG_CREATE)
949
950        dlg_proc(id, DLG_PROP_SET, {
951            'w': 400,
952            'h': 300,
953            'cap': 'Test type=pages, tabs'
954            })
955
956        n = dlg_proc(id, DLG_CTL_ADD, 'pages')
957        dlg_proc(id, DLG_CTL_PROP_SET, index=n, prop={
958            'name': 'mypages',
959            'x': 10,
960            'y': 10,
961            'w': 380,
962            'h': 140,
963            'items': '\t'.join(['page-A', 'page-B', 'page-C']),
964            'on_change': self.callback_pages_on_change,
965            'act': True,
966            })
967
968        n = dlg_proc(id, DLG_CTL_ADD, 'tabs')
969        dlg_proc(id, DLG_CTL_PROP_SET, index=n, prop={
970            'name': 'mytabs',
971            'x': 10,
972            'y': 160,
973            'w': 380,
974            'h': 50,
975            'items': '\t'.join(['tab-1', 'tab-2', 'tab-3']),
976            'on_change': self.callback_tabs_on_change,
977            'act': True,
978            })
979
980        n = dlg_proc(id, DLG_CTL_ADD, 'label')
981        dlg_proc(id, DLG_CTL_PROP_SET, index=n, prop={
982            'name': 'tab_label',
983            'x': 10,
984            'y': 220,
985            'w': 300,
986            'cap': '(tabs not clicked)',
987            })
988
989        n = dlg_proc(id, DLG_CTL_ADD, 'check')
990        dlg_proc(id, DLG_CTL_PROP_SET, index=n, prop={
991            'name': 'check0',
992            'x': 10,
993            'y': 10,
994            'w': 300,
995            'cap': 'check-A',
996            'p':'mypages.0'
997            })
998
999        n = dlg_proc(id, DLG_CTL_ADD, 'button')
1000        dlg_proc(id, DLG_CTL_PROP_SET, index=n, prop={
1001            'name': 'btn_a',
1002            'x': 10,
1003            'y': 40,
1004            'w': 150,
1005            'cap': 'toggle check-A',
1006            'p':'mypages.0',
1007            'on_change': self.callback_pages_button_a,
1008            })
1009
1010        n = dlg_proc(id, DLG_CTL_ADD, 'check')
1011        dlg_proc(id, DLG_CTL_PROP_SET, index=n, prop={
1012            'name': 'check1',
1013            'x': 20,
1014            'y': 20,
1015            'w': 300,
1016            'cap': 'check-B',
1017            'p': 'mypages.1'
1018            })
1019
1020        n = dlg_proc(id, DLG_CTL_ADD, 'label')
1021        dlg_proc(id, DLG_CTL_PROP_SET, index=n, prop={
1022            'name': 'lab_b',
1023            'x': 20,
1024            'y': 50,
1025            'w': 300,
1026            'cap': 'label-B',
1027            'p': 'mypages.1'
1028            })
1029        n = dlg_proc(id, DLG_CTL_ADD, 'label')
1030        dlg_proc(id, DLG_CTL_PROP_SET, index=n, prop={
1031            'name': 'lab_c',
1032            'x': 20,
1033            'y': 50,
1034            'w': 300,
1035            'cap': 'label-C',
1036            'p': 'mypages.2'
1037            })
1038
1039        dlg_proc(id, DLG_SHOW_MODAL)
1040        dlg_proc(id, DLG_FREE)
1041
1042    def test_toolbar(self):
1043        dir_icons = os.path.join(app_path(APP_DIR_DATA), 'sideicons', 'octicons_20x20')
1044        fn_icon1 = os.path.join(dir_icons, 'console.png')
1045        fn_icon2 = os.path.join(dir_icons, 'find.png')
1046        print('icon1:', fn_icon1)
1047        print('icon2:', fn_icon2)
1048
1049        id = dlg_proc(0, DLG_CREATE)
1050
1051        dlg_proc(id, DLG_PROP_SET, {
1052            'w': 500,
1053            'h': 300,
1054            'cap': 'Test type=toolbar/statusbar',
1055            'border': DBORDER_SIZE,
1056            })
1057
1058        #------------
1059        n = dlg_proc(id, DLG_CTL_ADD, 'toolbar')
1060        dlg_proc(id, DLG_CTL_PROP_SET, index=n, prop={
1061            'name': 'tb',
1062            'x': 0,
1063            'y': 0,
1064            'w': 20,
1065            'h': 40,
1066            'align': ALIGN_TOP,
1067            'color': 0x80B080,
1068            'on_menu': self.callback_toolbar_menu,
1069            })
1070
1071        tb_id = dlg_proc(id, DLG_CTL_HANDLE, index=n)
1072
1073        imglist_id = toolbar_proc(tb_id, TOOLBAR_GET_IMAGELIST)
1074        imagelist_proc(imglist_id, IMAGELIST_SET_SIZE, value=(20,20))
1075        icon1 = imagelist_proc(imglist_id, IMAGELIST_ADD, value=fn_icon1)
1076        icon2 = imagelist_proc(imglist_id, IMAGELIST_ADD, value=fn_icon2)
1077        print('icon indexes:', icon1, icon2)
1078
1079        toolbar_proc(tb_id, TOOLBAR_ADD_ITEM)
1080        count = toolbar_proc(tb_id, TOOLBAR_GET_COUNT)
1081        btn_id = toolbar_proc(tb_id, TOOLBAR_GET_BUTTON_HANDLE, index=count-1)
1082        button_proc(btn_id, BTN_SET_KIND, BTNKIND_TEXT_ICON_HORZ)
1083        button_proc(btn_id, BTN_SET_TEXT, 'About')
1084        button_proc(btn_id, BTN_SET_IMAGELIST, imglist_id)
1085        button_proc(btn_id, BTN_SET_IMAGEINDEX, icon1)
1086        button_proc(btn_id, BTN_SET_DATA1, self.show_about)
1087
1088        toolbar_proc(tb_id, TOOLBAR_ADD_ITEM)
1089        count = toolbar_proc(tb_id, TOOLBAR_GET_COUNT)
1090        btn_id = toolbar_proc(tb_id, TOOLBAR_GET_BUTTON_HANDLE, index=count-1)
1091        button_proc(btn_id, BTN_SET_KIND, BTNKIND_TEXT_ICON_HORZ)
1092        button_proc(btn_id, BTN_SET_TEXT, 'Hotkey help')
1093        button_proc(btn_id, BTN_SET_IMAGELIST, imglist_id)
1094        button_proc(btn_id, BTN_SET_IMAGEINDEX, icon2)
1095        button_proc(btn_id, BTN_SET_DATA1, 2707)
1096
1097        toolbar_proc(tb_id, TOOLBAR_ADD_ITEM)
1098        count = toolbar_proc(tb_id, TOOLBAR_GET_COUNT)
1099        btn_id = toolbar_proc(tb_id, TOOLBAR_GET_BUTTON_HANDLE, index=count-1)
1100        button_proc(btn_id, BTN_SET_KIND, BTNKIND_TEXT_CHOICE)
1101        button_proc(btn_id, BTN_SET_TEXT, '???')
1102        button_proc(btn_id, BTN_SET_ARROW, True)
1103        button_proc(btn_id, BTN_SET_ITEMS, '\n'.join(['choice-aa', 'choice-bbbb', 'choice-cccc', 'choice-ddd']))
1104        button_proc(btn_id, BTN_SET_ITEMINDEX, 3)
1105        button_proc(btn_id, BTN_SET_WIDTH, 150)
1106        button_proc(btn_id, BTN_SET_DATA1, lambda: print('choice in menu'))
1107
1108        toolbar_proc(tb_id, TOOLBAR_UPDATE)
1109
1110        #----------
1111        n = dlg_proc(id, DLG_CTL_ADD, 'statusbar')
1112        dlg_proc(id, DLG_CTL_PROP_SET, index=n, prop={
1113            'name': 'sb',
1114            'x': 0,
1115            'y': 0,
1116            'w': 20,
1117            'h': 28,
1118            'align': ALIGN_BOTTOM,
1119            'color': 0x40A0A0,
1120            })
1121
1122        sb_id = dlg_proc(id, DLG_CTL_HANDLE, index=n)
1123        statusbar_proc(sb_id, STATUSBAR_SET_IMAGELIST, value=imglist_id)
1124        statusbar_proc(sb_id, STATUSBAR_ADD_CELL, tag=11)
1125        statusbar_proc(sb_id, STATUSBAR_ADD_CELL, tag=22)
1126        statusbar_proc(sb_id, STATUSBAR_ADD_CELL, tag=33)
1127
1128        statusbar_proc(sb_id, STATUSBAR_SET_CELL_CALLBACK, tag=33, value=
1129            'module=cuda_testing_dlg_proc;cmd=callback_statusbar_click;')
1130
1131        statusbar_proc(sb_id, STATUSBAR_SET_CELL_SIZE, tag=11, value=150)
1132        statusbar_proc(sb_id, STATUSBAR_SET_CELL_COLOR_BACK, tag=11, value=0xff00)
1133        statusbar_proc(sb_id, STATUSBAR_SET_CELL_COLOR_FONT, tag=11, value=0xff)
1134        statusbar_proc(sb_id, STATUSBAR_SET_CELL_TEXT, tag=11, value='cell-a')
1135        statusbar_proc(sb_id, STATUSBAR_SET_CELL_HINT, tag=11, value='hint for cell-a')
1136        statusbar_proc(sb_id, STATUSBAR_SET_CELL_IMAGEINDEX, tag=11, value=icon1)
1137        statusbar_proc(sb_id, STATUSBAR_SET_CELL_FONT_NAME, tag=11, value='Courier')
1138        statusbar_proc(sb_id, STATUSBAR_SET_CELL_FONT_SIZE, tag=11, value=18)
1139
1140        statusbar_proc(sb_id, STATUSBAR_SET_CELL_SIZE, tag=22, value=50)
1141        statusbar_proc(sb_id, STATUSBAR_SET_CELL_COLOR_BACK, tag=22, value=0xffff)
1142        statusbar_proc(sb_id, STATUSBAR_SET_CELL_COLOR_FONT, tag=22, value=0xff00)
1143        statusbar_proc(sb_id, STATUSBAR_SET_CELL_TEXT, tag=22, value='cell-b')
1144        statusbar_proc(sb_id, STATUSBAR_SET_CELL_HINT, tag=22, value='hint for cell-b')
1145
1146        statusbar_proc(sb_id, STATUSBAR_SET_CELL_SIZE, tag=33, value=150)
1147        statusbar_proc(sb_id, STATUSBAR_SET_CELL_TEXT, tag=33, value='cell-c')
1148        statusbar_proc(sb_id, STATUSBAR_SET_CELL_IMAGEINDEX, tag=33, value=icon2)
1149        statusbar_proc(sb_id, STATUSBAR_SET_CELL_ALIGN, tag=33, value='R')
1150
1151
1152        #----------
1153        dlg_proc(id, DLG_SHOW_MODAL)
1154        dlg_proc(id, DLG_FREE)
1155
1156
1157    def test_treeview(self):
1158        id = dlg_proc(0, DLG_CREATE)
1159
1160        dlg_proc(id, DLG_PROP_SET, {
1161            'w': 400,
1162            'h': 300,
1163            'cap': 'Test type=treeview'
1164            })
1165
1166        n = dlg_proc(id, DLG_CTL_ADD, 'treeview')
1167        dlg_proc(id, DLG_CTL_PROP_SET, index=n, prop={
1168            'name': 'my',
1169            'x': 10,
1170            'y': 10,
1171            'w': 380,
1172            'h': 280,
1173            'on_fold': self.callback_treeview_on_fold,
1174            'on_unfold': self.callback_treeview_on_unfold,
1175            'on_click_dbl': self.callback_treeview_on_click_dbl,
1176            })
1177
1178        self.h_tree = dlg_proc(id, DLG_CTL_HANDLE, index=n)
1179        tree_proc(self.h_tree, TREE_THEME)
1180
1181        item0a = tree_proc(self.h_tree, TREE_ITEM_ADD, id_item=0, index=-1, text='item 0a')
1182        item0b = tree_proc(self.h_tree, TREE_ITEM_ADD, id_item=0, index=-1, text='item 0b')
1183        item1a = tree_proc(self.h_tree, TREE_ITEM_ADD, id_item=item0a, index=-1, text='sub item 1a')
1184        item1b = tree_proc(self.h_tree, TREE_ITEM_ADD, id_item=item0a, index=-1, text='sub item 1b')
1185        item2a = tree_proc(self.h_tree, TREE_ITEM_ADD, id_item=item1a, index=-1, text='sub item 2a')
1186
1187        tree_proc(self.h_tree, TREE_ITEM_UNFOLD_DEEP, id_item=0)
1188
1189        #test get/set range
1190        rng = (2,2,5,5)
1191        tree_proc(self.h_tree, TREE_ITEM_SET_RANGE, id_item=item1a, text=rng)
1192        rng2 = tree_proc(self.h_tree, TREE_ITEM_GET_RANGE, id_item=item1a)
1193        print('Test get/set range: '+('ok' if rng==rng2 else 'failed'))
1194
1195        dlg_proc(id, DLG_SHOW_MODAL)
1196        dlg_proc(id, DLG_FREE)
1197
1198
1199    def callback_treeview_on_fold(self, id_dlg, id_ctl, data='', info=''):
1200        prop = tree_proc(self.h_tree, TREE_ITEM_GET_PROPS, id_item=data)
1201        print('callback_treeview_on_unfold,', 'item:', prop)
1202
1203    def callback_treeview_on_unfold(self, id_dlg, id_ctl, data='', info=''):
1204        prop = tree_proc(self.h_tree, TREE_ITEM_GET_PROPS, id_item=data)
1205        print('callback_treeview_on_unfold,', 'item:', prop)
1206
1207    def callback_treeview_on_click_dbl(self, id_dlg, id_ctl, data='', info=''):
1208        print('callback_treeview_on_click_dbl')
1209
1210    def callback_pages_button_a(self, id_dlg, id_ctl, data='', info=''):
1211        prop = dlg_proc(id_dlg, DLG_CTL_PROP_GET, name='check0')
1212        new_val = not (prop['val']=='1')
1213        dlg_proc(id_dlg, DLG_CTL_PROP_SET, name='check0', prop={
1214            'val': new_val
1215            })
1216
1217    def callback_pages_on_change(self, id_dlg, id_ctl, data='', info=''):
1218        print('pages on_change')
1219        prop = dlg_proc(id_dlg, DLG_CTL_PROP_GET, name='mypages')
1220        print('tab hovered:', prop['tab_hovered'])
1221
1222    def callback_tabs_on_change(self, id_dlg, id_ctl, data='', info=''):
1223        print('tabs on_change')
1224        prop = dlg_proc(id_dlg, DLG_CTL_PROP_GET, name='mytabs')
1225        print('tab hovered:', prop['tab_hovered'])
1226
1227        n = int(prop['val'])
1228        dlg_proc(id_dlg, DLG_CTL_PROP_SET, name='tab_label', prop={
1229            'cap': '(clicked tab-'+str(n+1)+')',
1230            })
1231
1232    def test_sidepanel(self):
1233        print('test_sidepanel')
1234        title = 'Side dialog'
1235        id_dlg = self.init_maindlg()
1236        icon_name = 'project.png'
1237
1238        app_proc(PROC_SIDEPANEL_ADD_DIALOG, (title, id_dlg, icon_name) )
1239        app_proc(PROC_SIDEPANEL_ACTIVATE, title)
1240
1241    def show_about(self):
1242        ed.cmd(2700)
1243
1244    def test_btn(self):
1245        h = self.init_buttondlg()
1246        dlg_proc(h, DLG_SHOW_MODAL)
1247        dlg_proc(h, DLG_FREE)
1248
1249    def test_splitter(self):
1250        h = self.init_splitterdlg()
1251        dlg_proc(h, DLG_SHOW_MODAL)
1252        dlg_proc(h, DLG_FREE)
1253
1254    def test_listbox(self):
1255        h = self.init_listdlg()
1256        dlg_proc(h, DLG_SHOW_MODAL)
1257        dlg_proc(h, DLG_FREE)
1258
1259    def test_editor(self):
1260        h = self.init_editor_dlg()
1261        dlg_proc(h, DLG_SHOW_MODAL)
1262        dlg_proc(h, DLG_FREE)
1263
1264    def test_combo(self):
1265        h = self.init_combo_dlg()
1266        dlg_proc(h, DLG_SHOW_MODAL)
1267        dlg_proc(h, DLG_FREE)
1268
1269
1270    def test_listview(self):
1271        self.click_num   = 0
1272        self.click_col   = -1
1273
1274        def when_click_header(id_dlg, id_ctl, data):
1275            self.click_num = 1 if self.click_col != data else (self.click_num+1)%3
1276            self.click_col = data
1277            cols_s = dlg_proc(id_dlg, DLG_CTL_PROP_GET, index=id_ctl)['columns']
1278            cols_i = [c.split('\r') for c in cols_s.split('\t')]
1279            cols_i[self.click_col][0] = cols_i[self.click_col][0].strip('+-')
1280            cols_i[self.click_col][0] += '++' if self.click_num==1 else '--' if self.click_num==2 else ''
1281            dlg_proc(id_dlg, DLG_CTL_PROP_SET, index=id_ctl, prop={
1282                'columns': '\t'.join(['\r'.join(c) for c in cols_i])
1283                })
1284
1285        id = dlg_proc(0, DLG_CREATE)
1286
1287        dlg_proc(id, DLG_PROP_SET, {
1288            'w': 500,
1289            'h': 400,
1290            'cap': 'Test type=listview',
1291            'border': DBORDER_SIZE,
1292            })
1293
1294        n = dlg_proc(id, DLG_CTL_ADD, 'listview')
1295        dlg_proc(id, DLG_CTL_PROP_SET, index=n, prop={
1296            'name': 'my',
1297            'align': ALIGN_CLIENT,
1298            'sp_a': 10,
1299            'items': '1\r2\r3\tcell00\rcell01\rcell02\tcell10\rcell11\rcell12\tcell20\rcell21\rcell22',
1300            'val': 1,
1301            'columns': '\t'.join([
1302                '\r'.join(['aaa', '200', '180', '210', 'C']),
1303                '\r'.join(['bbb', '100', '', '', 'R']),
1304                '\r'.join(['ccc', '100', '', '', 'R']),
1305                ]),
1306            'on_click_header': when_click_header
1307            })
1308
1309        #after ListView creation, get its ImageList handles
1310        props = dlg_proc(id, DLG_CTL_PROP_GET, index=n)
1311        id_listview1 = props['imagelist_small']
1312        id_listview2 = props['imagelist_large']
1313
1314        dir_icons = os.path.join(app_path(APP_DIR_DATA), 'sideicons', 'octicons_20x20')
1315        fn_icon1 = os.path.join(dir_icons, 'console.png')
1316        fn_icon2 = os.path.join(dir_icons, 'find.png')
1317        print('icon1:', fn_icon1)
1318        print('icon2:', fn_icon2)
1319
1320        imagelist_proc(id_listview1, IMAGELIST_SET_SIZE, value=(20,20))
1321        icon1 = imagelist_proc(id_listview1, IMAGELIST_ADD, value=fn_icon1)
1322        icon2 = imagelist_proc(id_listview1, IMAGELIST_ADD, value=fn_icon2)
1323        print('icon indexes:', icon1, icon2)
1324
1325        dlg_proc(id, DLG_CTL_PROP_SET, index=n, prop={
1326            'imageindexes': '\t'.join([str(icon1), str(icon2)])
1327            })
1328        props = dlg_proc(id, DLG_CTL_PROP_GET, index=n)
1329        print('Listview props:', props)
1330
1331        #s = dlg_proc(id, DLG_CTL_PROP_GET, index=n)['columns']
1332        #print(repr(s))
1333
1334        dlg_proc(id, DLG_SHOW_MODAL)
1335        dlg_proc(id, DLG_FREE)
1336
1337    def test_scrollbox(self):
1338        h=dlg_proc(0, DLG_CREATE)
1339        dlg_proc(h, DLG_PROP_SET, prop={
1340            'cap': 'scrollbox test',
1341            'w': 400,
1342            'h': 300,
1343            'w_min': 200,
1344            'h_min': 250
1345            })
1346
1347        n=dlg_proc(h, DLG_CTL_ADD, 'scrollbox')
1348        dlg_proc(h, DLG_CTL_PROP_SET, index=n, prop={
1349            'name': 'p_main',
1350            'cap': 'scrollbox1',
1351            'color': 0xff00,
1352            'x': 10,
1353            'y': 20,
1354            'w': 200,
1355            'h': 100,
1356            })
1357
1358        n=dlg_proc(h, DLG_CTL_ADD, 'panel')
1359        dlg_proc(h, DLG_CTL_PROP_SET, index=n, prop={
1360            'name': 'p_child',
1361            'p': 'p_main',
1362            'cap': 'panel1',
1363            'color': 0xff0000,
1364            'x': 10,
1365            'y': 10,
1366            'w': 150,
1367            'h': 200,
1368            })
1369
1370        n=dlg_proc(h, DLG_CTL_ADD, 'button')
1371        dlg_proc(h, DLG_CTL_PROP_SET, index=n, prop={
1372            'name': 'btn_1',
1373            'cap': 'button1',
1374            'p': 'p_child',
1375            'x': 50,
1376            'y': 50,
1377            'w': 80,
1378            })
1379
1380        n=dlg_proc(h, DLG_CTL_ADD, 'button')
1381        dlg_proc(h, DLG_CTL_PROP_SET, index=n, prop={
1382            'name': 'btn_2',
1383            'cap': 'button2',
1384            'p': 'p_child',
1385            'x': 50,
1386            'y': 100,
1387            'w': 80,
1388            })
1389
1390        dlg_proc(h, DLG_SHOW_MODAL)
1391        dlg_free(h)
1392
1393
1394    def test_labels_render(self):
1395        test_labels_render()
1396