Bringing ChocolateCaste-0.7 into the main branch.
[AROS-Contrib.git] / bgui / RexxBGUI / multiselect.rexx
blobab1b9cfd12e3abb67d17d49dc2f1e293cf487789
1 /* REXX script for rexxbgui.library: MultiSelect example */
3 if ~show('l','rexxbgui.library') then do
4 if ~addlib('rexxbgui.library',0,-30) then do
5 exit(20)
6 end
7 else nop
8 end
9 else nop
11 call bguiopen() /* causes error 12 if it did not work */
12 /* supply a second argument for a '0' return code instead of an ARexx
13 error */
15 signal on syntax /* important: bguiclose() MUST be called */
16 signal on halt
17 signal on break_c
19 esc='1B'x
20 lf='0A'x
21 cr='0D'x
22 grspace.narrow=-1
23 grspace.normal=-2
24 grspace.wide=-3
27 lst.count=26
28 do i=0 for lst.count
29 lst.i=esc'c'd2c(i+65)||d2c(i+97)
30 end
32 i=0
33 lst.i='\ecThis listview object has multi-'; i=i+1
34 lst.i='\ecselection turned on. You can'; i=i+1
35 lst.i='\ecmulti-select the items by holding'; i=i+1
36 lst.i='\ecdown the SHIFT-key while clicking'; i=i+1
37 lst.i='\econ the different items or by clicking'; i=i+1
38 lst.i='\econ an entry and dragging the mouse'; i=i+1
39 lst.i='\ecup or down.'; i=i+1
40 lst.i='\ec'; i=i+1
41 lst.i='\ecIf you check the No SHIFT checkbox'; i=i+1
42 lst.i='\ecyou can multi-select the items without'; i=i+1
43 lst.i='\ecusing the SHIFT key'; i=i+1
44 lst.count=i
46 /* using ARexx feature: ,<newline> is translated to nothing */
47 /* the || are essential - any added space will cause trouble */
48 /* redefining the same ID makes previous buttons unaccessible */
49 /* do not redefine winclose etc. */
51 g=bguivgroup(,
52 bguiinfo(,
53 'info',,'\ec\ebARexx\e-b conversion'lf'of \ebMultiSelect\e-b example',
54 )||bguilayout(LGO_FixMinHeight,1)||,
55 bguivgroup(,
56 bguilistview('listv',,'LST','S')||,
57 bguihgroup(,
58 bguibutton('all','_All')||,
59 bguibutton('none','N_one'),
60 ,0)||bguilayout(LGO_Align,1,LGO_FixMinHeight,1),
61 ,0)||bguilayout(LGO_NoAlign,1)||,
62 bguihgroup(,
63 bguicheckbox('ms','_Multiple selection',1)||bguilayout(LGO_FixMinWidth,1)||,
64 bguivarspace(50)||,
65 bguicheckbox('nsm','_No SHIFT',0)||bguilayout(LGO_FixMinWidth,1),
66 )||bguilayout(LGO_FixMinHeight,1)||,
67 bguihgroup(,
68 bguibutton('show','_Show')||,
69 bguivarspace(50)||,
70 bguibutton('quit','_Quit'),
71 )||bguilayout(LGO_FixMinHeight,1),
72 ,grspace.normal,grspace.normal)
74 call bguiaddmap(obj.ms,obj.listv,GA_Selected,LISTV_MultiSelect)
75 call bguiaddmap(obj.nsm,obj.listv,GA_Selected,LISTV_MultiSelectNoShift)
77 call bguiset(obj.listv,,LISTV_MultiSelect,1)
79 a=bguiwindow('Multi-Selection Demo',g,20,30,,arg(1))
81 if bguiwinopen(a)=0 then bguierror(12)
82 id=0
83 do while bguiwinwaitevent(a,'ID')~=id.winclose
84 select
85 when id=id.winactive then nop
86 when id=id.wininactive then nop
87 when id=id.show then do
89 text=bguiget(obj.listv,LISTV_LastClicked)lf||,
90 bguiget(obj.listv,LISTV_LastClickedNum)
91 call bguireq('Results are:'lf||text,'*_OK',,a)
93 if bguilistvgetentries(obj.listv,'RES','S')>0 then do
94 do i=0 for res.count
95 say substr(res.i,3)
96 end
97 end; else do
98 say 'No selections made!'
99 end
101 when id=id.ms then do
102 if bguiget(obj.ms,GA_Selected)=0 then do
103 call bguiset(obj.nsm,a,GA_Disabled,1)
104 call bguiset(obj.all,a,GA_Disabled,1)
105 end; else do
106 call bguiset(obj.nsm,a,GA_Disabled,0)
107 call bguiset(obj.all,a,GA_Disabled,0)
110 when id=id.all then call bguiset(obj.listv,a,LISTV_SelectMulti,-8)
111 when id=id.none then call bguiset(obj.listv,a,LISTV_Deselect,-1)
112 when id=id.quit then leave
113 when id=id.winclose then nop
114 otherwise nop
117 rc=0
119 syntax:
120 if rc~=0 then say '+++ ['rc']' errortext(rc) 'at line' sigl
121 call bguiclose()
122 exit 0
124 break_c:
125 halt:
126 rc=0
127 say '+++ Break at line' sigl
128 signal syntax