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

  1. /* searchPanel.c 
  2.  *
  3.  *  defines the GUIFront characteristics of the search 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 "searchPanel.h"
  12. #include "dataBase.h"
  13. #include <string.h>
  14.  
  15. /* prototypes */
  16. BOOL SearchHandleGadget(struct IntuiMessage *);
  17. BOOL SearchHandleKey(struct IntuiMessage *);
  18. void SearchInit(void);
  19. BOOL SearchGoodbye(struct IntuiMessage *, searchState *);
  20.  
  21. BOOL searchretval;
  22. ExtErrorData SearchExtData;
  23. GUIFront *searchGUI;
  24. searchState tempsearch;
  25. struct Window *searchWin;
  26.  
  27. /* define gadgetspec */
  28. GadgetSpec SEPgadgetspecs[] = 
  29. {
  30.     {CHECKBOX_KIND,0,0, {0,0,0,0,"C_heck Number",NULL,GID_SEPCHECK,
  31.         PLACETEXT_LEFT},NULL,GS_DefaultTags},
  32.  
  33.     {CHECKBOX_KIND,0,0, {0,0,0,0,"_Name Field",NULL,GID_SEPNAME,
  34.         PLACETEXT_LEFT},NULL,GS_DefaultTags},
  35.  
  36.     {CHECKBOX_KIND,0,0, {0,0,0,0,"_Memo Field",NULL,GID_SEPMEMO,
  37.         PLACETEXT_LEFT},NULL,GS_DefaultTags},
  38.  
  39.     {CHECKBOX_KIND,0,0, {0,0,0,0,"Transaction Dat_e",NULL,GID_SEPDATE,
  40.         PLACETEXT_LEFT},NULL,GS_DefaultTags},
  41.  
  42.     {CHECKBOX_KIND,0,0, {0,0,0,0,"_Amount",NULL,GID_SEPAMNT,
  43.         PLACETEXT_LEFT},NULL,GS_DefaultTags},
  44.  
  45.     {CHECKBOX_KIND,0,0, {0,0,0,0,"Cate_gory",NULL,GID_SEPCATEGORY,
  46.         PLACETEXT_LEFT},NULL,GS_DefaultTags},
  47.  
  48.     {INTEGER_KIND, 20,0, {0,0,0,0,NULL,NULL,GID_SEPSCHECK,
  49.         PLACETEXT_RIGHT},strCheckTags,GS_DefaultTags},
  50.  
  51.     {STRING_KIND, 20,0, {0,0,0,0,NULL,NULL,GID_SEPSNAME,
  52.         PLACETEXT_RIGHT},strNameTags,GS_DefaultTags},
  53.  
  54.  
  55.     {STRING_KIND, 20,0, {0,0,0,0,NULL,NULL,GID_SEPSMEMO,
  56.         PLACETEXT_RIGHT},strMemoTags,GS_DefaultTags},
  57.  
  58.  
  59.     {STRING_KIND, 20,0, {0,0,0,0,NULL,NULL,GID_SEPSDATE,
  60.         PLACETEXT_RIGHT},strDateTags,GS_DefaultTags},
  61.  
  62.  
  63.     {STRING_KIND, 20,0, {0,0,0,0,NULL,NULL,GID_SEPSAMNT,
  64.         PLACETEXT_RIGHT},strAmntTags,GS_DefaultTags},
  65.  
  66.     {STRING_KIND, 20,0, {0,0,0,0,NULL,NULL,GID_SEPSCATEGORY,
  67.         PLACETEXT_RIGHT},strNameTags,GS_DefaultTags},
  68.  
  69.         {BUTTON_KIND,0,0,{0,0,0,0,"_OK", NULL, GID_SEPOK,         
  70.                 PLACETEXT_IN}, NULL, GS_DefaultTags},
  71.  
  72.         {BUTTON_KIND,0,0,{0,0,0,0,"_Cancel", NULL, GID_SEPCANCEL,        
  73.                 PLACETEXT_IN}, NULL, GS_DefaultTags},
  74.  
  75. };
  76.  
  77. /* set up array of pointers to our specs */
  78. GadgetSpec *SEP_SearchSpecs[] =
  79. {
  80.         &SEPgadgetspecs[0],
  81.         &SEPgadgetspecs[1],
  82.         &SEPgadgetspecs[2],
  83.         &SEPgadgetspecs[3],
  84.         &SEPgadgetspecs[4],
  85.         &SEPgadgetspecs[5],
  86.         &SEPgadgetspecs[6],
  87.         &SEPgadgetspecs[7],
  88.         &SEPgadgetspecs[8],
  89.         &SEPgadgetspecs[9],
  90.       &SEPgadgetspecs[10],
  91.       &SEPgadgetspecs[11],
  92.       &SEPgadgetspecs[12],
  93.     &SEPgadgetspecs[13],
  94.      NULL,
  95. };
  96.  
  97.  
  98. /* define the layout of this panel */
  99. ULONG SEP_SearchPanel[] =
  100. {
  101.    GUIL_Flags, GUILF_PropShare | GUILF_EqualWidth,
  102.  
  103.    GUIL_HorizGroup, 1,
  104.         GUIL_Flags, GUILF_PropShare | GUILF_EqualHeight,
  105.     GUIL_FrameType, GUILFT_Recess,
  106.         
  107.     GUIL_VertGroup, 1,
  108.         GUIL_Flags, GUILF_LabelAlign | GUILF_EqualWidth,
  109.         GUIL_FrameType, GUILFT_Ridge,
  110.         GUIL_FrameHeadline, "Search Criteria",
  111.  
  112.         GUIL_HorizGroup,1,        
  113.         GUIL_GadgetSpecID, GID_SEPCHECK,
  114.         GUIL_GadgetSpecID, GID_SEPSCHECK,
  115.         TAG_DONE,
  116.  
  117.         GUIL_HorizGroup,1,    
  118.         GUIL_GadgetSpecID, GID_SEPDATE,
  119.         GUIL_GadgetSpecID, GID_SEPSDATE,
  120.         TAG_DONE,
  121.  
  122.         GUIL_HorizGroup,1,    
  123.         GUIL_GadgetSpecID, GID_SEPAMNT,
  124.         GUIL_GadgetSpecID, GID_SEPSAMNT,
  125.         TAG_DONE,
  126.  
  127.         GUIL_HorizGroup,1,    
  128.         GUIL_GadgetSpecID, GID_SEPNAME,
  129.         GUIL_GadgetSpecID, GID_SEPSNAME,
  130.         TAG_DONE,
  131.  
  132.         GUIL_HorizGroup,1,    
  133.         GUIL_GadgetSpecID, GID_SEPMEMO,
  134.         GUIL_GadgetSpecID, GID_SEPSMEMO,
  135.         TAG_DONE,
  136.  
  137.         GUIL_HorizGroup,1,    
  138.         GUIL_GadgetSpecID, GID_SEPCATEGORY,
  139.         GUIL_GadgetSpecID, GID_SEPSCATEGORY,
  140.         TAG_DONE,
  141.  
  142.     TAG_DONE,
  143.     
  144.     TAG_DONE,
  145.     
  146.     GUIL_HorizGroup,1,
  147.         GUIL_Flags, GUILF_EqualSize | GUILF_EqualWidth,
  148.         
  149.            GUIL_GadgetSpecID, GID_SEPOK,
  150.            GUIL_GadgetSpecID, GID_SEPCANCEL,
  151.            
  152.     TAG_DONE,   
  153.            
  154. TAG_DONE,
  155. };
  156.  
  157.  
  158. /****************************************************
  159. * SearchGUI ()
  160. *
  161. *    Creates the GUI for the search panel.
  162. *****************************************************/
  163. BOOL SearchGUI(UWORD *row)
  164. {
  165.  BOOL done = FALSE;
  166.  BOOL noreply = TRUE;
  167.  ULONG signal;
  168.     
  169.    AmiLock();
  170.  
  171.         
  172.         GF_SetGUIAttr(searchGUI, GUI_OpenGUI, TRUE, TAG_DONE);
  173.         /* grab window */
  174.          GF_GetGUIAttr(searchGUI,GUI_Window,&searchWin,TAG_DONE);
  175.         SearchInit();
  176.  
  177.  
  178.                 /* Process input events */
  179.                 while (!done)
  180.                 {
  181.                     struct IntuiMessage *imsg;
  182.  
  183.                     /* Wait for an event to occur */
  184.  
  185.                     signal = GF_Wait(guiapp,AmigaGuideSignal(agc));
  186.             if (signal & AmigaGuideSignal(agc)) {
  187.             AmiHelpMsg();
  188.             continue;
  189.             }
  190.  
  191.                     /* We only bother to listen for CLOSEWINDOW events.
  192.                      * Of course, in a real application, you would be
  193.                      * examining the Class field for IDCMP_GADGETUP
  194.                      * messages and act accordingly.
  195.                      */
  196.  
  197.                     while (imsg = GF_GetIMsg(guiapp))
  198.                     {
  199.             noreply = TRUE;
  200.                         switch (imsg->Class) {
  201.                 case IDCMP_REFRESHWINDOW:
  202.                     RegRefresh(TRUE);
  203.                     break;
  204.  
  205.                                 case IDCMP_CLOSEWINDOW:
  206.                     done = TRUE;
  207.                                         break;
  208.  
  209.                 case IDCMP_GADGETUP:
  210.                     noreply = FALSE;
  211.                     done=SearchHandleGadget(imsg);
  212.                     break;
  213.  
  214.                 case IDCMP_RAWKEY:
  215.                     noreply = FALSE;
  216.                     done = SearchHandleKey(imsg);
  217.                     break;
  218.                         }
  219.                                      
  220.                               
  221.                         if (noreply) 
  222.                 GF_ReplyIMsg(imsg);
  223.                     }
  224.                 }
  225.  
  226.    GF_SetGUIAttr(searchGUI, GUI_OpenGUI, FALSE, TAG_DONE);        
  227.    AmiUnlock();
  228.  
  229.  return (searchretval);
  230. }
  231.  
  232. /***************************************************
  233. * SearchHandleKey()
  234. *
  235. *    Handles gadget events for this panel
  236. ****************************************************/
  237. BOOL  SearchHandleKey(struct IntuiMessage *imsg)
  238. {
  239.  BOOL done = FALSE;
  240.  UWORD code = imsg->Code;
  241.  WORD entry = -1;
  242.  
  243.  
  244.  switch (code) {
  245.     case 0x42:
  246.         if (tempsearch.check) 
  247.             entry = GID_SEPSCHECK;
  248.         else if (tempsearch.date)
  249.             entry = GID_SEPSDATE;
  250.         else if (tempsearch.amnt)
  251.             entry = GID_SEPSAMNT;
  252.         else if (tempsearch.name)
  253.             entry = GID_SEPSNAME;
  254.         else if (tempsearch.memo)
  255.             entry = GID_SEPSMEMO;
  256.         else if (tempsearch.category)
  257.             entry = GID_SEPSCATEGORY;
  258.  
  259.          if (entry != -1) {
  260.                GF_ReplyIMsg(imsg);
  261.             /*DataSitNSpin();*/
  262.             if (!simpleRefresh)
  263.                    ActivateGadget(SEP_SearchSpecs[entry]->gs_Gadget,searchWin,NULL);        
  264.             return (FALSE);
  265.          }
  266.  
  267.         break;
  268.  
  269.     default:
  270.         AmiHelpKey(imsg,SEARCH_PANEL);
  271.         break;
  272.  } 
  273.  
  274.  GF_ReplyIMsg(imsg);
  275.  return (done);
  276. }
  277.  
  278. /***************************************************
  279. * SearchHandleGadget()
  280. *
  281. *    Handles gadget events for this panel
  282. ****************************************************/
  283. BOOL  SearchHandleGadget(struct IntuiMessage *imsg)
  284. {
  285.  BOOL done = FALSE;
  286.  struct Gadget *gad =  (struct Gadget *)(imsg->IAddress);
  287.  UWORD code = imsg->Code;
  288.  char amntstr[AMNTSIZE+1];
  289.  char datestr[DATESIZE+1];
  290.  
  291.  switch (gad->GadgetID) {
  292.  
  293.     case GID_SEPCHECK:
  294.         tempsearch.check = code;
  295.         GF_SetGadgetAttrs (searchGUI, SEP_SearchSpecs[GID_SEPSCHECK]->gs_Gadget,
  296.         GA_Disabled, !tempsearch.check,
  297.             TAG_DONE);
  298.         break;
  299.  
  300.     case GID_SEPDATE:
  301.         tempsearch.date = code;
  302.         GF_SetGadgetAttrs (searchGUI, SEP_SearchSpecs[GID_SEPSDATE]->gs_Gadget,
  303.         GA_Disabled, !tempsearch.date,
  304.             TAG_DONE);
  305.         break;
  306.  
  307.     case GID_SEPAMNT:
  308.         tempsearch.amnt = code;
  309.         GF_SetGadgetAttrs (searchGUI, SEP_SearchSpecs[GID_SEPSAMNT]->gs_Gadget,
  310.         GA_Disabled, !tempsearch.amnt,
  311.             TAG_DONE);
  312.         break;
  313.  
  314.     case GID_SEPNAME:
  315.         tempsearch.name = code;
  316.         GF_SetGadgetAttrs (searchGUI, SEP_SearchSpecs[GID_SEPSNAME]->gs_Gadget,
  317.         GA_Disabled, !tempsearch.name,
  318.             TAG_DONE);
  319.         break;
  320.  
  321.     case GID_SEPMEMO:
  322.         tempsearch.memo = code;
  323.         GF_SetGadgetAttrs (searchGUI, SEP_SearchSpecs[GID_SEPSMEMO]->gs_Gadget,
  324.         GA_Disabled, !tempsearch.memo,
  325.             TAG_DONE);
  326.         break;
  327.  
  328.     case GID_SEPCATEGORY:
  329.         tempsearch.category = code;
  330.         GF_SetGadgetAttrs (searchGUI, SEP_SearchSpecs[GID_SEPSCATEGORY]->gs_Gadget,
  331.         GA_Disabled, !tempsearch.category,
  332.             TAG_DONE);
  333.         break;
  334.  
  335.     case GID_SEPSCHECK:
  336.         tempsearch.checknum = (UWORD)((struct StringInfo*)gad->SpecialInfo)->LongInt;
  337.         break;
  338.  
  339.     case GID_SEPSNAME:
  340.         strcpy(tempsearch.namestr,((struct StringInfo*)gad->SpecialInfo)->Buffer);
  341.         break;
  342.  
  343.     case GID_SEPSMEMO:
  344.         strcpy(tempsearch.memostr,((struct StringInfo*)gad->SpecialInfo)->Buffer);
  345.         break;
  346.  
  347.     case GID_SEPSCATEGORY:
  348.         strcpy(tempsearch.catstr,((struct StringInfo*)gad->SpecialInfo)->Buffer);
  349.         break;
  350.  
  351.     case GID_SEPSAMNT:
  352.         if (!DataVerifyAmnt(((struct StringInfo*)gad->SpecialInfo)->Buffer,amntstr) ) {
  353.             DisplayBeep(searchWin->WScreen);
  354.             DataAnnounceAmount(searchGUI);
  355.             GF_ReplyIMsg(imsg);
  356.             DataSitNSpin(SEP_SearchSpecs[GID_SEPSAMNT]->gs_Gadget,searchWin);
  357.             return (done);
  358.         }
  359.          else {
  360.             DataStoreAmnt(&tempsearch.amount,amntstr );
  361.  
  362.             GF_SetGadgetAttrs(searchGUI,SEP_SearchSpecs[GID_SEPSAMNT]->gs_Gadget,
  363.                 GTST_String,amntstr,
  364.                 TAG_DONE);
  365.         }
  366.         break;
  367.  
  368.     case GID_SEPSDATE:
  369.         if (!DataVerifyDate(((struct StringInfo*)gad->SpecialInfo)->Buffer,datestr) ) {
  370.             DisplayBeep(searchWin->WScreen);
  371.             DataAnnounceDate(searchGUI);
  372.             GF_ReplyIMsg(imsg);
  373.             DataSitNSpin(SEP_SearchSpecs[GID_SEPSDATE]->gs_Gadget,searchWin);
  374.             return (done);
  375.         }
  376.          else {
  377.             DataStoreDate(&tempsearch.searchdate,datestr );
  378.             GF_SetGadgetAttrs(searchGUI,SEP_SearchSpecs[GID_SEPSDATE]->gs_Gadget,
  379.                 GTST_String,datestr,
  380.                 TAG_DONE);
  381.         }
  382.         break;
  383.  
  384.     case GID_SEPCANCEL:
  385.         done = TRUE;
  386.         break;
  387.                                                          
  388.     case GID_SEPOK:
  389.         if (SearchGoodbye(imsg,&tempsearch)) {
  390.             amiChangedItems = TRUE;
  391.             memcpy(&searchControl,&tempsearch,sizeof(searchState));
  392.             searchControl.lastrow = -1;
  393.             searchretval = TRUE;
  394.             done = TRUE;
  395.         }
  396.         else return (FALSE);
  397.          break;
  398.  }
  399.  
  400.  GF_ReplyIMsg(imsg);
  401.  return (done);
  402. }
  403.  
  404. /****************************************************
  405. * SearchInit()
  406. *
  407. *    Set up some globals
  408. *****************************************************/
  409. void SearchInit(void)
  410. {
  411. char datestr[DATESIZE+1];
  412. char amntstr[AMNTSIZE+1];
  413.  
  414.  memcpy(&tempsearch,&searchControl,sizeof(searchState));
  415.  
  416.  /* grab window */
  417.  GF_GetGUIAttr(searchGUI,GUI_Window,&searchWin,TAG_DONE);
  418.  
  419.  /* set gadgets */
  420.  GF_SetGadgetAttrs (searchGUI, SEP_SearchSpecs[GID_SEPCHECK]->gs_Gadget,
  421.         GTCB_Checked, tempsearch.check,
  422.         TAG_DONE);
  423.  GF_SetGadgetAttrs (searchGUI, SEP_SearchSpecs[GID_SEPAMNT]->gs_Gadget,
  424.         GTCB_Checked, tempsearch.amnt,
  425.         TAG_DONE);
  426.  GF_SetGadgetAttrs (searchGUI, SEP_SearchSpecs[GID_SEPDATE]->gs_Gadget,
  427.         GTCB_Checked, tempsearch.date,
  428.         TAG_DONE);
  429.  GF_SetGadgetAttrs (searchGUI, SEP_SearchSpecs[GID_SEPNAME]->gs_Gadget,
  430.         GTCB_Checked, tempsearch.name,
  431.         TAG_DONE); 
  432.  GF_SetGadgetAttrs (searchGUI, SEP_SearchSpecs[GID_SEPMEMO]->gs_Gadget,
  433.         GTCB_Checked, tempsearch.memo,
  434.         TAG_DONE);
  435.  GF_SetGadgetAttrs (searchGUI, SEP_SearchSpecs[GID_SEPCATEGORY]->gs_Gadget,
  436.         GTCB_Checked, tempsearch.category,
  437.         TAG_DONE);
  438.  
  439.  DataBuildAmnt(TRUE,&tempsearch.amount,amntstr);
  440.  DataBuildDate(&tempsearch.searchdate,datestr);
  441.  
  442.  GF_SetGadgetAttrs (searchGUI, SEP_SearchSpecs[GID_SEPSCHECK]->gs_Gadget,
  443.         GTIN_Number, tempsearch.checknum,
  444.         GA_Disabled, !tempsearch.check,
  445.         TAG_DONE);
  446.  GF_SetGadgetAttrs (searchGUI, SEP_SearchSpecs[GID_SEPSAMNT]->gs_Gadget,
  447.         GTST_String, amntstr,
  448.         GA_Disabled, !tempsearch.amnt,
  449.         TAG_DONE);
  450.  GF_SetGadgetAttrs (searchGUI, SEP_SearchSpecs[GID_SEPSDATE]->gs_Gadget,
  451.         GTST_String, datestr,
  452.         GA_Disabled, !tempsearch.date,
  453.         TAG_DONE);
  454.  GF_SetGadgetAttrs (searchGUI, SEP_SearchSpecs[GID_SEPSNAME]->gs_Gadget,
  455.         GTST_String, tempsearch.namestr,
  456.         GA_Disabled, !tempsearch.name,
  457.         TAG_DONE); 
  458.  GF_SetGadgetAttrs (searchGUI, SEP_SearchSpecs[GID_SEPSMEMO]->gs_Gadget,
  459.         GTST_String, tempsearch.memostr,
  460.         GA_Disabled, !tempsearch.memo,
  461.         TAG_DONE);
  462.  GF_SetGadgetAttrs (searchGUI, SEP_SearchSpecs[GID_SEPSCATEGORY]->gs_Gadget,
  463.         GTST_String, tempsearch.catstr,
  464.         GA_Disabled, !tempsearch.category,
  465.         TAG_DONE);
  466.  
  467. }
  468.  
  469. /**************************************************
  470. * SearchGoodbye()
  471. *
  472. *    grabs strings
  473. ***************************************************/
  474. BOOL SearchGoodbye(struct IntuiMessage *imsg, searchState *temp)
  475. {
  476.  char *grab;
  477.  char amntstr[AMNTSIZE+1];
  478.  char datestr[DATESIZE+1];
  479.  
  480. if (temp->date) {
  481.  grab = ((struct StringInfo *)(SEP_SearchSpecs[GID_SEPSDATE]->gs_Gadget)->SpecialInfo)->Buffer;
  482.  if (!DataVerifyDate(grab,datestr) ) {
  483.     DisplayBeep(searchWin->WScreen);
  484.     DataAnnounceDate(searchGUI);
  485.     GF_ReplyIMsg(imsg);
  486.     DataSitNSpin(SEP_SearchSpecs[GID_SEPSDATE]->gs_Gadget,searchWin);
  487.     return (FALSE);
  488.  }
  489.  else {
  490.     DataStoreDate(&temp->searchdate,datestr );
  491.  }
  492. }
  493.  
  494. if (temp->amnt) {
  495.  grab = ((struct StringInfo *)(SEP_SearchSpecs[GID_SEPSAMNT]->gs_Gadget)->SpecialInfo)->Buffer;
  496.  if (!DataVerifyAmnt(grab,amntstr) ) {
  497.     DisplayBeep(searchWin->WScreen);
  498.     DataAnnounceAmount(searchGUI);
  499.     GF_ReplyIMsg(imsg);
  500.     DataSitNSpin(SEP_SearchSpecs[GID_SEPSAMNT]->gs_Gadget,searchWin);
  501.     return (FALSE);
  502.  }
  503.  else {
  504.     DataStoreAmnt(&temp->amount,amntstr );
  505.  }
  506. }
  507.  
  508.  /* just grab the rest */
  509.  temp->checknum = (UWORD)((struct StringInfo*)(SEP_SearchSpecs[GID_SEPSCHECK]->gs_Gadget)->SpecialInfo)->LongInt;
  510.  
  511.  grab = ((struct StringInfo *)(SEP_SearchSpecs[GID_SEPSNAME]->gs_Gadget)->SpecialInfo)->Buffer; 
  512.  strcpy(temp->namestr,grab);
  513.  ParsePatternNoCase(temp->namestr,temp->namestrtoken,STRINGSIZE*2 + 2);
  514.  
  515.  grab = ((struct StringInfo *)(SEP_SearchSpecs[GID_SEPSMEMO]->gs_Gadget)->SpecialInfo)->Buffer;
  516.  strcpy(temp->memostr,grab);
  517.  ParsePatternNoCase(temp->memostr,temp->memostrtoken,STRINGSIZE*2 + 2);
  518.  
  519.  ParsePatternNoCase(temp->catstr,temp->catstrtoken,STRINGSIZE*2 + 2);
  520.  
  521.  return (TRUE);
  522. }
  523.