home *** CD-ROM | disk | FTP | other *** search
/ Gold Fish 2 / goldfish_vol2_cd1.bin / files / dev / gui / visualarts / demo / source / appwindow.c next >
C/C++ Source or Header  |  1994-09-19  |  8KB  |  313 lines

  1. /* ******************************************************************** */
  2. /* C code generated by:                            */
  3. /* Visual Arts Version 2.0                        */
  4. /* Copyright 1994 Danny Y. Wong  All rights reserved            */
  5. /* Calgary, Alberta (CANADA)                                    */
  6. /* Partial of the code is copyright by Jaba Development            */
  7. /* ******************************************************************** */
  8.  
  9. #include "VisualArts.h" 
  10.  
  11. #define ID_clear                                      0
  12. #define ID_quit                                     1
  13. #define ID_icons                                      2
  14.  
  15. #define Project0NumGads                        3
  16.  
  17. #include "AppWindow.h" 
  18.  
  19. int clearObj(struct VAobject VAObject);
  20. int quitObj(struct VAobject VAObject);
  21. int iconsObj(struct VAobject VAObject);
  22.  
  23. int GetPubScreen(void);
  24. void ClosePubScreen(void);
  25. int OpenProject0Window(char windtitle[80]);
  26. void CloseProject0Window(void);
  27. int Project0Handler(void);
  28. int Project0MainHandler(void);
  29. int Project0AppWindHandler(struct MsgPort *appwindport);
  30. void DrawProject0Objs(void);
  31. int main(int argc, char *argv[]);
  32.  
  33. UBYTE                *PubScrName = NULL;
  34. struct DrawInfo            *ScrDrawInfo = NULL;
  35. APTR                 VisualInfo = NULL;
  36. struct Screen            *Scr = NULL;
  37. struct Window            *Project0Wnd = NULL;
  38. struct AppWindow        *Project0AppWind = NULL;
  39. struct MsgPort            *Project0AppWindPort = NULL;
  40. struct Gadget            *Project0GList = NULL;
  41. struct Gadget            *Project0Gadgets[Project0NumGads];
  42. struct IntuiMessage         Project0Msg;
  43. UWORD                 Project0Left = 158;
  44. UWORD                 Project0Top = 48;
  45. UWORD                 Project0Width = 224;
  46. UWORD                 Project0Height = 103;
  47. struct TextAttr topaz8 = { (STRPTR)"topaz.font", 8, 0x00, 0x01 };
  48. struct TextAttr topaz800 = { (STRPTR)"topaz.font", 8, 0x00, 0x00 };
  49.  
  50. UBYTE *IconsLabels[] = {
  51.     NULL
  52. };
  53.  
  54. WORD Project0GadTypes[] = {
  55.     BUTTON_KIND,
  56.     BUTTON_KIND,
  57.     LISTVIEW_KIND,
  58. };
  59.  
  60. struct NewGadget Project0NGads[] = {
  61.     6, 73, 56, 12, (UBYTE *)"_Clear",&topaz800, ID_clear, PLACETEXT_IN, NULL, (APTR)clearObj,
  62.     153, 73, 56, 12, (UBYTE *)"_Quit",&topaz800, ID_quit, PLACETEXT_IN, NULL, (APTR)quitObj,
  63.     6, 2, 203, 68, (UBYTE *)"", &topaz800, ID_icons, PLACETEXT_ABOVE, NULL, (APTR)iconsObj,
  64. };
  65.  
  66. ULONG Project0NTags[] = {
  67.     (GT_Underscore), '_', TAG_DONE,
  68.     (GT_Underscore), '_', TAG_DONE,
  69.     (GTLV_Labels), NULL, (GTLV_Top), 0, (GTLV_ReadOnly), TRUE, (GTLV_ScrollWidth), 16, (LAYOUTA_Spacing), 0, TAG_DONE,
  70. };
  71.  
  72.  
  73. int GetPubScreen(void)
  74. {
  75.   if (!(Scr = LockPubScreen(PubScrName)))
  76.     return(1L);
  77.  
  78.   if (!(VisualInfo = GetVisualInfo(Scr, TAG_DONE)))
  79.     return(2L);
  80.  
  81.   if (!(ScrDrawInfo = GetScreenDrawInfo(Scr)))
  82.     return(3L);
  83.   return(0L);
  84. }
  85.  
  86. void ClosePubScreen(void)
  87. {
  88.   if (VisualInfo)
  89.     FreeVisualInfo(VisualInfo);
  90.   if (Scr)
  91.     UnlockPubScreen(NULL,  Scr);
  92.   if (ScrDrawInfo)
  93.     FreeScreenDrawInfo(Scr,  ScrDrawInfo);
  94. }
  95.  
  96. int OpenProject0Window(char windtitle[80])
  97. {
  98.   struct NewGadget    NewGad;
  99.   struct Gadget       *Gad;
  100.   register UWORD i, j;
  101.   UWORD offsetx = Scr->WBorLeft;
  102.   UWORD offsety = Scr->WBorTop + Scr->RastPort.TxHeight + 1;
  103.  
  104.   if (!(Gad = CreateContext(&Project0GList)))
  105.       return(1L);
  106.  
  107.   for (i=0, j=0; i < Project0NumGads; i++)
  108.   {
  109.     CopyMem((char *)&Project0NGads[i], (char *)&NewGad, (long)sizeof(struct NewGadget));
  110.  
  111.     NewGad.ng_VisualInfo = VisualInfo;
  112.     NewGad.ng_LeftEdge += offsetx;
  113.     NewGad.ng_TopEdge  += offsety;
  114.  
  115.     Project0Gadgets[i] = Gad = CreateGadgetA((ULONG)Project0GadTypes[i], Gad, &NewGad,
  116.     (struct TagItem *)&Project0NTags[j]);
  117.     while (Project0NTags[j])
  118.         j +=2;
  119.     j++;
  120.     if (!Gad)
  121.        return(2L);
  122.   }
  123.   if (!(Project0Wnd = OpenWindowTags(NULL,
  124.       WA_Left,    Project0Left,
  125.       WA_Top,     Project0Top,
  126.       WA_Width,    Project0Width,
  127.       WA_Height,    Project0Height - Scr->WBorTop,
  128.       WA_NewLookMenus, TRUE,
  129.       WA_IDCMP,    IDCMP_CLOSEWINDOW | IDCMP_MOUSEBUTTONS | IDCMP_MOUSEMOVE | IDCMP_GADGETUP | IDCMP_GADGETDOWN | IDCMP_VANILLAKEY | IDCMP_INTUITICKS ,
  130.       WA_Flags,    WFLG_CLOSEGADGET  |  WFLG_SMART_REFRESH | 
  131.              WFLG_ACTIVATE |  WFLG_DRAGBAR  | WFLG_DEPTHGADGET,
  132.       WA_Gadgets,    Project0GList,
  133.       WA_Title,    windtitle,
  134.       WA_ScreenTitle,    "Visual Arts V2.0 Copyright 1994 Danny Y. Wong  All Rights Reserved.",
  135.       WA_PubScreen,    Scr,
  136.       WA_MinWidth,    160,
  137.       WA_MinHeight,    50,
  138.       WA_MaxWidth,    640,
  139.       WA_MaxHeight,    200,
  140.       TAG_DONE)))
  141.           return(3L);
  142.  
  143.   CreateProject0Lists();
  144.   if (Project0AppWindPort = CreateMsgPort())
  145.   {
  146.     Project0AppWind = AddAppWindow(1, 0, Project0Wnd, Project0AppWindPort, NULL);
  147.     if (Project0AppWind == NULL)
  148.     {
  149.       CloseProject0Window();
  150.       return(-1L);
  151.     }
  152.   }
  153.   else
  154.     return(-2L);
  155.   GT_RefreshWindow(Project0Wnd, NULL);
  156.   RefreshGadgets(Project0Gadgets[0], Project0Wnd, NULL);
  157.   GT_SetGadgetAttrs(Project0Gadgets[2], Project0Wnd, NULL,
  158.      GTLV_Labels, Project0Lists[0], TAG_END);
  159.   return(0L);
  160. }
  161.  
  162. void CloseProject0Window(void)
  163. {
  164.   struct AppMessage *appwindmsg;
  165.  
  166.   if (Project0Wnd)
  167.     CloseWindow(Project0Wnd);
  168.   if (Project0GList)
  169.     FreeGadgets(Project0GList);
  170.   if (Project0AppWind)
  171.   {
  172.     RemoveAppWindow(Project0AppWind);
  173.     while (appwindmsg = (struct AppMessage *)GetMsg(Project0AppWindPort))
  174.     ReplyMsg((struct Message *)appwindmsg);
  175.     DeleteMsgPort(Project0AppWindPort);
  176.   }
  177. }
  178.  
  179. int Project0Handler(void)
  180. {
  181.   struct IntuiMessage    *msg;
  182.   struct VAobject    VAObject;
  183.   int running    = 1;
  184.   int (*func)(struct VAobject VAObject);
  185.   ULONG class;
  186.   UWORD code;
  187.  
  188.   while (msg=GT_GetIMsg(Project0Wnd->UserPort))
  189.   {
  190.     CopyMem((char *)msg, (char *)&Project0Msg, (long)sizeof(struct IntuiMessage));
  191.     class = msg->Class;
  192.     code  = msg->Code;
  193.  
  194.     GT_ReplyIMsg(msg);
  195.     switch(class)
  196.     {
  197.  
  198.       case IDCMP_MOUSEBUTTONS :
  199.         break;
  200.  
  201.       case IDCMP_MOUSEMOVE :
  202.         break;
  203.  
  204.       case IDCMP_INTUITICKS :
  205.         break;
  206.  
  207.       case IDCMP_CLOSEWINDOW:
  208.          return(0);
  209.          break;
  210.  
  211.       case IDCMP_GADGETUP:
  212.         VAObject.va_Window = (struct Window *)Project0Wnd;
  213.         VAObject.va_Gadget = (struct Gadget *)msg->IAddress;
  214.         VAObject.va_IntuiMsg = (struct IntuiMessage *)msg;
  215.         VAObject.va_Flags = 0;
  216.         VAObject.va_UserData = 0;
  217.         func = (void *)((struct Gadget *)Project0Msg.IAddress)->UserData;
  218.         if (func != NULL)
  219.           running =  func(VAObject);
  220.         break;
  221.  
  222.  
  223.       case   IDCMP_VANILLAKEY:
  224.         switch(code)
  225.         {
  226.           case 'C':
  227.               case 'c':
  228.             ButtonSelected(Project0Wnd, Project0Gadgets[0]);
  229.                 running = clearObj(VAObject);
  230.             break;
  231.           case 'Q':
  232.               case 'q':
  233.             ButtonSelected(Project0Wnd, Project0Gadgets[1]);
  234.                 running = quitObj(VAObject);
  235.             break;
  236.         }
  237.         break;
  238.     }
  239.   }
  240.   return(running);
  241. }
  242.  
  243. int Project0AppWindHandler(struct MsgPort *appwindport)
  244. {
  245.   struct WBArg    *wbargptr;
  246.   struct AppMessage    *appwindmsg;
  247.   int i;
  248.   int rc;
  249.   
  250.   while (appwindmsg = (struct AppMessage *)GetMsg(appwindport))
  251.   {
  252.     wbargptr = appwindmsg->am_ArgList;
  253.  
  254.     /*  examine the icons dragged into the window here.   */ 
  255.     /*  wbargptr->wa_Name ---> name of the icon           */ 
  256.     /*  wbargptr->wa_Lock ---> directory this icon is in. */ 
  257.  
  258.         GT_SetGadgetAttrs(Project0Gadgets[ID_icons], Project0Wnd, NULL,
  259.                 GTLV_Labels, ~0, TAG_END);
  260.     for (i=0; i < appwindmsg->am_NumArgs; i++)
  261.     {
  262.            rc = AddNewNode(Project0Lists[0],  wbargptr->wa_Name);
  263.        wbargptr++;
  264.     }
  265.         GT_SetGadgetAttrs(Project0Gadgets[ID_icons], Project0Wnd, NULL,
  266.                 GTLV_Labels, Project0Lists[0], TAG_END);
  267.     ReplyMsg((struct Message *)appwindmsg);
  268.   }
  269.   return(0);
  270. }
  271.  
  272. int Project0MainHandler(void)
  273. {
  274.   int running = 1;
  275.   ULONG windsig, signals;
  276.  
  277.   ULONG appwindsig;
  278.  
  279.   while (running == 1)
  280.   {
  281.     appwindsig = 1L << Project0AppWindPort->mp_SigBit;
  282.     windsig = 1L << Project0Wnd->UserPort->mp_SigBit;
  283.     signals = Wait( windsig | appwindsig );
  284.     if (signals & windsig)
  285.     {
  286.       running = Project0Handler();
  287.     }
  288.     else
  289.     if (signals & appwindsig)
  290.       Project0AppWindHandler(Project0AppWindPort);
  291.   }
  292.   return(running);
  293. }
  294.  
  295. int main(int argc, char *argv[])
  296. {
  297.   int rc;
  298.  
  299.   if (!(GetPubScreen()))
  300.   {
  301.     for (rc=0; rc < 1; rc++)
  302.       Project0Lists[rc]=GetNewList();
  303.     if (!(OpenProject0Window("Visual Arts -- AppWindow Demo")))
  304.     {
  305.       rc = Project0MainHandler();
  306.       CloseProject0Window();
  307.     }
  308.     for (rc=0; rc < 1; rc++)
  309.       FreeList(Project0Lists[rc]);
  310.     ClosePubScreen();
  311.   }
  312. }
  313.