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

  1. /* edittempPanel.c 
  2.  *
  3.  *  defines the GUIFront characteristics of the edit template panel 
  4.  */
  5.   
  6. #include <stdio.h>  
  7. #include <intuition/gadgetclass.h>
  8. #include "amiCheck.h"
  9. #include "regGadget.h"
  10. #include "edittempPanel.h"
  11. #include "dataBase.h"
  12. #include "newTempPanel.h"
  13. #include "seltempPanel.h"
  14. #include <string.h>
  15.  
  16.  
  17. /* prototypes */
  18. BOOL EditHandleGadget(struct IntuiMessage*);
  19. void EditEnableGads(void);
  20. void EditDisableGads(void);
  21. void EditTempInit(void);
  22.  
  23. ExtErrorData EditExtData;
  24. GUIFront *edittempGUI;
  25. UWORD    listActive;
  26. WORD currSelOrd;
  27. BOOL    noItem;
  28.  
  29. /* define gadgetspec */
  30. GadgetSpec TPgadgetspecs[] = 
  31. {
  32.     {LISTVIEW_KIND,20,8, {0,0,0,0,NULL,NULL,GID_TPTEMPLIST,
  33.         PLACETEXT_ABOVE},ListView,GS_DefaultTags},
  34.  
  35.         {BUTTON_KIND,0,0,{0,0,0,0,"_New", NULL, GID_TPNEW,         
  36.                 PLACETEXT_IN}, NULL, GS_DefaultTags},
  37.  
  38.         {BUTTON_KIND,0,0,{0,0,0,0,"_Remove", NULL, GID_TPDEL,         
  39.                 PLACETEXT_IN}, NULL, GS_DefaultTags},
  40.  
  41.         {BUTTON_KIND,0,0,{0,0,0,0,"_Edit", NULL, GID_TPEDIT,         
  42.                 PLACETEXT_IN}, NULL, GS_DefaultTags},
  43.  
  44.         {BUTTON_KIND,0,0,{0,0,0,0,"_Up", NULL, GID_TPUP,         
  45.                 PLACETEXT_IN}, NULL, GS_DefaultTags},
  46.  
  47.         {BUTTON_KIND,0,0,{0,0,0,0,"_Down", NULL, GID_TPDOWN,         
  48.                 PLACETEXT_IN}, NULL, GS_DefaultTags},
  49.  
  50.         {BUTTON_KIND,0,0,{0,0,0,0,"_Top", NULL, GID_TPTOP,         
  51.                 PLACETEXT_IN}, NULL, GS_DefaultTags},
  52.  
  53.         {BUTTON_KIND,0,0,{0,0,0,0,"_Bottom", NULL, GID_TPBOTTOM,         
  54.                 PLACETEXT_IN}, NULL, GS_DefaultTags},
  55.  
  56.         {BUTTON_KIND,0,0,{0,0,0,0,"_OK", NULL, GID_TPOK,         
  57.                 PLACETEXT_IN}, NULL, GS_DefaultTags},
  58.  
  59.         {BUTTON_KIND,0,0,{0,0,0,0,"_Cancel", NULL, GID_TPCANCEL,        
  60.                 PLACETEXT_IN}, NULL, GS_DefaultTags},
  61.  
  62. };
  63.  
  64. /* set up array of pointers to our specs */
  65. GadgetSpec *TP_EditTempSpecs[] =
  66. {
  67.         &TPgadgetspecs[0],
  68.         &TPgadgetspecs[1],
  69.         &TPgadgetspecs[2],
  70.         &TPgadgetspecs[3],
  71.         &TPgadgetspecs[4],
  72.         &TPgadgetspecs[5],
  73.         &TPgadgetspecs[6],
  74.         &TPgadgetspecs[7],
  75.         &TPgadgetspecs[8],
  76.         &TPgadgetspecs[9],
  77.         NULL,
  78. };
  79.  
  80.  
  81. /* define the layout of this panel */
  82. ULONG TP_EditTempPanel[] =
  83. {
  84.    GUIL_Flags, GUILF_PropShare | GUILF_EqualWidth,
  85.  
  86.    GUIL_HorizGroup, 1,
  87.         GUIL_Flags, GUILF_PropShare,
  88.     GUIL_FrameType, GUILFT_Recess,
  89.         
  90.     GUIL_VertGroup, 1,
  91.  
  92.         GUIL_HorizGroup,1,
  93.             GUIL_FrameType, GUILFT_Ridge,
  94.             GUIL_FrameHeadline, "Current Templates",
  95.             GUIL_GadgetSpecID, GID_TPTEMPLIST,
  96.  
  97.                     GUIL_VertGroup,1,
  98.                             GUIL_Flags, GUILF_PropShare | GUILF_EqualWidth | GUILF_EqualHeight,
  99.                                               
  100.                 GUIL_GadgetSpecID, GID_TPUP,
  101.                 GUIL_GadgetSpecID, GID_TPDOWN,
  102.                 GUIL_GadgetSpecID, GID_TPTOP,
  103.                 GUIL_GadgetSpecID, GID_TPBOTTOM,
  104.                                            
  105.                     TAG_DONE,
  106.  
  107.         TAG_DONE,
  108.  
  109.         GUIL_HorizGroup,1,
  110.             GUIL_FrameType, GUILFT_Ridge,
  111.             GUIL_Flags, GUILF_EqualSize | GUILF_EqualWidth,
  112.             GUIL_GadgetSpecID, GID_TPEDIT,
  113.             GUIL_GadgetSpecID, GID_TPDEL,
  114.             GUIL_GadgetSpecID, GID_TPNEW,
  115.         TAG_DONE,
  116.  
  117.     TAG_DONE,
  118.         
  119.     TAG_DONE,
  120.     
  121.     GUIL_HorizGroup,1,
  122.         GUIL_Flags, GUILF_EqualSize | GUILF_EqualWidth,
  123.         
  124.            GUIL_GadgetSpecID, GID_TPOK,
  125.            GUIL_GadgetSpecID, GID_TPCANCEL,
  126.            
  127.     TAG_DONE,   
  128.            
  129. TAG_DONE,
  130. };
  131.  
  132.  
  133. /****************************************************
  134. * EditTempGUI ()
  135. *
  136. *    Creates the GUI for the edit temp panel.
  137. *****************************************************/
  138. void EditTempGUI(void)
  139. {
  140.  BOOL done = FALSE;
  141.  UWORD ordinal;
  142.  ULONG signal;
  143.      
  144.    AmiLock();
  145.  
  146.    /* install temporary list */
  147.    NewList(&testtemps);
  148.    DataCopyList(&templates,&testtemps, DataAddTemp);
  149.  
  150.    GF_SetGUIAttr(edittempGUI,GUI_OpenGUI, TRUE, TAG_DONE);
  151.    EditTempInit();
  152.         
  153.    /* Process input events */
  154.    while (!done)  {
  155.        struct IntuiMessage *imsg;
  156.  
  157.         /* Wait for an event to occur */
  158.  
  159.         signal = GF_Wait(guiapp,AmigaGuideSignal(agc));
  160.     
  161.     if (signal & AmigaGuideSignal(agc)) {
  162.         AmiHelpMsg();
  163.         continue;
  164.     }
  165.  
  166.  
  167.                     /* We only bother to listen for CLOSEWINDOW events.
  168.                      * Of course, in a real application, you would be
  169.                      * examining the Class field for IDCMP_GADGETUP
  170.                      * messages and act accordingly.
  171.                      */
  172.  
  173.         while (imsg = GF_GetIMsg(guiapp))      {
  174.               switch (imsg->Class) {
  175.                 case IDCMP_REFRESHWINDOW:
  176.                     RegRefresh(TRUE);
  177.                     break;
  178.  
  179.                         case IDCMP_CLOSEWINDOW:
  180.                     DataFreeList(&testtemps);
  181.                     NewList(&testtemps);
  182.                                         done = TRUE;
  183.                                         break;
  184.  
  185.                 case IDCMP_RAWKEY:
  186.                     if (GF_ProcessListView(edittempGUI,TP_EditTempSpecs[GID_TPTEMPLIST],
  187.                         imsg,&ordinal)) {
  188.                             currSelOrd = listActive = ordinal;
  189.                             if (listActive >= DEFAULT_TEMPS && noItem==TRUE)
  190.                                 EditEnableGads();
  191.                             else if (listActive < DEFAULT_TEMPS)
  192.                                 EditDisableGads();
  193.                                                     
  194.                     }
  195.                     else AmiHelpKey(imsg,EDITTEMP_PANEL);
  196.                     break;
  197.  
  198.                 case IDCMP_GADGETUP:
  199.                     done=EditHandleGadget(imsg);
  200.                     break;
  201.                         }
  202.                                      
  203.                               
  204.                         GF_ReplyIMsg(imsg);
  205.                     }
  206.             }
  207.  
  208.    
  209.  
  210.      GF_SetGadgetAttrs(edittempGUI,TPgadgetspecs[GID_TPTEMPLIST].gs_Gadget,
  211.         GTLV_Labels, ~0,
  212.         TAG_DONE);
  213.     GF_SetGUIAttr(edittempGUI,GUI_OpenGUI, FALSE, TAG_DONE);
  214.     
  215.     AmiUnlock();
  216. }
  217.  
  218. /***************************************************
  219. * EditHandleGadget()
  220. *
  221. *    Handles gadget events for this panel
  222. ****************************************************/
  223. BOOL  EditHandleGadget(struct IntuiMessage *imsg)
  224. {
  225.  static ULONG micros = 0, secs = 0;
  226.  struct Gadget *gad = (struct Gadget *)(imsg->IAddress);
  227.  UWORD code = imsg->Code;
  228.  BOOL done = FALSE;
  229.  templateNode *curr, *copy;
  230.  
  231.  switch (gad->GadgetID) {
  232.     case GID_TPDEL:
  233.         if (listActive >= DEFAULT_TEMPS) {
  234.             DataListRemove(edittempGUI,TPgadgetspecs[GID_TPTEMPLIST].gs_Gadget,
  235.                 &testtemps, &listActive);
  236.             if (IsListEmpty(&testtemps))
  237.                 currSelOrd = -1;
  238.             else currSelOrd = listActive;
  239.             
  240.             if (listActive < DEFAULT_TEMPS)
  241.                 EditDisableGads();
  242.         }
  243.         break;
  244.  
  245.     case GID_TPUP:
  246.         if (listActive > DEFAULT_TEMPS) {
  247.             DataListUp(edittempGUI,TPgadgetspecs[GID_TPTEMPLIST].gs_Gadget,
  248.                 &testtemps, &listActive);
  249.             currSelOrd = listActive;
  250.         }
  251.         break;
  252.  
  253.     case GID_TPDOWN:
  254.         if (listActive >= DEFAULT_TEMPS) {
  255.             DataListDown(edittempGUI,TPgadgetspecs[GID_TPTEMPLIST].gs_Gadget,
  256.                 &testtemps, &listActive);
  257.             currSelOrd = listActive;
  258.         }    
  259.         break;
  260.  
  261.     case GID_TPBOTTOM:
  262.         if (listActive >= DEFAULT_TEMPS) {
  263.             DataListBottom(edittempGUI,TPgadgetspecs[GID_TPTEMPLIST].gs_Gadget,
  264.                 &testtemps, &listActive, DataCountNodes(&testtemps));
  265.             currSelOrd = listActive;
  266.         }
  267.         break;
  268.  
  269.     case GID_TPTOP:
  270.         if (listActive > DEFAULT_TEMPS) {
  271.             DataListTop(edittempGUI,TPgadgetspecs[GID_TPTEMPLIST].gs_Gadget,
  272.                 &testtemps, &listActive, DEFAULT_TEMPS);
  273.         }
  274.         break;
  275.         
  276.     case GID_TPTEMPLIST:
  277.         if (listActive == code && listActive >= DEFAULT_TEMPS) {
  278.             if (DoubleClick(secs,micros,imsg->Seconds,imsg->Micros))
  279.                 goto EDITLABEL;    
  280.         }
  281.  
  282.         listActive = code;
  283.         secs = imsg->Seconds;
  284.         micros = imsg->Micros;
  285.  
  286.         if ( listActive >= DEFAULT_TEMPS && noItem == TRUE)         
  287.             EditEnableGads();
  288.         else if (listActive < DEFAULT_TEMPS)    
  289.             EditDisableGads();
  290.         break;
  291.  
  292.     case GID_TPNEW:
  293.         curr = NewTempGUI(NULL,"Enter NEW Template");
  294.         if (curr != NULL) {
  295.             GF_SetGadgetAttrs(edittempGUI,TPgadgetspecs[GID_TPTEMPLIST].gs_Gadget,
  296.                 GTLV_Labels, ~0,
  297.                 TAG_DONE);
  298.  
  299.             DataAddTemp(&testtemps, curr);
  300.             listActive = DataNode2Ord(&testtemps,curr->tempname);
  301.  
  302.             GF_SetGadgetAttrs(edittempGUI,TPgadgetspecs[GID_TPTEMPLIST].gs_Gadget,
  303.                 GTLV_Labels, &testtemps,
  304.                 GTLV_Selected,listActive,
  305.                 GTLV_MakeVisible,listActive,
  306.                 TAG_DONE);
  307.  
  308.             if (noItem == TRUE)     
  309.                 EditEnableGads();
  310.  
  311.         }
  312.         break;
  313.  
  314.     case GID_TPEDIT:
  315.     EDITLABEL:
  316.         copy = (templateNode *)DataOrd2Node(&testtemps,(LONG)listActive);
  317.         curr = NewTempGUI(copy, "Edit Template");
  318.         if (curr != NULL) {
  319.             GF_SetGadgetAttrs(edittempGUI,TPgadgetspecs[GID_TPTEMPLIST].gs_Gadget,
  320.                 GTLV_Labels, ~0,
  321.                 TAG_DONE);
  322.  
  323.             memcpy(&(copy->template),&(curr->template),sizeof(entryNode));
  324.             memcpy(copy->tempname,curr->tempname,TEMPNAMESIZE);
  325.  
  326.             GF_SetGadgetAttrs(edittempGUI,TPgadgetspecs[GID_TPTEMPLIST].gs_Gadget,
  327.                 GTLV_Labels, &testtemps,
  328.                 GTLV_Selected, listActive,
  329.                 TAG_DONE);
  330.         }
  331.         break;
  332.  
  333.     case GID_TPCANCEL:
  334.         DataFreeList(&testtemps);
  335.         NewList(&testtemps);
  336.         done = TRUE;
  337.         break;
  338.  
  339.     case GID_TPOK:
  340.         amiChangedItems = TRUE;
  341.         if (selWin != NULL)
  342.             SelTempStrip();
  343.  
  344.         DataMoveList(&testtemps,&templates);
  345.  
  346.         if (selWin != NULL)
  347.             SelTempInstall();
  348.  
  349.         NewList(&testtemps);
  350.         done = TRUE;
  351.         if (currSelOrd != -1)
  352.             amntState.currTemplate = currSelOrd;
  353.             
  354.         break;
  355.  }
  356.  
  357.  return (done);
  358. }
  359.  
  360.  
  361. /*****************************************************
  362. * EditEnableGads()
  363. *
  364. *    Enable the gadgets if an item has been selected
  365. ******************************************************/
  366. void EditEnableGads(void)
  367. {
  368.  int x;
  369.  
  370.  if (noItem == FALSE)
  371.     return;
  372.  
  373.  for (x=GID_TPDEL;x<=GID_TPBOTTOM;x++)
  374.      GF_SetGadgetAttrs(edittempGUI,TP_EditTempSpecs[x]->gs_Gadget,
  375.         GA_Disabled,FALSE,
  376.         TAG_DONE);
  377.  
  378.  noItem = FALSE;
  379. }
  380.  
  381. /*****************************************************
  382. * EditDisableGads()
  383. *
  384. *    Disable the gadgets if an item is not selected
  385. ******************************************************/
  386. void EditDisableGads(void)
  387. {
  388.  int x;
  389.  
  390.  if (noItem == TRUE)
  391.     return;
  392.  
  393.  for (x=GID_TPDEL;x<=GID_TPBOTTOM;x++)
  394.      GF_SetGadgetAttrs(edittempGUI,TP_EditTempSpecs[x]->gs_Gadget,
  395.         GA_Disabled,TRUE,
  396.         TAG_DONE);
  397.  
  398.  noItem = TRUE;
  399. }
  400.  
  401. /****************************************************
  402. * EditTempInit()
  403. *
  404. *    Set up some globals
  405. *****************************************************/
  406. void EditTempInit(void)
  407. {
  408.     listActive = 0;
  409.     
  410.  
  411.     /* grab template ord info */
  412.     listActive = currSelOrd = amntState.currTemplate;
  413.  
  414.     /* make curr sel the active one for convenience */
  415.     GF_SetGadgetAttrs(edittempGUI,TPgadgetspecs[GID_TPTEMPLIST].gs_Gadget,
  416.         GTLV_Labels, &testtemps,
  417.         GTLV_Selected,listActive,
  418.         GTLV_MakeVisible,listActive,
  419.         TAG_DONE);
  420.     
  421.     if (listActive < DEFAULT_TEMPS) {
  422.         noItem = FALSE;
  423.         EditDisableGads();
  424.     }
  425.     else {
  426.         noItem = TRUE;
  427.         EditEnableGads();
  428.     }
  429. }
  430.