home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 6 / AACD06.ISO / AACD / Utilities / amiCheck / Source / filterPanel.c < prev    next >
C/C++ Source or Header  |  1996-02-17  |  24KB  |  929 lines

  1. /* filterPanel.c 
  2.  *
  3.  *  defines the GUIFront characteristics of the filter panel 
  4.  */
  5.   
  6. #include <stdio.h>  
  7. #include <intuition/gadgetclass.h>
  8. #include <clib/dos_protos.h>
  9. #include "amiCheck.h"
  10. #include "regGadget.h"
  11. #include "edittempPanel.h"
  12. #include "dataBase.h"
  13. #include "filterPanel.h"
  14. #include <string.h>
  15.  
  16. /* prototypes */
  17. BOOL FilterHandleGadget(struct IntuiMessage *);
  18. void FilterInit(void);
  19. void FilterDisableCR(BOOL);
  20. void FilterDisableAR(BOOL);
  21. void FilterDisableDR(BOOL);
  22. void FilterDisableCAT(BOOL);
  23. void FilterDisablePAYEE(BOOL);
  24. void FilterDisableMEMO(BOOL);
  25. BOOL FilterGoodbye(struct IntuiMessage *, filterSetting *);
  26.  
  27. struct Window *filtWin;
  28. filterSetting currFilter;
  29. BOOL fretval;
  30. ExtErrorData FilterExtData;
  31. GUIFront *filterGUI;
  32.  
  33. /* quick configure of some gadgets */
  34. STRPTR filterlabels[] =
  35. {
  36.     "N/A",
  37.     "Yes",
  38.     "No",
  39.     NULL,
  40. };
  41.  
  42. struct TagItem filterCycleTags[] =
  43. {
  44.     {GTCY_Labels, filterlabels},
  45.     {TAG_DONE},
  46. };
  47.  
  48. STRPTR rangelabels[] =
  49. {
  50.     "N/A",
  51.     "In",
  52.     "Out",
  53.     NULL,
  54. };
  55.  
  56. struct TagItem rangeCycleTags[] =
  57. {
  58.     {GTCY_Labels, rangelabels},
  59.     {TAG_DONE},
  60. };
  61.  
  62. /* define gadgetspec */
  63. GadgetSpec FPgadgetspecs[] = 
  64. {
  65.     {CHECKBOX_KIND,0,0, {0,0,0,0,"Chec_ks",NULL,GID_FPCHECKS,
  66.         PLACETEXT_RIGHT},NULL,GS_DefaultTags},
  67.  
  68.     {CHECKBOX_KIND,0,0, {0,0,0,0,"_Withdrawals",NULL,GID_FPWITHDRAWALS,
  69.         PLACETEXT_RIGHT},NULL,GS_DefaultTags},
  70.  
  71.     {CHECKBOX_KIND,0,0, {0,0,0,0,"_Deposits",NULL,GID_FPDEPOSITS,
  72.         PLACETEXT_RIGHT},NULL,GS_DefaultTags},
  73.  
  74.     {CYCLE_KIND,0,1, {0,0,0,0,"_Checks",NULL,GID_FPCHECKRANGE,
  75.         PLACETEXT_LEFT},rangeCycleTags,GS_DefaultTags | GS_NoHeightExtend},
  76.  
  77.     {INTEGER_KIND,11,1, {0,0,0,0,"From (_1)",NULL,GID_FPCHECKFROM,
  78.         PLACETEXT_LEFT},strCheckTags,GS_DefaultTags},
  79.  
  80.     {INTEGER_KIND,11,1, {0,0,0,0,"To (_2)",NULL,GID_FPCHECKTO,
  81.         PLACETEXT_LEFT},strCheckTags,GS_DefaultTags},
  82.  
  83.     {CYCLE_KIND,0,1, {0,0,0,0,"_Amounts",NULL,GID_FPAMNTRANGE,
  84.         PLACETEXT_LEFT},rangeCycleTags,GS_DefaultTags | GS_NoHeightExtend},
  85.  
  86.     {STRING_KIND,11,1, {0,0,0,0,"From (_3)",NULL,GID_FPAMNTFROM,
  87.         PLACETEXT_LEFT},strAmntTags,GS_DefaultTags},
  88.  
  89.     {STRING_KIND,11,1, {0,0,0,0,"To (_4)",NULL,GID_FPAMNTTO,
  90.         PLACETEXT_LEFT},strAmntTags,GS_DefaultTags},
  91.  
  92.     {CYCLE_KIND,0,1, {0,0,0,0,"_Printed",NULL,GID_FPPRINTED,
  93.         PLACETEXT_LEFT},filterCycleTags,GS_DefaultTags | GS_NoHeightExtend },
  94.  
  95.     {CYCLE_KIND,0,1, {0,0,0,0,"_Voided",NULL,GID_FPVOIDED,
  96.         PLACETEXT_LEFT},filterCycleTags,GS_DefaultTags | GS_NoHeightExtend},
  97.  
  98.     {CYCLE_KIND,0,1, {0,0,0,0,"C_leared",NULL,GID_FPCLEARED,
  99.         PLACETEXT_LEFT},filterCycleTags,GS_DefaultTags | GS_NoHeightExtend},
  100.  
  101.     {CYCLE_KIND,0,1, {0,0,0,0,"Ta_x Deduct",NULL,GID_FPTAX,
  102.         PLACETEXT_LEFT},filterCycleTags,GS_DefaultTags | GS_NoHeightExtend},
  103.  
  104.     {CYCLE_KIND,0,1, {0,0,0,0,"Categor_y",NULL,GID_FPUSECAT,
  105.         PLACETEXT_LEFT},rangeCycleTags,GS_DefaultTags | GS_NoHeightExtend},
  106.  
  107.     {LISTVIEW_KIND,21,5, {0,0,0,0,NULL,NULL,GID_FPCATEGORY,
  108.         PLACETEXT_ABOVE},ListView,GS_DefaultTags},
  109.  
  110.     {CYCLE_KIND,0,1, {0,0,0,0,"_Reconciled",NULL,GID_FPRECONCILED,
  111.         PLACETEXT_LEFT},filterCycleTags,GS_DefaultTags | GS_NoHeightExtend},
  112.  
  113.     {CYCLE_KIND,0,1, {0,0,0,0,"Date_s",NULL,GID_FPDATERANGE,
  114.         PLACETEXT_LEFT},rangeCycleTags,GS_DefaultTags | GS_NoHeightExtend},
  115.  
  116.     {STRING_KIND,11,1, {0,0,0,0,"From (_5)",NULL,GID_FPDATEFROM,
  117.         PLACETEXT_LEFT},strDateTags,GS_DefaultTags},
  118.  
  119.     {STRING_KIND,11,1, {0,0,0,0,"To (_6)",NULL,GID_FPDATETO,
  120.         PLACETEXT_LEFT},strDateTags,GS_DefaultTags},
  121.  
  122.         {BUTTON_KIND,0,0,{0,0,0,0,"_OK", NULL, GID_FPOK,         
  123.                 PLACETEXT_IN}, NULL, GS_DefaultTags},
  124.  
  125.         {BUTTON_KIND,0,0,{0,0,0,0,"_Cancel", NULL, GID_FPCANCEL,        
  126.                 PLACETEXT_IN}, NULL, GS_DefaultTags},
  127.  
  128.     {CYCLE_KIND,0,1, {0,0,0,0,"_Name",NULL,GID_FPPAYEE,
  129.         PLACETEXT_LEFT},rangeCycleTags,GS_DefaultTags | GS_NoHeightExtend},
  130.  
  131.     {STRING_KIND,11,1, {0,0,0,0,"(_7)",NULL,GID_FPPAYEESTR,
  132.         PLACETEXT_LEFT},strNameTags,GS_DefaultTags},
  133.  
  134.     {CYCLE_KIND,0,1, {0,0,0,0,"_Memo",NULL,GID_FPMEMO,
  135.         PLACETEXT_LEFT},rangeCycleTags,GS_DefaultTags | GS_NoHeightExtend},
  136.  
  137.     {STRING_KIND,11,1, {0,0,0,0,"(_8)",NULL,GID_FPMEMOSTR,
  138.         PLACETEXT_LEFT},strNameTags,GS_DefaultTags},
  139. };
  140.  
  141. /* set up array of pointers to our specs */
  142. GadgetSpec *FP_FilterSpecs[] =
  143. {
  144.         &FPgadgetspecs[0],
  145.         &FPgadgetspecs[1],
  146.         &FPgadgetspecs[2],
  147.         &FPgadgetspecs[3],
  148.         &FPgadgetspecs[4],
  149.         &FPgadgetspecs[5],
  150.         &FPgadgetspecs[6],
  151.         &FPgadgetspecs[7],
  152.         &FPgadgetspecs[8],
  153.         &FPgadgetspecs[9],
  154.         &FPgadgetspecs[10],
  155.     &FPgadgetspecs[11],
  156.         &FPgadgetspecs[12],
  157.         &FPgadgetspecs[13],
  158.         &FPgadgetspecs[14],
  159.         &FPgadgetspecs[15],
  160.         &FPgadgetspecs[16],
  161.         &FPgadgetspecs[17],
  162.     &FPgadgetspecs[18],
  163.     &FPgadgetspecs[19],
  164.     &FPgadgetspecs[20],
  165.     &FPgadgetspecs[21],
  166.     &FPgadgetspecs[22],
  167.     &FPgadgetspecs[23],
  168.     &FPgadgetspecs[24],
  169.  
  170.     NULL,
  171. };
  172.  
  173.  
  174. /* define the layout of this panel */
  175. ULONG FP_FilterPanel[] =
  176. {
  177.    GUIL_Flags, GUILF_PropShare | GUILF_EqualWidth,
  178.  
  179.    GUIL_HorizGroup, 1,
  180.         GUIL_Flags, GUILF_PropShare | GUILF_EqualHeight,
  181.     GUIL_FrameType, GUILFT_Recess,
  182.  
  183.     GUIL_VertGroup, 1,
  184.         GUIL_Flags, GUILF_EqualWidth | GUILF_PropShare,
  185.  
  186.         GUIL_VertGroup, 1,
  187.             GUIL_FrameType, GUILFT_Ridge,
  188.             GUIL_FrameHeadline, "Types",
  189.  
  190.             GUIL_GadgetSpecID, GID_FPCHECKS,
  191.             GUIL_GadgetSpecID, GID_FPWITHDRAWALS,
  192.             GUIL_GadgetSpecID, GID_FPDEPOSITS,
  193.         TAG_DONE,
  194.  
  195.         GUIL_VertGroup, 1,
  196.                 GUIL_Flags, GUILF_LabelAlign,
  197.                 GUIL_FrameType, GUILFT_Ridge,
  198.                 GUIL_FrameHeadline, "Characteristics",
  199.                 GUIL_GadgetSpecID, GID_FPCLEARED,
  200.                 GUIL_GadgetSpecID, GID_FPVOIDED,
  201.                 GUIL_GadgetSpecID, GID_FPTAX,
  202.                 GUIL_GadgetSpecID, GID_FPRECONCILED,
  203.                 GUIL_GadgetSpecID, GID_FPPRINTED,
  204.         TAG_DONE,
  205.         
  206.     TAG_DONE,
  207.  
  208. GUIL_HorizGroup,3,
  209.     GUIL_FrameType, GUILFT_Ridge,
  210.     GUIL_FrameHeadline, "Range Settings",
  211.  
  212.     GUIL_VertGroup, 2,
  213.         GUIL_Flags, GUILF_LabelAlign,
  214.  
  215.         GUIL_VertGroup,0,
  216.             GUIL_Flags, GUILF_LabelAlign,
  217.             GUIL_GadgetSpecID, GID_FPCHECKRANGE,
  218.             GUIL_GadgetSpecID, GID_FPCHECKFROM,
  219.             GUIL_GadgetSpecID, GID_FPCHECKTO,
  220.         TAG_DONE,
  221.         GUIL_VertGroup,0,
  222.             GUIL_Flags, GUILF_LabelAlign,
  223.             GUIL_GadgetSpecID, GID_FPAMNTRANGE,
  224.             GUIL_GadgetSpecID, GID_FPAMNTFROM,
  225.             GUIL_GadgetSpecID, GID_FPAMNTTO,
  226.         TAG_DONE,
  227.         GUIL_VertGroup,0,
  228.             GUIL_Flags, GUILF_LabelAlign,
  229.             GUIL_GadgetSpecID, GID_FPDATERANGE,
  230.             GUIL_GadgetSpecID, GID_FPDATEFROM,
  231.             GUIL_GadgetSpecID, GID_FPDATETO,
  232.         TAG_DONE,
  233.     TAG_DONE,
  234.  
  235.  
  236. GUIL_VertGroup,1,
  237.     GUIL_Flags, GUILF_LabelAlign | GUILF_PropShare,
  238.  
  239.     GUIL_VertGroup,0,
  240.         GUIL_Flags, GUILF_LabelAlign,
  241.         GUIL_GadgetSpecID, GID_FPPAYEE,
  242.         GUIL_GadgetSpecID, GID_FPPAYEESTR,
  243.     TAG_DONE,
  244.  
  245.     GUIL_VertGroup,0,
  246.         GUIL_Flags, GUILF_LabelAlign,
  247.         GUIL_GadgetSpecID, GID_FPMEMO,
  248.         GUIL_GadgetSpecID, GID_FPMEMOSTR,
  249.     TAG_DONE,
  250.  
  251.     GUIL_VertGroup, 0,
  252.         GUIL_Flags, GUILF_PropShare,
  253.         GUIL_GadgetSpecID, GID_FPUSECAT,
  254.         GUIL_GadgetSpecID, GID_FPCATEGORY,
  255.     TAG_DONE,
  256. TAG_DONE,
  257.  
  258. TAG_DONE,
  259.         
  260.    TAG_DONE,
  261.     
  262.    GUIL_HorizGroup,1,
  263.     GUIL_Flags, GUILF_EqualSize | GUILF_EqualWidth,
  264.         
  265.            GUIL_GadgetSpecID, GID_FPOK,
  266.            GUIL_GadgetSpecID, GID_FPCANCEL,
  267.            
  268.    TAG_DONE,   
  269.            
  270. TAG_DONE,
  271. };
  272.  
  273.  
  274. /****************************************************
  275. * FilterGUI ()
  276. *
  277. *    Creates the GUI for the filter panel.
  278. *****************************************************/
  279. BOOL FilterGUI(void)
  280. {
  281.  BOOL replyval, done = FALSE;
  282.  UWORD ordinal;
  283.  categoryNode *cat;
  284.  ULONG signal;
  285.     
  286.   AmiLock();
  287.  
  288.   GF_SetGUIAttr(filterGUI,GUI_OpenGUI,TRUE, TAG_DONE);
  289.   /* grab window */
  290.   GF_GetGUIAttr(filterGUI,GUI_Window,&filtWin,TAG_DONE);
  291.   FilterInit();
  292.  
  293. #if 1
  294.                 /* Process input events */
  295.                 while (!done)
  296.                 {
  297.                     struct IntuiMessage *imsg;
  298.  
  299.                     /* Wait for an event to occur */
  300.  
  301.                     signal = GF_Wait(guiapp,AmigaGuideSignal(agc));
  302.             if (signal & AmigaGuideSignal(agc)) {
  303.             AmiHelpMsg();
  304.             continue;
  305.             }
  306.  
  307.                     /* We only bother to listen for CLOSEWINDOW events.
  308.                      * Of course, in a real application, you would be
  309.                      * examining the Class field for IDCMP_GADGETUP
  310.                      * messages and act accordingly.
  311.                      */
  312.  
  313.                     while (imsg = GF_GetIMsg(guiapp))
  314.                     {
  315.             replyval = FALSE;
  316.                         switch (imsg->Class) {
  317.                 case IDCMP_REFRESHWINDOW:
  318.                     RegRefresh(TRUE);
  319.                     break;
  320.  
  321.                                 case IDCMP_CLOSEWINDOW:
  322.                     done = TRUE;
  323.                     fretval = FALSE;
  324.                                         break;
  325.  
  326.                 case IDCMP_RAWKEY:
  327.                     /* check for tab key */
  328.  
  329.                     if (GF_ProcessListView(filterGUI,FP_FilterSpecs[GID_FPCATEGORY],
  330.                         imsg,&ordinal)) {
  331.                         cat = (categoryNode *)DataOrd2Node(&categories,ordinal);
  332.                         strncpy(currFilter.category,cat->node.ln_Name,CATNAMESIZE);
  333.                     }
  334.                     else AmiHelpKey(imsg,FILTER_PANEL);
  335.                     break;
  336.  
  337.                 case IDCMP_GADGETUP:
  338.                     replyval = FALSE;
  339.                     done=FilterHandleGadget(imsg);
  340.                     break;
  341.                         }
  342.                                      
  343.                               
  344.                         if (replyval) GF_ReplyIMsg(imsg);
  345.                     }
  346.                 }
  347. #endif
  348.      GF_SetGadgetAttrs (filterGUI, FP_FilterSpecs[GID_FPCATEGORY]->gs_Gadget,
  349.         GTLV_Labels, ~0,
  350.         TAG_DONE);
  351.  
  352.  
  353.      GF_SetGUIAttr(filterGUI, GUI_OpenGUI, FALSE, TAG_DONE);
  354.      AmiUnlock();
  355.  
  356.  return (fretval);
  357. }
  358.  
  359. /***************************************************
  360. * FilterHandleGadget()
  361. *
  362. *    Handles gadget events for this panel
  363. ****************************************************/
  364. BOOL  FilterHandleGadget(struct IntuiMessage *imsg)
  365. {
  366.  struct Gadget *gad = (struct Gadget *)(imsg->IAddress);
  367.  UWORD code = imsg->Code;
  368.  BOOL done = FALSE;
  369.  categoryNode *cat;
  370.  char newamntstr[AMNTSIZE+1];
  371.  char newdatestr[DATESIZE+1];
  372.  
  373.  switch (gad->GadgetID) {
  374.     case GID_FPCHECKS:
  375.         currFilter.checks = code;
  376.         break;
  377.  
  378.     case GID_FPWITHDRAWALS:
  379.         currFilter.withdrawals = code;
  380.         break;
  381.  
  382.     case GID_FPDEPOSITS:
  383.         currFilter.deposits = code;
  384.         break;
  385.  
  386.     case GID_FPPRINTED:
  387.         switch (code) {
  388.             case FILTERNA:
  389.                 currFilter.andflag &= ~PRINTED;
  390.                 currFilter.notflag &= ~PRINTED;
  391.                 break;
  392.  
  393.             case FILTERYES:
  394.                 currFilter.andflag |= PRINTED;
  395.                 currFilter.notflag &= ~PRINTED;
  396.                 break;
  397.  
  398.             case FILTERNO:
  399.                 currFilter.andflag &= ~PRINTED;
  400.                 currFilter.notflag |= PRINTED;
  401.                 break;
  402.         }
  403.         currFilter.printcode = code;
  404.         break;
  405.  
  406.     case GID_FPCLEARED:
  407.         switch (code) {
  408.             case FILTERNA:
  409.                 currFilter.andflag &= ~CLEARED;
  410.                 currFilter.notflag &= ~CLEARED;
  411.                 break;
  412.  
  413.             case FILTERYES:
  414.                 currFilter.andflag |= CLEARED;
  415.                 currFilter.notflag &= ~CLEARED;
  416.                 break;
  417.  
  418.             case FILTERNO:
  419.                 currFilter.andflag &= ~CLEARED;
  420.                 currFilter.notflag |= CLEARED;
  421.                 break;
  422.         }
  423.         currFilter.clearcode = code;
  424.         break;
  425.  
  426.     case GID_FPVOIDED:
  427.         switch (code) {
  428.             case FILTERNA:
  429.                 currFilter.andflag &= ~VOIDED;
  430.                 currFilter.notflag &= ~VOIDED;
  431.                 break;
  432.  
  433.             case FILTERYES:
  434.                 currFilter.andflag |= VOIDED;
  435.                 currFilter.notflag &= ~VOIDED;
  436.                 break;
  437.  
  438.             case FILTERNO:
  439.                 currFilter.andflag &= ~VOIDED;
  440.                 currFilter.notflag |= VOIDED;
  441.                 break;
  442.         }
  443.         currFilter.voidcode = code;
  444.         break;
  445.  
  446.     case GID_FPTAX:
  447.         switch (code) {
  448.             case FILTERNA:
  449.                 currFilter.andflag &= ~TAXDEDUCT;
  450.                 currFilter.notflag &= ~TAXDEDUCT;
  451.                 break;
  452.  
  453.             case FILTERYES:
  454.                 currFilter.andflag |= TAXDEDUCT;
  455.                 currFilter.notflag &= ~TAXDEDUCT;
  456.                 break;
  457.  
  458.             case FILTERNO:
  459.                 currFilter.andflag &= ~TAXDEDUCT;
  460.                 currFilter.notflag |= TAXDEDUCT;
  461.                 break;
  462.         }
  463.         currFilter.taxcode = code;
  464.         break;
  465.  
  466.     case GID_FPRECONCILED:
  467.         switch (code) {
  468.             case FILTERNA:
  469.                 currFilter.andflag &= ~RECONCILED;
  470.                 currFilter.notflag &= ~RECONCILED;
  471.                 break;
  472.  
  473.             case FILTERYES:
  474.                 currFilter.andflag |= RECONCILED;
  475.                 currFilter.notflag &= ~RECONCILED;
  476.                 break;
  477.  
  478.             case FILTERNO:
  479.                 currFilter.andflag &= ~RECONCILED;
  480.                 currFilter.notflag |= RECONCILED;
  481.                 break;
  482.         }
  483.         currFilter.reconcilecode = code;
  484.         break;
  485.  
  486.     case GID_FPAMNTRANGE:
  487.         currFilter.amntrange = code;
  488.         FilterDisableAR(!code);
  489.         break;
  490.  
  491.     case GID_FPCHECKRANGE:
  492.         currFilter.checkrange = code;
  493.         FilterDisableCR(!code);
  494.         break;
  495.  
  496.     case GID_FPCHECKFROM:
  497.         currFilter.checkfrom  =(UWORD)((struct StringInfo*)gad->SpecialInfo)->LongInt;
  498.         break;
  499.  
  500.     case GID_FPCHECKTO:
  501.         currFilter.checkto  =(UWORD)((struct StringInfo*)gad->SpecialInfo)->LongInt;
  502.         break;
  503.  
  504.     case GID_FPAMNTFROM:
  505.         /* special case return early.... activated gadget */
  506.         if (!DataVerifyAmnt(((struct StringInfo*)gad->SpecialInfo)->Buffer,newamntstr) ) {
  507.             DisplayBeep(filtWin->WScreen);
  508.             DataAnnounceAmount(filterGUI);
  509.             GF_ReplyIMsg(imsg);
  510.             DataSitNSpin(FP_FilterSpecs[GID_FPAMNTFROM]->gs_Gadget,filtWin);
  511.               return (done);
  512.         }
  513.          else {
  514.             DataStoreAmnt(&currFilter.amountFrom,newamntstr );
  515.             GF_SetGadgetAttrs(filterGUI,FP_FilterSpecs[GID_FPAMNTFROM]->gs_Gadget,
  516.                 GTST_String,newamntstr,
  517.                 TAG_DONE);
  518.         }
  519.         break;
  520.  
  521.     case GID_FPAMNTTO:
  522.         /* special case return early.... activated gadget */
  523.         if (!DataVerifyAmnt(((struct StringInfo*)gad->SpecialInfo)->Buffer,newamntstr) ) {
  524.             DisplayBeep(filtWin->WScreen);
  525.             DataAnnounceAmount(filterGUI);
  526.             GF_ReplyIMsg(imsg);
  527.             DataSitNSpin(FP_FilterSpecs[GID_FPAMNTTO]->gs_Gadget,filtWin);
  528.                return (done);
  529.         }
  530.          else {
  531.             DataStoreAmnt(&currFilter.amountTo,newamntstr );
  532.             GF_SetGadgetAttrs(filterGUI,FP_FilterSpecs[GID_FPAMNTTO]->gs_Gadget,
  533.                 GTST_String,newamntstr,
  534.                 TAG_DONE);
  535.         }
  536.     
  537.         break;
  538.  
  539.     case GID_FPMEMO:
  540.         currFilter.usememo = code;
  541.         FilterDisableMEMO(!code);
  542.         break;
  543.  
  544.     case GID_FPPAYEE:
  545.         currFilter.usepayee = code;
  546.         FilterDisablePAYEE(!code);
  547.         break;
  548.  
  549.     case GID_FPPAYEESTR:
  550.         strcpy(currFilter.payee,((struct StringInfo*)gad->SpecialInfo)->Buffer);
  551.         break;
  552.  
  553.     case GID_FPMEMOSTR:
  554.         strcpy(currFilter.payee,((struct StringInfo*)gad->SpecialInfo)->Buffer);
  555.         break;
  556.  
  557.     case GID_FPUSECAT:
  558.         currFilter.usecategory = code;
  559.         FilterDisableCAT(!code);
  560.         break;
  561.     
  562.     case GID_FPCATEGORY:
  563.         cat = (categoryNode *)DataOrd2Node(&categories,code);
  564.         strncpy(currFilter.category,cat->catname,CATNAMESIZE);
  565.         break;
  566.  
  567.     case GID_FPDATERANGE:
  568.         currFilter.daterange = code;
  569.         FilterDisableDR(!code);
  570.         break;
  571.  
  572.     case GID_FPDATEFROM:
  573.         /* special case return early.... activated gadget */
  574.         if (!DataVerifyDate(((struct StringInfo*)gad->SpecialInfo)->Buffer,newdatestr) ) {
  575.             DisplayBeep(filtWin->WScreen);
  576.             DataAnnounceDate(filterGUI);
  577.             GF_ReplyIMsg(imsg);
  578.             DataSitNSpin(FP_FilterSpecs[GID_FPDATEFROM]->gs_Gadget,filtWin);
  579.               return (done);
  580.         }
  581.          else {
  582.             DataStoreDate(&currFilter.dateFrom,newdatestr );
  583.             GF_SetGadgetAttrs(filterGUI,FP_FilterSpecs[GID_FPDATEFROM]->gs_Gadget,
  584.                 GTST_String,newdatestr,
  585.                 TAG_DONE);
  586.         }
  587.         break;
  588.  
  589.     case GID_FPDATETO:
  590.         /* special case return early.... activated gadget */
  591.         if (!DataVerifyDate(((struct StringInfo*)gad->SpecialInfo)->Buffer,newdatestr) ) {
  592.             DisplayBeep(filtWin->WScreen);
  593.             DataAnnounceDate(filterGUI);
  594.             GF_ReplyIMsg(imsg);
  595.             DataSitNSpin(FP_FilterSpecs[GID_FPDATETO]->gs_Gadget,filtWin);
  596.               return (done);
  597.         }
  598.          else {
  599.             DataStoreDate(&currFilter.dateTo,newdatestr );
  600.             GF_SetGadgetAttrs(filterGUI,FP_FilterSpecs[GID_FPDATETO]->gs_Gadget,
  601.                 GTST_String,newdatestr,
  602.                 TAG_DONE);
  603.         }
  604.         break;
  605.  
  606.     case GID_FPCANCEL:
  607.         fretval = FALSE;
  608.         done = TRUE;
  609.         break;
  610.  
  611.     case GID_FPOK:
  612.         if (FilterGoodbye(imsg, &currFilter)) {
  613.             amiChangedItems = TRUE;
  614.             done = TRUE;
  615.             fretval = TRUE;
  616.         }
  617.         else return (FALSE);
  618.         break;
  619.  }
  620.  
  621.  GF_ReplyIMsg(imsg);
  622.  return (done);
  623. }
  624.  
  625. /****************************************************
  626. * FilterInit()
  627. *
  628. *    Initialize the settings
  629. *****************************************************/
  630. void FilterInit(void)
  631. {
  632.  char amntfrom[AMNTSIZE], amntto[AMNTSIZE];
  633.  char strdate[DATESIZE+1];
  634.  
  635.  /* grab window */
  636.  GF_GetGUIAttr(filterGUI,GUI_Window,&filtWin,TAG_DONE);
  637.  
  638.  memcpy(&currFilter, &filterControl, sizeof(filterSetting));
  639.  
  640.  /* update gfx */
  641.  if (currFilter.checkrange == FILTERNA)
  642.     FilterDisableCR(TRUE);
  643.  
  644.  if (currFilter.amntrange == FILTERNA)
  645.     FilterDisableAR(TRUE); 
  646.  
  647.  if (currFilter.daterange == FILTERNA)
  648.      FilterDisableDR(TRUE);
  649.  
  650.  if (currFilter.usecategory == FILTERNA)
  651.      FilterDisableCAT(TRUE);
  652.  
  653.  if (currFilter.usepayee == FILTERNA)
  654.     FilterDisablePAYEE(TRUE);
  655.  
  656.  if (currFilter.usememo == FILTERNA)
  657.     FilterDisableMEMO(TRUE);
  658.  
  659.  GF_SetGadgetAttrs (filterGUI, FP_FilterSpecs[GID_FPCATEGORY]->gs_Gadget,
  660.         GTLV_Labels, &categories,
  661.         TAG_DONE);
  662.  
  663.  GF_SetGadgetAttrs (filterGUI, FP_FilterSpecs[GID_FPCHECKS]->gs_Gadget,
  664.         GTCB_Checked,currFilter.checks,
  665.         TAG_DONE);
  666.  
  667.  GF_SetGadgetAttrs (filterGUI, FP_FilterSpecs[GID_FPWITHDRAWALS]->gs_Gadget,
  668.         GTCB_Checked,currFilter.withdrawals,
  669.         TAG_DONE);
  670.  
  671.  GF_SetGadgetAttrs (filterGUI, FP_FilterSpecs[GID_FPDEPOSITS]->gs_Gadget,
  672.         GTCB_Checked,currFilter.deposits,
  673.         TAG_DONE);
  674.  
  675.  GF_SetGadgetAttrs (filterGUI, FP_FilterSpecs[GID_FPCHECKRANGE]->gs_Gadget,
  676.         GTCY_Active,currFilter.checkrange,
  677.         TAG_DONE);
  678.  
  679.  GF_SetGadgetAttrs (filterGUI, FP_FilterSpecs[GID_FPAMNTRANGE]->gs_Gadget,
  680.         GTCY_Active,currFilter.amntrange,
  681.         TAG_DONE);
  682.  
  683.  GF_SetGadgetAttrs (filterGUI, FP_FilterSpecs[GID_FPPRINTED]->gs_Gadget,
  684.         GTCY_Active,currFilter.printcode,
  685.         TAG_DONE);
  686.  
  687.  GF_SetGadgetAttrs (filterGUI, FP_FilterSpecs[GID_FPVOIDED]->gs_Gadget,
  688.         GTCY_Active, currFilter.voidcode,
  689.         TAG_DONE);
  690.  
  691.  GF_SetGadgetAttrs (filterGUI, FP_FilterSpecs[GID_FPCLEARED]->gs_Gadget,
  692.         GTCY_Active, currFilter.clearcode,
  693.         TAG_DONE);
  694.  
  695.  GF_SetGadgetAttrs (filterGUI, FP_FilterSpecs[GID_FPTAX]->gs_Gadget,
  696.         GTCY_Active, currFilter.taxcode,
  697.         TAG_DONE);
  698.  
  699.  GF_SetGadgetAttrs (filterGUI, FP_FilterSpecs[GID_FPRECONCILED]->gs_Gadget,
  700.         GTCY_Active, currFilter.reconcilecode,
  701.         TAG_DONE);
  702.  
  703.  GF_SetGadgetAttrs (filterGUI, FP_FilterSpecs[GID_FPPAYEE]->gs_Gadget,
  704.         GTCY_Active, currFilter.usepayee,
  705.         TAG_DONE);
  706.  
  707.  GF_SetGadgetAttrs (filterGUI, FP_FilterSpecs[GID_FPMEMO]->gs_Gadget,
  708.         GTCY_Active, currFilter.usememo,
  709.         TAG_DONE);
  710.  
  711.  GF_SetGadgetAttrs (filterGUI, FP_FilterSpecs[GID_FPCHECKFROM]->gs_Gadget,
  712.             GTIN_Number, currFilter.checkfrom,
  713.             TAG_DONE); 
  714.  
  715.  GF_SetGadgetAttrs (filterGUI, FP_FilterSpecs[GID_FPCHECKTO]->gs_Gadget,
  716.             GTIN_Number, currFilter.checkto,
  717.             TAG_DONE); 
  718.  
  719.  DataBuildAmnt(TRUE,&currFilter.amountFrom,amntfrom);
  720.  DataBuildAmnt(TRUE,&currFilter.amountTo,amntto);
  721.  
  722.  GF_SetGadgetAttrs (filterGUI, FP_FilterSpecs[GID_FPAMNTFROM]->gs_Gadget,
  723.     GTST_String,amntfrom,
  724.     TAG_DONE);
  725.  
  726.  GF_SetGadgetAttrs (filterGUI, FP_FilterSpecs[GID_FPAMNTTO]->gs_Gadget,
  727.     GTST_String,amntto,
  728.     TAG_DONE);
  729.  
  730.  GF_SetGadgetAttrs (filterGUI, FP_FilterSpecs[GID_FPPAYEESTR]->gs_Gadget,
  731.     GTST_String,currFilter.payee,
  732.     TAG_DONE);
  733.  
  734.  GF_SetGadgetAttrs (filterGUI, FP_FilterSpecs[GID_FPMEMOSTR]->gs_Gadget,
  735.     GTST_String,currFilter.memo,
  736.     TAG_DONE);
  737.  
  738.  GF_SetGadgetAttrs (filterGUI, FP_FilterSpecs[GID_FPUSECAT]->gs_Gadget,
  739.         GTCY_Active,currFilter.usecategory,
  740.         TAG_DONE);
  741.  
  742.  
  743.  GF_SetGadgetAttrs (filterGUI, FP_FilterSpecs[GID_FPCATEGORY]->gs_Gadget,
  744.         GTLV_Selected, DataNode2Ord(&categories,currFilter.category),
  745.         TAG_DONE);
  746.  
  747.  /* now do the date thing */
  748.  GF_SetGadgetAttrs (filterGUI, FP_FilterSpecs[GID_FPDATERANGE]->gs_Gadget,
  749.     GTCY_Active,currFilter.daterange,
  750.     TAG_DONE);
  751.  
  752.  DataBuildDate(&currFilter.dateFrom, strdate);
  753.  GF_SetGadgetAttrs (filterGUI, FP_FilterSpecs[GID_FPDATEFROM]->gs_Gadget,
  754.         GTST_String,strdate,
  755.         TAG_DONE);
  756.  
  757.  DataBuildDate(&currFilter.dateTo, strdate);
  758.  GF_SetGadgetAttrs (filterGUI, FP_FilterSpecs[GID_FPDATETO]->gs_Gadget,
  759.         GTST_String,strdate,
  760.         TAG_DONE);
  761. }
  762.  
  763. /***************************************************************
  764. * FilterDisableCR()
  765. *
  766. *    Disable/enable check ranging
  767. ****************************************************************/
  768. void FilterDisableCR(BOOL dis)
  769. {
  770.   GF_SetGadgetAttrs (filterGUI, FP_FilterSpecs[GID_FPCHECKFROM]->gs_Gadget,
  771.             GA_Disabled, dis,
  772.             TAG_DONE); 
  773.  
  774.  GF_SetGadgetAttrs (filterGUI, FP_FilterSpecs[GID_FPCHECKTO]->gs_Gadget,
  775.             GA_Disabled, dis,
  776.             TAG_DONE); 
  777. }
  778.  
  779. /***************************************************************
  780. * FilterDisableAR()
  781. *
  782. *    Disable/enable amount ranging
  783. ****************************************************************/
  784. void FilterDisableAR(BOOL dis)
  785. {
  786.   GF_SetGadgetAttrs (filterGUI, FP_FilterSpecs[GID_FPAMNTFROM]->gs_Gadget,
  787.             GA_Disabled, dis,
  788.             TAG_DONE); 
  789.  
  790.  GF_SetGadgetAttrs (filterGUI, FP_FilterSpecs[GID_FPAMNTTO]->gs_Gadget,
  791.             GA_Disabled, dis,
  792.             TAG_DONE); 
  793. }
  794.  
  795. /***************************************************************
  796. * FilterDisablePAYEE()
  797. *
  798. *    Disable/enable payee ranging
  799. ****************************************************************/
  800. void FilterDisablePAYEE(BOOL dis)
  801. {
  802.   GF_SetGadgetAttrs (filterGUI, FP_FilterSpecs[GID_FPPAYEESTR]->gs_Gadget,
  803.             GA_Disabled, dis,
  804.             TAG_DONE); 
  805. }
  806.  
  807. /***************************************************************
  808. * FilterDisableMEMO()
  809. *
  810. *    Disable/enable MEMO ranging
  811. ****************************************************************/
  812. void FilterDisableMEMO(BOOL dis)
  813. {
  814.   GF_SetGadgetAttrs (filterGUI, FP_FilterSpecs[GID_FPMEMOSTR]->gs_Gadget,
  815.             GA_Disabled, dis,
  816.             TAG_DONE); 
  817. }
  818.  
  819.  
  820. /***************************************************************
  821. * FilterDisableDR()
  822. *
  823. *    Disable/enable date ranging
  824. ****************************************************************/
  825. void FilterDisableDR(BOOL dis)
  826. {
  827.   GF_SetGadgetAttrs (filterGUI, FP_FilterSpecs[GID_FPDATEFROM]->gs_Gadget,
  828.             GA_Disabled, dis,
  829.             TAG_DONE); 
  830.  
  831.  GF_SetGadgetAttrs (filterGUI, FP_FilterSpecs[GID_FPDATETO]->gs_Gadget,
  832.             GA_Disabled, dis,
  833.             TAG_DONE); 
  834. }
  835.  
  836. /***************************************************************
  837. * FilterDisableCAT()
  838. *
  839. *    Disable/enable date ranging
  840. ****************************************************************/
  841. void FilterDisableCAT(BOOL dis)
  842. {
  843.   GF_SetGadgetAttrs (filterGUI, FP_FilterSpecs[GID_FPCATEGORY]->gs_Gadget,
  844.             GA_Disabled, dis,
  845.             TAG_DONE); 
  846. }
  847.  
  848. /***************************************************
  849. * FilterGoodbye()
  850. *
  851. *    Grab strings
  852. ****************************************************/
  853. BOOL FilterGoodbye(struct IntuiMessage *imsg, filterSetting *temp)
  854. {
  855.  char newdatestr[DATESIZE+1];
  856.  char newamntstr[AMNTSIZE+1];
  857.  char *grab;
  858.  
  859.  /* first check "special" entries */
  860. if (temp->daterange) {
  861.  grab = ((struct StringInfo *)(FP_FilterSpecs[GID_FPDATETO]->gs_Gadget)->SpecialInfo)->Buffer;
  862.  if (!DataVerifyDate(grab,newdatestr) ) {
  863.     DisplayBeep(filtWin->WScreen);
  864.     DataAnnounceDate(filterGUI);
  865.     GF_ReplyIMsg(imsg);
  866.     DataSitNSpin(FP_FilterSpecs[GID_FPDATETO]->gs_Gadget,filtWin);
  867.       return (FALSE);
  868.  }
  869.  else {
  870.     DataStoreDate(&temp->dateTo,newdatestr);
  871.  }
  872.  
  873.  grab = ((struct StringInfo *)(FP_FilterSpecs[GID_FPDATEFROM]->gs_Gadget)->SpecialInfo)->Buffer;
  874.  if (!DataVerifyDate(grab,newdatestr) ) {
  875.     DisplayBeep(filtWin->WScreen);
  876.     DataAnnounceDate(filterGUI);
  877.     GF_ReplyIMsg(imsg);
  878.     DataSitNSpin(FP_FilterSpecs[GID_FPDATEFROM]->gs_Gadget,filtWin);
  879.        return (FALSE);
  880.  }
  881.  else {
  882.     DataStoreDate(&temp->dateFrom,newdatestr);
  883.  }
  884. }
  885.  
  886. if (temp->amntrange) {
  887.  grab = ((struct StringInfo *)(FP_FilterSpecs[GID_FPAMNTFROM]->gs_Gadget)->SpecialInfo)->Buffer;
  888.  if (!DataVerifyAmnt(grab,newamntstr) ) {
  889.     DisplayBeep(filtWin->WScreen);
  890.     DataAnnounceAmount(filterGUI);
  891.     GF_ReplyIMsg(imsg);
  892.     DataSitNSpin(FP_FilterSpecs[GID_FPAMNTFROM]->gs_Gadget,filtWin);
  893.        return (FALSE);
  894.  }
  895.  else {
  896.     DataStoreAmnt(&temp->amountFrom,newamntstr );
  897.  }
  898.  
  899.  grab = ((struct StringInfo *)(FP_FilterSpecs[GID_FPAMNTTO]->gs_Gadget)->SpecialInfo)->Buffer;
  900.  if (!DataVerifyAmnt(grab,newamntstr) ) {
  901.     DisplayBeep(filtWin->WScreen);
  902.     DataAnnounceAmount(filterGUI);
  903.     GF_ReplyIMsg(imsg);
  904.     DataSitNSpin(FP_FilterSpecs[GID_FPAMNTTO]->gs_Gadget,filtWin);
  905.      return (FALSE);
  906.  }
  907.  else {
  908.     DataStoreAmnt(&temp->amountTo,newamntstr );
  909.  }
  910. }
  911.  
  912.  /* now just stuff in strings */
  913.  temp->checkfrom =(UWORD)((struct StringInfo*)(FP_FilterSpecs[GID_FPCHECKFROM]->gs_Gadget)->SpecialInfo)->LongInt;
  914.  temp->checkto =(UWORD)((struct StringInfo*)(FP_FilterSpecs[GID_FPCHECKTO]->gs_Gadget)->SpecialInfo)->LongInt;
  915.  
  916.  /* grab memo/payee fields */
  917.  grab = ((struct StringInfo *)(FP_FilterSpecs[GID_FPPAYEESTR]->gs_Gadget)->SpecialInfo)->Buffer;
  918.  strcpy(temp->payee,grab);
  919.  grab = ((struct StringInfo *)(FP_FilterSpecs[GID_FPMEMOSTR]->gs_Gadget)->SpecialInfo)->Buffer;
  920.  strcpy(temp->memo,grab);
  921.  
  922.  /* create memo/payee patterns */
  923.  ParsePatternNoCase(temp->payee,temp->payeetoken,STRINGSIZE*2+2);
  924.  ParsePatternNoCase(temp->memo,temp->memotoken,STRINGSIZE*2+2);
  925.  
  926.  
  927.  return (TRUE);
  928. }
  929.