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

  1. /* sortPanel.c 
  2.  *
  3.  *  defines the GUIFront characteristics of the sort panel 
  4.  */
  5.   
  6. #include <stdio.h>  
  7. #include <intuition/gadgetclass.h>
  8. #include "amiCheck.h"
  9. #include "sortPanel.h"
  10. #include "dataBase.h"
  11. #include <string.h>
  12.  
  13.  
  14. /* prototypes */
  15. BOOL SortHandleGadget(struct IntuiMessage *);
  16. void SortInit(void);
  17. void SortInsert(UWORD);
  18. void SortRemove(UWORD);
  19. void SortDisableMoves(BOOL);
  20. BOOL sortretval;
  21.  
  22. ExtErrorData SortExtData;
  23. GUIFront *sortGUI;
  24. UWORD sortActive;
  25.  
  26. sortNode tempSorts[SORTENTRIES];
  27. sortState tempState;
  28. struct List tempSortList; 
  29.  
  30. /* quick configure of some gadgets */
  31.  
  32. STRPTR  sortLabels[] =
  33. {    
  34.     "Ascending",
  35.     "Descending",
  36.     NULL,
  37. };
  38.  
  39. struct TagItem orderTags[] =
  40. {
  41.     {GTCY_Labels,sortLabels},
  42.     {TAG_DONE},
  43. };
  44.  
  45. /* define gadgetspec */
  46. GadgetSpec SRPgadgetspecs[] = 
  47. {
  48.     {CHECKBOX_KIND,0,0, {0,0,0,0,"C_heck Number",NULL,GID_SRPCHECK,
  49.         PLACETEXT_RIGHT},NULL,GS_DefaultTags},
  50.  
  51.     {CHECKBOX_KIND,0,0, {0,0,0,0,"_Name Field",NULL,GID_SRPNAME,
  52.         PLACETEXT_RIGHT},NULL,GS_DefaultTags},
  53.  
  54.     {CHECKBOX_KIND,0,0, {0,0,0,0,"_Memo Field",NULL,GID_SRPMEMO,
  55.         PLACETEXT_RIGHT},NULL,GS_DefaultTags},
  56.  
  57.     {CHECKBOX_KIND,0,0, {0,0,0,0,"Transaction Dat_e",NULL,GID_SRPDATE,
  58.         PLACETEXT_RIGHT},NULL,GS_DefaultTags},
  59.  
  60.     {CHECKBOX_KIND,0,0, {0,0,0,0,"_Amount",NULL,GID_SRPAMNT,
  61.         PLACETEXT_RIGHT},NULL,GS_DefaultTags},
  62.  
  63.     {CHECKBOX_KIND,0,0, {0,0,0,0,"Cate_gory",NULL,GID_SRPCATEGORY,
  64.         PLACETEXT_RIGHT},NULL,GS_DefaultTags},
  65.  
  66.     {CYCLE_KIND,0,0,{0,0,0,0,"O_rder",NULL,GID_SRPORDER,
  67.         PLACETEXT_LEFT},orderTags,GS_DefaultTags},
  68.  
  69.     {LISTVIEW_KIND,20,8, {0,0,0,0,NULL,NULL,GID_SRPFIELDLIST,
  70.         PLACETEXT_ABOVE},ListView,GS_DefaultTags},
  71.  
  72.         {BUTTON_KIND,0,0,{0,0,0,0,"_Up", NULL, GID_SRPUP,         
  73.                 PLACETEXT_IN}, NULL, GS_DefaultTags},
  74.  
  75.         {BUTTON_KIND,0,0,{0,0,0,0,"_Down", NULL, GID_SRPDOWN,         
  76.                 PLACETEXT_IN}, NULL, GS_DefaultTags},
  77.  
  78.         {BUTTON_KIND,0,0,{0,0,0,0,"_Top", NULL, GID_SRPTOP,         
  79.                 PLACETEXT_IN}, NULL, GS_DefaultTags},
  80.  
  81.         {BUTTON_KIND,0,0,{0,0,0,0,"_Bottom", NULL, GID_SRPBOTTOM,         
  82.                 PLACETEXT_IN}, NULL, GS_DefaultTags},
  83.  
  84.         {BUTTON_KIND,0,0,{0,0,0,0,"_OK", NULL, GID_SRPOK,         
  85.                 PLACETEXT_IN}, NULL, GS_DefaultTags},
  86.  
  87.         {BUTTON_KIND,0,0,{0,0,0,0,"_Cancel", NULL, GID_SRPCANCEL,        
  88.                 PLACETEXT_IN}, NULL, GS_DefaultTags},
  89.  
  90. };
  91.  
  92. /* set up array of pointers to our specs */
  93. GadgetSpec *SRP_SortSpecs[] =
  94. {
  95.         &SRPgadgetspecs[0],
  96.         &SRPgadgetspecs[1],
  97.         &SRPgadgetspecs[2],
  98.         &SRPgadgetspecs[3],
  99.         &SRPgadgetspecs[4],
  100.         &SRPgadgetspecs[5],
  101.         &SRPgadgetspecs[6],
  102.         &SRPgadgetspecs[7],
  103.         &SRPgadgetspecs[8],
  104.         &SRPgadgetspecs[9],
  105.       &SRPgadgetspecs[10],
  106.       &SRPgadgetspecs[11],
  107.       &SRPgadgetspecs[12],
  108.     &SRPgadgetspecs[13],
  109.      NULL,
  110. };
  111.  
  112.  
  113. /* define the layout of this panel */
  114. ULONG SRP_SortPanel[] =
  115. {
  116.    GUIL_Flags, GUILF_PropShare | GUILF_EqualWidth,
  117.  
  118.    GUIL_HorizGroup, 1,
  119.         GUIL_Flags, GUILF_PropShare | GUILF_EqualHeight,
  120.     GUIL_FrameType, GUILFT_Recess,
  121.         
  122.     GUIL_VertGroup, 1,
  123.         GUIL_Flags, GUILF_LabelAlign,
  124.         GUIL_FrameType, GUILFT_Ridge,
  125.         GUIL_FrameHeadline, "Sort Criteria",
  126.  
  127.         GUIL_GadgetSpecID, GID_SRPCHECK,
  128.         GUIL_GadgetSpecID, GID_SRPDATE,
  129.         GUIL_GadgetSpecID, GID_SRPAMNT,
  130.         GUIL_GadgetSpecID, GID_SRPNAME,
  131.         GUIL_GadgetSpecID, GID_SRPMEMO,
  132.         GUIL_GadgetSpecID, GID_SRPCATEGORY,
  133.  
  134.     TAG_DONE,
  135.         
  136.     GUIL_VertGroup, 1,
  137.         GUIL_FrameType, GUILFT_Ridge,
  138.         GUIL_FrameHeadline, "Sort Priority",
  139.         
  140.         GUIL_HorizGroup, 1,
  141.             GUIL_GadgetSpecID, GID_SRPFIELDLIST,
  142.             
  143.             GUIL_VertGroup,1,
  144.                 GUIL_GadgetSpecID, GID_SRPUP,
  145.                 GUIL_GadgetSpecID, GID_SRPDOWN,
  146.                 GUIL_GadgetSpecID, GID_SRPTOP,
  147.                 GUIL_GadgetSpecID, GID_SRPBOTTOM,
  148.             TAG_DONE,
  149.         TAG_DONE,
  150.  
  151.         GUIL_GadgetSpecID, GID_SRPORDER,
  152.  
  153.     TAG_DONE,
  154.  
  155.     TAG_DONE,
  156.     
  157.     GUIL_HorizGroup,1,
  158.         GUIL_Flags, GUILF_EqualSize | GUILF_EqualWidth,
  159.         
  160.            GUIL_GadgetSpecID, GID_SRPOK,
  161.            GUIL_GadgetSpecID, GID_SRPCANCEL,
  162.            
  163.     TAG_DONE,   
  164.            
  165. TAG_DONE,
  166. };
  167.  
  168.  
  169. /****************************************************
  170. * SortGUI ()
  171. *
  172. *    Creates the GUI for the sort panel.
  173. *****************************************************/
  174. BOOL SortGUI(void)
  175. {
  176.  BOOL done = FALSE;
  177.  UWORD ordinal;
  178.  ULONG signal;
  179.      
  180.    AmiLock();
  181.  
  182.    NewList(&tempSortList); 
  183.    GF_SetGUIAttr(sortGUI,GUI_OpenGUI,TRUE,TAG_DONE);
  184.   
  185.         SortInit();
  186.         
  187.                 /* Process input events */
  188.                 while (!done)
  189.                 {
  190.                     struct IntuiMessage *imsg;
  191.  
  192.                     /* Wait for an event to occur */
  193.  
  194.                     signal = GF_Wait(guiapp,AmigaGuideSignal(agc));
  195.  
  196.              if (signal & AmigaGuideSignal(agc)) {
  197.             AmiHelpMsg();
  198.             continue;
  199.             }
  200.  
  201.                     /* We only bother to listen for CLOSEWINDOW events.
  202.                      * Of course, in a real application, you would be
  203.                      * examining the Class field for IDCMP_GADGETUP
  204.                      * messages and act accordingly.
  205.                      */
  206.  
  207.                     while (imsg = GF_GetIMsg(guiapp))
  208.                     {
  209.                         switch (imsg->Class) {
  210.                 case IDCMP_REFRESHWINDOW:
  211.                     RegRefresh(TRUE);
  212.                     break;
  213.  
  214.                                 case IDCMP_CLOSEWINDOW:
  215.                     done = TRUE;
  216.                                         break;
  217.  
  218.                 case IDCMP_RAWKEY:
  219.                     if (GF_ProcessListView(sortGUI,SRP_SortSpecs[GID_SRPFIELDLIST],
  220.                         imsg,&ordinal)) {
  221.                             sortActive = ordinal;            
  222.                             SortDisableMoves(FALSE);
  223.                     }
  224.                     else AmiHelpKey(imsg,SORT_PANEL);
  225.                     break;
  226.  
  227.                 case IDCMP_GADGETUP:
  228.                     done=SortHandleGadget(imsg);
  229.                     break;
  230.                         }
  231.                                      
  232.                               
  233.                         GF_ReplyIMsg(imsg);
  234.                     }
  235.                 }
  236.  
  237.    GF_SetGadgetAttrs(sortGUI,SRPgadgetspecs[GID_SRPFIELDLIST].gs_Gadget,
  238.                 GTLV_Labels, ~0,
  239.                 TAG_DONE);    
  240.  
  241.    GF_SetGUIAttr(sortGUI, GUI_OpenGUI, FALSE, TAG_DONE);         
  242.    AmiUnlock();
  243.  
  244.  return (sortretval);
  245. }
  246.  
  247. /***************************************************
  248. * SortHandleGadget()
  249. *
  250. *    Handles gadget events for this panel
  251. ****************************************************/
  252. BOOL  SortHandleGadget(struct IntuiMessage *imsg)
  253. {
  254.  UWORD x;
  255.  BOOL done = FALSE;
  256.  struct Gadget *gad =  (struct Gadget *)(imsg->IAddress);
  257.  UWORD code = imsg->Code;
  258.  sortNode *curr, *parent;
  259.  
  260.  switch (gad->GadgetID) {
  261.  
  262.     case GID_SRPCHECK:
  263.         tempState.check = code;
  264.         if (code) SortInsert(SORTCHECK);
  265.         else SortRemove(SORTCHECK);
  266.         break;
  267.  
  268.     case GID_SRPDATE:
  269.         tempState.date = code;
  270.         if (code) SortInsert(SORTDATE);
  271.         else SortRemove(SORTDATE);
  272.         break;
  273.  
  274.     case GID_SRPAMNT:
  275.         tempState.amnt = code;
  276.         if (code) SortInsert(SORTAMNT);
  277.         else SortRemove(SORTAMNT);
  278.         break;
  279.  
  280.     case GID_SRPNAME:
  281.         tempState.name = code;
  282.         if (code) SortInsert(SORTNAME);
  283.         else SortRemove(SORTNAME);
  284.         break;
  285.  
  286.     case GID_SRPMEMO:
  287.         tempState.memo = code;
  288.         if (code) SortInsert(SORTMEMO);
  289.         else SortRemove(SORTMEMO);
  290.         break;
  291.  
  292.     case GID_SRPCATEGORY:
  293.         tempState.category = code;
  294.         if (code) SortInsert(SORTCATEGORY);
  295.         else SortRemove(SORTCATEGORY);
  296.         break;
  297.  
  298.     case GID_SRPFIELDLIST:
  299.         sortActive = code;
  300.         SortDisableMoves(FALSE);
  301.         curr = (sortNode *)DataOrd2Node(&tempSortList,sortActive);
  302.         GF_SetGadgetAttrs(sortGUI,SRPgadgetspecs[GID_SRPORDER].gs_Gadget,
  303.                 GTCY_Active, curr->order,
  304.                 TAG_DONE);
  305.         break;
  306.  
  307.     case GID_SRPORDER:
  308.         curr = (sortNode *)DataOrd2Node(&tempSortList,sortActive);
  309.         curr->order = code;
  310.         break;
  311.  
  312.     case GID_SRPTOP:
  313.         DataListTop(sortGUI,SRPgadgetspecs[GID_SRPFIELDLIST].gs_Gadget,
  314.             &tempSortList, &sortActive,0);
  315.         break;
  316.  
  317.     case GID_SRPBOTTOM:
  318.         DataListBottom(sortGUI,SRPgadgetspecs[GID_SRPFIELDLIST].gs_Gadget,
  319.             &tempSortList, &sortActive,DataCountNodes(&tempSortList));
  320.         break;
  321.  
  322.     case GID_SRPUP:
  323.         DataListUp(sortGUI,SRPgadgetspecs[GID_SRPFIELDLIST].gs_Gadget,
  324.             &tempSortList, &sortActive);
  325.         break;
  326.  
  327.     case GID_SRPDOWN:
  328.         DataListDown(sortGUI,SRPgadgetspecs[GID_SRPFIELDLIST].gs_Gadget,
  329.             &tempSortList, &sortActive);
  330.         break;
  331.  
  332.     case GID_SRPCANCEL:
  333.         done = TRUE;
  334.         break;
  335.                                                          
  336.     case GID_SRPOK:
  337.         amiChangedItems = TRUE;
  338.         memcpy(&sortStates, &tempState, sizeof(sortState));
  339.         for (x=0;x<SORTENTRIES;x++)
  340.             memcpy(&sortEntries[x],&tempSorts[x],sizeof(sortNode));
  341.         DataMoveSort(&sortfields, sortEntries, &tempSortList, tempSorts);
  342.         sortretval = TRUE;
  343.         done = TRUE;
  344.          break;
  345.  }
  346.  
  347.  return (done);
  348. }
  349.  
  350. /****************************************************
  351. * SortInit()
  352. *
  353. *    Set up some globals
  354. *****************************************************/
  355. void SortInit(void)
  356. {
  357. UWORD x;
  358.  
  359.  sortretval = FALSE;
  360.  
  361.  /* initialize our sort list */
  362.  memcpy(&tempState, &sortStates, sizeof(sortState));
  363.  
  364.  GF_SetGadgetAttrs (sortGUI, SRP_SortSpecs[GID_SRPFIELDLIST]->gs_Gadget,
  365.         GTLV_Labels, ~0,
  366.         TAG_DONE);
  367.  
  368.  for (x=0;x<SORTENTRIES;x++) {
  369.     memcpy(&tempSorts[x],&sortEntries[x],sizeof(sortNode));
  370.     tempSorts[x].node.ln_Name = tempSorts[x].field;
  371.  }
  372.  DataMoveSort(&tempSortList, tempSorts, &sortfields, sortEntries);
  373.  
  374.  GF_SetGadgetAttrs (sortGUI, SRP_SortSpecs[GID_SRPFIELDLIST]->gs_Gadget,
  375.         GTLV_Labels, &tempSortList,
  376.         TAG_DONE);
  377.  
  378.  /* set up checkboxes! */
  379.  GF_SetGadgetAttrs (sortGUI, SRP_SortSpecs[GID_SRPCHECK]->gs_Gadget,
  380.         GTCB_Checked, tempState.check,
  381.         TAG_DONE);
  382.  
  383.  GF_SetGadgetAttrs (sortGUI, SRP_SortSpecs[GID_SRPMEMO]->gs_Gadget,
  384.         GTCB_Checked,tempState.memo,
  385.         TAG_DONE);
  386.  
  387.  GF_SetGadgetAttrs (sortGUI, SRP_SortSpecs[GID_SRPNAME]->gs_Gadget,
  388.         GTCB_Checked,tempState.name,
  389.         TAG_DONE);
  390.  
  391.  GF_SetGadgetAttrs (sortGUI, SRP_SortSpecs[GID_SRPDATE]->gs_Gadget,
  392.         GTCB_Checked,tempState.date,
  393.         TAG_DONE);
  394.  
  395.  GF_SetGadgetAttrs (sortGUI, SRP_SortSpecs[GID_SRPAMNT]->gs_Gadget,
  396.         GTCB_Checked,tempState.amnt,
  397.         TAG_DONE);
  398.  
  399.  GF_SetGadgetAttrs (sortGUI, SRP_SortSpecs[GID_SRPCATEGORY]->gs_Gadget,
  400.         GTCB_Checked, tempState.category,
  401.         TAG_DONE);
  402.  
  403.  /* disable order */
  404.  GF_SetGadgetAttrs (sortGUI, SRP_SortSpecs[GID_SRPORDER]->gs_Gadget,
  405.         GA_Disabled, TRUE,
  406.         TAG_DONE);
  407.  
  408.  SortDisableMoves(TRUE);
  409. }
  410.  
  411. /**********************************************************
  412. * SortInsert()
  413. *
  414. *    Insert a field
  415. ***********************************************************/
  416. void SortInsert(UWORD entry)
  417. {
  418.  /* remove list */
  419.  GF_SetGadgetAttrs(sortGUI, SRP_SortSpecs[GID_SRPFIELDLIST]->gs_Gadget,
  420.         GTLV_Labels, ~0,
  421.         TAG_DONE);
  422.  
  423.  AddTail(&tempSortList,(struct Node *)&tempSorts[entry]);
  424.  
  425.  /* re-instate list */
  426.  GF_SetGadgetAttrs(sortGUI, SRP_SortSpecs[GID_SRPFIELDLIST]->gs_Gadget,
  427.         GTLV_Labels, &tempSortList,
  428.         GTLV_Selected, ~0,
  429.         TAG_DONE);
  430.  
  431.  /* disable misc */
  432.  SortDisableMoves(TRUE);
  433.  
  434. }
  435.  
  436. /**********************************************************
  437. * SortRemove()
  438. *
  439. *    remove a field
  440. ***********************************************************/
  441. void SortRemove(UWORD entry)
  442. {
  443.  /* remove list */
  444.  GF_SetGadgetAttrs(sortGUI, SRP_SortSpecs[GID_SRPFIELDLIST]->gs_Gadget,
  445.         GTLV_Labels, ~0,
  446.         TAG_DONE);
  447.  
  448.  Remove((struct Node *)&tempSorts[entry]);
  449.  
  450.  /* re-instate list */
  451.  GF_SetGadgetAttrs(sortGUI, SRP_SortSpecs[GID_SRPFIELDLIST]->gs_Gadget,
  452.         GTLV_Labels, &tempSortList,
  453.         GTLV_Selected, ~0,
  454.         TAG_DONE);
  455.  
  456.  
  457.  
  458.  /* disable misc */
  459.  SortDisableMoves(TRUE);
  460. }
  461.  
  462. /******************************************************
  463. * SortDisableMoves()
  464. *
  465. *    Disable the up/down, etc buttons
  466. *******************************************************/
  467. void SortDisableMoves(BOOL dis)
  468. {
  469.  
  470.  GF_SetGadgetAttrs (sortGUI, SRP_SortSpecs[GID_SRPUP]->gs_Gadget,
  471.         GA_Disabled, dis,
  472.         TAG_DONE);
  473.  
  474.  GF_SetGadgetAttrs (sortGUI, SRP_SortSpecs[GID_SRPDOWN]->gs_Gadget,
  475.         GA_Disabled, dis,
  476.         TAG_DONE);
  477.  
  478.  GF_SetGadgetAttrs (sortGUI, SRP_SortSpecs[GID_SRPTOP]->gs_Gadget,
  479.         GA_Disabled, dis,
  480.         TAG_DONE);
  481.  
  482.  GF_SetGadgetAttrs (sortGUI, SRP_SortSpecs[GID_SRPBOTTOM]->gs_Gadget,
  483.         GA_Disabled, dis,
  484.         TAG_DONE);
  485.  
  486.  GF_SetGadgetAttrs (sortGUI, SRP_SortSpecs[GID_SRPORDER]->gs_Gadget,
  487.         GA_Disabled, dis,
  488.         TAG_DONE);
  489. }
  490.