home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 6 / AACD06.ISO / AACD / Utilities / amiCheck / Source / groupPanel.c < prev    next >
C/C++ Source or Header  |  1998-06-11  |  6KB  |  269 lines

  1. /* groupPanel.c 
  2.  *
  3.  *  defines the GUIFront characteristics of the group panel 
  4.  */
  5.   
  6. #include <stdio.h>  
  7. #include <intuition/gadgetclass.h>
  8. #include <exec/memory.h>
  9. #include <clib/exec_protos.h>
  10. #include <clib/asl_protos.h>
  11. #include <libraries/asl.h>
  12.  
  13. #include "amiCheck.h"
  14. #include "dataBase.h"
  15. #include "groupPanel.h"
  16. #include <string.h>
  17.  
  18.  
  19. /* prototypes */
  20. BOOL GroupHandleGadget(struct IntuiMessage *);
  21. BOOL GroupInit(void);
  22.  
  23. static BOOL newgroup;
  24. static struct Window *groupWin;
  25. static struct List groupList;
  26. static struct List *cats;
  27. ExtErrorData GroupExtData;
  28. GUIFront *groupGUI;
  29.  
  30. /* quick configure of some gadgets */
  31.  
  32. /* define gadgetspec */
  33. GadgetSpec GRPgadgetspecs[] = 
  34. {
  35.     {LISTVIEW_KIND,25,8, {0,0,0,0,NULL,NULL,GID_GRPMAINLIST,
  36.         PLACETEXT_ABOVE},ListView,GS_DefaultTags},
  37.  
  38.     {LISTVIEW_KIND,25,8, {0,0,0,0,NULL,NULL,GID_GRPLIST,
  39.         PLACETEXT_ABOVE},ListView,GS_DefaultTags},
  40.  
  41.         {BUTTON_KIND,0,0,{0,0,0,0,"_OK", NULL, GID_GRPOK,        
  42.                 PLACETEXT_IN}, NULL, GS_DefaultTags},
  43.  
  44.         {BUTTON_KIND,0,0,{0,0,0,0,"_Cancel", NULL, GID_GRPCANCEL,        
  45.                 PLACETEXT_IN}, NULL, GS_DefaultTags},
  46. };
  47.  
  48. /* set up array of pointers to our specs */
  49. GadgetSpec *GRP_GroupSpecs[] =
  50. {
  51.         &GRPgadgetspecs[0],
  52.         &GRPgadgetspecs[1],
  53.         &GRPgadgetspecs[2],
  54.         &GRPgadgetspecs[3],
  55.         NULL,
  56. };
  57.  
  58. /* define the layout of this panel */
  59. ULONG GRP_GroupPanel[] =
  60. {
  61.    GUIL_Flags, GUILF_PropShare | GUILF_EqualWidth,
  62.  
  63.    GUIL_HorizGroup, 1,
  64.         GUIL_Flags, GUILF_PropShare,
  65.     GUIL_FrameType, GUILFT_Recess,
  66.         
  67.     GUIL_VertGroup, 1,
  68.  
  69.         GUIL_HorizGroup,1,
  70.  
  71.             GUIL_HorizGroup,1,
  72.                 GUIL_FrameType, GUILFT_Ridge,
  73.                 GUIL_FrameHeadline, "Categories",
  74.  
  75.                 GUIL_GadgetSpecID, GID_GRPMAINLIST,
  76.             TAG_DONE,
  77.  
  78.             GUIL_HorizGroup,1,
  79.  
  80.                 GUIL_FrameType, GUILFT_Ridge,
  81.                 GUIL_FrameHeadline, "Group List",
  82.  
  83.                 GUIL_GadgetSpecID, GID_GRPLIST,
  84.  
  85.                        TAG_DONE,
  86.  
  87.         TAG_DONE,
  88.  
  89.     TAG_DONE,
  90.         
  91.     TAG_DONE,
  92.     
  93.     GUIL_HorizGroup,1,
  94.         GUIL_Flags, GUILF_EqualSize | GUILF_EqualWidth,
  95.  
  96.            GUIL_GadgetSpecID, GID_GRPOK,
  97.            GUIL_GadgetSpecID, GID_GRPCANCEL,
  98.            
  99.     TAG_DONE,   
  100.            
  101. TAG_DONE,
  102. };
  103.  
  104.  
  105. /****************************************************
  106. * GroupGUI ()
  107. *
  108. *    Creates the GUI for the group panel.
  109. *****************************************************/
  110. void GroupGUI(struct List *catlist, struct List *groupcats)
  111. {
  112.  BOOL done = FALSE;
  113.  BOOL noreply;
  114.  UWORD ordinal;
  115.  ULONG signal;
  116.  
  117.  newgroup = FALSE;
  118.     
  119.  AmiLock();
  120.  
  121.     cats = catlist;
  122.     NewList(&groupList);
  123.     DataCopyList(groupcats, &groupList, DataAddCat);
  124.  
  125.      GF_SetGUIAttr(groupGUI, GUI_OpenGUI, TRUE, TAG_DONE);
  126.      /* grab window */
  127.      GF_GetGUIAttr(groupGUI,GUI_Window,&groupWin,TAG_DONE);
  128.     if (!GroupInit())
  129.         done = TRUE;
  130.  
  131.  
  132.                 /* Process input events */
  133.                 while (!done)
  134.                 {
  135.                     struct IntuiMessage *imsg;
  136.  
  137.                     /* Wait for an event to occur */
  138.  
  139.                     signal = GF_Wait(guiapp,AmigaGuideSignal(agc));
  140.            if (signal & AmigaGuideSignal(agc)) {
  141.             AmiHelpMsg();
  142.             continue;
  143.             }
  144.  
  145.  
  146.                     /* We only bother to listen for CLOSEWINDOW events.
  147.                      * Of course, in a real application, you would be
  148.                      * examining the Class field for IDCMP_GADGETUP
  149.                      * messages and act accordingly.
  150.                      */
  151.  
  152.                     while (imsg = GF_GetIMsg(guiapp))
  153.                     {
  154.             noreply = TRUE;
  155.                         switch (imsg->Class) {
  156.                 case IDCMP_REFRESHWINDOW:
  157.                     RegRefresh(TRUE);
  158.                     break;
  159.  
  160.                                 case IDCMP_CLOSEWINDOW:
  161.                     done = TRUE;
  162.                                         break;
  163.  
  164.                 case IDCMP_GADGETUP:
  165.                     noreply = FALSE;
  166.                     done=GroupHandleGadget(imsg);
  167.                     break;
  168.  
  169.                 case IDCMP_RAWKEY:
  170.                     AmiHelpKey(imsg,GROUP_PANEL);
  171.                     break;
  172.                         }
  173.                                      
  174.                               
  175.                         if (noreply) GF_ReplyIMsg(imsg);
  176.                     }
  177.                 }
  178.  
  179.    GF_SetGadgetAttrs(groupGUI,GRPgadgetspecs[GID_GRPLIST].gs_Gadget,
  180.             GTLV_Labels, ~0,
  181.             TAG_DONE);
  182.  
  183.    GF_SetGadgetAttrs(groupGUI,GRPgadgetspecs[GID_GRPMAINLIST].gs_Gadget,
  184.             GTLV_Labels, ~0,
  185.             TAG_DONE);
  186.  
  187.    GF_SetGUIAttr(groupGUI, GUI_OpenGUI, FALSE, TAG_DONE);
  188.  
  189.    /* Copy list back...? */
  190.    if (newgroup == TRUE)
  191.     DataMoveList(&groupList,groupcats);
  192.    else    DataFreeList(&groupList);
  193.  
  194.    AmiUnlock();
  195.   return;
  196. }
  197.  
  198. /***************************************************
  199. * GroupHandleGadget()
  200. *
  201. *    Handles gadget events for this panel
  202. ****************************************************/
  203. BOOL  GroupHandleGadget(struct IntuiMessage *imsg)
  204. {
  205.  BOOL done = FALSE;
  206.  struct Gadget *gad = (struct Gadget *)(imsg->IAddress);
  207.  UWORD code = imsg->Code;
  208.  categoryNode *temp;
  209.  
  210.  switch (gad->GadgetID) {
  211.     
  212.     case GID_GRPLIST:
  213.         DataListRemove(groupGUI,GRPgadgetspecs[GID_GRPLIST].gs_Gadget,&groupList,&code);
  214.         break;
  215.  
  216.     case GID_GRPMAINLIST:
  217.         temp = (categoryNode *)DataOrd2Node(cats,code);
  218.         if (DataIsUnique(groupGUI,&groupList,temp->catname,TRUE,"Category is alreay a member.")) {
  219.             GF_SetGadgetAttrs(groupGUI,GRPgadgetspecs[GID_GRPLIST].gs_Gadget,
  220.                 GTLV_Labels, ~0,
  221.                 TAG_DONE);        
  222.     
  223.             DataAddCat(&groupList,temp);
  224.  
  225.             GF_SetGadgetAttrs(groupGUI,GRPgadgetspecs[GID_GRPLIST].gs_Gadget,
  226.                 GTLV_Labels, &groupList,
  227.                 GTLV_MakeVisible,DataCountNodes(&groupList)-1,
  228.                 TAG_DONE);    
  229.         }
  230.         break;
  231.  
  232.     case GID_GRPOK:
  233.         done = TRUE;
  234.         /* copy stuff into new.. */
  235.         newgroup = TRUE;
  236.         break;
  237.  
  238.     case GID_GRPCANCEL:
  239.         done = TRUE;
  240.         break;
  241.  
  242.  }
  243.  
  244.  GF_ReplyIMsg(imsg);
  245.  return (done);
  246. }
  247.  
  248. /****************************************************
  249. * GroupInit()
  250. *
  251. *    Set up some globals
  252. *****************************************************/
  253. BOOL GroupInit(void)
  254. {
  255.  
  256.  GF_SetGadgetAttrs(groupGUI,GRPgadgetspecs[GID_GRPMAINLIST].gs_Gadget,
  257.             GTLV_Labels, cats,
  258.             GTLV_Selected,~0,
  259.             TAG_DONE);
  260.  
  261.  GF_SetGadgetAttrs(groupGUI,GRPgadgetspecs[GID_GRPLIST].gs_Gadget,
  262.             GTLV_Labels, &groupList,
  263.             GTLV_Selected,~0,
  264.             TAG_DONE);
  265.  
  266.  
  267.  return (TRUE);
  268. }
  269.