6 * (C) Copyright 1998 Manuel Lemos.
7 * (C) Copyright 1995 Jaba Development.
8 * (C) Copyright 1995 Jan van den Baard.
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
57 /* Execute me to compile with DICE V3.0
58 dcc BGUIDemo.c -proto -mi -ms -mRR -lbgui
64 #endif /* __STORM__ */
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.";
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
131 struct MsgPort
*SharedPort
;
134 ** Menus & gadget ID's.
140 ** A small menu strip.
142 struct NewMenu MainMenus
[] = {
144 Item( "About...", "?", ID_ABOUT
),
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
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
,
201 VGroupObject
, NormalOffset
, NormalSpacing
, GROUP_BackFill
, SHINE_RASTER
,
203 PG_Pager
= PageObject
,
208 VGroupObject
, WideSpacing
, GROUP_BackFill
, SHINE_RASTER
,
211 INFO_TextFormat
, ISEQ_C
213 "\033s\033bBGUI Demo\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
,
221 FRM_Type
, FRTYPE_NEXT
,
225 HGroupObject
, NormalSpacing
,
227 VGroupObject
, NormalSpacing
,
229 BT_Groups
= ButtonObject
,
230 LAB_Label
, "_Groups",
231 GA_ID
, ID_MAIN_GROUPS
,
232 BT_ToolTip
, "Shows different group layouts",
236 BT_Notif
= ButtonObject
,
237 LAB_Label
, "_Notification",
238 GA_ID
, ID_MAIN_NOTIF
,
239 BT_ToolTip
, "Shows notification between gadgets",
242 VarSpace( DEFAULT_WEIGHT
),
246 VGroupObject
, NormalSpacing
,
248 BT_Images
= ButtonObject
,
249 LAB_Label
, "_Images",
250 GA_ID
, ID_MAIN_IMAGE
,
251 BT_ToolTip
, "Shows different types of built-in images",
255 BT_BFill
= ButtonObject
,
256 LAB_Label
, "_BackFill",
257 GA_ID
, ID_MAIN_BFILL
,
258 BT_ToolTip
, "Shows different types of background filling",
262 BT_Quit
= ButtonObject
,
265 BT_ToolTip
, "Quits this program",
271 VGroupObject
, NormalSpacing
,
273 BT_Pages
= ButtonObject
,
275 GA_ID
, ID_MAIN_PAGES
,
276 BT_ToolTip
, "Shows paged of groups",
280 BT_Info
= ButtonObject
,
281 LAB_Label
, "Info_Class",
283 BT_ToolTip
, "Shows the Information gadget",
286 VarSpace( DEFAULT_WEIGHT
),
289 EndObject
, FixMinHeight
, EqualWidth
,
293 ** Icon-drop list page.
296 VGroupObject
, NormalSpacing
, GROUP_BackFill
, SHINE_RASTER
,
299 INFO_TextFormat
, ISEQ_C
300 "The following icons were dropped\n"
302 INFO_FixTextWidth
, TRUE
,
304 INFO_HorizOffset
, 13,
305 FRM_Type
, FRTYPE_BUTTON
,
307 EndObject
, FixMinHeight
,
310 LV_IconList
= ListviewObject
,
311 LISTV_ReadOnly
, TRUE
,
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
,
328 ** Object created OK?
334 if (( window
= WindowOpen( WA_Main
))) {
336 ** Obtain appwindow signal mask.
338 GetAttr( WINDOW_AppMask
, WA_Main
, appmask
);
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.
354 INFO_FixTextWidth, TRUE,\
355 INFO_HorizOffset, 4,\
358 FRM_Flags, FRF_RECESSED,\
364 STRINGA_MaxChars, 3,\
365 STRINGA_IntegerMin, 1,\
366 STRINGA_IntegerMax, 999,\
367 STRINGA_Justification, GACT_STRINGCENTER,\
373 HGroupObject, HOffset(4), VOffset(3),\
375 FRM_BackFill, FILL_RASTER,\
376 FRM_Flags, FRF_RECESSED,\
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.
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,
408 VGroupObject
, NormalOffset
, NormalSpacing
,
410 HGroupObject
, WideSpacing
,
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
,
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
,
428 VGroupObject
, NeXTFrame
, FrameTitle( "Grid" ), NormalSpacing
,
429 NormalHOffset
, TOffset(GRSPACE_NARROW
), BOffset(GRSPACE_NORMAL
),
431 HGroupObject
, NormalSpacing
,
432 StartMember
, TObj
, EndMember
,
433 StartMember
, TObj
, EndMember
,
434 StartMember
, TObj
, EndMember
,
438 HGroupObject
, NormalSpacing
,
439 StartMember
, TObj
, EndMember
,
440 StartMember
, TObj
, EndMember
,
441 StartMember
, TObj
, EndMember
,
445 HGroupObject
, NormalSpacing
,
446 StartMember
, TObj
, EndMember
,
447 StartMember
, TObj
, EndMember
,
448 StartMember
, TObj
, EndMember
,
456 VGroupObject
, NormalSpacing
, FrameTitle("Free, Fixed and Weight sizes."), NeXTFrame
,
457 NormalHOffset
, TOffset(GRSPACE_NARROW
), BOffset(GRSPACE_NORMAL
),
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
,
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
,
474 EndObject
, FixMinHeight
,
487 window
= WindowOpen( WA_Groups
);
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!
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
,
525 VGroupObject
, NormalOffset
, NormalSpacing
,
526 StartMember
, TitleSeperator( "Conditional" ), EndMember
,
528 HGroupObject
, NormalSpacing
,
529 StartMember
, c
= PrefCycle( NULL
, NotifLabels
, 0, 0 ), EndMember
,
530 StartMember
, b
= PrefButton( "Target", 0 ), EndMember
,
531 EndObject
, FixMinHeight
,
533 StartMember
, TitleSeperator( "Map-List" ), EndMember
,
535 HGroupObject
, NormalSpacing
,
537 VGroupObject
, NormalSpacing
,
538 StartMember
, i1
= IndicatorFormat( 0, 100, 0, IDJ_CENTER
, "%ld%%" ), FixMinHeight
, EndMember
,
539 StartMember
, p1
= HorizProgress( NULL
, 0, 100, 0 ), 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
,
546 VGroupObject
, NormalSpacing
,
547 StartMember
, i2
= IndicatorFormat( 0, 100, 0, IDJ_CENTER
, "%ld%%" ), FixMinHeight
, EndMember
,
548 StartMember
, p2
= VertProgress( NULL
, 0, 100, 0 ), EndMember
,
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
);
580 window
= WindowOpen( WA_Notif
);
587 ** Open infoclass window.
589 struct Window
*OpenInfoWindow( void )
591 struct Window
*window
= NULL
;
595 ** Setup arguments for the
598 args
[0] = AvailMem( MEMF_CHIP
);
599 args
[1] = AvailMem( MEMF_FAST
);
602 ** Not created already?
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
,
613 VGroupObject
, HOffset( 4 ), VOffset( 4 ),
616 ISEQ_C
"BGUI offers the InfoClass.\n"
617 "This class is a text display class which\n"
618 "allows things like:\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",
647 window
= WindowOpen( WA_Info
);
654 ** Open images window.
656 struct Window
*OpenImageWindow( void )
658 struct Window
*window
= NULL
;
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,
673 VGroupObject
, NormalOffset
, WideSpacing
,
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
,
691 VGroupObject
, NormalHOffset
, TOffset(GRSPACE_NARROW
), BOffset(GRSPACE_NORMAL
), NormalSpacing
, NeXTFrame
, FrameTitle("Free size"),
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
,
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
,
723 window
= WindowOpen( WA_Image
);
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
)
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 );
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
;
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
,
791 HGroupObject
, NormalOffset
, WideSpacing
,
793 VGroupObject
, NormalOffset
, NeXTFrame
, FrameTitle("Raster Fill"), NormalSpacing
,
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
,
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
,
813 VGroupObject
, NormalOffset
, NeXTFrame
, FrameTitle("Custom Hook"),
815 InfoObject
, ButtonFrame
, FRM_BackFillHook
, &BackFill
, EndObject
,
820 VGroupObject
, NormalOffset
, NeXTFrame
, FrameTitle("Bitmap Pattern"),
822 InfoObject
, ButtonFrame
, FRM_FillPattern
, &bp
, EndObject
,
829 UnlockPubScreen(NULL
, screen
);
841 bp
.bp_BitMap
= screen
->RastPort
.BitMap
;
846 window
= WindowOpen(WA_BFill
);
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)\
868 GROUP_Style, GRSTYLE_VERTICAL,\
870 LAB_Place, PLACE_ABOVE,\
871 LAB_Underscore, '_',\
872 LAB_Highlight, TRUE,\
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
;
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
--;
903 SetGadgetAttrs(( struct Gadget
* )mx_obj
, window
, NULL
, MX_Active
, pos
, TAG_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
;
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
,
944 VGroupObject
, NormalOffset
, Spacing( 0 ),
945 StartMember
, c
, FixMinHeight
, EndMember
,
947 p
= PageObject
, FRM_Type
, FRTYPE_TAB_ABOVE
, Spacing(0),
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
),
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
),
974 VGroupObject
, NormalOffset
, NormalSpacing
,
975 VarSpace(DEFAULT_WEIGHT
),
978 VarSpace(DEFAULT_WEIGHT
),
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
,
986 VarSpace(DEFAULT_WEIGHT
),
989 VarSpace(DEFAULT_WEIGHT
),
995 VGroupObject
, NormalOffset
,
996 VarSpace(DEFAULT_WEIGHT
),
999 VarSpace( DEFAULT_WEIGHT
),
1000 StartMember
, m
= MxGadget( "_Mx Object", MxLab
), EndMember
,
1001 VarSpace( DEFAULT_WEIGHT
),
1002 EndObject
, FixMinHeight
,
1004 VarSpace(DEFAULT_WEIGHT
),
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
);
1033 window
= WindowOpen( WA_Pages
);
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
;
1047 ULONG sigmask
= 0L, sigrec
, i
, id
;
1048 IPTR rc
, appsig
= 0L;
1049 BOOL running
= TRUE
;
1053 ** Create the shared message port.
1055 if (( SharedPort
= CreateMsgPort())) {
1057 ** Open the main window.
1059 if (( win
= OpenMainWindow( &appsig
))) {
1063 sigmask
|= ( appsig
| ( 1L << SharedPort
->mp_SigBit
));
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
) {
1122 case WMHI_CLOSEWINDOW
:
1128 Req( win
, "OK", ISEQ_C ISEQ_B
"\33d8BGUIDemo" ISEQ_N
"\33d2\n(C) Copyright 1993-1995 Jaba Development" );
1131 case ID_MAIN_GROUPS
:
1133 ** Open groups window.
1136 groups
= OpenGroupsWindow();
1141 ** Open notification window.
1144 notif
= OpenNotifWindow();
1149 ** Open infoclass window.
1152 info
= OpenInfoWindow();
1157 ** Open images window.
1160 image
= OpenImageWindow();
1165 ** Open backfill window.
1168 bfill
= OpenFillWindow();
1173 ** Open pages window.
1176 pages
= OpenPagesWindow();
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
);
1194 ** The code below will close the
1197 if ( sigwin
== groups
) {
1198 while (( rc
= HandleEvent( WA_Groups
)) != WMHI_NOMORE
) {
1204 id
= rc
- ID_GROUP_W0
;
1205 GetAttr(STRINGA_LongVal
, w
[id
], &rc
);
1206 SetAttrs(w
[id
], LGO_Weight
, rc
, TAG_DONE
);
1209 case WMHI_CLOSEWINDOW
:
1210 WindowClose( WA_Groups
);
1217 if ( sigwin
== notif
) {
1218 while (( rc
= HandleEvent( WA_Notif
)) != WMHI_NOMORE
) {
1220 case WMHI_CLOSEWINDOW
:
1221 WindowClose( WA_Notif
);
1228 if ( sigwin
== info
) {
1229 while (( rc
= HandleEvent( WA_Info
)) != WMHI_NOMORE
) {
1231 case WMHI_CLOSEWINDOW
:
1232 WindowClose( WA_Info
);
1239 if ( sigwin
== image
) {
1240 while (( rc
= HandleEvent( WA_Image
)) != WMHI_NOMORE
) {
1242 case WMHI_CLOSEWINDOW
:
1243 WindowClose( WA_Image
);
1250 if ( sigwin
== bfill
) {
1251 while (( rc
= HandleEvent( WA_BFill
)) != WMHI_NOMORE
) {
1253 case WMHI_CLOSEWINDOW
:
1254 WindowClose( WA_BFill
);
1261 if ( sigwin
== pages
) {
1262 while (( rc
= HandleEvent( WA_Pages
)) != WMHI_NOMORE
) {
1264 case WMHI_CLOSEWINDOW
:
1265 WindowClose( WA_Pages
);
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
);
1290 Tell( "Unable to create a message port.\n" );