4 * (C
) Copyright
1995 Jaba Development
.
5 * (C
) Copyright
1995 Jan van den Baard
.
8 * On
22 May
96, a dead
-end loop bug corrected by Dominique Dutoit
.
10 * JT
: changes marked with
"!!!"
16 MODULE
'libraries/bgui',
24 'intuition/intuition',
28 'intuition/gadgetclass'
37 ENUM ID_T1=5,ID_T2 -> !!!
41 DEF wo_window, window:PTR TO window,go_quit, go_show, go_list, go_shift, go_all, go_none,
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,
57 WINDOW_ScaleWidth, 30,
58 WINDOW_ScaleHeight, 30,
59 WINDOW_AutoKeyLabel, TRUE,
60 WINDOW_PubScreenName, 'Workbench
', -> !!!
62 VGroupObject, HOffset( 4 ), VOffset( 4 ), Spacing( 4 ), GROUP_BackFill, SHINE_RASTER,
64 VGroupObject, HOffset( 4 ), VOffset( 4 ),
65 FRM_Type, FRTYPE_BUTTON,
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
',
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,
85 StartMember, go_all := KeyButton( '_All
', ID_ALL ), EndMember,
86 StartMember, go_none := KeyButton( 'N_one
', ID_NONE ), EndMember,
87 EndObject, FixMinHeight,
92 HGroupObject, HOffset( 4 ), VOffset( 4 ),
93 FRM_Type, FRTYPE_BUTTON,
95 VarSpace( DEFAULT_WEIGHT ),
96 StartMember, go_shift := KeyCheckBox( '_No SHIFT
:', FALSE, 0 ), EndMember,
97 VarSpace( DEFAULT_WEIGHT ),
98 EndObject, FixMinHeight,
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, -> !!!
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,
115 ** Object created OK?
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
} )
138 WHILE ( rc
:= HandleEvent( wo_window
)) <> WMHI_NOMORE
140 ** Evaluate return code
.
144 CASE WMHI_CLOSEWINDOW
149 SetGadgetAttrsA(go_list
, window
, NIL
, [LISTV_SelectMulti
, LISTV_Select_All
, TAG_END
] )
152 SetGadgetAttrsA(go_list
, window
, NIL
, [LISTV_Deselect
, -1, TAG_END
] )
157 ** Simply dump
all selected entries
160 IF str
:= FirstSelected( go_list
)
162 WriteF( '\s\n', str
+ 2 )
163 ->^^^ A bug fixed by Peter Mysliwy
164 str
:= NextSelected( go_list
, str
)
167 ** The original line was
: UNTIL str
168 ** Such statement cause a dead
-end loop as str
is filled with NIL
173 ** Oops
. There are no selected
176 WriteF( 'No selections made!\n' )
180 WindowClose(wo_window
)
181 SetAttrsA(wo_window
,[WINDOW_PubScreenName
,'BGUITEST',0])
182 IF (window
:= WindowOpen(wo_window
)) = NIL
187 WindowClose(wo_window
)
188 WriteF('Press return to reopen> ')
190 IF (window
:= WindowOpen(wo_window
)) = NIL
197 WriteF( 'Could not open the window\n' )
200 WriteF( 'Unable to add notification\n' )
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
)
210 WriteF( 'Could not create the window object\n' )
212 CloseLibrary(bguibase
)
214 WriteF( 'Could not open the bgui.library\n' )