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

  1. /* categoryPanel.c 
  2.  *
  3.  *  defines the GUIFront characteristics of the category panel 
  4.  */
  5.   
  6. #include <stdio.h>  
  7. #include <intuition/gadgetclass.h>
  8. #include "amiCheck.h"
  9. #include "regGadget.h"
  10. #include "dataBase.h"
  11. #include "categoryPanel.h"
  12. #include "groupPanel.h"
  13. #include <string.h>
  14.  
  15.  
  16. /* prototypes */
  17. BOOL CatHandleGadget(struct IntuiMessage *);
  18. void CatInit(void);
  19. void CatDisableGads(BOOL);
  20. void CatDisableBGads(BOOL);
  21.  
  22. struct List tempcats;
  23. struct List tempgroups;
  24. BOOL catretval;
  25. ExtErrorData CatExtData;
  26. GUIFront *catGUI;
  27. UWORD    catlistActive;
  28. UWORD    grouplistActive;
  29. struct Window *catWin;
  30. BOOL updatecats = FALSE;
  31.  
  32. /* quick configure of some gadgets */
  33. extern struct TagItem catList[], budgetList[];
  34.  
  35. /* define gadgetspec */
  36. GadgetSpec CPgadgetspecs[] = 
  37. {
  38.     {LISTVIEW_KIND,25,8, {0,0,0,0,NULL,NULL,GID_CPCATLIST,
  39.         PLACETEXT_ABOVE},catList,GS_DefaultTags},
  40.  
  41.         {BUTTON_KIND,0,0,{0,0,0,0,"_New", NULL, GID_CPNEW,         
  42.                 PLACETEXT_IN}, NULL, GS_DefaultTags},
  43.  
  44.         {BUTTON_KIND,0,0,{0,0,0,0,"_Remove", NULL, GID_CPDEL,         
  45.                 PLACETEXT_IN}, NULL, GS_DefaultTags},
  46.  
  47.         {STRING_KIND,20,0,{0,0,0,0,NULL, NULL, GID_CPEDIT,         
  48.                 PLACETEXT_IN}, NULL, GS_DefaultTags},
  49.  
  50.         {BUTTON_KIND,0,0,{0,0,0,0,"_Up", NULL, GID_CPUP,         
  51.                 PLACETEXT_IN}, NULL, GS_DefaultTags},
  52.  
  53.         {BUTTON_KIND,0,0,{0,0,0,0,"_Down", NULL, GID_CPDOWN,         
  54.                 PLACETEXT_IN}, NULL, GS_DefaultTags},
  55.  
  56.         {BUTTON_KIND,0,0,{0,0,0,0,"_Top", NULL, GID_CPTOP,         
  57.                 PLACETEXT_IN}, NULL, GS_DefaultTags},
  58.  
  59.         {BUTTON_KIND,0,0,{0,0,0,0,"_Bottom", NULL, GID_CPBOTTOM,         
  60.                 PLACETEXT_IN}, NULL, GS_DefaultTags},
  61.  
  62.         {BUTTON_KIND,0,0,{0,0,0,0,"_OK", NULL, GID_CPOK,         
  63.                 PLACETEXT_IN}, NULL, GS_DefaultTags},
  64.  
  65.         {BUTTON_KIND,0,0,{0,0,0,0,"_Cancel", NULL, GID_CPCANCEL,        
  66.                 PLACETEXT_IN}, NULL, GS_DefaultTags},
  67.  
  68.     {LISTVIEW_KIND,25,8, {0,0,0,0,NULL,NULL,GID_CPBUDGETLIST,
  69.         PLACETEXT_ABOVE},budgetList,GS_DefaultTags},
  70.  
  71.         {BUTTON_KIND,0,0,{0,0,0,0,"New", NULL, GID_CPBNEW,         
  72.                 PLACETEXT_IN}, NULL, GS_DefaultTags},
  73.  
  74.         {BUTTON_KIND,0,0,{0,0,0,0,"Remove", NULL, GID_CPBDEL,         
  75.                 PLACETEXT_IN}, NULL, GS_DefaultTags},
  76.  
  77.         {STRING_KIND,20,0,{0,0,0,0,NULL, NULL, GID_CPBEDIT,         
  78.                 PLACETEXT_IN}, NULL, GS_DefaultTags},
  79.  
  80.         {BUTTON_KIND,0,0,{0,0,0,0,"Up", NULL, GID_CPBUP,         
  81.                 PLACETEXT_IN}, NULL, GS_DefaultTags},
  82.  
  83.         {BUTTON_KIND,0,0,{0,0,0,0,"Down", NULL, GID_CPBDOWN,         
  84.                 PLACETEXT_IN}, NULL, GS_DefaultTags},
  85.  
  86.         {BUTTON_KIND,0,0,{0,0,0,0,"Top", NULL, GID_CPBTOP,         
  87.                 PLACETEXT_IN}, NULL, GS_DefaultTags},
  88.  
  89.         {BUTTON_KIND,0,0,{0,0,0,0,"Bottom", NULL, GID_CPBBOTTOM,         
  90.                 PLACETEXT_IN}, NULL, GS_DefaultTags},
  91.  
  92.         {BUTTON_KIND,0,0,{0,0,0,0,"Edit", NULL, GID_CPBBUILD,         
  93.                 PLACETEXT_IN}, NULL, GS_DefaultTags},
  94. };
  95.  
  96. struct TagItem catList[] =
  97. {
  98.         {GTLV_ShowSelected, &CPgadgetspecs[GID_CPEDIT]},
  99.         {TAG_DONE},
  100. };
  101.  
  102. struct TagItem budgetList[] =
  103. {
  104.         {GTLV_ShowSelected, &CPgadgetspecs[GID_CPBEDIT]},
  105.         {TAG_DONE},
  106. };
  107.  
  108. /* set up array of pointers to our specs */
  109. GadgetSpec *CP_CatSpecs[] =
  110. {
  111.         &CPgadgetspecs[0],
  112.         &CPgadgetspecs[1],
  113.         &CPgadgetspecs[2],
  114.         &CPgadgetspecs[3],
  115.         &CPgadgetspecs[4],
  116.         &CPgadgetspecs[5],
  117.         &CPgadgetspecs[6],
  118.         &CPgadgetspecs[7],
  119.         &CPgadgetspecs[8],
  120.         &CPgadgetspecs[9],
  121.         &CPgadgetspecs[10],
  122.         &CPgadgetspecs[11],
  123.         &CPgadgetspecs[12],
  124.         &CPgadgetspecs[13],
  125.         &CPgadgetspecs[14],
  126.         &CPgadgetspecs[15],
  127.         &CPgadgetspecs[16],
  128.         &CPgadgetspecs[17],
  129.         &CPgadgetspecs[18],
  130.  
  131.         NULL,
  132. };
  133.  
  134.  
  135. /* define the layout of this panel */
  136. ULONG CP_CatPanel[] =
  137. {
  138.    GUIL_Flags, GUILF_PropShare | GUILF_EqualWidth,
  139.  
  140.    GUIL_HorizGroup, 1,
  141.         GUIL_Flags, GUILF_PropShare,
  142.     GUIL_FrameType, GUILFT_Recess,
  143.        
  144. GUIL_HorizGroup,1, 
  145.     GUIL_VertGroup, 1,
  146.  
  147.         GUIL_HorizGroup,1,
  148.             GUIL_FrameType, GUILFT_Ridge,
  149.             GUIL_FrameHeadline, "Categories",
  150.             GUIL_GadgetSpecID, GID_CPCATLIST,
  151.  
  152.                     GUIL_VertGroup,1,
  153.                             GUIL_Flags, GUILF_PropShare | GUILF_EqualWidth | GUILF_EqualHeight,
  154.                                               
  155.                 GUIL_GadgetSpecID, GID_CPUP,
  156.                 GUIL_GadgetSpecID, GID_CPDOWN,
  157.                 GUIL_GadgetSpecID, GID_CPTOP,
  158.                 GUIL_GadgetSpecID, GID_CPBOTTOM,
  159.                     TAG_DONE,
  160.  
  161.         TAG_DONE,
  162.     
  163.         GUIL_HorizGroup,1,
  164.             GUIL_FrameType, GUILFT_Ridge,
  165.             GUIL_Flags, GUILF_EqualSize | GUILF_EqualWidth,
  166.             GUIL_GadgetSpecID, GID_CPDEL,
  167.             GUIL_GadgetSpecID, GID_CPNEW,
  168.         TAG_DONE,
  169.  
  170.     TAG_DONE,
  171.  
  172.     GUIL_VertGroup, 1,
  173.  
  174.         GUIL_HorizGroup,1,
  175.             GUIL_FrameType, GUILFT_Ridge,
  176.             GUIL_FrameHeadline, "Budget Groups",
  177.             GUIL_GadgetSpecID, GID_CPBUDGETLIST,
  178.  
  179.                     GUIL_VertGroup,1,
  180.                             GUIL_Flags, GUILF_PropShare | GUILF_EqualWidth | GUILF_EqualHeight,
  181.                                               
  182.                 GUIL_GadgetSpecID, GID_CPBUP,
  183.                 GUIL_GadgetSpecID, GID_CPBDOWN,
  184.                 GUIL_GadgetSpecID, GID_CPBTOP,
  185.                 GUIL_GadgetSpecID, GID_CPBBOTTOM,
  186.                     TAG_DONE,
  187.  
  188.         TAG_DONE,
  189.     
  190.         GUIL_HorizGroup,1,
  191.             GUIL_FrameType, GUILFT_Ridge,
  192.             GUIL_Flags, GUILF_EqualSize | GUILF_EqualWidth,
  193.             GUIL_GadgetSpecID, GID_CPBDEL,
  194.             GUIL_GadgetSpecID, GID_CPBBUILD,
  195.             GUIL_GadgetSpecID, GID_CPBNEW,
  196.         TAG_DONE,
  197.  
  198.     TAG_DONE,
  199.  
  200. TAG_DONE,        
  201.     TAG_DONE,
  202.     
  203.     GUIL_HorizGroup,1,
  204.         GUIL_Flags, GUILF_EqualSize | GUILF_EqualWidth,
  205.         
  206.            GUIL_GadgetSpecID, GID_CPOK,
  207.            GUIL_GadgetSpecID, GID_CPCANCEL,
  208.            
  209.     TAG_DONE,   
  210.            
  211. TAG_DONE,
  212. };
  213.  
  214.  
  215. /****************************************************
  216. * CatGUI ()
  217. *
  218. *    Creates the GUI for the edit temp panel.
  219. *****************************************************/
  220. BOOL CatGUI(void)
  221. {
  222.  BOOL done = FALSE;
  223.  BOOL noreply;
  224.  UWORD ordinal;
  225.  ULONG signal;
  226.      
  227.    AmiLock();
  228.  
  229.    /* install temporary list */
  230.    NewList(&tempcats);
  231.    NewList(&tempgroups);
  232.    DataCopyGroupList(&grouplist, &tempgroups);
  233.    DataCopyCatList(&tempcats,&categories);
  234.  
  235.    updatecats = FALSE;
  236.  
  237.         GF_SetGUIAttr(catGUI, GUI_OpenGUI, TRUE, TAG_DONE);
  238.          /* grab window */
  239.          GF_GetGUIAttr(catGUI,GUI_Window,&catWin,TAG_DONE);
  240.         CatInit();
  241.  
  242.  
  243.                 /* Process input events */
  244.                 while (!done)
  245.                 {
  246.                     struct IntuiMessage *imsg;
  247.  
  248.                     /* Wait for an event to occur */
  249.  
  250.                     signal = GF_Wait(guiapp,AmigaGuideSignal(agc));
  251.             if (signal & AmigaGuideSignal(agc)) {
  252.             AmiHelpMsg();
  253.             continue;
  254.             }
  255.  
  256.                     /* We only bother to listen for CLOSEWINDOW events.
  257.                      * Of course, in a real application, you would be
  258.                      * examining the Class field for IDCMP_GADGETUP
  259.                      * messages and act accordingly.
  260.                      */
  261.  
  262.                     while (imsg = GF_GetIMsg(guiapp))
  263.                     {
  264.             noreply = TRUE;
  265.                         switch (imsg->Class) {
  266.                 case IDCMP_REFRESHWINDOW:
  267.                     RegRefresh(TRUE);
  268.                     break;
  269.  
  270.                                 case IDCMP_CLOSEWINDOW:
  271.                     DataFreeList(&tempcats);
  272.                     DataFreeGroupCats(&tempgroups);
  273.                     DataFreeList(&tempgroups);
  274.                     NewList(&tempcats);
  275.                     NewList(&tempgroups);
  276.                                         done = TRUE;
  277.                                         break;
  278.  
  279.                 case IDCMP_RAWKEY:
  280.                     if (GF_ProcessListView(catGUI,CP_CatSpecs[GID_CPCATLIST],
  281.                         imsg,&ordinal)) {
  282.                             catlistActive = ordinal;
  283.                             if (catlistActive >= DEFAULT_CATS)
  284.                                 CatDisableGads(FALSE);
  285.                             else if (catlistActive < DEFAULT_TEMPS)
  286.                                 CatDisableGads(TRUE);        
  287.                     }
  288.                     else AmiHelpKey(imsg,CAT_PANEL);
  289.                     break;
  290.  
  291.                 case IDCMP_GADGETUP:
  292.                     noreply = FALSE;
  293.                     done=CatHandleGadget(imsg);
  294.                     break;
  295.                         }
  296.                                      
  297.                               
  298.                         if (noreply) GF_ReplyIMsg(imsg);
  299.                     }
  300.                 }
  301.  
  302.    
  303.    GF_SetGadgetAttrs(catGUI,CPgadgetspecs[GID_CPCATLIST].gs_Gadget,
  304.             GTLV_Labels, ~0,
  305.             TAG_DONE);
  306.  
  307.    GF_SetGadgetAttrs(catGUI,CPgadgetspecs[GID_CPBUDGETLIST].gs_Gadget,
  308.             GTLV_Labels, ~0,
  309.             TAG_DONE);
  310.  
  311.    GF_SetGUIAttr(catGUI, GUI_OpenGUI, FALSE, TAG_DONE);
  312.    if (updatecats == TRUE) {
  313.          DataCopyGroupList(&tempgroups, &grouplist);
  314.          DataMoveCatList(&tempcats);
  315.          NewList(&tempcats);
  316.          NewList(&tempgroups);
  317.    }
  318.  
  319.   AmiUnlock();
  320.   return (catretval);
  321. }
  322.  
  323. /***************************************************
  324. * CatHandleGadget()
  325. *
  326. *    Handles gadget events for this panel
  327. ****************************************************/
  328. BOOL  CatHandleGadget(struct IntuiMessage *imsg)
  329. {
  330.  BOOL done = FALSE;
  331.  struct Gadget *gad = (struct Gadget *)(imsg->IAddress);
  332.  UWORD tempOrd,code = imsg->Code;
  333.  categoryNode tempcat;
  334.  groupNode tempgroup, *groupPtr;
  335.  editCatNode *temp;
  336.  
  337.  switch (gad->GadgetID) {
  338.     
  339.     case GID_CPCATLIST:
  340.         catlistActive = code;
  341.         if (catlistActive >= DEFAULT_CATS) 
  342.             CatDisableGads(FALSE);
  343.         else    CatDisableGads(TRUE);
  344.         break;
  345.  
  346.     case GID_CPEDIT:
  347.         if (catlistActive >= DEFAULT_CATS) {
  348.           if (DataIsUnique(catGUI, &tempcats,((struct StringInfo*)gad->SpecialInfo)->Buffer,
  349.             TRUE,"Category name is not unique or invalid") ) {
  350.  
  351.             /* detach and modify this */
  352.             temp = (editCatNode*)DataOrd2Node(&tempcats,catlistActive);
  353.             GF_SetGadgetAttrs(catGUI,CPgadgetspecs[GID_CPCATLIST].gs_Gadget,
  354.                 GTLV_Labels, ~0,
  355.                 TAG_DONE);
  356.             
  357.             strcpy(temp->new.catname, ((struct StringInfo*)gad->SpecialInfo)->Buffer);
  358.  
  359.             /* now modify our group list */
  360.             DataReplaceGroupCats(&tempgroups, &tempcats);
  361.  
  362.             GF_SetGadgetAttrs(catGUI,CPgadgetspecs[GID_CPCATLIST].gs_Gadget,
  363.                 GTLV_Labels, &tempcats,
  364.                 TAG_DONE);    
  365.           }
  366.           else {
  367.             GF_ReplyIMsg(imsg);
  368.             DataSitNSpin(CP_CatSpecs[GID_CPEDIT]->gs_Gadget,catWin);
  369.             return (done);
  370.           }
  371.         }
  372.         break;
  373.  
  374.     case GID_CPNEW:
  375.         strcpy(tempcat.catname,"NEW:RENAME ME");
  376.         if (DataIsUnique(catGUI, &tempcats,tempcat.catname,TRUE,"You must rename the previous entry first")){
  377.             /* detach and modify list */
  378.             GF_SetGadgetAttrs(catGUI,CPgadgetspecs[GID_CPCATLIST].gs_Gadget,
  379.                 GTLV_Labels, ~0,
  380.                 TAG_DONE);
  381.             
  382.             temp=DataNewEditCat(&tempcats,&tempcat);
  383.             catlistActive = DataNode2Ord(&tempcats,temp->new.catname);
  384.                     
  385.             GF_SetGadgetAttrs(catGUI,CPgadgetspecs[GID_CPCATLIST].gs_Gadget,
  386.                 GTLV_Labels, &tempcats,
  387.                 GTLV_Selected, catlistActive,
  388.                 GTLV_MakeVisible, catlistActive,
  389.                 TAG_DONE);    
  390.  
  391.             CatDisableGads(FALSE);
  392.         }
  393.         break;
  394.  
  395.     case GID_CPDEL:
  396.         DataListRemove(catGUI, CPgadgetspecs[GID_CPCATLIST].gs_Gadget,
  397.             &tempcats, &catlistActive);
  398.  
  399.         /* now modify our group list */
  400.         DataReplaceGroupCats(&tempgroups, &tempcats);
  401.  
  402.         if (catlistActive < DEFAULT_CATS)
  403.             CatDisableGads(TRUE);        
  404.         break;
  405.  
  406.     case GID_CPUP:
  407.         if (catlistActive <= DEFAULT_CATS) break;
  408.     
  409.         DataListUp(catGUI,CPgadgetspecs[GID_CPCATLIST].gs_Gadget,    
  410.             &tempcats, &catlistActive);
  411.         break;
  412.  
  413.     case GID_CPDOWN:
  414.         DataListDown(catGUI,CPgadgetspecs[GID_CPCATLIST].gs_Gadget,    
  415.             &tempcats, &catlistActive);
  416.         break;
  417.  
  418.     case GID_CPTOP:
  419.         DataListTop(catGUI,CPgadgetspecs[GID_CPCATLIST].gs_Gadget,    
  420.             &tempcats, &catlistActive, DEFAULT_CATS);
  421.         break;
  422.  
  423.     case GID_CPBOTTOM:
  424.         DataListBottom(catGUI,CPgadgetspecs[GID_CPCATLIST].gs_Gadget,    
  425.             &tempcats, &catlistActive, DataCountNodes(&tempcats));
  426.         break;
  427.  
  428.     case GID_CPBUDGETLIST:
  429.         grouplistActive = code;
  430.         CatDisableBGads(FALSE);
  431.         break;
  432.  
  433.     case GID_CPBEDIT:
  434.         if (grouplistActive == ~0) 
  435.             break;
  436.  
  437.           if (DataIsUnique(catGUI, &tempgroups,((struct StringInfo*)gad->SpecialInfo)->Buffer,
  438.             TRUE,"Group name is not unique or invalid") ) {
  439.  
  440.             /* detach and modify this */
  441.             groupPtr = (groupNode*)DataOrd2Node(&tempgroups,grouplistActive);
  442.             GF_SetGadgetAttrs(catGUI,CPgadgetspecs[GID_CPBUDGETLIST].gs_Gadget,
  443.                 GTLV_Labels, ~0,
  444.                 TAG_DONE);
  445.             
  446.             strcpy(groupPtr->groupname, ((struct StringInfo*)gad->SpecialInfo)->Buffer);
  447.             GF_SetGadgetAttrs(catGUI,CPgadgetspecs[GID_CPBUDGETLIST].gs_Gadget,
  448.                 GTLV_Labels, &tempgroups,
  449.                 TAG_DONE);    
  450.           }
  451.           else {
  452.             GF_ReplyIMsg(imsg);
  453.             DataSitNSpin(CP_CatSpecs[GID_CPBEDIT]->gs_Gadget,catWin);
  454.             return (done);
  455.           }
  456.         break;
  457.  
  458.     case GID_CPBNEW:
  459.         strcpy(tempgroup.groupname,"NEW:RENAME ME");
  460.         if (DataIsUnique(catGUI, &tempgroups,tempgroup.groupname,TRUE,"You must rename the previous entry first")){
  461.             /* detach and modify list */
  462.             GF_SetGadgetAttrs(catGUI,CPgadgetspecs[GID_CPBUDGETLIST].gs_Gadget,
  463.                 GTLV_Labels, ~0,
  464.                 TAG_DONE);
  465.             
  466.             groupPtr=DataNewGroup(&tempgroups,&tempgroup);
  467.  
  468.             grouplistActive = DataNode2Ord(&tempgroups,groupPtr->groupname);
  469.                     
  470.             GF_SetGadgetAttrs(catGUI,CPgadgetspecs[GID_CPBUDGETLIST].gs_Gadget,
  471.                 GTLV_Labels, &tempgroups,
  472.                 GTLV_Selected, grouplistActive,
  473.                 GTLV_MakeVisible, grouplistActive,
  474.                 TAG_DONE);    
  475.  
  476.             CatDisableBGads(FALSE);
  477.         }
  478.         break;
  479.  
  480.     case GID_CPBDEL:
  481.         /* first strip away group categories */
  482.         groupPtr = (groupNode *)DataOrd2Node(&tempgroups,grouplistActive);
  483.         DataFreeGroupCats(&groupPtr->catlist);
  484.  
  485.         /* now free up this node */
  486.         DataListRemove(catGUI, CPgadgetspecs[GID_CPBUDGETLIST].gs_Gadget,
  487.             &tempgroups, &grouplistActive);
  488.         if (grouplistActive < 0)
  489.             CatDisableBGads(TRUE);        
  490.         break;
  491.  
  492.     case GID_CPBUP:
  493.         DataListUp(catGUI,CPgadgetspecs[GID_CPBUDGETLIST].gs_Gadget,    
  494.             &tempgroups, &grouplistActive);
  495.         break;
  496.  
  497.     case GID_CPBDOWN:
  498.         DataListDown(catGUI,CPgadgetspecs[GID_CPBUDGETLIST].gs_Gadget,    
  499.             &tempgroups, &grouplistActive);
  500.         break;
  501.  
  502.     case GID_CPBTOP:
  503.         DataListTop(catGUI,CPgadgetspecs[GID_CPBUDGETLIST].gs_Gadget,    
  504.             &tempgroups, &grouplistActive, 0);
  505.         break;
  506.  
  507.     case GID_CPBBOTTOM:
  508.         DataListBottom(catGUI,CPgadgetspecs[GID_CPBUDGETLIST].gs_Gadget,    
  509.             &tempgroups, &grouplistActive, DataCountNodes(&tempgroups));
  510.         break;
  511.  
  512.     case GID_CPBBUILD:
  513.         /* lock this window */
  514.          GF_LockGUI(catGUI);
  515.  
  516.         groupPtr = (groupNode *)DataOrd2Node(&tempgroups,grouplistActive);
  517.         GroupGUI(&tempcats,&groupPtr->catlist);
  518.  
  519.         /* unlock this window */
  520.         GF_UnlockGUI(catGUI);
  521.         break;
  522.  
  523.     case GID_CPCANCEL:
  524.         DataFreeList(&tempcats);
  525.         DataFreeGroupCats(&tempgroups);
  526.         DataFreeList(&tempgroups);
  527.         NewList(&tempcats);
  528.         NewList(&tempgroups);
  529.         done = TRUE;
  530.         break;
  531.  
  532.     case GID_CPOK:
  533.         amiChangedItems = TRUE;
  534.         updatecats = done = TRUE;    
  535.         break;
  536.  }
  537.  
  538.  GF_ReplyIMsg(imsg);
  539.  return (done);
  540. }
  541.  
  542. /****************************************************
  543. * CatInit()
  544. *
  545. *    Set up some globals
  546. *****************************************************/
  547. void CatInit(void)
  548. {
  549.     catretval = FALSE;
  550.     catlistActive = ~0;
  551.     grouplistActive = ~0;    
  552.  
  553.  /* grab window */
  554.  GF_GetGUIAttr(catGUI,GUI_Window,&catWin,TAG_DONE);
  555.  GF_SetGadgetAttrs(catGUI,CPgadgetspecs[GID_CPCATLIST].gs_Gadget,
  556.             GTLV_Labels, &tempcats,
  557.             GTLV_Selected,~0,
  558.             TAG_DONE);
  559.  
  560.  GF_SetGadgetAttrs(catGUI,CPgadgetspecs[GID_CPBUDGETLIST].gs_Gadget,
  561.             GTLV_Labels, &tempgroups,
  562.             GTLV_Selected,~0,
  563.             TAG_DONE);
  564.  
  565.  CatDisableGads(TRUE);
  566.  CatDisableBGads(TRUE);
  567. }
  568.  
  569. /****************************************************
  570. * CatDisableGads()
  571. *
  572. *    Disable/Enable extra gadgets
  573. *****************************************************/
  574. void CatDisableGads(BOOL dis)
  575. {
  576.  GF_SetGadgetAttrs(catGUI,CPgadgetspecs[GID_CPDEL].gs_Gadget,
  577.     GA_Disabled, dis,
  578.     TAG_DONE);
  579.  
  580.  GF_SetGadgetAttrs(catGUI,CPgadgetspecs[GID_CPUP].gs_Gadget,
  581.     GA_Disabled, dis,
  582.     TAG_DONE);
  583.  
  584.  GF_SetGadgetAttrs(catGUI,CPgadgetspecs[GID_CPDOWN].gs_Gadget,
  585.     GA_Disabled, dis,
  586.     TAG_DONE);
  587.  
  588.  GF_SetGadgetAttrs(catGUI,CPgadgetspecs[GID_CPTOP].gs_Gadget,
  589.     GA_Disabled, dis,
  590.     TAG_DONE);
  591.  
  592.  GF_SetGadgetAttrs(catGUI,CPgadgetspecs[GID_CPBOTTOM].gs_Gadget,
  593.     GA_Disabled, dis,
  594.     TAG_DONE);
  595. }
  596.  
  597. /****************************************************
  598. * CatDisableBGads()
  599. *
  600. *    Disable/Enable extra gadgets
  601. *****************************************************/
  602. void CatDisableBGads(BOOL dis)
  603. {
  604.  GF_SetGadgetAttrs(catGUI,CPgadgetspecs[GID_CPBDEL].gs_Gadget,
  605.     GA_Disabled, dis,
  606.     TAG_DONE);
  607.  
  608.  GF_SetGadgetAttrs(catGUI,CPgadgetspecs[GID_CPBUP].gs_Gadget,
  609.     GA_Disabled, dis,
  610.     TAG_DONE);
  611.  
  612.  GF_SetGadgetAttrs(catGUI,CPgadgetspecs[GID_CPBDOWN].gs_Gadget,
  613.     GA_Disabled, dis,
  614.     TAG_DONE);
  615.  
  616.  GF_SetGadgetAttrs(catGUI,CPgadgetspecs[GID_CPBTOP].gs_Gadget,
  617.     GA_Disabled, dis,
  618.     TAG_DONE);
  619.  
  620.  GF_SetGadgetAttrs(catGUI,CPgadgetspecs[GID_CPBBOTTOM].gs_Gadget,
  621.     GA_Disabled, dis,
  622.     TAG_DONE);
  623.  
  624.  GF_SetGadgetAttrs(catGUI,CPgadgetspecs[GID_CPBBUILD].gs_Gadget,
  625.     GA_Disabled, dis,
  626.     TAG_DONE);
  627.  
  628. }
  629.