home *** CD-ROM | disk | FTP | other *** search
- /* searchPanel.c
- *
- * defines the GUIFront characteristics of the search panel
- */
-
- #include <stdio.h>
- #include <intuition/gadgetclass.h>
- #include <clib/dos_protos.h>
- #include "amiCheck.h"
- #include "regGadget.h"
- #include "searchPanel.h"
- #include "dataBase.h"
- #include <string.h>
-
- /* prototypes */
- BOOL SearchHandleGadget(struct IntuiMessage *);
- BOOL SearchHandleKey(struct IntuiMessage *);
- void SearchInit(void);
- BOOL SearchGoodbye(struct IntuiMessage *, searchState *);
-
- BOOL searchretval;
- ExtErrorData SearchExtData;
- GUIFront *searchGUI;
- searchState tempsearch;
- struct Window *searchWin;
-
- /* define gadgetspec */
- GadgetSpec SEPgadgetspecs[] =
- {
- {CHECKBOX_KIND,0,0, {0,0,0,0,"C_heck Number",NULL,GID_SEPCHECK,
- PLACETEXT_LEFT},NULL,GS_DefaultTags},
-
- {CHECKBOX_KIND,0,0, {0,0,0,0,"_Name Field",NULL,GID_SEPNAME,
- PLACETEXT_LEFT},NULL,GS_DefaultTags},
-
- {CHECKBOX_KIND,0,0, {0,0,0,0,"_Memo Field",NULL,GID_SEPMEMO,
- PLACETEXT_LEFT},NULL,GS_DefaultTags},
-
- {CHECKBOX_KIND,0,0, {0,0,0,0,"Transaction Dat_e",NULL,GID_SEPDATE,
- PLACETEXT_LEFT},NULL,GS_DefaultTags},
-
- {CHECKBOX_KIND,0,0, {0,0,0,0,"_Amount",NULL,GID_SEPAMNT,
- PLACETEXT_LEFT},NULL,GS_DefaultTags},
-
- {CHECKBOX_KIND,0,0, {0,0,0,0,"Cate_gory",NULL,GID_SEPCATEGORY,
- PLACETEXT_LEFT},NULL,GS_DefaultTags},
-
- {INTEGER_KIND, 20,0, {0,0,0,0,NULL,NULL,GID_SEPSCHECK,
- PLACETEXT_RIGHT},strCheckTags,GS_DefaultTags},
-
- {STRING_KIND, 20,0, {0,0,0,0,NULL,NULL,GID_SEPSNAME,
- PLACETEXT_RIGHT},strNameTags,GS_DefaultTags},
-
-
- {STRING_KIND, 20,0, {0,0,0,0,NULL,NULL,GID_SEPSMEMO,
- PLACETEXT_RIGHT},strMemoTags,GS_DefaultTags},
-
-
- {STRING_KIND, 20,0, {0,0,0,0,NULL,NULL,GID_SEPSDATE,
- PLACETEXT_RIGHT},strDateTags,GS_DefaultTags},
-
-
- {STRING_KIND, 20,0, {0,0,0,0,NULL,NULL,GID_SEPSAMNT,
- PLACETEXT_RIGHT},strAmntTags,GS_DefaultTags},
-
- {STRING_KIND, 20,0, {0,0,0,0,NULL,NULL,GID_SEPSCATEGORY,
- PLACETEXT_RIGHT},strNameTags,GS_DefaultTags},
-
- {BUTTON_KIND,0,0,{0,0,0,0,"_OK", NULL, GID_SEPOK,
- PLACETEXT_IN}, NULL, GS_DefaultTags},
-
- {BUTTON_KIND,0,0,{0,0,0,0,"_Cancel", NULL, GID_SEPCANCEL,
- PLACETEXT_IN}, NULL, GS_DefaultTags},
-
- };
-
- /* set up array of pointers to our specs */
- GadgetSpec *SEP_SearchSpecs[] =
- {
- &SEPgadgetspecs[0],
- &SEPgadgetspecs[1],
- &SEPgadgetspecs[2],
- &SEPgadgetspecs[3],
- &SEPgadgetspecs[4],
- &SEPgadgetspecs[5],
- &SEPgadgetspecs[6],
- &SEPgadgetspecs[7],
- &SEPgadgetspecs[8],
- &SEPgadgetspecs[9],
- &SEPgadgetspecs[10],
- &SEPgadgetspecs[11],
- &SEPgadgetspecs[12],
- &SEPgadgetspecs[13],
- NULL,
- };
-
-
- /* define the layout of this panel */
- ULONG SEP_SearchPanel[] =
- {
- GUIL_Flags, GUILF_PropShare | GUILF_EqualWidth,
-
- GUIL_HorizGroup, 1,
- GUIL_Flags, GUILF_PropShare | GUILF_EqualHeight,
- GUIL_FrameType, GUILFT_Recess,
-
- GUIL_VertGroup, 1,
- GUIL_Flags, GUILF_LabelAlign | GUILF_EqualWidth,
- GUIL_FrameType, GUILFT_Ridge,
- GUIL_FrameHeadline, "Search Criteria",
-
- GUIL_HorizGroup,1,
- GUIL_GadgetSpecID, GID_SEPCHECK,
- GUIL_GadgetSpecID, GID_SEPSCHECK,
- TAG_DONE,
-
- GUIL_HorizGroup,1,
- GUIL_GadgetSpecID, GID_SEPDATE,
- GUIL_GadgetSpecID, GID_SEPSDATE,
- TAG_DONE,
-
- GUIL_HorizGroup,1,
- GUIL_GadgetSpecID, GID_SEPAMNT,
- GUIL_GadgetSpecID, GID_SEPSAMNT,
- TAG_DONE,
-
- GUIL_HorizGroup,1,
- GUIL_GadgetSpecID, GID_SEPNAME,
- GUIL_GadgetSpecID, GID_SEPSNAME,
- TAG_DONE,
-
- GUIL_HorizGroup,1,
- GUIL_GadgetSpecID, GID_SEPMEMO,
- GUIL_GadgetSpecID, GID_SEPSMEMO,
- TAG_DONE,
-
- GUIL_HorizGroup,1,
- GUIL_GadgetSpecID, GID_SEPCATEGORY,
- GUIL_GadgetSpecID, GID_SEPSCATEGORY,
- TAG_DONE,
-
- TAG_DONE,
-
- TAG_DONE,
-
- GUIL_HorizGroup,1,
- GUIL_Flags, GUILF_EqualSize | GUILF_EqualWidth,
-
- GUIL_GadgetSpecID, GID_SEPOK,
- GUIL_GadgetSpecID, GID_SEPCANCEL,
-
- TAG_DONE,
-
- TAG_DONE,
- };
-
-
- /****************************************************
- * SearchGUI ()
- *
- * Creates the GUI for the search panel.
- *****************************************************/
- BOOL SearchGUI(UWORD *row)
- {
- BOOL done = FALSE;
- BOOL noreply = TRUE;
- ULONG signal;
-
- AmiLock();
-
-
- GF_SetGUIAttr(searchGUI, GUI_OpenGUI, TRUE, TAG_DONE);
- /* grab window */
- GF_GetGUIAttr(searchGUI,GUI_Window,&searchWin,TAG_DONE);
- SearchInit();
-
-
- /* Process input events */
- while (!done)
- {
- struct IntuiMessage *imsg;
-
- /* Wait for an event to occur */
-
- signal = GF_Wait(guiapp,AmigaGuideSignal(agc));
- if (signal & AmigaGuideSignal(agc)) {
- AmiHelpMsg();
- continue;
- }
-
- /* We only bother to listen for CLOSEWINDOW events.
- * Of course, in a real application, you would be
- * examining the Class field for IDCMP_GADGETUP
- * messages and act accordingly.
- */
-
- while (imsg = GF_GetIMsg(guiapp))
- {
- noreply = TRUE;
- switch (imsg->Class) {
- case IDCMP_REFRESHWINDOW:
- RegRefresh(TRUE);
- break;
-
- case IDCMP_CLOSEWINDOW:
- done = TRUE;
- break;
-
- case IDCMP_GADGETUP:
- noreply = FALSE;
- done=SearchHandleGadget(imsg);
- break;
-
- case IDCMP_RAWKEY:
- noreply = FALSE;
- done = SearchHandleKey(imsg);
- break;
- }
-
-
- if (noreply)
- GF_ReplyIMsg(imsg);
- }
- }
-
- GF_SetGUIAttr(searchGUI, GUI_OpenGUI, FALSE, TAG_DONE);
- AmiUnlock();
-
- return (searchretval);
- }
-
- /***************************************************
- * SearchHandleKey()
- *
- * Handles gadget events for this panel
- ****************************************************/
- BOOL SearchHandleKey(struct IntuiMessage *imsg)
- {
- BOOL done = FALSE;
- UWORD code = imsg->Code;
- WORD entry = -1;
-
-
- switch (code) {
- case 0x42:
- if (tempsearch.check)
- entry = GID_SEPSCHECK;
- else if (tempsearch.date)
- entry = GID_SEPSDATE;
- else if (tempsearch.amnt)
- entry = GID_SEPSAMNT;
- else if (tempsearch.name)
- entry = GID_SEPSNAME;
- else if (tempsearch.memo)
- entry = GID_SEPSMEMO;
- else if (tempsearch.category)
- entry = GID_SEPSCATEGORY;
-
- if (entry != -1) {
- GF_ReplyIMsg(imsg);
- /*DataSitNSpin();*/
- if (!simpleRefresh)
- ActivateGadget(SEP_SearchSpecs[entry]->gs_Gadget,searchWin,NULL);
- return (FALSE);
- }
-
- break;
-
- default:
- AmiHelpKey(imsg,SEARCH_PANEL);
- break;
- }
-
- GF_ReplyIMsg(imsg);
- return (done);
- }
-
- /***************************************************
- * SearchHandleGadget()
- *
- * Handles gadget events for this panel
- ****************************************************/
- BOOL SearchHandleGadget(struct IntuiMessage *imsg)
- {
- BOOL done = FALSE;
- struct Gadget *gad = (struct Gadget *)(imsg->IAddress);
- UWORD code = imsg->Code;
- char amntstr[AMNTSIZE+1];
- char datestr[DATESIZE+1];
-
- switch (gad->GadgetID) {
-
- case GID_SEPCHECK:
- tempsearch.check = code;
- GF_SetGadgetAttrs (searchGUI, SEP_SearchSpecs[GID_SEPSCHECK]->gs_Gadget,
- GA_Disabled, !tempsearch.check,
- TAG_DONE);
- break;
-
- case GID_SEPDATE:
- tempsearch.date = code;
- GF_SetGadgetAttrs (searchGUI, SEP_SearchSpecs[GID_SEPSDATE]->gs_Gadget,
- GA_Disabled, !tempsearch.date,
- TAG_DONE);
- break;
-
- case GID_SEPAMNT:
- tempsearch.amnt = code;
- GF_SetGadgetAttrs (searchGUI, SEP_SearchSpecs[GID_SEPSAMNT]->gs_Gadget,
- GA_Disabled, !tempsearch.amnt,
- TAG_DONE);
- break;
-
- case GID_SEPNAME:
- tempsearch.name = code;
- GF_SetGadgetAttrs (searchGUI, SEP_SearchSpecs[GID_SEPSNAME]->gs_Gadget,
- GA_Disabled, !tempsearch.name,
- TAG_DONE);
- break;
-
- case GID_SEPMEMO:
- tempsearch.memo = code;
- GF_SetGadgetAttrs (searchGUI, SEP_SearchSpecs[GID_SEPSMEMO]->gs_Gadget,
- GA_Disabled, !tempsearch.memo,
- TAG_DONE);
- break;
-
- case GID_SEPCATEGORY:
- tempsearch.category = code;
- GF_SetGadgetAttrs (searchGUI, SEP_SearchSpecs[GID_SEPSCATEGORY]->gs_Gadget,
- GA_Disabled, !tempsearch.category,
- TAG_DONE);
- break;
-
- case GID_SEPSCHECK:
- tempsearch.checknum = (UWORD)((struct StringInfo*)gad->SpecialInfo)->LongInt;
- break;
-
- case GID_SEPSNAME:
- strcpy(tempsearch.namestr,((struct StringInfo*)gad->SpecialInfo)->Buffer);
- break;
-
- case GID_SEPSMEMO:
- strcpy(tempsearch.memostr,((struct StringInfo*)gad->SpecialInfo)->Buffer);
- break;
-
- case GID_SEPSCATEGORY:
- strcpy(tempsearch.catstr,((struct StringInfo*)gad->SpecialInfo)->Buffer);
- break;
-
- case GID_SEPSAMNT:
- if (!DataVerifyAmnt(((struct StringInfo*)gad->SpecialInfo)->Buffer,amntstr) ) {
- DisplayBeep(searchWin->WScreen);
- DataAnnounceAmount(searchGUI);
- GF_ReplyIMsg(imsg);
- DataSitNSpin(SEP_SearchSpecs[GID_SEPSAMNT]->gs_Gadget,searchWin);
- return (done);
- }
- else {
- DataStoreAmnt(&tempsearch.amount,amntstr );
-
- GF_SetGadgetAttrs(searchGUI,SEP_SearchSpecs[GID_SEPSAMNT]->gs_Gadget,
- GTST_String,amntstr,
- TAG_DONE);
- }
- break;
-
- case GID_SEPSDATE:
- if (!DataVerifyDate(((struct StringInfo*)gad->SpecialInfo)->Buffer,datestr) ) {
- DisplayBeep(searchWin->WScreen);
- DataAnnounceDate(searchGUI);
- GF_ReplyIMsg(imsg);
- DataSitNSpin(SEP_SearchSpecs[GID_SEPSDATE]->gs_Gadget,searchWin);
- return (done);
- }
- else {
- DataStoreDate(&tempsearch.searchdate,datestr );
- GF_SetGadgetAttrs(searchGUI,SEP_SearchSpecs[GID_SEPSDATE]->gs_Gadget,
- GTST_String,datestr,
- TAG_DONE);
- }
- break;
-
- case GID_SEPCANCEL:
- done = TRUE;
- break;
-
- case GID_SEPOK:
- if (SearchGoodbye(imsg,&tempsearch)) {
- amiChangedItems = TRUE;
- memcpy(&searchControl,&tempsearch,sizeof(searchState));
- searchControl.lastrow = -1;
- searchretval = TRUE;
- done = TRUE;
- }
- else return (FALSE);
- break;
- }
-
- GF_ReplyIMsg(imsg);
- return (done);
- }
-
- /****************************************************
- * SearchInit()
- *
- * Set up some globals
- *****************************************************/
- void SearchInit(void)
- {
- char datestr[DATESIZE+1];
- char amntstr[AMNTSIZE+1];
-
- memcpy(&tempsearch,&searchControl,sizeof(searchState));
-
- /* grab window */
- GF_GetGUIAttr(searchGUI,GUI_Window,&searchWin,TAG_DONE);
-
- /* set gadgets */
- GF_SetGadgetAttrs (searchGUI, SEP_SearchSpecs[GID_SEPCHECK]->gs_Gadget,
- GTCB_Checked, tempsearch.check,
- TAG_DONE);
- GF_SetGadgetAttrs (searchGUI, SEP_SearchSpecs[GID_SEPAMNT]->gs_Gadget,
- GTCB_Checked, tempsearch.amnt,
- TAG_DONE);
- GF_SetGadgetAttrs (searchGUI, SEP_SearchSpecs[GID_SEPDATE]->gs_Gadget,
- GTCB_Checked, tempsearch.date,
- TAG_DONE);
- GF_SetGadgetAttrs (searchGUI, SEP_SearchSpecs[GID_SEPNAME]->gs_Gadget,
- GTCB_Checked, tempsearch.name,
- TAG_DONE);
- GF_SetGadgetAttrs (searchGUI, SEP_SearchSpecs[GID_SEPMEMO]->gs_Gadget,
- GTCB_Checked, tempsearch.memo,
- TAG_DONE);
- GF_SetGadgetAttrs (searchGUI, SEP_SearchSpecs[GID_SEPCATEGORY]->gs_Gadget,
- GTCB_Checked, tempsearch.category,
- TAG_DONE);
-
- DataBuildAmnt(TRUE,&tempsearch.amount,amntstr);
- DataBuildDate(&tempsearch.searchdate,datestr);
-
- GF_SetGadgetAttrs (searchGUI, SEP_SearchSpecs[GID_SEPSCHECK]->gs_Gadget,
- GTIN_Number, tempsearch.checknum,
- GA_Disabled, !tempsearch.check,
- TAG_DONE);
- GF_SetGadgetAttrs (searchGUI, SEP_SearchSpecs[GID_SEPSAMNT]->gs_Gadget,
- GTST_String, amntstr,
- GA_Disabled, !tempsearch.amnt,
- TAG_DONE);
- GF_SetGadgetAttrs (searchGUI, SEP_SearchSpecs[GID_SEPSDATE]->gs_Gadget,
- GTST_String, datestr,
- GA_Disabled, !tempsearch.date,
- TAG_DONE);
- GF_SetGadgetAttrs (searchGUI, SEP_SearchSpecs[GID_SEPSNAME]->gs_Gadget,
- GTST_String, tempsearch.namestr,
- GA_Disabled, !tempsearch.name,
- TAG_DONE);
- GF_SetGadgetAttrs (searchGUI, SEP_SearchSpecs[GID_SEPSMEMO]->gs_Gadget,
- GTST_String, tempsearch.memostr,
- GA_Disabled, !tempsearch.memo,
- TAG_DONE);
- GF_SetGadgetAttrs (searchGUI, SEP_SearchSpecs[GID_SEPSCATEGORY]->gs_Gadget,
- GTST_String, tempsearch.catstr,
- GA_Disabled, !tempsearch.category,
- TAG_DONE);
-
- }
-
- /**************************************************
- * SearchGoodbye()
- *
- * grabs strings
- ***************************************************/
- BOOL SearchGoodbye(struct IntuiMessage *imsg, searchState *temp)
- {
- char *grab;
- char amntstr[AMNTSIZE+1];
- char datestr[DATESIZE+1];
-
- if (temp->date) {
- grab = ((struct StringInfo *)(SEP_SearchSpecs[GID_SEPSDATE]->gs_Gadget)->SpecialInfo)->Buffer;
- if (!DataVerifyDate(grab,datestr) ) {
- DisplayBeep(searchWin->WScreen);
- DataAnnounceDate(searchGUI);
- GF_ReplyIMsg(imsg);
- DataSitNSpin(SEP_SearchSpecs[GID_SEPSDATE]->gs_Gadget,searchWin);
- return (FALSE);
- }
- else {
- DataStoreDate(&temp->searchdate,datestr );
- }
- }
-
- if (temp->amnt) {
- grab = ((struct StringInfo *)(SEP_SearchSpecs[GID_SEPSAMNT]->gs_Gadget)->SpecialInfo)->Buffer;
- if (!DataVerifyAmnt(grab,amntstr) ) {
- DisplayBeep(searchWin->WScreen);
- DataAnnounceAmount(searchGUI);
- GF_ReplyIMsg(imsg);
- DataSitNSpin(SEP_SearchSpecs[GID_SEPSAMNT]->gs_Gadget,searchWin);
- return (FALSE);
- }
- else {
- DataStoreAmnt(&temp->amount,amntstr );
- }
- }
-
- /* just grab the rest */
- temp->checknum = (UWORD)((struct StringInfo*)(SEP_SearchSpecs[GID_SEPSCHECK]->gs_Gadget)->SpecialInfo)->LongInt;
-
- grab = ((struct StringInfo *)(SEP_SearchSpecs[GID_SEPSNAME]->gs_Gadget)->SpecialInfo)->Buffer;
- strcpy(temp->namestr,grab);
- ParsePatternNoCase(temp->namestr,temp->namestrtoken,STRINGSIZE*2 + 2);
-
- grab = ((struct StringInfo *)(SEP_SearchSpecs[GID_SEPSMEMO]->gs_Gadget)->SpecialInfo)->Buffer;
- strcpy(temp->memostr,grab);
- ParsePatternNoCase(temp->memostr,temp->memostrtoken,STRINGSIZE*2 + 2);
-
- ParsePatternNoCase(temp->catstr,temp->catstrtoken,STRINGSIZE*2 + 2);
-
- return (TRUE);
- }
-