home *** CD-ROM | disk | FTP | other *** search
/ Fresh Fish 9 / FreshFishVol9-CD2.bin / bbs / dev / bgui-1.1a.lha / BGUI / demos / bguidemo.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-12-04  |  65.7 KB  |  1,211 lines

  1. ;/* Execute me to compile with DICE V3.0
  2. dcc bguidemo.c -proto -mi -ms -mRR -lbgui
  3. quit
  4. */
  5. /*
  6. **         $RCSfile: bguidemo.c,v $
  7. **      Description: A small demonstration.
  8. **        Copyright: (C) Copyright 1994 Jaba Development.
  9. **                   (C) Copyright 1994 Jan van den Baard.
  10. **                   All Rights Reserved.
  11. **
  12. **          $Author: jaba $
  13. **        $Revision: 1.14 $
  14. **            $Date: 1994/12/04 18:12:08 $
  15. **/
  16.  
  17. #include <exec/types.h>
  18. #include <exec/memory.h>
  19. #include <libraries/gadtools.h>
  20. #include <dos/dos.h>
  21. #include <graphics/gfxmacros.h>
  22. #include <workbench/workbench.h>
  23. #include <workbench/startup.h>
  24. #include <libraries/bgui.h>
  25. #include <libraries/bgui_macros.h>
  26.  
  27. #include <clib/alib_protos.h>
  28.  
  29. #include <proto/exec.h>
  30. #include <proto/intuition.h>
  31. #include <proto/dos.h>
  32. #include <proto/bgui.h>
  33. #include <proto/graphics.h>
  34.  
  35. #include <stdio.h>
  36.  
  37. /*
  38. **      Online-Help texts.
  39. **/
  40. UBYTE           *MainHelp               = ISEQ_C "BGUI is a shared library which offers a set of\n"
  41.                                           "BOOPSI classes to allow for easy and flexible GUI creation.\n\n"
  42.                                           "The main window is also an AppWindow. Drop some icons\n"
  43.                                           "on it and see what happens.\n\n"
  44.                                           "All other windows in this demo also have online-help. To access\n"
  45.                                           "this help press the " ISEQ_B "HELP" ISEQ_N " key when the window is active.";
  46.  
  47. UBYTE           *GroupsHelp             = ISEQ_C "The BGUI layout engine is encapsulated in the groupclass.\n"
  48.                                           "The groupclass will layout all of it's members into a specific area.\n"
  49.                                           "You can pass layout specific attributes to all group members\n"
  50.                                           "which allows for flexible and powerful layout capabilities.";
  51.  
  52. UBYTE           *NotifHelp              = ISEQ_C "Notification can be used to let an object keep one or\n"
  53.                                           "more other objects informed about it's status. BGUI offers several\n"
  54.                                           "kinds of notification of which two (conditional and map-list) are\n"
  55.                                           "shown in this demonstration.";
  56.  
  57. UBYTE           *InfoHelp               = ISEQ_C "Not much more can be said about the BGUI infoclass than\n"
  58.                                           "is said in this window. Except maybe that this text is shown in an\n"
  59.                                           "infoclass object as are all body texts from a BGUI requester.";
  60.  
  61. UBYTE           *ImageHelp              = ISEQ_C "This window shows you the built-in images that BGUI has\n"
  62.                                           "to offer. Ofcourse these images are all scalable and it is possible\n"
  63.                                           "to create your own, scalable, imagery with the BGUI vectorclass.";
  64.  
  65. UBYTE           *BackfillHelp           = ISEQ_C "Here you see the built-in backfill patterns BGUI supports.\n"
  66.                                           "These backfill patterns can all be used in groups and frames.\n"
  67.                                           "The frameclass also offers you the possibility to add hooks for\n"
  68.                                           "custom backfills and frame rendering.\n\n"
  69.                                           "The bottom frame shows you a custom backfill hook which renders a\n"
  70.                                           "small mandel instead of using a builtin backfill.";
  71.  
  72. UBYTE           *PagesHelp              = ISEQ_C "The pageclass allows you to setup a set of pages containing\n"
  73.                                           "BGUI gadgets or groups. This will give you the oppertunity to\n"
  74.                                           "have several set's of gadgets in a single window.";
  75.  
  76.  
  77. /*
  78. **      Window objects.
  79. **/
  80. Object          *WA_Main  = NULL, *WA_Groups = NULL, *WA_Notif = NULL;
  81. Object          *WA_Info  = NULL, *WA_Image  = NULL, *WA_BFill = NULL;
  82. Object          *WA_Pages = NULL;
  83.  
  84. /*
  85. **      Gadget objects from the main window.
  86. **/
  87. Object          *BT_Groups,   *BT_Notif,    *BT_Quit;
  88. Object          *BT_Info,     *BT_Images,   *BT_BFill;
  89. Object          *BT_Pages,    *BT_IconDone, *BT_IconQuit;
  90. Object          *LV_IconList, *PG_Pager;
  91.  
  92. /*
  93. **      Menus & gadget ID's.
  94. **/
  95. #define ID_ABOUT                1L
  96. #define ID_QUIT                 2L
  97.  
  98. /*
  99. **      A small menu strip.
  100. **/
  101. struct NewMenu MainMenus[] = {
  102.         Title( "Project" ),
  103.                 Item( "About...", "?", ID_ABOUT ),
  104.                 ItemBar,
  105.                 Item( "Quit",     "Q", ID_QUIT  ),
  106.         End
  107. };
  108.  
  109. /*
  110. **      Put up a simple requester.
  111. **/
  112. ULONG Req( struct Window *win, UBYTE *gadgets, UBYTE *body, ... )
  113. {
  114.         struct bguiRequest      req = { NULL };
  115.  
  116.         req.br_GadgetFormat     = gadgets;
  117.         req.br_TextFormat       = body;
  118.         req.br_Flags            = BREQF_CENTERWINDOW|BREQF_XEN_BUTTONS|BREQF_AUTO_ASPECT;
  119.  
  120.         return( BGUI_RequestA( win, &req, ( ULONG * )( &body + 1 )));
  121. }
  122.  
  123. /*
  124. **      Main window button ID's.
  125. **/
  126. #define ID_MAIN_GROUPS          3L
  127. #define ID_MAIN_NOTIF           4L
  128. #define ID_MAIN_INFO            5L
  129. #define ID_MAIN_IMAGE           6L
  130. #define ID_MAIN_BFILL           7L
  131. #define ID_MAIN_PAGES           8L
  132. #define ID_MAIN_ICON_CONT       9L
  133.  
  134. /*
  135. **      Open main window.
  136. **/
  137. struct Window *OpenMainWindow( ULONG *sigmask, ULONG *appmask )
  138. {
  139.         struct Window           *window = NULL;
  140.  
  141.         WA_Main = WindowObject,
  142.                 WINDOW_Title,           "BGUIDemo - (C) Jaba Development.",
  143.                 WINDOW_ScreenTitle,     "BGUIDemo - (C) Copyright 1993-1994 Jaba Development.",
  144.                 WINDOW_MenuStrip,       MainMenus,
  145.                 WINDOW_SmartRefresh,    TRUE,
  146.                 WINDOW_AppWindow,       TRUE,
  147.                 WINDOW_SizeGadget,      FALSE,
  148.                 WINDOW_HelpText,        MainHelp,
  149.                 WINDOW_AutoAspect,      TRUE,
  150.                 WINDOW_MasterGroup,
  151.                         VGroupObject, HOffset( 4 ), VOffset( 4 ), Spacing( 4 ), GROUP_BackFill, SHINE_RASTER,
  152.                                 StartMember,
  153.                                         PG_Pager = PageObject,
  154.                                                 /*
  155.                                                 **      Main page.
  156.                                                 **/
  157.                                                 PageMember,
  158.                                                         VGroupObject, Spacing( 4 ), GROUP_BackFill, SHINE_RASTER,
  159.                                                                 StartMember,
  160.                                                                         InfoObject,
  161.                                                                                 INFO_TextFormat,        ISEQ_C
  162.                                                                                                         "BGUIDemo\n"
  163.                                                                                                         ISEQ_HIGHLIGHT
  164.                                                                                                         ISEQ_B
  165.                                                                                                         "(C) Copyright 1993-1994 Jaba Development"
  166.                                                                                                         ISEQ_TEXT
  167.                                                                                                         ISEQ_N
  168.                                                                                                         "\n\n"
  169.                                                                                                         "Press the HELP key for more info.",
  170.                                                                                 INFO_FixTextWidth,      TRUE,
  171.                                                                                 INFO_MinLines,          4,
  172.                                                                                 INFO_HorizOffset,       13,
  173.                                                                                 FRM_Type,               FRTYPE_NEXT,
  174.                                                                         EndObject,
  175.                                                                 EndMember,
  176.                                                                 StartMember,
  177.                                                                         HGroupObject, Spacing( 4 ),
  178.                                                                                 StartMember,
  179.                                                                                         VGroupObject, Spacing( 4 ),
  180.                                                                                                 StartMember, BT_Groups = XenKeyButton( "_Groups",       ID_MAIN_GROUPS ), EndMember,
  181.                                                                                                 StartMember, BT_Notif  = XenKeyButton( "_Notification", ID_MAIN_NOTIF  ), EndMember,
  182.                                                                                                 VarSpace( DEFAULT_WEIGHT ),
  183.                                                                                         EndObject,
  184.                                                                                 EndMember,
  185.                                                                                 StartMember,
  186.                                                                                         VGroupObject, Spacing( 4 ),
  187.                                                                                                 StartMember, BT_Images = XenKeyButton( "_Images",       ID_MAIN_IMAGE  ), EndMember,
  188.                                                                                                 StartMember, BT_BFill  = XenKeyButton( "_BackFill",     ID_MAIN_BFILL  ), EndMember,
  189.                                                                                                 StartMember, BT_Quit   = XenKeyButton( "_Quit",         ID_QUIT        ), EndMember,
  190.                                                                                         EndObject,
  191.                                                                                 EndMember,
  192.                                                                                 StartMember,
  193.                                                                                         VGroupObject, Spacing( 4 ),
  194.                                                                                                 StartMember, BT_Pages  = XenKeyButton( "_Pages",        ID_MAIN_PAGES  ), EndMember,
  195.                                                                                                 StartMember, BT_Info   = XenKeyButton( "Info_Class",    ID_MAIN_INFO   ), EndMember,
  196.                                                                                                 VarSpace( DEFAULT_WEIGHT ),
  197.                                                                                         EndObject,
  198.                                                                                 EndMember,
  199.                                                                         EndObject, FixMinHeight,
  200.                                                                 EndMember,
  201.                                                         EndObject,
  202.                                                 /*
  203.                                                 **      Icon-drop list page.
  204.                                                 **/
  205.                                                 PageMember,
  206.                                                         VGroupObject, Spacing( 4 ), GROUP_BackFill, SHINE_RASTER,
  207.                                                                 StartMember,
  208.                                                                         InfoObject,
  209.                                                                                 INFO_TextFormat,        ISEQ_C
  210.                                                                                                         "The following icons where dropped\n"
  211.                                                                                                         "in the window.",
  212.                                                                                 INFO_FixTextWidth,      TRUE,
  213.                                                                                 INFO_MinLines,          2,
  214.                                                                                 INFO_HorizOffset,       13,
  215.                                                                                 FRM_Type,               FRTYPE_BUTTON,
  216.                                                                                 FRM_Recessed,           TRUE,
  217.                                                                         EndObject, FixMinHeight,
  218.                                                                 EndMember,
  219.                                                                 StartMember,
  220.                                                                         LV_IconList = ListviewObject,
  221.                                                                                 LISTV_ReadOnly,         TRUE,
  222.                                                                         EndObject,
  223.                                                                 EndMember,
  224.                                                                 StartMember,
  225.                                                                         HGroupObject,
  226.                                                                                 StartMember, BT_IconDone = XenKeyButton( "_Continue", ID_MAIN_ICON_CONT ), EndMember,
  227.                                                                                 VarSpace( DEFAULT_WEIGHT ),
  228.                                                                                 StartMember, BT_IconQuit = XenKeyButton( "_Quit",     ID_QUIT ), EndMember,
  229.                                                                         EndObject, FixMinHeight,
  230.                                                                 EndMember,
  231.                                                         EndObject,
  232.                                         EndObject,
  233.                                 EndMember,
  234.                         EndObject,
  235.         EndObject;
  236.  
  237.         /*
  238.         **      Object created OK?
  239.         **/
  240.         if ( WA_Main ) {
  241.                 /*
  242.                 **      Add keys to the buttons.
  243.                 **/
  244.                 GadgetKey( WA_Main, BT_Groups,   "g" );
  245.                 GadgetKey( WA_Main, BT_Notif,    "n" );
  246.                 GadgetKey( WA_Main, BT_Info,     "c" );
  247.                 GadgetKey( WA_Main, BT_Images,   "i" );
  248.                 GadgetKey( WA_Main, BT_BFill,    "b" );
  249.                 GadgetKey( WA_Main, BT_Pages,    "p" );
  250.                 GadgetKey( WA_Main, BT_Quit,     "q" );
  251.                 GadgetKey( WA_Main, BT_IconDone, "c" );
  252.                 GadgetKey( WA_Main, BT_IconQuit, "q" );
  253.                 /*
  254.                 **      Open the window.
  255.                 **/
  256.                 if ( window = WindowOpen( WA_Main )) {
  257.                         /*
  258.                         **      Obtain signal masks.
  259.                         **/
  260.                         GetAttr( WINDOW_SigMask, WA_Main, sigmask );
  261.                         GetAttr( WINDOW_AppMask, WA_Main, appmask );
  262.                 }
  263.         }
  264.  
  265.         return( window );
  266. }
  267.  
  268. /*
  269. **      Macros for the group objects. GObj() creates
  270. **      a simple infoclass object with some text in
  271. **      it. TObj() creates a simple groupclass object
  272. **      with a button frame.
  273. **/
  274. #define GObj(t)\
  275.         InfoObject,\
  276.                 INFO_TextFormat,        t,\
  277.                 INFO_FixTextWidth,      TRUE,\
  278.                 INFO_HorizOffset,       4,\
  279.                 INFO_VertOffset,        3,\
  280.                 ButtonFrame,\
  281.                 FRM_Flags,              FRF_RECESSED,\
  282.         EndObject
  283.  
  284. #define TObj\
  285.         HGroupObject, HOffset( 3 ), VOffset( 2 ),\
  286.                 ButtonFrame,\
  287.                 FRM_Flags,              FRF_RECESSED,\
  288.         EndObject
  289.  
  290. /*
  291. **      Open up the groups window.
  292. **/
  293. struct Window *OpenGroupsWindow( ULONG *sigmask )
  294. {
  295.         struct Window                   *window = NULL;
  296.  
  297.         /*
  298.         **      If the object has not been created
  299.         **      already we build it.
  300.         **/
  301.         if ( ! WA_Groups ) {
  302.                 WA_Groups = WindowObject,
  303.                         WINDOW_Title,           "BGUI Groups",
  304.                         WINDOW_RMBTrap,         TRUE,
  305.                         WINDOW_SmartRefresh,    TRUE,
  306.                         WINDOW_HelpText,        GroupsHelp,
  307.                         WINDOW_AutoAspect,      TRUE,
  308.                         WINDOW_MasterGroup,
  309.                                 VGroupObject, HOffset( 4 ), VOffset( 4 ), Spacing( 4 ),
  310.                                         StartMember,
  311.                                                 HGroupObject, Spacing( 4 ),
  312.                                                         StartMember,
  313.                                                                 HGroupObject, NeXTFrame, FrameTitle( "Horizontal" ), HOffset( 8 ), TOffset( 4 ), BOffset( 6 ), Spacing( 4 ),
  314.                                                                         StartMember, TObj, EndMember,
  315.                                                                         StartMember, TObj, EndMember,
  316.                                                                         StartMember, TObj, EndMember,
  317.                                                                 EndObject,
  318.                                                         EndMember,
  319.                                                         StartMember,
  320.                                                                 VGroupObject, NeXTFrame, FrameTitle( "Vertical" ), HOffset( 8 ), TOffset( 4 ), BOffset( 6 ), Spacing( 4 ),
  321.                                                                         StartMember, TObj, EndMember,
  322.                                                                         StartMember, TObj, EndMember,
  323.                                                                         StartMember, TObj, EndMember,
  324.                                                                 EndObject,
  325.                                                         EndMember,
  326.                                                         StartMember,
  327.                                                                 VGroupObject, NeXTFrame, FrameTitle( "Grid" ), HOffset( 8 ), TOffset( 4 ), BOffset( 6 ), Spacing( 4 ),
  328.                                                                         StartMember,
  329.                                                                                 HGroupObject, Spacing( 4 ),
  330.                                                                                         StartMember, TObj, EndMember,
  331.                                                                                         StartMember, TObj, EndMember,
  332.                                                                                         StartMember, TObj, EndMember,
  333.                                                                                 EndObject,
  334.                                                                         EndMember,
  335.                                                                         StartMember,
  336.                                                                                 HGroupObject, Spacing( 4 ),
  337.                                                                                         StartMember, TObj, EndMember,
  338.                                                                                         StartMember, TObj, EndMember,
  339.                                                                                         StartMember, TObj, EndMember,
  340.                                                                                 EndObject,
  341.                                                                         EndMember,
  342.                                                                         StartMember,
  343.                                                                                 HGroupObject, Spacing( 4 ),
  344.                                                                                         StartMember, TObj, EndMember,
  345.                                                                                         StartMember, TObj, EndMember,
  346.                                                                                         StartMember, TObj, EndMember,
  347.                                                                                 EndObject,
  348.                                                                         EndMember,
  349.                                                                 EndObject,
  350.                                                         EndMember,
  351.                                                 EndObject,
  352.                                         EndMember,
  353.                                         StartMember,
  354.                                                 VGroupObject, Spacing( 4 ),
  355.                                                         StartMember, TitleSeperator( "Free, Fixed and Weight sizes." ), EndMember,
  356.                                                         StartMember,
  357.                                                                 HGroupObject, Spacing( 4 ),
  358.                                                                         StartMember, GObj( ISEQ_C "25Kg"  ), Weight( 25  ), EndMember,
  359.                                                                         StartMember, GObj( ISEQ_C "50Kg"  ), Weight( 50  ), EndMember,
  360.                                                                         StartMember, GObj( ISEQ_C "75Kg"  ), Weight( 75  ), EndMember,
  361.                                                                         StartMember, GObj( ISEQ_C "100Kg" ), Weight( 100 ), EndMember,
  362.                                                                 EndObject,
  363.                                                         EndMember,
  364.                                                         StartMember,
  365.                                                                 HGroupObject, Spacing( 4 ),
  366.                                                                         StartMember, GObj( ISEQ_C        "Free"  ), EndMember,
  367.                                                                         StartMember, GObj( ISEQ_C ISEQ_B "Fixed" ), FixMinWidth, EndMember,
  368.                                                                         StartMember, GObj( ISEQ_C        "Free"  ), EndMember,
  369.                                                                         StartMember, GObj( ISEQ_C ISEQ_B "Fixed" ), FixMinWidth, EndMember,
  370.                                                                 EndObject,
  371.                                                         EndMember,
  372.                                                 EndObject, FixMinHeight,
  373.                                         EndMember,
  374.                                 EndObject,
  375.                 EndObject;
  376.         }
  377.  
  378.         /*
  379.         **      Object OK?
  380.         **/
  381.         if ( WA_Groups ) {
  382.                 /*
  383.                 **      Open the window.
  384.                 **/
  385.                 if ( window = WindowOpen( WA_Groups ))
  386.                         /*
  387.                         **      Obtain signal mask.
  388.                         **/
  389.                         GetAttr( WINDOW_SigMask, WA_Groups, sigmask );
  390.         }
  391.  
  392.         return( window );
  393. }
  394.  
  395. /*
  396. **      Cycle gadget labels.
  397. **/
  398. UBYTE   *NotifLabels[] = { "Enabled-->", "Disabled-->", "Still Disabled-->", NULL };
  399.  
  400. /*
  401. **      Notification map-lists.
  402. **/
  403. ULONG   pga2sl[] = { PGA_Top,       SLIDER_Level,  TAG_END };
  404. ULONG   sl2prg[] = { SLIDER_Level,  PROGRESS_Done, TAG_END };
  405. ULONG   prg2in[] = { PROGRESS_Done, INDIC_Level,   TAG_END };
  406.  
  407. /*
  408. **      Open the notification window.
  409. **/
  410. struct Window *OpenNotifWindow( ULONG *sigmask )
  411. {
  412.         struct Window                   *window = NULL;
  413.         Object                          *c, *b, *p1, *p2, *s1, *s2, *p, *i1, *i2;
  414.  
  415.         /*
  416.         **      Not created yet? Create it now!
  417.         **/
  418.         if ( ! WA_Notif ) {
  419.                 WA_Notif = WindowObject,
  420.                         WINDOW_Title,           "BGUI notification",
  421.                         WINDOW_RMBTrap,         TRUE,
  422.                         WINDOW_SmartRefresh,    TRUE,
  423.                         WINDOW_HelpText,        NotifHelp,
  424.                         WINDOW_AutoAspect,      TRUE,
  425.                         WINDOW_MasterGroup,
  426.                                 VGroupObject, HOffset( 4 ), VOffset( 4 ), Spacing( 4 ),
  427.                                         StartMember, TitleSeperator( "Conditional" ), EndMember,
  428.                                         StartMember,
  429.                                                 HGroupObject, Spacing( 4 ),
  430.                                                         StartMember, c = XenCycle( NULL, NotifLabels, 0, 0 ), EndMember,
  431.                                                         StartMember, b = XenButton( "Target", 0 ), EndMember,
  432.                                                 EndObject, FixMinHeight,
  433.                                         EndMember,
  434.                                         StartMember, TitleSeperator( "Map-List" ), EndMember,
  435.                                         StartMember,
  436.                                                 HGroupObject, Spacing( 4 ),
  437.                                                         StartMember,
  438.                                                                 VGroupObject, Spacing( 4 ),
  439.                                                                         StartMember, i1 = IndicatorFormat( 0, 100, 0, IDJ_CENTER, "%ld%%" ), FixMinHeight, EndMember,
  440.                                                                         StartMember, p1 = HorizProgress( NULL, 0, 100, 0 ), EndMember,
  441.                                                                 EndObject,
  442.                                                         EndMember,
  443.                                                         StartMember, s1 = VertSlider(   NULL, 0, 100, 0, 0 ), FixWidth( 16 ), EndMember,
  444.                                                         StartMember, p  = VertScroller( NULL, 0, 101, 1, 0 ), FixWidth( 16 ), EndMember,
  445.                                                         StartMember, s2 = VertSlider(   NULL, 0, 100, 0, 0 ), FixWidth( 16 ), EndMember,
  446.                                                         StartMember,
  447.                                                                 VGroupObject, Spacing( 4 ),
  448.                                                                         StartMember, i2 = IndicatorFormat( 0, 100, 0, IDJ_CENTER, "%ld%%" ), FixMinHeight, EndMember,
  449.                                                                         StartMember, p2 = VertProgress( NULL, 0, 100, 0 ), EndMember,
  450.                                                                 EndObject,
  451.                                                         EndMember,
  452.                                                 EndObject,
  453.                                         EndMember,
  454.                                 EndObject,
  455.                 EndObject;
  456.  
  457.                 if ( WA_Notif ) {
  458.                         /*
  459.                         **      Connect the cycle object with the button.
  460.                         **/
  461.                         AddCondit( c, b, CYC_Active, 0, GA_Disabled, FALSE, GA_Disabled, TRUE );
  462.                         /*
  463.                         **      Connect sliders, prop, progression and indicators.
  464.                         **/
  465.                         AddMap( s1, p1, sl2prg );
  466.                         AddMap( s2, p2, sl2prg );
  467.                         AddMap( p,  s1, pga2sl );
  468.                         AddMap( p,  s2, pga2sl );
  469.                         AddMap( p1, i1, prg2in );
  470.                         AddMap( p2, i2, prg2in );
  471.                 }
  472.         }
  473.  
  474.         /*
  475.         **      Object OK?
  476.         **/
  477.         if ( WA_Notif ) {
  478.                         /*
  479.                         **      Open window.
  480.                         **/
  481.                         if ( window = WindowOpen( WA_Notif ))
  482.                                 /*
  483.                                 **      Obtain signal mask.
  484.                                 **/
  485.                                 GetAttr( WINDOW_SigMask, WA_Notif, sigmask );
  486.         }
  487.  
  488.         return( window );
  489. }
  490.  
  491. /*
  492. **      Open infoclass window.
  493. **/
  494. struct Window *OpenInfoWindow( ULONG *sigmask )
  495. {
  496.         struct Window                   *window = NULL;
  497.         ULONG                            args[2];
  498.  
  499.         /*
  500.         **      Setup arguments for the
  501.         **      infoclass object.
  502.         **/
  503.         args[0] = AvailMem( MEMF_CHIP );
  504.         args[1] = AvailMem( MEMF_FAST );
  505.  
  506.         /*
  507.         **      Not created already?
  508.         **/
  509.         if ( ! WA_Info ) {
  510.                 WA_Info = WindowObject,
  511.                         WINDOW_Title,           "BGUI information class",
  512.                         WINDOW_RMBTrap,         TRUE,
  513.                         WINDOW_SmartRefresh,    TRUE,
  514.                         WINDOW_HelpText,        InfoHelp,
  515.                         WINDOW_AutoAspect,      TRUE,
  516.                         WINDOW_MasterGroup,
  517.                                 VGroupObject, HOffset( 4 ), VOffset( 4 ),
  518.                                         StartMember,
  519.                                                 InfoFixed( NULL,
  520.                                                            ISEQ_C "BGUI offers the InfoClass.\n"
  521.                                                            "This class is a text display class which\n"
  522.                                                            "allows things like:\n\n"
  523.                                                            ISEQ_SHINE     "C"
  524.                                                            ISEQ_SHADOW    "o"
  525.                                                            ISEQ_FILL      "l"
  526.                                                            ISEQ_FILLTEXT  "o"
  527.                                                            ISEQ_HIGHLIGHT "r"
  528.                                                            ISEQ_TEXT      "s\n\n"
  529.                                                            ISEQ_L "Left Aligned...\n"
  530.                                                            ISEQ_R "Right Aligned...\n"
  531.                                                            ISEQ_C "Centered...\n\n"
  532.                                                            ISEQ_B "Bold...\n"   ISEQ_N
  533.                                                            ISEQ_I "Italic...\n" ISEQ_N
  534.                                                            ISEQ_U "Underlined...\n\n"
  535.                                                            ISEQ_B ISEQ_I "And combinations!\n\n"
  536.                                                            ISEQ_N "Free CHIP:" ISEQ_SHINE " %lD" ISEQ_TEXT", Free FAST:" ISEQ_SHINE " %lD\n",
  537.                                                            &args[ 0 ],
  538.                                                            17 ),
  539.                                         EndMember,
  540.                                 EndObject,
  541.                 EndObject;
  542.         }
  543.  
  544.         /*
  545.         **      Object OK?
  546.         **/
  547.         if ( WA_Info ) {
  548.                 /*
  549.                 **      Open window.
  550.                 **/
  551.                 if ( window = WindowOpen( WA_Info ))
  552.                         /*
  553.                         **      Obtain signal mask.
  554.                         **/
  555.                         GetAttr( WINDOW_SigMask, WA_Info, sigmask );
  556.         }
  557.  
  558.         return( window );
  559. }
  560.  
  561. /*
  562. **      Open images window.
  563. **/
  564. struct Window *OpenImageWindow( ULONG *sigmask )
  565. {
  566.         struct Window                   *window = NULL;
  567.  
  568.         /*
  569.         **      Not yet created?
  570.         **/
  571.         if ( ! WA_Image ) {
  572.                 WA_Image = WindowObject,
  573.                         WINDOW_Title,           "BGUI images",
  574.                         WINDOW_RMBTrap,         TRUE,
  575.                         WINDOW_SmartRefresh,    TRUE,
  576.                         WINDOW_HelpText,        ImageHelp,
  577.                         WINDOW_AutoAspect,      TRUE,
  578.                         WINDOW_MasterGroup,
  579.                                 VGroupObject, HOffset( 4 ), VOffset( 4 ),
  580.                                         StartMember,
  581.                                                 HGroupObject, NeXTFrame, FrameTitle( "Fixed size" ), HOffset( 8 ), TOffset( 4 ), BOffset( 6 ), Spacing( 4 ),
  582.                                                         VarSpace( DEFAULT_WEIGHT ),
  583.                                                         StartMember, ButtonObject, VIT_BuiltIn, BUILTIN_GETPATH,     ButtonFrame, EndObject, FixWidth( GETPATH_WIDTH     ), FixHeight( GETPATH_HEIGHT     ), EndMember,
  584.                                                         StartMember, ButtonObject, VIT_BuiltIn, BUILTIN_GETFILE,     ButtonFrame, EndObject, FixWidth( GETFILE_WIDTH     ), FixHeight( GETFILE_HEIGHT     ), EndMember,
  585.                                                         StartMember, ButtonObject, VIT_BuiltIn, BUILTIN_CHECKMARK,   ButtonFrame, EndObject, FixWidth( CHECKMARK_WIDTH   ), FixHeight( CHECKMARK_HEIGHT   ), EndMember,
  586.                                                         StartMember, ButtonObject, VIT_BuiltIn, BUILTIN_POPUP,       ButtonFrame, EndObject, FixWidth( POPUP_WIDTH       ), FixHeight( POPUP_HEIGHT       ), EndMember,
  587.                                                         StartMember, ButtonObject, VIT_BuiltIn, BUILTIN_ARROW_UP,    ButtonFrame, EndObject, FixWidth( ARROW_UP_WIDTH    ), FixHeight( ARROW_UP_HEIGHT    ), EndMember,
  588.                                                         StartMember, ButtonObject, VIT_BuiltIn, BUILTIN_ARROW_DOWN,  ButtonFrame, EndObject, FixWidth( ARROW_DOWN_WIDTH  ), FixHeight( ARROW_DOWN_HEIGHT  ), EndMember,
  589.                                                         StartMember, ButtonObject, VIT_BuiltIn, BUILTIN_ARROW_LEFT,  ButtonFrame, EndObject, FixWidth( ARROW_LEFT_WIDTH  ), FixHeight( ARROW_LEFT_HEIGHT  ), EndMember,
  590.                                                         StartMember, ButtonObject, VIT_BuiltIn, BUILTIN_ARROW_RIGHT, ButtonFrame, EndObject, FixWidth( ARROW_RIGHT_WIDTH ), FixHeight( ARROW_RIGHT_HEIGHT ), EndMember,
  591.                                                         VarSpace( DEFAULT_WEIGHT ),
  592.                                                 EndObject, FixMinHeight,
  593.                                         EndMember,
  594.                                         StartMember,
  595.                                                 HGroupObject, NeXTFrame, FrameTitle( "Free size" ), HOffset( 8 ), TOffset( 4 ), BOffset( 6 ), Spacing( 4 ),
  596.                                                         StartMember, ButtonObject, VIT_BuiltIn, BUILTIN_GETPATH,     ButtonFrame, EndObject, EndMember,
  597.                                                         StartMember, ButtonObject, VIT_BuiltIn, BUILTIN_GETFILE,     ButtonFrame, EndObject, EndMember,
  598.                                                         StartMember, ButtonObject, VIT_BuiltIn, BUILTIN_CHECKMARK,   ButtonFrame, EndObject, EndMember,
  599.                                                         StartMember, ButtonObject, VIT_BuiltIn, BUILTIN_POPUP,       ButtonFrame, EndObject, EndMember,
  600.                                                         StartMember, ButtonObject, VIT_BuiltIn, BUILTIN_ARROW_UP,    ButtonFrame, EndObject, EndMember,
  601.                                                         StartMember, ButtonObject, VIT_BuiltIn, BUILTIN_ARROW_DOWN,  ButtonFrame, EndObject, EndMember,
  602.                                                         StartMember, ButtonObject, VIT_BuiltIn, BUILTIN_ARROW_LEFT,  ButtonFrame, EndObject, EndMember,
  603.                                                         StartMember, ButtonObject, VIT_BuiltIn, BUILTIN_ARROW_RIGHT, ButtonFrame, EndObject, EndMember,
  604.                                                 EndObject,
  605.                                         EndMember,
  606.                                 EndObject,
  607.                 EndObject;
  608.         }
  609.  
  610.         /*
  611.         **      Object OK?
  612.         **/
  613.         if ( WA_Image ) {
  614.                 /*
  615.                 **      Open the window.
  616.                 **/
  617.                 if ( window = WindowOpen( WA_Image ))
  618.                         /*
  619.                         **      Obtain signal mask.
  620.                         **/
  621.                         GetAttr( WINDOW_SigMask, WA_Image, sigmask );
  622.         }
  623.  
  624.         return( window );
  625. }
  626.  
  627. /*
  628. **      The BackFill hook to show custom backfills.
  629. **      Renders a small mandel in the frame area. Not
  630. **      really useful but it shows you what is possible.
  631. **
  632. **      Code nicked from the "IntMandel.e" source of the
  633. **      Amiga E v3.0 distribution.
  634. **/
  635. #ifdef _DCC
  636. __geta4 ULONG BackFillHook( __A0 struct Hook *hook, __A2 Object *imo, __A1 struct FrameDrawMsg *fdm )
  637. #else
  638. __saveds __asm ULONG BackFillHook( register __a0 struct Hook         *hook,
  639.                                    register __a2 Object              *imo,
  640.                                    register __a1 struct FrameDrawMsg *fdm )
  641. #endif
  642. {
  643.         LONG    zr, zi, ar, ai, dr, di, sr, si, st, x, y, i;
  644.         LONG    xsize, ysize, depth;
  645.  
  646.         if ( fdm->fdm_DrawInfo ) {
  647.  
  648.                 depth = fdm->fdm_DrawInfo->dri_Depth;
  649.                 xsize = fdm->fdm_Bounds->MaxX - fdm->fdm_Bounds->MinX + 1;
  650.                 ysize = fdm->fdm_Bounds->MaxY - fdm->fdm_Bounds->MinY + 1;
  651.  
  652.                 sr = 0x400000 / xsize;
  653.                 si = 0x300000 / ysize;
  654.                 st = 0x140000 * -2;
  655.                 zi = 0x180000;
  656.  
  657.                 for ( y = ysize - 1; y >= 0; y-- ) {
  658.                         zi -= si;
  659.                         zr = st;
  660.                         for ( x = 0; x < xsize; x++ ) {
  661.                                 i = 0;
  662.                                 ar = zr;
  663.                                 ai = zi;
  664.                                 do {
  665.                                         dr = ar >> 10;
  666.                                         di = ai >> 10;
  667.                                         ai = dr * 2 * di + zi;
  668.                                         dr *= dr;
  669.                                         di *= di;
  670.                                         ar = dr - di + zr;
  671.                                         i++;
  672.                                 } while (( i <= 25 ) && (( dr + di ) <= 0x400000 ));
  673.                                 SetAPen( fdm->fdm_RPort, i % ( 1 << depth ));
  674.                                 WritePixel( fdm->fdm_RPort, x + fdm->fdm_Bounds->MinX, y + fdm->fdm_Bounds->MinY );
  675.                                 zr += sr;
  676.                         }
  677.                 }
  678.         }
  679.         return( FRC_OK );
  680. }
  681.  
  682. /*
  683. **      The hook structure.
  684. **/
  685. struct Hook BackFill = {
  686.         NULL, NULL, (HOOKFUNC)BackFillHook, NULL, NULL
  687. };
  688.  
  689. /*
  690. **      Open back-fill window.
  691. **/
  692. struct Window *OpenFillWindow( ULONG *sigmask )
  693. {
  694.         struct Window                   *window = NULL;
  695.  
  696.         /*
  697.         **      Not yet created?
  698.         **/
  699.         if ( ! WA_BFill ) {
  700.                 WA_BFill = WindowObject,
  701.                         WINDOW_Title,           "BGUI back fill patterns",
  702.                         WINDOW_RMBTrap,         TRUE,
  703.                         WINDOW_SmartRefresh,    TRUE,
  704.                         WINDOW_HelpText,        BackfillHelp,
  705.                         WINDOW_NoBufferRP,      TRUE,
  706.                         WINDOW_ScaleWidth,      50,
  707.                         WINDOW_ScaleHeight,     50,
  708.                         WINDOW_AutoAspect,      TRUE,
  709.                         WINDOW_MasterGroup,
  710.                                 VGroupObject, HOffset( 4 ), VOffset( 4 ), Spacing( 4 ),
  711.                                         StartMember,
  712.                                                 HGroupObject, Spacing( 4 ),
  713.                                                         StartMember, InfoObject, ButtonFrame, ShineRaster,  EndObject, EndMember,
  714.                                                         StartMember, InfoObject, ButtonFrame, ShadowRaster, EndObject, EndMember,
  715.                                                 EndObject,
  716.                                         EndMember,
  717.                                         StartMember,
  718.                                                 HGroupObject, Spacing( 4 ),
  719.                                                         StartMember, InfoObject, ButtonFrame, ShineShadowRaster, EndObject, EndMember,
  720.                                                         StartMember, InfoObject, ButtonFrame, FillRaster,        EndObject, EndMember,
  721.                                                 EndObject,
  722.                                         EndMember,
  723.                                         StartMember,
  724.                                                 HGroupObject, Spacing( 4 ),
  725.                                                         StartMember, InfoObject, ButtonFrame, ShineFillRaster,  EndObject, EndMember,
  726.                                                         StartMember, InfoObject, ButtonFrame, ShadowFillRaster, EndObject, EndMember,
  727.                                                 EndObject,
  728.                                         EndMember,
  729.                                         StartMember,
  730.                                                 HGroupObject, Spacing( 4 ),
  731.                                                         StartMember, InfoObject, ButtonFrame, ShineBlock,  EndObject, EndMember,
  732.                                                         StartMember, InfoObject, ButtonFrame, ShadowBlock, EndObject, EndMember,
  733.                                                 EndObject,
  734.                                         EndMember,
  735.                                         StartMember, InfoObject, ButtonFrame, FRM_BackFillHook, &BackFill, EndObject, Weight( 200 ), EndMember,
  736.                                 EndObject,
  737.                 EndObject;
  738.         }
  739.  
  740.         /*
  741.         **      Object OK?
  742.         **/
  743.         if ( WA_BFill ) {
  744.                 /*
  745.                 **      Open window.
  746.                 **/
  747.                 if ( window = WindowOpen( WA_BFill ))
  748.                         /*
  749.                         **      Obtain signal mask.
  750.                         **/
  751.                         GetAttr( WINDOW_SigMask, WA_BFill, sigmask );
  752.         }
  753.  
  754.         return( window );
  755. }
  756.  
  757. /*
  758. **      Cycle and Mx labels.
  759. **/
  760. UBYTE *PageLab[] = { "Buttons", "Strings", "CheckBoxes", "Radio-Buttons", NULL };
  761. UBYTE *MxLab[]   = { "MX #1",   "MX #2",   "MX #3",      "MX #4",         NULL };
  762.  
  763. /*
  764. **      Cycle to Page map-list.
  765. **/
  766. ULONG Cyc2Page[] = { MX_Active, PAGE_Active, TAG_END };
  767.  
  768. /*
  769. **      Create a MX object with a title on top.
  770. **/
  771. #define MxGadget(label,labels)\
  772.         MxObject,\
  773.                 GROUP_Style,            GRSTYLE_VERTICAL,\
  774.                 LAB_Label,              label,\
  775.                 LAB_Place,              PLACE_ABOVE,\
  776.                 LAB_Underscore,         '_',\
  777.                 LAB_Highlight,          TRUE,\
  778.                 MX_Labels,              labels,\
  779.                 MX_LabelPlace,          PLACE_LEFT,\
  780.         EndObject, FixMinSize
  781.  
  782. /*
  783. **      Open pages window.
  784. **/
  785. struct Window *OpenPagesWindow( ULONG *sigmask )
  786. {
  787.         Object                          *c, *p, *m, *s1, *s2, *s3;
  788.         struct Window                   *window = NULL;
  789.  
  790.         /*
  791.         **      Not yet created?
  792.         **/
  793.         if ( ! WA_Pages ) {
  794.                 WA_Pages = WindowObject,
  795.                         WINDOW_Title,           "BGUI pages",
  796.                         WINDOW_RMBTrap,         TRUE,
  797.                         WINDOW_SmartRefresh,    TRUE,
  798.                         WINDOW_HelpText,        PagesHelp,
  799.                         WINDOW_AutoAspect,      TRUE,
  800.                         WINDOW_MasterGroup,
  801.                                 VGroupObject, HOffset( 4 ), VOffset( 4 ), Spacing( 4 ),
  802.                                         StartMember, c = Tabs( NULL, PageLab, 0, 0 ), EndMember,
  803.                                         StartMember,
  804.                                                 p = PageObject,
  805.                                                         /*
  806.                                                         **      Button page.
  807.                                                         **/
  808.                                                         PageMember,
  809.                                                                 VGroupObject, Spacing(4),
  810.                                                                         VarSpace( DEFAULT_WEIGHT ),
  811.                                                                         StartMember, XenButton( "Button #1", 0 ), FixMinHeight, EndMember,
  812.                                                                         StartMember, XenButton( "Button #2", 0 ), FixMinHeight, EndMember,
  813.                                                                         StartMember, XenButton( "Button #3", 0 ), FixMinHeight, EndMember,
  814.                                                                         VarSpace( DEFAULT_WEIGHT ),
  815.                                                                 EndObject,
  816.                                                         /*
  817.                                                         **      String page.
  818.                                                         **/
  819.                                                         PageMember,
  820.                                                                 VGroupObject, Spacing(4),
  821.                                                                         VarSpace( DEFAULT_WEIGHT ),
  822.                                                                         StartMember, s1 = String( "String #1", "", 256, 0 ), FixMinHeight, EndMember,
  823.                                                                         StartMember, s2 = String( "String #2", "", 256, 0 ), FixMinHeight, EndMember,
  824.                                                                         StartMember, s3 = String( "String #3", "", 256, 0 ), FixMinHeight, EndMember,
  825.                                                                         VarSpace( DEFAULT_WEIGHT ),
  826.                                                                 EndObject,
  827.                                                         /*
  828.                                                         **      CheckBox page.
  829.                                                         **/
  830.                                                         PageMember,
  831.                                                                 VGroupObject, Spacing(4),
  832.                                                                         StartMember,
  833.                                                                                 HGroupObject, Spacing( 4 ),
  834.                                                                                         VarSpace( DEFAULT_WEIGHT ),
  835.                                                                                         StartMember,
  836.                                                                                                 VGroupObject, Spacing( 4 ),
  837.                                                                                                         VarSpace( DEFAULT_WEIGHT ),
  838.                                                                                                         StartMember, CheckBox( "CheckBox #1", FALSE, 0 ), EndMember,
  839.                                                                                                         StartMember, CheckBox( "CheckBox #2", FALSE, 0 ), EndMember,
  840.                                                                                                         StartMember, CheckBox( "CheckBox #3", FALSE, 0 ), EndMember,
  841.                                                                                                         VarSpace( DEFAULT_WEIGHT ),
  842.                                                                                                 EndObject, FixMinWidth,
  843.                                                                                         EndMember,
  844.                                                                                         VarSpace( DEFAULT_WEIGHT ),
  845.                                                                                 EndObject,
  846.                                                                         EndMember,
  847.                                                                 EndObject,
  848.                                                         /*
  849.                                                         **      Mx page.
  850.                                                         **/
  851.                                                         PageMember,
  852.                                                                 VGroupObject, Spacing(4),
  853.                                                                         VarSpace( DEFAULT_WEIGHT ),
  854.                                                                         StartMember,
  855.                                                                                 HGroupObject,
  856.                                                                                         VarSpace( DEFAULT_WEIGHT ),
  857.                                                                                         StartMember, m = MxGadget( "_Mx Object", MxLab ), EndMember,
  858.                                                                                         VarSpace( DEFAULT_WEIGHT ),
  859.                                                                                 EndObject, FixMinHeight,
  860.                                                                         EndMember,
  861.                                                                         VarSpace( DEFAULT_WEIGHT ),
  862.                                                                 EndObject,
  863.                                                 EndObject,
  864.                                         EndMember,
  865.                                 EndObject,
  866.                 EndObject;
  867.  
  868.                 /*
  869.                 **      Object OK?
  870.                 **/
  871.                 if ( WA_Pages ) {
  872.                         /*
  873.                         **      Add key for the MX object.
  874.                         **/
  875.                         GadgetKey( WA_Pages, m, "m" );
  876.                         /*
  877.                         **      Connect the cycle to the page.
  878.                         **/
  879.                         AddMap( c, p, Cyc2Page );
  880.                         /*
  881.                         **      Set tab-cycling order.
  882.                         **/
  883.                         DoMethod( WA_Pages, WM_TABCYCLE_ORDER, s1, s2, s3, NULL );
  884.                 }
  885.         }
  886.  
  887.         /*
  888.         **      Object OK?
  889.         **/
  890.         if ( WA_Pages ) {
  891.                 /*
  892.                 **      Open the window.
  893.                 **/
  894.                 if ( window = WindowOpen( WA_Pages ))
  895.                         /*
  896.                         **      Obtain signal mask.
  897.                         **/
  898.                         GetAttr( WINDOW_SigMask, WA_Pages, sigmask );
  899.         }
  900.  
  901.         return( window );
  902. }
  903.  
  904. /*
  905. **      Main entry.
  906. **/
  907. void main( int argc, char *argv[] )
  908. {
  909.         struct Window          *main = NULL, *groups = NULL, *notif = NULL, *info = NULL, *image = NULL, *bfill = NULL, *pages = NULL;
  910.         struct AppMessage      *apm;
  911.         struct WBArg           *ap;
  912.         ULONG                   mainsig = 0L, groupssig = 0L, notifsig = 0L, infosig = 0L, imagesig = 0L, bfillsig = 0L, pagessig = 0L, appsig = 0L;
  913.         ULONG                   sigmask = 0L, sigrec, rc, i;
  914.         BOOL                    running = TRUE;
  915.         UBYTE                   name[ 256 ];
  916.  
  917.         /*
  918.         **      Open the main window.
  919.         **/
  920.         if ( main = OpenMainWindow( &mainsig, &appsig )) {
  921.                 /*
  922.                 **      OR signal masks.
  923.                 **/
  924.                 sigmask |= mainsig | appsig;
  925.                 /*
  926.                 **      Loop...
  927.                 **/
  928.                 do {
  929.                         /*
  930.                         **      Wait for the signals to come.
  931.                         **/
  932.                         sigrec = Wait( sigmask );
  933.                         /*
  934.                         **      AppWindow signal?
  935.                         **/
  936.                         if ( sigrec & appsig ) {
  937.                                 /*
  938.                                 **      Obtain AppWindow messages.
  939.                                 **/
  940.                                 while ( apm = GetAppMsg( WA_Main )) {
  941.                                         /*
  942.                                         **      Get all dropped icons.
  943.                                         **/
  944.                                         for ( ap = apm->am_ArgList, i = 0; i < apm->am_NumArgs; i++, ap++ ) {
  945.                                                 /*
  946.                                                 **      Build fully qualified name.
  947.                                                 **/
  948.                                                 NameFromLock( ap->wa_Lock, name, 256 );
  949.                                                 AddPart( name, ap->wa_Name, 256 );
  950.                                                 /*
  951.                                                 **      Add it to the listview.
  952.                                                 **/
  953.                                                 AddEntry( main, LV_IconList, (APTR)name, LVAP_SORTED );
  954.                                         }
  955.                                         /*
  956.                                         **      Important! We must reply the message!
  957.                                         **/
  958.                                         ReplyMsg(( struct Message * )apm );
  959.                                 }
  960.                                 /*
  961.                                 **      Switch to the Icon page.
  962.                                 **/
  963.                                 SetGadgetAttrs(( struct Gadget * )PG_Pager, main, NULL, PAGE_Active, 1, TAG_END );
  964.                         }
  965.  
  966.                         /*
  967.                         **      Main window signal?
  968.                         **/
  969.                         if ( sigrec & mainsig ) {
  970.                                 /*
  971.                                 **      Call the main-window event handler.
  972.                                 **/
  973.                                 while (( rc = HandleEvent( WA_Main )) != WMHI_NOMORE ) {
  974.                                         switch ( rc ) {
  975.  
  976.                                                 case    WMHI_CLOSEWINDOW:
  977.                                                 case    ID_QUIT:
  978.                                                         running = FALSE;
  979.                                                         break;
  980.  
  981.                                                 case    ID_ABOUT:
  982.                                                         Req( main, "OK", "\33c\33b\33d8BGUIDemo\33n\33d2\n(C) Copyright 1993-1994 Jaba Development" );
  983.                                                         break;
  984.  
  985.                                                 case    ID_MAIN_GROUPS:
  986.                                                         /*
  987.                                                         **      Open groups window.
  988.                                                         **/
  989.                                                         if ( ! groups ) {
  990.                                                                 if ( groups = OpenGroupsWindow( &groupssig ))
  991.                                                                         sigmask |= groupssig;
  992.                                                         }
  993.                                                         break;
  994.  
  995.                                                 case    ID_MAIN_NOTIF:
  996.                                                         /*
  997.                                                         **      Open notification window.
  998.                                                         **/
  999.                                                         if ( ! notif ) {
  1000.                                                                 if ( notif = OpenNotifWindow( ¬ifsig ))
  1001.                                                                         sigmask |= notifsig;
  1002.                                                         }
  1003.                                                         break;
  1004.  
  1005.                                                 case    ID_MAIN_INFO:
  1006.                                                         /*
  1007.                                                         **      Open infoclass window.
  1008.                                                         **/
  1009.                                                         if ( ! info ) {
  1010.                                                                 if ( info = OpenInfoWindow( &infosig ))
  1011.                                                                         sigmask |= infosig;
  1012.                                                         }
  1013.                                                         break;
  1014.  
  1015.                                                 case    ID_MAIN_IMAGE:
  1016.                                                         /*
  1017.                                                         **      Open images window.
  1018.                                                         **/
  1019.                                                         if ( ! image ) {
  1020.                                                                 if ( image = OpenImageWindow( &imagesig ))
  1021.                                                                         sigmask |= imagesig;
  1022.                                                         }
  1023.                                                         break;
  1024.  
  1025.                                                 case    ID_MAIN_BFILL:
  1026.                                                         /*
  1027.                                                         **      Open backfill window.
  1028.                                                         **/
  1029.                                                         if ( ! bfill ) {
  1030.                                                                 if ( bfill = OpenFillWindow( &bfillsig ))
  1031.                                                                         sigmask |= bfillsig;
  1032.                                                         }
  1033.                                                         break;
  1034.  
  1035.                                                 case    ID_MAIN_PAGES:
  1036.                                                         /*
  1037.                                                         **      Open pages window.
  1038.                                                         **/
  1039.                                                         if ( ! pages ) {
  1040.                                                                 if ( pages = OpenPagesWindow( &pagessig ))
  1041.                                                                         sigmask |= pagessig;
  1042.                                                         }
  1043.                                                         break;
  1044.  
  1045.                                                 case    ID_MAIN_ICON_CONT:
  1046.                                                         /*
  1047.                                                         **      Switch back to the main page.
  1048.                                                         **/
  1049.                                                         SetGadgetAttrs(( struct Gadget * )PG_Pager, main, NULL, PAGE_Active, 0, TAG_END );
  1050.                                                         /*
  1051.                                                         **      Clear all entries from the listview.
  1052.                                                         **/
  1053.                                                         ClearList( main, LV_IconList );
  1054.                                                         break;
  1055.                                         }
  1056.                                 }
  1057.                         }
  1058.  
  1059.                         /*
  1060.                         **      The code below will close the
  1061.                         **      specific window.
  1062.                         **/
  1063.                         if ( sigrec & groupssig ) {
  1064.                                 while (( rc = HandleEvent( WA_Groups )) != WMHI_NOMORE ) {
  1065.                                         switch ( rc ) {
  1066.                                                 case    WMHI_CLOSEWINDOW:
  1067.                                                         WindowClose( WA_Groups );
  1068.                                                         sigmask &= ~groupssig;
  1069.                                                         groupssig = 0L;
  1070.                                                         groups = NULL;
  1071.                                                         break;
  1072.                                         }
  1073.                                 }
  1074.                         }
  1075.  
  1076.                         if ( sigrec & notifsig ) {
  1077.                                 while (( rc = HandleEvent( WA_Notif )) != WMHI_NOMORE ) {
  1078.                                         switch ( rc ) {
  1079.                                                 case    WMHI_CLOSEWINDOW:
  1080.                                                         WindowClose( WA_Notif );
  1081.                                                         sigmask &= ~notifsig;
  1082.                                                         notifsig = 0L;
  1083.                                                         notif = NULL;
  1084.                                                         break;
  1085.                                         }
  1086.                                 }
  1087.                         }
  1088.  
  1089.                         if ( sigrec & infosig ) {
  1090.                                 while (( rc = HandleEvent( WA_Info )) != WMHI_NOMORE ) {
  1091.                                         switch ( rc ) {
  1092.                                                 case    WMHI_CLOSEWINDOW:
  1093.                                                         WindowClose( WA_Info );
  1094.                                                         sigmask &= ~infosig;
  1095.                                                         infosig = 0L;
  1096.                                                         info = NULL;
  1097.                                                         break;
  1098.                                         }
  1099.                                 }
  1100.                         }
  1101.  
  1102.                         if ( sigrec & imagesig ) {
  1103.                                 while (( rc = HandleEvent( WA_Image )) != WMHI_NOMORE ) {
  1104.                                         switch ( rc ) {
  1105.                                                 case    WMHI_CLOSEWINDOW:
  1106.                                                         WindowClose( WA_Image );
  1107.                                                         sigmask &= ~imagesig;
  1108.                                                         imagesig = 0L;
  1109.                                                         image = NULL;
  1110.                                                         break;
  1111.                                         }
  1112.                                 }
  1113.                         }
  1114.  
  1115.                         if ( sigrec & bfillsig ) {
  1116.                                 while (( rc = HandleEvent( WA_BFill )) != WMHI_NOMORE ) {
  1117.                                         switch ( rc ) {
  1118.                                                 case    WMHI_CLOSEWINDOW:
  1119.                                                         WindowClose( WA_BFill );
  1120.                                                         sigmask &= ~bfillsig;
  1121.                                                         bfillsig = 0L;
  1122.                                                         bfill = NULL;
  1123.                                                         break;
  1124.                                         }
  1125.                                 }
  1126.                         }
  1127.  
  1128.                         if ( sigrec & pagessig ) {
  1129.                                 while (( rc = HandleEvent( WA_Pages )) != WMHI_NOMORE ) {
  1130.                                         switch ( rc ) {
  1131.                                                 case    WMHI_CLOSEWINDOW:
  1132.                                                         WindowClose( WA_Pages );
  1133.                                                         sigmask &= ~pagessig;
  1134.                                                         pagessig = 0L;
  1135.                                                         pages = NULL;
  1136.                                                         break;
  1137.                                         }
  1138.                                 }
  1139.                         }
  1140.                 } while ( running );
  1141.         }
  1142.         /*
  1143.         **      Dispose of all window objects.
  1144.         **/
  1145.         if ( WA_Pages )         DisposeObject( WA_Pages );
  1146.         if ( WA_BFill )         DisposeObject( WA_BFill );
  1147.         if ( WA_Image )         DisposeObject( WA_Image );
  1148.         if ( WA_Info )          DisposeObject( WA_Info );
  1149.         if ( WA_Notif )         DisposeObject( WA_Notif );
  1150.         if ( WA_Groups )        DisposeObject( WA_Groups );
  1151.         if ( WA_Main )          DisposeObject( WA_Main );
  1152. }
  1153.  
  1154. /*
  1155. **      DICE stuff.
  1156. **/
  1157. #ifdef _DCC
  1158. int wbmain( struct WBStartup *wbs )
  1159. {
  1160.         return( main( 0, NULL ));
  1161. }
  1162. #endif
  1163.  
  1164. /*
  1165.  *      $Log: bguidemo.c,v $
  1166.  * Revision 1.14  1994/12/04  18:12:08  jaba
  1167.  * Added a tabs-mode mx object in the pages window.
  1168.  *
  1169.  * Revision 1.13  1994/10/23  15:03:57  jaba
  1170.  * Added some more examples.
  1171.  *
  1172.  * Revision 1.12  1994/10/02  14:57:30  jaba
  1173.  * Added online-help to all windows.
  1174.  *
  1175.  * Revision 1.11  1994/09/29  20:14:37  jaba
  1176.  * Cleaned it up a little.
  1177.  *
  1178.  * Revision 1.10  1994/09/29  18:35:54  jaba
  1179.  * Enhanced the icon-drop thinggy.
  1180.  *
  1181.  * Revision 1.9  1994/08/03  11:16:20  jaba
  1182.  * Switch to proto/ instead of clib/.
  1183.  *
  1184.  * Revision 1.8  1994/07/25  20:08:47  jaba
  1185.  * Added some group seperators.
  1186.  *
  1187.  * Revision 1.7  1994/07/19  19:52:25  jaba
  1188.  * Fixed a positioning bug in the pages window.
  1189.  *
  1190.  * Revision 1.6  1994/07/18  17:44:16  jaba
  1191.  * Removed the sizing gadget from the main window.
  1192.  *
  1193.  * Revision 1.5  1994/07/16  18:21:04  jaba
  1194.  * Added the BREQF_XEN_BUTTONS flag to the BGUI_RequestA() routine.
  1195.  *
  1196.  * Revision 1.4  1994/07/16  18:04:39  jaba
  1197.  * Added a backfill pattern in the main-window.
  1198.  *
  1199.  * Revision 1.3  1994/07/16  13:16:37  jaba
  1200.  * Added a Free chip&fast display to the InfoClass window
  1201.  * to show the possibility of C-style formatting codes in
  1202.  * an InfoClass object.
  1203.  *
  1204.  * Revision 1.2  1994/07/16  12:17:38  jaba
  1205.  * Added some more XEN stuff.
  1206.  *
  1207.  * Revision 1.1  1994/07/16  11:09:12  jaba
  1208.  * Initial revision
  1209.  *
  1210.  */
  1211.