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