build git 2.17.1
[AROS-Contrib.git] / bgui / examples / BGUIDemo.c
blobe0cf29a5a4c9ef5bcd4aa3aaf49c8264a5e7294a
1 /*
2 * @(#) $Header$
4 * BGUIDemo.c
6 * (C) Copyright 1998 Manuel Lemos.
7 * (C) Copyright 1995 Jaba Development.
8 * (C) Copyright 1995 Jan van den Baard.
9 * All Rights Reserved.
11 * $Log$
12 * Revision 42.6 2004/06/20 12:24:32 verhaegs
13 * Use REGFUNC macro's in BGUI source code, not AROS_UFH
15 * Revision 42.5 2004/06/16 23:59:30 chodorowski
16 * Added missing AROS_USERFUNC_INIT/EXIT.
18 * Revision 42.4 2003/01/18 19:10:09 chodorowski
19 * Instead of using the _AROS or __AROS preprocessor symbols, use __AROS__.
21 * Revision 42.3 2000/08/10 11:50:54 chodorowski
22 * Cleaned up and prettyfied the GUIs a bit.
24 * Revision 42.2 2000/07/04 05:02:22 bergers
25 * Made examples compilable.
27 * Revision 42.1 2000/05/15 19:29:50 stegerg
28 * replacements for REG macro.
30 * Revision 42.0 2000/05/09 22:19:21 mlemos
31 * Bumped to revision 42.0 before handing BGUI to AROS team
33 * Revision 41.11 2000/05/09 20:33:12 mlemos
34 * Bumped to revision 41.11
36 * Revision 1.2 2000/05/09 19:58:33 mlemos
37 * Merged with the branch Manuel_Lemos_fixes.
39 * Revision 1.1.2.5 1999/02/19 05:03:47 mlemos
40 * Added support to build with Storm C.
42 * Revision 1.1.2.4 1998/12/08 03:54:25 mlemos
43 * Associated tooltip texts to the buttons of the main window.
45 * Revision 1.1.2.3 1998/12/07 00:12:46 mlemos
46 * Made the pages tabs and radio button be activated usning the keyboard.
48 * Revision 1.1.2.2 1998/03/01 20:32:48 mlemos
49 * Ensured that the stack is never less than 8000 bytes.
51 * Revision 1.1.2.1 1998/02/28 17:44:57 mlemos
52 * Ian sources
57 /* Execute me to compile with DICE V3.0
58 dcc BGUIDemo.c -proto -mi -ms -mRR -lbgui
59 quit
62 #ifndef __STORM__
63 long __stack=8000;
64 #endif /* __STORM__ */
66 #include "DemoCode.h"
69 ** Online-Help texts.
70 **/
71 UBYTE *MainHelp = ISEQ_C "BGUI is a shared library which offers a set of\n"
72 "BOOPSI classes to allow for easy and flexible GUI creation.\n\n"
73 "The main window is also an AppWindow. Drop some icons\n"
74 "on it and see what happens.\n\n"
75 "All windows also detect the aspect ratio of the screen they are\n"
76 "located on and adjust frame thickness accoording to this.\n\n"
77 "All other windows in this demo also have online-help. To access\n"
78 "this help press the " ISEQ_B "HELP" ISEQ_N " key when the window is active.";
80 UBYTE *GroupsHelp = ISEQ_C "The BGUI layout engine is encapsulated in the groupclass.\n"
81 "The groupclass will layout all of it's members into a specific area.\n"
82 "You can pass layout specific attributes to all group members\n"
83 "which allows for flexible and powerful layout capabilities.";
85 UBYTE *NotifHelp = ISEQ_C "Notification can be used to let an object keep one or\n"
86 "more other objects informed about it's status. BGUI offers several\n"
87 "kinds of notification of which two (conditional and map-list) are\n"
88 "shown in this demonstration.";
90 UBYTE *InfoHelp = ISEQ_C "Not much more can be said about the BGUI infoclass than\n"
91 "is said in this window. Except maybe that this text is shown in an\n"
92 "infoclass object as are all body texts from a BGUI requester.";
94 UBYTE *ImageHelp = ISEQ_C "This window shows you the built-in images that BGUI has\n"
95 "to offer. Ofcourse these images are all scalable and it is possible\n"
96 "to create your own, scalable, imagery with the BGUI vectorclass.";
98 UBYTE *BackfillHelp = ISEQ_C "Here you see the built-in backfill patterns BGUI supports.\n"
99 "These backfill patterns can all be used in groups and frames.\n"
100 "The frameclass also offers you the possibility to add hooks for\n"
101 "custom backfills and frame rendering.\n\n"
102 "The bottom frame shows you a custom backfill hook which renders a\n"
103 "simple pattern known from the WBPattern prefs editor as background.";
105 UBYTE *PagesHelp = ISEQ_C "The pageclass allows you to setup a set of pages containing\n"
106 "BGUI gadgets or groups. This will give you the oppertunity to\n"
107 "have several set's of gadgets in a single window.\n\n"
108 "This window has a IDCMP-hook installed which allows you to\n"
109 "control the Tabs object with your TAB key.";
113 ** Window objects.
115 Object *WA_Main = NULL, *WA_Groups = NULL, *WA_Notif = NULL;
116 Object *WA_Info = NULL, *WA_Image = NULL, *WA_BFill = NULL;
117 Object *WA_Pages = NULL;
120 ** Gadget objects from the main window.
122 Object *BT_Groups, *BT_Notif, *BT_Quit;
123 Object *BT_Info, *BT_Images, *BT_BFill;
124 Object *BT_Pages, *BT_IconDone, *BT_IconQuit;
125 Object *LV_IconList, *PG_Pager;
128 ** One, shared, message port for all
129 ** demo windows.
131 struct MsgPort *SharedPort;
134 ** Menus & gadget ID's.
136 #define ID_ABOUT 1L
137 #define ID_QUIT 2L
140 ** A small menu strip.
142 struct NewMenu MainMenus[] = {
143 Title( "Project" ),
144 Item( "About...", "?", ID_ABOUT ),
145 ItemBar,
146 Item( "Quit", "Q", ID_QUIT ),
151 ** Put up a simple requester.
153 STATIC ULONG ReqA( struct Window *win, UBYTE *gadgets, UBYTE *body, IPTR *args)
155 struct bguiRequest req = { };
157 req.br_GadgetFormat = gadgets;
158 req.br_TextFormat = body;
159 req.br_Flags = BREQF_CENTERWINDOW|BREQF_XEN_BUTTONS|BREQF_AUTO_ASPECT;
161 return( BGUI_RequestA( win, &req, args));
164 #define Req(win, gadgets, body, ...) \
165 ({ IPTR __args[] = { AROS_PP_VARIADIC_CAST2IPTR(__VA_ARGS__) }; \
166 ReqA(win, gadgets, body, __args); })
170 ** Main window button ID's.
172 #define ID_MAIN_GROUPS 3L
173 #define ID_MAIN_NOTIF 4L
174 #define ID_MAIN_INFO 5L
175 #define ID_MAIN_IMAGE 6L
176 #define ID_MAIN_BFILL 7L
177 #define ID_MAIN_PAGES 8L
178 #define ID_MAIN_ICON_CONT 9L
181 ** Open main window.
183 struct Window *OpenMainWindow( IPTR *appmask )
185 struct Window *window = NULL;
187 WA_Main = WindowObject,
188 WINDOW_Title, "BGUI Demo",
189 WINDOW_ScreenTitle, "BGUI Demo - ©1996 Ian J. Einman, ©1993-1995 Jaba Development.",
190 WINDOW_MenuStrip, MainMenus,
191 WINDOW_SmartRefresh, TRUE,
192 WINDOW_AppWindow, TRUE,
193 WINDOW_SizeGadget, FALSE,
194 WINDOW_HelpText, MainHelp,
195 WINDOW_AutoAspect, TRUE,
196 WINDOW_SharedPort, SharedPort,
197 WINDOW_AutoKeyLabel, TRUE,
198 WINDOW_ScaleWidth, 10,
199 WINDOW_CloseOnEsc, TRUE,
200 WINDOW_MasterGroup,
201 VGroupObject, NormalOffset, NormalSpacing, GROUP_BackFill, SHINE_RASTER,
202 StartMember,
203 PG_Pager = PageObject,
205 ** Main page.
207 PageMember,
208 VGroupObject, WideSpacing, GROUP_BackFill, SHINE_RASTER,
209 StartMember,
210 InfoObject,
211 INFO_TextFormat, ISEQ_C
212 ISEQ_HIGHLIGHT
213 "\033s\033bBGUI Demo\n"
214 ISEQ_TEXT
215 ISEQ_N
216 "©1996 Ian J. Einman\n"
217 "©1993-1995 Jaba Development\n\n"
218 "\033iPress the HELP key for more info.",
219 INFO_FixTextWidth, TRUE,
220 INFO_MinLines, 5,
221 FRM_Type, FRTYPE_NEXT,
222 EndObject,
223 EndMember,
224 StartMember,
225 HGroupObject, NormalSpacing,
226 StartMember,
227 VGroupObject, NormalSpacing,
228 StartMember,
229 BT_Groups = ButtonObject,
230 LAB_Label, "_Groups",
231 GA_ID, ID_MAIN_GROUPS,
232 BT_ToolTip, "Shows different group layouts",
233 EndObject,
234 EndMember,
235 StartMember,
236 BT_Notif = ButtonObject,
237 LAB_Label, "_Notification",
238 GA_ID, ID_MAIN_NOTIF,
239 BT_ToolTip, "Shows notification between gadgets",
240 EndObject,
241 EndMember,
242 VarSpace( DEFAULT_WEIGHT ),
243 EndObject,
244 EndMember,
245 StartMember,
246 VGroupObject, NormalSpacing,
247 StartMember,
248 BT_Images = ButtonObject,
249 LAB_Label, "_Images",
250 GA_ID, ID_MAIN_IMAGE,
251 BT_ToolTip, "Shows different types of built-in images",
252 EndObject,
253 EndMember,
254 StartMember,
255 BT_BFill = ButtonObject,
256 LAB_Label, "_BackFill",
257 GA_ID, ID_MAIN_BFILL,
258 BT_ToolTip, "Shows different types of background filling",
259 EndObject,
260 EndMember,
261 StartMember,
262 BT_Quit = ButtonObject,
263 LAB_Label, "_Quit",
264 GA_ID, ID_QUIT,
265 BT_ToolTip, "Quits this program",
266 EndObject,
267 EndMember,
268 EndObject,
269 EndMember,
270 StartMember,
271 VGroupObject, NormalSpacing,
272 StartMember,
273 BT_Pages = ButtonObject,
274 LAB_Label, "_Pages",
275 GA_ID, ID_MAIN_PAGES,
276 BT_ToolTip, "Shows paged of groups",
277 EndObject,
278 EndMember,
279 StartMember,
280 BT_Info = ButtonObject,
281 LAB_Label, "Info_Class",
282 GA_ID, ID_MAIN_INFO,
283 BT_ToolTip, "Shows the Information gadget",
284 EndObject,
285 EndMember,
286 VarSpace( DEFAULT_WEIGHT ),
287 EndObject,
288 EndMember,
289 EndObject, FixMinHeight, EqualWidth,
290 EndMember,
291 EndObject,
293 ** Icon-drop list page.
295 PageMember,
296 VGroupObject, NormalSpacing, GROUP_BackFill, SHINE_RASTER,
297 StartMember,
298 InfoObject,
299 INFO_TextFormat, ISEQ_C
300 "The following icons were dropped\n"
301 "in the window:",
302 INFO_FixTextWidth, TRUE,
303 INFO_MinLines, 2,
304 INFO_HorizOffset, 13,
305 FRM_Type, FRTYPE_BUTTON,
306 FRM_Recessed, TRUE,
307 EndObject, FixMinHeight,
308 EndMember,
309 StartMember,
310 LV_IconList = ListviewObject,
311 LISTV_ReadOnly, TRUE,
312 EndObject,
313 EndMember,
314 StartMember,
315 HGroupObject,
316 StartMember, BT_IconDone = PrefButton( "_Continue", ID_MAIN_ICON_CONT ), EndMember,
317 VarSpace( DEFAULT_WEIGHT ),
318 StartMember, BT_IconQuit = PrefButton( "_Quit", ID_QUIT ), EndMember,
319 EndObject, FixMinHeight,
320 EndMember,
321 EndObject,
322 EndObject,
323 EndMember,
324 EndObject,
325 EndObject;
328 ** Object created OK?
330 if ( WA_Main ) {
332 ** Open the window.
334 if (( window = WindowOpen( WA_Main ))) {
336 ** Obtain appwindow signal mask.
338 GetAttr( WINDOW_AppMask, WA_Main, appmask );
342 return( window );
346 ** Macros for the group objects. GObj() creates
347 ** a simple infoclass object with some text in
348 ** it. TObj() creates a simple groupclass object
349 ** with a button frame.
351 #define GObj(t)\
352 InfoObject,\
353 INFO_TextFormat, t,\
354 INFO_FixTextWidth, TRUE,\
355 INFO_HorizOffset, 4,\
356 INFO_VertOffset, 3,\
357 ButtonFrame,\
358 FRM_Flags, FRF_RECESSED,\
359 EndObject
361 #define NWObj(v,id)\
362 StringObject,\
363 STRINGA_LongVal, v,\
364 STRINGA_MaxChars, 3,\
365 STRINGA_IntegerMin, 1,\
366 STRINGA_IntegerMax, 999,\
367 STRINGA_Justification, GACT_STRINGCENTER,\
368 GA_ID, id,\
369 FuzzRidgeFrame,\
370 EndObject, Weight(v)
372 #define TObj\
373 HGroupObject, HOffset(4), VOffset(3),\
374 ButtonFrame,\
375 FRM_BackFill, FILL_RASTER,\
376 FRM_Flags, FRF_RECESSED,\
377 EndObject
379 #define ID_GROUP_W0 500
380 #define ID_GROUP_W1 501
381 #define ID_GROUP_W2 502
382 #define ID_GROUP_W3 503
384 Object *w[4] = { NULL, NULL, NULL, NULL };
387 ** Open up the groups window.
389 struct Window *OpenGroupsWindow( void )
391 struct Window *window = NULL;
394 ** If the object has not been created
395 ** already we build it.
397 if ( ! WA_Groups ) {
398 WA_Groups = WindowObject,
399 WINDOW_Title, "BGUI Groups",
400 WINDOW_RMBTrap, TRUE,
401 WINDOW_SmartRefresh, TRUE,
402 WINDOW_HelpText, GroupsHelp,
403 WINDOW_AutoAspect, TRUE,
404 WINDOW_SharedPort, SharedPort,
405 WINDOW_ScaleWidth, 20,
406 WINDOW_ScaleHeight, 20,
407 WINDOW_MasterGroup,
408 VGroupObject, NormalOffset, NormalSpacing,
409 StartMember,
410 HGroupObject, WideSpacing,
411 StartMember,
412 HGroupObject, NeXTFrame, FrameTitle( "Horizontal" ), NormalSpacing,
413 NormalHOffset, TOffset(GRSPACE_NARROW), BOffset(GRSPACE_NORMAL),
414 StartMember, TObj, EndMember,
415 StartMember, TObj, EndMember,
416 StartMember, TObj, EndMember,
417 EndObject,
418 EndMember,
419 StartMember,
420 VGroupObject, NeXTFrame, FrameTitle( "Vertical" ), NormalSpacing,
421 NormalHOffset, TOffset(GRSPACE_NARROW), BOffset(GRSPACE_NORMAL),
422 StartMember, TObj, EndMember,
423 StartMember, TObj, EndMember,
424 StartMember, TObj, EndMember,
425 EndObject,
426 EndMember,
427 StartMember,
428 VGroupObject, NeXTFrame, FrameTitle( "Grid" ), NormalSpacing,
429 NormalHOffset, TOffset(GRSPACE_NARROW), BOffset(GRSPACE_NORMAL),
430 StartMember,
431 HGroupObject, NormalSpacing,
432 StartMember, TObj, EndMember,
433 StartMember, TObj, EndMember,
434 StartMember, TObj, EndMember,
435 EndObject,
436 EndMember,
437 StartMember,
438 HGroupObject, NormalSpacing,
439 StartMember, TObj, EndMember,
440 StartMember, TObj, EndMember,
441 StartMember, TObj, EndMember,
442 EndObject,
443 EndMember,
444 StartMember,
445 HGroupObject, NormalSpacing,
446 StartMember, TObj, EndMember,
447 StartMember, TObj, EndMember,
448 StartMember, TObj, EndMember,
449 EndObject,
450 EndMember,
451 EndObject,
452 EndMember,
453 EndObject,
454 EndMember,
455 StartMember,
456 VGroupObject, NormalSpacing, FrameTitle("Free, Fixed and Weight sizes."), NeXTFrame,
457 NormalHOffset, TOffset(GRSPACE_NARROW), BOffset(GRSPACE_NORMAL),
458 StartMember,
459 HGroupObject, NormalSpacing,
460 StartMember, w[0] = NWObj( 25, ID_GROUP_W0), EndMember,
461 StartMember, w[1] = NWObj( 50, ID_GROUP_W1), EndMember,
462 StartMember, w[2] = NWObj( 75, ID_GROUP_W2), EndMember,
463 StartMember, w[3] = NWObj(100, ID_GROUP_W3), EndMember,
464 EndObject,
465 EndMember,
466 StartMember,
467 HGroupObject, NormalSpacing,
468 StartMember, GObj( ISEQ_C "Free" ), EndMember,
469 StartMember, GObj( ISEQ_C ISEQ_B "Fixed" ), FixMinWidth, EndMember,
470 StartMember, GObj( ISEQ_C "Free" ), EndMember,
471 StartMember, GObj( ISEQ_C ISEQ_B "Fixed" ), FixMinWidth, EndMember,
472 EndObject,
473 EndMember,
474 EndObject, FixMinHeight,
475 EndMember,
476 EndObject,
477 EndObject;
481 ** Object OK?
483 if ( WA_Groups ) {
485 ** Open the window.
487 window = WindowOpen( WA_Groups );
490 return( window );
494 ** Cycle gadget labels.
496 UBYTE *NotifLabels[] = { "Enabled-->", "Disabled-->", "Still Disabled-->", NULL };
499 ** Notification map-lists.
501 struct TagItem pga2sl[] = { { PGA_Top, SLIDER_Level, }, { TAG_END } };
502 struct TagItem sl2prg[] = { { SLIDER_Level, PROGRESS_Done, }, { TAG_END } };
503 struct TagItem prg2in[] = { { PROGRESS_Done, INDIC_Level, }, { TAG_END } };
506 ** Open the notification window.
508 struct Window *OpenNotifWindow( void )
510 struct Window *window = NULL;
511 Object *c, *b, *p1, *p2, *s1, *s2, *p, *i1, *i2;
514 ** Not created yet? Create it now!
516 if ( ! WA_Notif ) {
517 WA_Notif = WindowObject,
518 WINDOW_Title, "BGUI notification",
519 WINDOW_RMBTrap, TRUE,
520 WINDOW_SmartRefresh, TRUE,
521 WINDOW_HelpText, NotifHelp,
522 WINDOW_AutoAspect, TRUE,
523 WINDOW_SharedPort, SharedPort,
524 WINDOW_MasterGroup,
525 VGroupObject, NormalOffset, NormalSpacing,
526 StartMember, TitleSeperator( "Conditional" ), EndMember,
527 StartMember,
528 HGroupObject, NormalSpacing,
529 StartMember, c = PrefCycle( NULL, NotifLabels, 0, 0 ), EndMember,
530 StartMember, b = PrefButton( "Target", 0 ), EndMember,
531 EndObject, FixMinHeight,
532 EndMember,
533 StartMember, TitleSeperator( "Map-List" ), EndMember,
534 StartMember,
535 HGroupObject, NormalSpacing,
536 StartMember,
537 VGroupObject, NormalSpacing,
538 StartMember, i1 = IndicatorFormat( 0, 100, 0, IDJ_CENTER, "%ld%%" ), FixMinHeight, EndMember,
539 StartMember, p1 = HorizProgress( NULL, 0, 100, 0 ), EndMember,
540 EndObject,
541 EndMember,
542 StartMember, s1 = VertSlider( NULL, 0, 100, 0, 0 ), FixWidth( 16 ), EndMember,
543 StartMember, p = VertScroller( NULL, 0, 101, 1, 0 ), FixWidth( 16 ), EndMember,
544 StartMember, s2 = VertSlider( NULL, 0, 100, 0, 0 ), FixWidth( 16 ), EndMember,
545 StartMember,
546 VGroupObject, NormalSpacing,
547 StartMember, i2 = IndicatorFormat( 0, 100, 0, IDJ_CENTER, "%ld%%" ), FixMinHeight, EndMember,
548 StartMember, p2 = VertProgress( NULL, 0, 100, 0 ), EndMember,
549 EndObject,
550 EndMember,
551 EndObject,
552 EndMember,
553 EndObject,
554 EndObject;
556 if ( WA_Notif ) {
558 ** Connect the cycle object with the button.
560 AddCondit( c, b, CYC_Active, 0, GA_Disabled, FALSE, GA_Disabled, TRUE );
562 ** Connect sliders, prop, progression and indicators.
564 AddMap( s1, p1, sl2prg );
565 AddMap( s2, p2, sl2prg );
566 AddMap( p, s1, pga2sl );
567 AddMap( p, s2, pga2sl );
568 AddMap( p1, i1, prg2in );
569 AddMap( p2, i2, prg2in );
574 ** Object OK?
576 if ( WA_Notif ) {
578 ** Open window.
580 window = WindowOpen( WA_Notif );
583 return( window );
587 ** Open infoclass window.
589 struct Window *OpenInfoWindow( void )
591 struct Window *window = NULL;
592 IPTR args[2];
595 ** Setup arguments for the
596 ** infoclass object.
598 args[0] = AvailMem( MEMF_CHIP );
599 args[1] = AvailMem( MEMF_FAST );
602 ** Not created already?
604 if ( ! WA_Info ) {
605 WA_Info = WindowObject,
606 WINDOW_Title, "BGUI information class",
607 WINDOW_RMBTrap, TRUE,
608 WINDOW_SmartRefresh, TRUE,
609 WINDOW_HelpText, InfoHelp,
610 WINDOW_AutoAspect, TRUE,
611 WINDOW_SharedPort, SharedPort,
612 WINDOW_MasterGroup,
613 VGroupObject, HOffset( 4 ), VOffset( 4 ),
614 StartMember,
615 InfoFixed( NULL,
616 ISEQ_C "BGUI offers the InfoClass.\n"
617 "This class is a text display class which\n"
618 "allows things like:\n\n"
619 ISEQ_SHINE "C"
620 ISEQ_SHADOW "o"
621 ISEQ_FILL "l"
622 ISEQ_FILLTEXT "o"
623 ISEQ_HIGHLIGHT "r"
624 ISEQ_TEXT "s\n\n"
625 ISEQ_L "Left Aligned...\n"
626 ISEQ_R "Right Aligned...\n"
627 ISEQ_C "Centered...\n\n"
628 ISEQ_B "Bold...\n" ISEQ_N
629 ISEQ_I "Italic...\n" ISEQ_N
630 ISEQ_U "Underlined...\n\n"
631 ISEQ_B ISEQ_I "And combinations!\n\n"
632 ISEQ_N "Free CHIP:" ISEQ_SHINE " %lD" ISEQ_TEXT", Free FAST:" ISEQ_SHINE " %lD\n",
633 &args[ 0 ],
634 17 ),
635 EndMember,
636 EndObject,
637 EndObject;
641 ** Object OK?
643 if ( WA_Info ) {
645 ** Open window.
647 window = WindowOpen( WA_Info );
650 return( window );
654 ** Open images window.
656 struct Window *OpenImageWindow( void )
658 struct Window *window = NULL;
661 ** Not yet created?
663 if ( ! WA_Image ) {
664 WA_Image = WindowObject,
665 WINDOW_Title, "BGUI images",
666 WINDOW_RMBTrap, TRUE,
667 WINDOW_SmartRefresh, TRUE,
668 WINDOW_HelpText, ImageHelp,
669 WINDOW_AutoAspect, TRUE,
670 WINDOW_SharedPort, SharedPort,
671 WINDOW_ScaleHeight, 10,
672 WINDOW_MasterGroup,
673 VGroupObject, NormalOffset, WideSpacing,
674 StartMember,
675 HGroupObject, TOffset(GRSPACE_NARROW), BOffset(GRSPACE_NORMAL), NormalSpacing, NeXTFrame, FrameTitle("Fixed size"),
676 VarSpace(DEFAULT_WEIGHT),
677 StartMember, ButtonObject, VIT_BuiltIn, BUILTIN_GETPATH, ButtonFrame, EndObject, FixMinSize, EndMember,
678 StartMember, ButtonObject, VIT_BuiltIn, BUILTIN_GETFILE, ButtonFrame, EndObject, FixMinSize, EndMember,
679 StartMember, ButtonObject, VIT_BuiltIn, BUILTIN_POPUP, ButtonFrame, EndObject, FixMinSize, EndMember,
680 StartMember, ButtonObject, VIT_BuiltIn, BUILTIN_CYCLE, ButtonFrame, EndObject, FixMinSize, EndMember,
681 StartMember, ButtonObject, VIT_BuiltIn, BUILTIN_CYCLE2, ButtonFrame, EndObject, FixMinSize, EndMember,
682 StartMember, ButtonObject, VIT_BuiltIn, BUILTIN_CHECKMARK, ButtonFrame, EndObject, FixMinSize, EndMember,
683 StartMember, ButtonObject, VIT_BuiltIn, BUILTIN_ARROW_UP, ButtonFrame, EndObject, FixMinSize, EndMember,
684 StartMember, ButtonObject, VIT_BuiltIn, BUILTIN_ARROW_DOWN, ButtonFrame, EndObject, FixMinSize, EndMember,
685 StartMember, ButtonObject, VIT_BuiltIn, BUILTIN_ARROW_LEFT, ButtonFrame, EndObject, FixMinSize, EndMember,
686 StartMember, ButtonObject, VIT_BuiltIn, BUILTIN_ARROW_RIGHT, ButtonFrame, EndObject, FixMinSize, EndMember,
687 VarSpace(DEFAULT_WEIGHT),
688 EndObject, FixMinHeight,
689 EndMember,
690 StartMember,
691 VGroupObject, NormalHOffset, TOffset(GRSPACE_NARROW), BOffset(GRSPACE_NORMAL), NormalSpacing, NeXTFrame, FrameTitle("Free size"),
692 StartMember,
693 HGroupObject, NormalSpacing,
694 StartMember, ButtonObject, VIT_BuiltIn, BUILTIN_GETPATH, ButtonFrame, EndObject, EndMember,
695 StartMember, ButtonObject, VIT_BuiltIn, BUILTIN_GETFILE, ButtonFrame, EndObject, EndMember,
696 StartMember, ButtonObject, VIT_BuiltIn, BUILTIN_POPUP, ButtonFrame, EndObject, EndMember,
697 StartMember, ButtonObject, VIT_BuiltIn, BUILTIN_CYCLE, ButtonFrame, EndObject, EndMember,
698 StartMember, ButtonObject, VIT_BuiltIn, BUILTIN_CYCLE2, ButtonFrame, EndObject, EndMember,
699 EndObject,
700 EndMember,
701 StartMember,
702 HGroupObject, NormalSpacing,
703 StartMember, ButtonObject, VIT_BuiltIn, BUILTIN_CHECKMARK, ButtonFrame, EndObject, EndMember,
704 StartMember, ButtonObject, VIT_BuiltIn, BUILTIN_ARROW_UP, ButtonFrame, EndObject, EndMember,
705 StartMember, ButtonObject, VIT_BuiltIn, BUILTIN_ARROW_DOWN, ButtonFrame, EndObject, EndMember,
706 StartMember, ButtonObject, VIT_BuiltIn, BUILTIN_ARROW_LEFT, ButtonFrame, EndObject, EndMember,
707 StartMember, ButtonObject, VIT_BuiltIn, BUILTIN_ARROW_RIGHT, ButtonFrame, EndObject, EndMember,
708 EndObject,
709 EndMember,
710 EndObject,
711 EndMember,
712 EndObject,
713 EndObject;
717 ** Object OK?
719 if ( WA_Image ) {
721 ** Open the window.
723 window = WindowOpen( WA_Image );
726 return( window );
730 ** The BackFill hook to show custom backfills.
731 ** Renders a pattern from the WBPattern preferences
732 ** editor as back-fill.
734 SAVEDS ASM REGFUNC3(IPTR, BackFillHook,
735 REGPARAM(A0, struct Hook *, hook),
736 REGPARAM(A2, Object *, imo),
737 REGPARAM(A1, struct FrameDrawMsg *, fdm)
740 UWORD pat[] =
742 0x0000, 0x0000, 0x0002, 0x0002, 0x000A, 0x000A, 0x002A, 0x002A,
743 0x00AA, 0x002A, 0x03EA, 0x000A, 0x0FFA, 0x0002, 0x3FFE, 0x0000,
744 0x0000, 0x7FFC, 0x4000, 0x5FF0, 0x5000, 0x57C0, 0x5400, 0x5500,
745 0x5400, 0x5400, 0x5000, 0x5000, 0x4000, 0x4000, 0x0000, 0x0000,
748 fdm->fdm_RPort->Mask = 0x03;
749 SetAfPt( fdm->fdm_RPort, pat, -4 );
750 SetAPen( fdm->fdm_RPort, ( 1 << fdm->fdm_DrawInfo->dri_Depth ) - 1 );
751 RectFill( fdm->fdm_RPort, fdm->fdm_Bounds->MinX, fdm->fdm_Bounds->MinY,
752 fdm->fdm_Bounds->MaxX, fdm->fdm_Bounds->MaxY );
753 SetAfPt( fdm->fdm_RPort, NULL, 0 );
755 return( FRC_OK );
757 REGFUNC_END
760 ** The hook structure.
762 struct Hook BackFill = {
763 { NULL, NULL}, (HOOKFUNC)BackFillHook, NULL, NULL
767 ** Open back-fill window.
769 struct Window *OpenFillWindow( void )
771 struct Window *window = NULL;
772 struct Screen *screen = LockPubScreen(NULL);
774 static struct bguiPattern bp;
777 ** Not yet created?
779 if ( ! WA_BFill ) {
780 WA_BFill = WindowObject,
781 WINDOW_Title, "BGUI back fill patterns",
782 WINDOW_RMBTrap, TRUE,
783 WINDOW_SmartRefresh, TRUE,
784 WINDOW_HelpText, BackfillHelp,
785 WINDOW_ScaleWidth, 40,
786 WINDOW_ScaleHeight, 40,
787 WINDOW_AutoAspect, TRUE,
788 WINDOW_SharedPort, SharedPort,
789 WINDOW_PubScreen, screen,
790 WINDOW_MasterGroup,
791 HGroupObject, NormalOffset, WideSpacing,
792 StartMember,
793 VGroupObject, NormalOffset, NeXTFrame, FrameTitle("Raster Fill"), NormalSpacing,
794 StartMember,
795 HGroupObject, NormalSpacing,
796 StartMember, InfoObject, ButtonFrame, ShineRaster, EndObject, EndMember,
797 StartMember, InfoObject, ButtonFrame, ShadowRaster, EndObject, EndMember,
798 StartMember, InfoObject, ButtonFrame, ShineShadowRaster, EndObject, EndMember,
799 StartMember, InfoObject, ButtonFrame, FillRaster, EndObject, EndMember,
800 EndObject,
801 EndMember,
802 StartMember,
803 HGroupObject, NormalSpacing,
804 StartMember, InfoObject, ButtonFrame, ShineFillRaster, EndObject, EndMember,
805 StartMember, InfoObject, ButtonFrame, ShadowFillRaster, EndObject, EndMember,
806 StartMember, InfoObject, ButtonFrame, ShineBlock, EndObject, EndMember,
807 StartMember, InfoObject, ButtonFrame, ShadowBlock, EndObject, EndMember,
808 EndObject,
809 EndMember,
810 EndObject,
811 EndMember,
812 StartMember,
813 VGroupObject, NormalOffset, NeXTFrame, FrameTitle("Custom Hook"),
814 StartMember,
815 InfoObject, ButtonFrame, FRM_BackFillHook, &BackFill, EndObject,
816 EndMember,
817 EndObject,
818 EndMember,
819 StartMember,
820 VGroupObject, NormalOffset, NeXTFrame, FrameTitle("Bitmap Pattern"),
821 StartMember,
822 InfoObject, ButtonFrame, FRM_FillPattern, &bp, EndObject,
823 EndMember,
824 EndObject,
825 EndMember,
826 EndObject,
827 EndObject;
829 UnlockPubScreen(NULL, screen);
832 ** Object OK?
834 if (WA_BFill)
836 bp.bp_Flags = 0;
837 bp.bp_Left = 0;
838 bp.bp_Top = 0;
839 bp.bp_Width = 120;
840 bp.bp_Height = 80;
841 bp.bp_BitMap = screen->RastPort.BitMap;
844 ** Open window.
846 window = WindowOpen(WA_BFill);
849 return( window );
853 ** Cycle and Mx labels.
855 UBYTE *PageLab[] = { "_Buttons", "_Strings", "_CheckBoxes", "_Radio-Buttons", NULL };
856 UBYTE *MxLab[] = { "MX #_1", "MX #_2", "MX #_3", "MX #_4", NULL };
859 ** Cycle to Page map-list.
861 struct TagItem Cyc2Page[] = { { MX_Active, PAGE_Active, }, { TAG_END } };
864 ** Create a MX object with a title on top.
866 #define MxGadget(label,labels)\
867 MxObject,\
868 GROUP_Style, GRSTYLE_VERTICAL,\
869 LAB_Label, label,\
870 LAB_Place, PLACE_ABOVE,\
871 LAB_Underscore, '_',\
872 LAB_Highlight, TRUE,\
873 MX_Labels, labels,\
874 MX_LabelPlace, PLACE_LEFT,\
875 EndObject, FixMinSize
878 ** Tabs-key control of the tabs gadget.
880 SAVEDS ASM REGFUNC3(VOID,TabHookFunc,
881 REGPARAM(A0, struct Hook *, hook),
882 REGPARAM(A2, Object *, obj),
883 REGPARAM(A1, struct IntuiMessage *, msg))
886 struct Window *window;
887 Object *mx_obj = ( Object * )hook->h_Data;
888 IPTR pos;
891 ** Obtain window pointer and
892 ** current tab position.
894 GetAttr( WINDOW_Window, obj, ( IPTR * )&window );
895 GetAttr( MX_Active, mx_obj, &pos );
898 ** What key is pressed?
900 if ( msg->Code == 0x42 ) {
901 if ( msg->Qualifier & ( IEQUALIFIER_LSHIFT | IEQUALIFIER_RSHIFT )) pos--;
902 else pos++;
903 SetGadgetAttrs(( struct Gadget * )mx_obj, window, NULL, MX_Active, pos, TAG_END );
907 REGFUNC_END
909 struct Hook TabHook = { { NULL, NULL}, ( HOOKFUNC )TabHookFunc, NULL, NULL };
912 ** Open pages window.
914 struct Window *OpenPagesWindow( void )
916 Object *c, *p, *m, *s1, *s2, *s3;
917 struct Window *window = NULL;
920 ** Not yet created?
922 if ( ! WA_Pages ) {
924 ** Create tabs-object.
926 c = Tabs( NULL, PageLab, 0, 0 );
929 ** Put it in the hook data.
931 TabHook.h_Data = ( APTR )c;
933 WA_Pages = WindowObject,
934 WINDOW_Title, "BGUI pages",
935 WINDOW_RMBTrap, TRUE,
936 WINDOW_SmartRefresh, TRUE,
937 WINDOW_HelpText, PagesHelp,
938 WINDOW_AutoAspect, TRUE,
939 WINDOW_IDCMPHookBits, IDCMP_RAWKEY,
940 WINDOW_IDCMPHook, &TabHook,
941 WINDOW_SharedPort, SharedPort,
942 WINDOW_AutoKeyLabel, TRUE,
943 WINDOW_MasterGroup,
944 VGroupObject, NormalOffset, Spacing( 0 ),
945 StartMember, c, FixMinHeight, EndMember,
946 StartMember,
947 p = PageObject, FRM_Type, FRTYPE_TAB_ABOVE, Spacing(0),
949 ** Button page.
951 PageMember,
952 VGroupObject, NormalOffset, NormalSpacing,
953 VarSpace(DEFAULT_WEIGHT),
954 StartMember, PrefButton( "Button #_1", 0 ), FixMinHeight, EndMember,
955 StartMember, PrefButton( "Button #_2", 0 ), FixMinHeight, EndMember,
956 StartMember, PrefButton( "Button #_3", 0 ), FixMinHeight, EndMember,
957 VarSpace(DEFAULT_WEIGHT),
958 EndObject,
960 ** String page.
962 PageMember,
963 VGroupObject, NormalOffset, NormalSpacing,
964 VarSpace(DEFAULT_WEIGHT),
965 StartMember, s1 = PrefString( "String #_1", "", 256, 0 ), FixMinHeight, EndMember,
966 StartMember, s2 = PrefString( "String #_2", "", 256, 0 ), FixMinHeight, EndMember,
967 StartMember, s3 = PrefString( "String #_3", "", 256, 0 ), FixMinHeight, EndMember,
968 VarSpace(DEFAULT_WEIGHT),
969 EndObject,
971 ** CheckBox page.
973 PageMember,
974 VGroupObject, NormalOffset, NormalSpacing,
975 VarSpace(DEFAULT_WEIGHT),
976 StartMember,
977 HGroupObject,
978 VarSpace(DEFAULT_WEIGHT),
979 StartMember,
980 VGroupObject, NormalSpacing,
981 StartMember, PrefCheckBox( "CheckBox #_1", FALSE, 0 ), EndMember,
982 StartMember, PrefCheckBox( "CheckBox #_2", FALSE, 0 ), EndMember,
983 StartMember, PrefCheckBox( "CheckBox #_3", FALSE, 0 ), EndMember,
984 EndObject, FixMinWidth,
985 EndMember,
986 VarSpace(DEFAULT_WEIGHT),
987 EndObject,
988 EndMember,
989 VarSpace(DEFAULT_WEIGHT),
990 EndObject,
992 ** Mx page.
994 PageMember,
995 VGroupObject, NormalOffset,
996 VarSpace(DEFAULT_WEIGHT),
997 StartMember,
998 HGroupObject,
999 VarSpace( DEFAULT_WEIGHT ),
1000 StartMember, m = MxGadget( "_Mx Object", MxLab ), EndMember,
1001 VarSpace( DEFAULT_WEIGHT ),
1002 EndObject, FixMinHeight,
1003 EndMember,
1004 VarSpace(DEFAULT_WEIGHT),
1005 EndObject,
1006 EndObject,
1007 EndMember,
1008 EndObject,
1009 EndObject;
1012 ** Object OK?
1014 if ( WA_Pages ) {
1016 ** Connect the cycle to the page.
1018 AddMap( c, p, Cyc2Page );
1020 ** Set tab-cycling order.
1022 DoMethod( WA_Pages, WM_TABCYCLE_ORDER, s1, s2, s3, NULL );
1027 ** Object OK?
1029 if ( WA_Pages ) {
1031 ** Open the window.
1033 window = WindowOpen( WA_Pages );
1036 return( window );
1040 ** Main entry.
1042 VOID StartDemo( void )
1044 struct Window *win = NULL, *groups = NULL, *notif = NULL, *info = NULL, *image = NULL, *bfill = NULL, *pages = NULL, *sigwin = ( struct Window * )~0;
1045 struct AppMessage *apm;
1046 struct WBArg *ap;
1047 ULONG sigmask = 0L, sigrec, i, id;
1048 IPTR rc, appsig = 0L;
1049 BOOL running = TRUE;
1050 UBYTE name[ 256 ];
1053 ** Create the shared message port.
1055 if (( SharedPort = CreateMsgPort())) {
1057 ** Open the main window.
1059 if (( win = OpenMainWindow( &appsig ))) {
1061 ** OR signal masks.
1063 sigmask |= ( appsig | ( 1L << SharedPort->mp_SigBit ));
1065 ** Loop...
1067 do {
1069 ** Wait for the signals to come.
1071 sigrec = Wait( sigmask );
1074 ** AppWindow signal?
1076 if ( sigrec & appsig ) {
1078 ** Obtain AppWindow messages.
1080 while (( apm = GetAppMsg( WA_Main ))) {
1082 ** Get all dropped icons.
1084 for ( ap = apm->am_ArgList, i = 0; i < apm->am_NumArgs; i++, ap++ ) {
1086 ** Build fully qualified name.
1088 NameFromLock( ap->wa_Lock, name, 256 );
1089 AddPart( name, ap->wa_Name, 256 );
1091 ** Add it to the listview.
1093 AddEntry( win, LV_IconList, (APTR)name, LVAP_SORTED );
1096 ** Important! We must reply the message!
1098 ReplyMsg(( struct Message * )apm );
1101 ** Switch to the Icon page.
1103 SetGadgetAttrs(( struct Gadget * )PG_Pager, win, NULL, PAGE_Active, 1, TAG_END );
1107 ** Find out the which window signalled us.
1109 if ( sigrec & ( 1 << SharedPort->mp_SigBit )) {
1110 while (( sigwin = GetSignalWindow( WA_Main ))) {
1113 ** Main window signal?
1115 if ( sigwin == win ) {
1117 ** Call the main-window event handler.
1119 while (( rc = HandleEvent( WA_Main )) != WMHI_NOMORE ) {
1120 switch ( rc ) {
1122 case WMHI_CLOSEWINDOW:
1123 case ID_QUIT:
1124 running = FALSE;
1125 break;
1127 case ID_ABOUT:
1128 Req( win, "OK", ISEQ_C ISEQ_B "\33d8BGUIDemo" ISEQ_N "\33d2\n(C) Copyright 1993-1995 Jaba Development" );
1129 break;
1131 case ID_MAIN_GROUPS:
1133 ** Open groups window.
1135 if ( ! groups )
1136 groups = OpenGroupsWindow();
1137 break;
1139 case ID_MAIN_NOTIF:
1141 ** Open notification window.
1143 if ( ! notif )
1144 notif = OpenNotifWindow();
1145 break;
1147 case ID_MAIN_INFO:
1149 ** Open infoclass window.
1151 if ( ! info )
1152 info = OpenInfoWindow();
1153 break;
1155 case ID_MAIN_IMAGE:
1157 ** Open images window.
1159 if ( ! image )
1160 image = OpenImageWindow();
1161 break;
1163 case ID_MAIN_BFILL:
1165 ** Open backfill window.
1167 if ( ! bfill )
1168 bfill = OpenFillWindow();
1169 break;
1171 case ID_MAIN_PAGES:
1173 ** Open pages window.
1175 if ( ! pages )
1176 pages = OpenPagesWindow();
1177 break;
1179 case ID_MAIN_ICON_CONT:
1181 ** Switch back to the main page.
1183 SetGadgetAttrs(( struct Gadget * )PG_Pager, win, NULL, PAGE_Active, 0, TAG_END );
1185 ** Clear all entries from the listview.
1187 ClearList( win, LV_IconList );
1188 break;
1194 ** The code below will close the
1195 ** specific window.
1197 if ( sigwin == groups ) {
1198 while (( rc = HandleEvent( WA_Groups )) != WMHI_NOMORE ) {
1199 switch ( rc ) {
1200 case ID_GROUP_W0:
1201 case ID_GROUP_W1:
1202 case ID_GROUP_W2:
1203 case ID_GROUP_W3:
1204 id = rc - ID_GROUP_W0;
1205 GetAttr(STRINGA_LongVal, w[id], &rc);
1206 SetAttrs(w[id], LGO_Weight, rc, TAG_DONE);
1207 break;
1209 case WMHI_CLOSEWINDOW:
1210 WindowClose( WA_Groups );
1211 groups = NULL;
1212 break;
1217 if ( sigwin == notif ) {
1218 while (( rc = HandleEvent( WA_Notif )) != WMHI_NOMORE ) {
1219 switch ( rc ) {
1220 case WMHI_CLOSEWINDOW:
1221 WindowClose( WA_Notif );
1222 notif = NULL;
1223 break;
1228 if ( sigwin == info ) {
1229 while (( rc = HandleEvent( WA_Info )) != WMHI_NOMORE ) {
1230 switch ( rc ) {
1231 case WMHI_CLOSEWINDOW:
1232 WindowClose( WA_Info );
1233 info = NULL;
1234 break;
1239 if ( sigwin == image ) {
1240 while (( rc = HandleEvent( WA_Image )) != WMHI_NOMORE ) {
1241 switch ( rc ) {
1242 case WMHI_CLOSEWINDOW:
1243 WindowClose( WA_Image );
1244 image = NULL;
1245 break;
1250 if ( sigwin == bfill ) {
1251 while (( rc = HandleEvent( WA_BFill )) != WMHI_NOMORE ) {
1252 switch ( rc ) {
1253 case WMHI_CLOSEWINDOW:
1254 WindowClose( WA_BFill );
1255 bfill = NULL;
1256 break;
1261 if ( sigwin == pages ) {
1262 while (( rc = HandleEvent( WA_Pages )) != WMHI_NOMORE ) {
1263 switch ( rc ) {
1264 case WMHI_CLOSEWINDOW:
1265 WindowClose( WA_Pages );
1266 pages = NULL;
1267 break;
1273 } while ( running );
1276 ** Dispose of all window objects.
1278 if ( WA_Pages ) DisposeObject( WA_Pages );
1279 if ( WA_BFill ) DisposeObject( WA_BFill );
1280 if ( WA_Image ) DisposeObject( WA_Image );
1281 if ( WA_Info ) DisposeObject( WA_Info );
1282 if ( WA_Notif ) DisposeObject( WA_Notif );
1283 if ( WA_Groups ) DisposeObject( WA_Groups );
1284 if ( WA_Main ) DisposeObject( WA_Main );
1286 ** Delete the shared message port.
1288 DeleteMsgPort( SharedPort );
1289 } else
1290 Tell( "Unable to create a message port.\n" );