Enabled Scalos for m68k.
[AROS-Contrib.git] / bgui / test / test10.e
blob46dccb1e07b273cabdade4009ac37b1065257964
1 /*
2 * MULTISELECT.E
4 * (C) Copyright 1995 Jaba Development.
5 * (C) Copyright 1995 Jan van den Baard.
6 * All Rights Reserved.
8 * On 22 May 96, a dead-end loop bug corrected by Dominique Dutoit.
9 * Updated on 11-Aug-96
10 * JT: changes marked with "!!!"
13 OPT OSVERSION=37
14 OPT PREPROCESS
16 MODULE 'libraries/bgui',
17 'libraries/bguim',
18 'libraries/gadtools',
19 'bgui',
20 'bgui/bgui_image',
21 'bgui/bgui_obsolete',
22 'tools/boopsi',
23 'utility/tagitem',
24 'intuition/intuition',
25 'intuition/screens',
26 'intuition/classes',
27 'intuition/classusr',
28 'intuition/gadgetclass'
30 ** Object ID's.
31 **/
32 #define ID_SHOW 1
33 #define ID_QUIT 2
34 #define ID_ALL 3
35 #define ID_NONE 4
37 ENUM ID_T1=5,ID_T2 -> !!!
39 PROC main()
41 DEF wo_window, window:PTR TO window,go_quit, go_show, go_list, go_shift, go_all, go_none,
42 signal, rc, str,
43 running = TRUE
46 ** Open the library.
47 **/
48 IF bguibase := OpenLibrary( 'bgui.library', BGUIVERSION )
50 * Create the window object.
52 wo_window := WindowObject,
53 WINDOW_Title, 'Multi-Selection Demo',
54 WINDOW_AutoAspect, TRUE,
55 WINDOW_SmartRefresh, TRUE,
56 WINDOW_RMBTrap, TRUE,
57 WINDOW_ScaleWidth, 30,
58 WINDOW_ScaleHeight, 30,
59 WINDOW_AutoKeyLabel, TRUE,
60 WINDOW_PubScreenName, 'Workbench', -> !!!
61 WINDOW_MasterGroup,
62 VGroupObject, HOffset( 4 ), VOffset( 4 ), Spacing( 4 ), GROUP_BackFill, SHINE_RASTER,
63 StartMember,
64 VGroupObject, HOffset( 4 ), VOffset( 4 ),
65 FRM_Type, FRTYPE_BUTTON,
66 FRM_Recessed, TRUE,
67 StartMember,
68 go_list := ListviewObject,
69 LISTV_EntryArray, ['\ecThis listview object has multi-',
70 '\ecselection turned on. You can',
71 '\ecmulti-select the items by holding',
72 '\ec down the SHIFT-key while clicking',
73 '\econ the different items or by clicking',
74 '\econ an entry and dragging the mouse',
75 '\ecup or down.',
76 '\ec',
77 '\ecIf you check the No SHIFT checbox',
78 '\ecyou can multi-select the items without',
79 '\ecusing the SHIFT key',NIL],
80 LISTV_MultiSelect, TRUE,
81 EndObject,
82 EndMember,
83 StartMember,
84 HGroupObject,
85 StartMember, go_all := KeyButton( '_All', ID_ALL ), EndMember,
86 StartMember, go_none := KeyButton( 'N_one', ID_NONE ), EndMember,
87 EndObject, FixMinHeight,
88 EndMember,
89 EndObject,
90 EndMember,
91 StartMember,
92 HGroupObject, HOffset( 4 ), VOffset( 4 ),
93 FRM_Type, FRTYPE_BUTTON,
94 FRM_Recessed, TRUE,
95 VarSpace( DEFAULT_WEIGHT ),
96 StartMember, go_shift := KeyCheckBox( '_No SHIFT:', FALSE, 0 ), EndMember,
97 VarSpace( DEFAULT_WEIGHT ),
98 EndObject, FixMinHeight,
99 EndMember,
100 StartMember,VGroupObject,NormalSpacing, -> !!!
101 StartMember,PrefButton('_1 Close&Reopen on BGUITEST',ID_T1),EndMember,
102 StartMember,PrefButton('_2 Close, wait-return & reopen',ID_T2),EndMember,
103 EndObject,FixMinHeight,EndMember, -> !!!
104 StartMember,
105 HGroupObject, Spacing( 4 ),
106 StartMember, go_show := KeyButton( '_Show', ID_SHOW ), EndMember,
107 VarSpace( DEFAULT_WEIGHT ),
108 StartMember, go_quit := KeyButton( '_Quit', ID_QUIT ), EndMember,
109 EndObject, FixMinHeight,
110 EndMember,
111 EndObject,
112 EndObject
115 ** Object created OK?
117 IF wo_window
119 ** Add notification.
121 IF AddMap( go_shift, go_list, [ GA_SELECTED, LISTV_MultiSelectNoShift, TAG_END ]:tagitem )
123 ** try to open the window.
125 IF window := WindowOpen( wo_window )
127 ** Obtain it's wait mask.
129 GetAttr( WINDOW_SigMask, wo_window, {signal} )
131 ** Event loop...
133 WHILE running = TRUE
134 Wait( signal )
136 ** Handle events.
138 WHILE ( rc := HandleEvent( wo_window )) <> WMHI_NOMORE
140 ** Evaluate return code.
142 SELECT rc
144 CASE WMHI_CLOSEWINDOW
145 running := FALSE
146 CASE ID_QUIT
147 running := FALSE
148 CASE ID_ALL
149 SetGadgetAttrsA(go_list, window, NIL, [LISTV_SelectMulti, LISTV_Select_All, TAG_END] )
151 CASE ID_NONE
152 SetGadgetAttrsA(go_list, window, NIL, [LISTV_Deselect, -1, TAG_END] )
154 CASE ID_SHOW
157 ** Simply dump all selected entries
158 ** to the console.
160 IF str := FirstSelected( go_list )
161 REPEAT
162 WriteF( '\s\n', str + 2 )
163 ->^^^ A bug fixed by Peter Mysliwy
164 str := NextSelected( go_list, str )
166 /* THE BUG !!!!!
167 ** The original line was : UNTIL str
168 ** Such statement cause a dead-end loop as str is filled with NIL
170 UNTIL str = NIL
171 ELSE
173 ** Oops. There are no selected
174 ** entries.
176 WriteF( 'No selections made!\n' )
177 ENDIF
179 CASE ID_T1
180 WindowClose(wo_window)
181 SetAttrsA(wo_window,[WINDOW_PubScreenName,'BGUITEST',0])
182 IF (window := WindowOpen(wo_window)) = NIL
183 running := FALSE
184 ENDIF
186 CASE ID_T2
187 WindowClose(wo_window)
188 WriteF('Press return to reopen> ')
189 Inp(stdout)
190 IF (window := WindowOpen(wo_window)) = NIL
191 running := FALSE
192 ENDIF
193 ENDSELECT
194 ENDWHILE
195 ENDWHILE
196 ELSE
197 WriteF( 'Could not open the window\n' )
198 ENDIF
199 ELSE
200 WriteF( 'Unable to add notification\n' )
201 ENDIF
203 ** Disposing of the window object will
204 ** also close the window if it is
205 ** already opened and it will dispose of
206 ** all objects attached to it.
208 DisposeObject( wo_window )
209 ELSE
210 WriteF( 'Could not create the window object\n' )
211 ENDIF
212 CloseLibrary(bguibase)
213 ELSE
214 WriteF( 'Could not open the bgui.library\n' )
215 ENDIF
216 ENDPROC