home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
AmigActive 6
/
AACD06.ISO
/
AACD
/
Utilities
/
amiCheck
/
Source
/
filterPanel.c
< prev
next >
Wrap
C/C++ Source or Header
|
1996-02-17
|
24KB
|
929 lines
/* filterPanel.c
*
* defines the GUIFront characteristics of the filter panel
*/
#include <stdio.h>
#include <intuition/gadgetclass.h>
#include <clib/dos_protos.h>
#include "amiCheck.h"
#include "regGadget.h"
#include "edittempPanel.h"
#include "dataBase.h"
#include "filterPanel.h"
#include <string.h>
/* prototypes */
BOOL FilterHandleGadget(struct IntuiMessage *);
void FilterInit(void);
void FilterDisableCR(BOOL);
void FilterDisableAR(BOOL);
void FilterDisableDR(BOOL);
void FilterDisableCAT(BOOL);
void FilterDisablePAYEE(BOOL);
void FilterDisableMEMO(BOOL);
BOOL FilterGoodbye(struct IntuiMessage *, filterSetting *);
struct Window *filtWin;
filterSetting currFilter;
BOOL fretval;
ExtErrorData FilterExtData;
GUIFront *filterGUI;
/* quick configure of some gadgets */
STRPTR filterlabels[] =
{
"N/A",
"Yes",
"No",
NULL,
};
struct TagItem filterCycleTags[] =
{
{GTCY_Labels, filterlabels},
{TAG_DONE},
};
STRPTR rangelabels[] =
{
"N/A",
"In",
"Out",
NULL,
};
struct TagItem rangeCycleTags[] =
{
{GTCY_Labels, rangelabels},
{TAG_DONE},
};
/* define gadgetspec */
GadgetSpec FPgadgetspecs[] =
{
{CHECKBOX_KIND,0,0, {0,0,0,0,"Chec_ks",NULL,GID_FPCHECKS,
PLACETEXT_RIGHT},NULL,GS_DefaultTags},
{CHECKBOX_KIND,0,0, {0,0,0,0,"_Withdrawals",NULL,GID_FPWITHDRAWALS,
PLACETEXT_RIGHT},NULL,GS_DefaultTags},
{CHECKBOX_KIND,0,0, {0,0,0,0,"_Deposits",NULL,GID_FPDEPOSITS,
PLACETEXT_RIGHT},NULL,GS_DefaultTags},
{CYCLE_KIND,0,1, {0,0,0,0,"_Checks",NULL,GID_FPCHECKRANGE,
PLACETEXT_LEFT},rangeCycleTags,GS_DefaultTags | GS_NoHeightExtend},
{INTEGER_KIND,11,1, {0,0,0,0,"From (_1)",NULL,GID_FPCHECKFROM,
PLACETEXT_LEFT},strCheckTags,GS_DefaultTags},
{INTEGER_KIND,11,1, {0,0,0,0,"To (_2)",NULL,GID_FPCHECKTO,
PLACETEXT_LEFT},strCheckTags,GS_DefaultTags},
{CYCLE_KIND,0,1, {0,0,0,0,"_Amounts",NULL,GID_FPAMNTRANGE,
PLACETEXT_LEFT},rangeCycleTags,GS_DefaultTags | GS_NoHeightExtend},
{STRING_KIND,11,1, {0,0,0,0,"From (_3)",NULL,GID_FPAMNTFROM,
PLACETEXT_LEFT},strAmntTags,GS_DefaultTags},
{STRING_KIND,11,1, {0,0,0,0,"To (_4)",NULL,GID_FPAMNTTO,
PLACETEXT_LEFT},strAmntTags,GS_DefaultTags},
{CYCLE_KIND,0,1, {0,0,0,0,"_Printed",NULL,GID_FPPRINTED,
PLACETEXT_LEFT},filterCycleTags,GS_DefaultTags | GS_NoHeightExtend },
{CYCLE_KIND,0,1, {0,0,0,0,"_Voided",NULL,GID_FPVOIDED,
PLACETEXT_LEFT},filterCycleTags,GS_DefaultTags | GS_NoHeightExtend},
{CYCLE_KIND,0,1, {0,0,0,0,"C_leared",NULL,GID_FPCLEARED,
PLACETEXT_LEFT},filterCycleTags,GS_DefaultTags | GS_NoHeightExtend},
{CYCLE_KIND,0,1, {0,0,0,0,"Ta_x Deduct",NULL,GID_FPTAX,
PLACETEXT_LEFT},filterCycleTags,GS_DefaultTags | GS_NoHeightExtend},
{CYCLE_KIND,0,1, {0,0,0,0,"Categor_y",NULL,GID_FPUSECAT,
PLACETEXT_LEFT},rangeCycleTags,GS_DefaultTags | GS_NoHeightExtend},
{LISTVIEW_KIND,21,5, {0,0,0,0,NULL,NULL,GID_FPCATEGORY,
PLACETEXT_ABOVE},ListView,GS_DefaultTags},
{CYCLE_KIND,0,1, {0,0,0,0,"_Reconciled",NULL,GID_FPRECONCILED,
PLACETEXT_LEFT},filterCycleTags,GS_DefaultTags | GS_NoHeightExtend},
{CYCLE_KIND,0,1, {0,0,0,0,"Date_s",NULL,GID_FPDATERANGE,
PLACETEXT_LEFT},rangeCycleTags,GS_DefaultTags | GS_NoHeightExtend},
{STRING_KIND,11,1, {0,0,0,0,"From (_5)",NULL,GID_FPDATEFROM,
PLACETEXT_LEFT},strDateTags,GS_DefaultTags},
{STRING_KIND,11,1, {0,0,0,0,"To (_6)",NULL,GID_FPDATETO,
PLACETEXT_LEFT},strDateTags,GS_DefaultTags},
{BUTTON_KIND,0,0,{0,0,0,0,"_OK", NULL, GID_FPOK,
PLACETEXT_IN}, NULL, GS_DefaultTags},
{BUTTON_KIND,0,0,{0,0,0,0,"_Cancel", NULL, GID_FPCANCEL,
PLACETEXT_IN}, NULL, GS_DefaultTags},
{CYCLE_KIND,0,1, {0,0,0,0,"_Name",NULL,GID_FPPAYEE,
PLACETEXT_LEFT},rangeCycleTags,GS_DefaultTags | GS_NoHeightExtend},
{STRING_KIND,11,1, {0,0,0,0,"(_7)",NULL,GID_FPPAYEESTR,
PLACETEXT_LEFT},strNameTags,GS_DefaultTags},
{CYCLE_KIND,0,1, {0,0,0,0,"_Memo",NULL,GID_FPMEMO,
PLACETEXT_LEFT},rangeCycleTags,GS_DefaultTags | GS_NoHeightExtend},
{STRING_KIND,11,1, {0,0,0,0,"(_8)",NULL,GID_FPMEMOSTR,
PLACETEXT_LEFT},strNameTags,GS_DefaultTags},
};
/* set up array of pointers to our specs */
GadgetSpec *FP_FilterSpecs[] =
{
&FPgadgetspecs[0],
&FPgadgetspecs[1],
&FPgadgetspecs[2],
&FPgadgetspecs[3],
&FPgadgetspecs[4],
&FPgadgetspecs[5],
&FPgadgetspecs[6],
&FPgadgetspecs[7],
&FPgadgetspecs[8],
&FPgadgetspecs[9],
&FPgadgetspecs[10],
&FPgadgetspecs[11],
&FPgadgetspecs[12],
&FPgadgetspecs[13],
&FPgadgetspecs[14],
&FPgadgetspecs[15],
&FPgadgetspecs[16],
&FPgadgetspecs[17],
&FPgadgetspecs[18],
&FPgadgetspecs[19],
&FPgadgetspecs[20],
&FPgadgetspecs[21],
&FPgadgetspecs[22],
&FPgadgetspecs[23],
&FPgadgetspecs[24],
NULL,
};
/* define the layout of this panel */
ULONG FP_FilterPanel[] =
{
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_EqualWidth | GUILF_PropShare,
GUIL_VertGroup, 1,
GUIL_FrameType, GUILFT_Ridge,
GUIL_FrameHeadline, "Types",
GUIL_GadgetSpecID, GID_FPCHECKS,
GUIL_GadgetSpecID, GID_FPWITHDRAWALS,
GUIL_GadgetSpecID, GID_FPDEPOSITS,
TAG_DONE,
GUIL_VertGroup, 1,
GUIL_Flags, GUILF_LabelAlign,
GUIL_FrameType, GUILFT_Ridge,
GUIL_FrameHeadline, "Characteristics",
GUIL_GadgetSpecID, GID_FPCLEARED,
GUIL_GadgetSpecID, GID_FPVOIDED,
GUIL_GadgetSpecID, GID_FPTAX,
GUIL_GadgetSpecID, GID_FPRECONCILED,
GUIL_GadgetSpecID, GID_FPPRINTED,
TAG_DONE,
TAG_DONE,
GUIL_HorizGroup,3,
GUIL_FrameType, GUILFT_Ridge,
GUIL_FrameHeadline, "Range Settings",
GUIL_VertGroup, 2,
GUIL_Flags, GUILF_LabelAlign,
GUIL_VertGroup,0,
GUIL_Flags, GUILF_LabelAlign,
GUIL_GadgetSpecID, GID_FPCHECKRANGE,
GUIL_GadgetSpecID, GID_FPCHECKFROM,
GUIL_GadgetSpecID, GID_FPCHECKTO,
TAG_DONE,
GUIL_VertGroup,0,
GUIL_Flags, GUILF_LabelAlign,
GUIL_GadgetSpecID, GID_FPAMNTRANGE,
GUIL_GadgetSpecID, GID_FPAMNTFROM,
GUIL_GadgetSpecID, GID_FPAMNTTO,
TAG_DONE,
GUIL_VertGroup,0,
GUIL_Flags, GUILF_LabelAlign,
GUIL_GadgetSpecID, GID_FPDATERANGE,
GUIL_GadgetSpecID, GID_FPDATEFROM,
GUIL_GadgetSpecID, GID_FPDATETO,
TAG_DONE,
TAG_DONE,
GUIL_VertGroup,1,
GUIL_Flags, GUILF_LabelAlign | GUILF_PropShare,
GUIL_VertGroup,0,
GUIL_Flags, GUILF_LabelAlign,
GUIL_GadgetSpecID, GID_FPPAYEE,
GUIL_GadgetSpecID, GID_FPPAYEESTR,
TAG_DONE,
GUIL_VertGroup,0,
GUIL_Flags, GUILF_LabelAlign,
GUIL_GadgetSpecID, GID_FPMEMO,
GUIL_GadgetSpecID, GID_FPMEMOSTR,
TAG_DONE,
GUIL_VertGroup, 0,
GUIL_Flags, GUILF_PropShare,
GUIL_GadgetSpecID, GID_FPUSECAT,
GUIL_GadgetSpecID, GID_FPCATEGORY,
TAG_DONE,
TAG_DONE,
TAG_DONE,
TAG_DONE,
GUIL_HorizGroup,1,
GUIL_Flags, GUILF_EqualSize | GUILF_EqualWidth,
GUIL_GadgetSpecID, GID_FPOK,
GUIL_GadgetSpecID, GID_FPCANCEL,
TAG_DONE,
TAG_DONE,
};
/****************************************************
* FilterGUI ()
*
* Creates the GUI for the filter panel.
*****************************************************/
BOOL FilterGUI(void)
{
BOOL replyval, done = FALSE;
UWORD ordinal;
categoryNode *cat;
ULONG signal;
AmiLock();
GF_SetGUIAttr(filterGUI,GUI_OpenGUI,TRUE, TAG_DONE);
/* grab window */
GF_GetGUIAttr(filterGUI,GUI_Window,&filtWin,TAG_DONE);
FilterInit();
#if 1
/* 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))
{
replyval = FALSE;
switch (imsg->Class) {
case IDCMP_REFRESHWINDOW:
RegRefresh(TRUE);
break;
case IDCMP_CLOSEWINDOW:
done = TRUE;
fretval = FALSE;
break;
case IDCMP_RAWKEY:
/* check for tab key */
if (GF_ProcessListView(filterGUI,FP_FilterSpecs[GID_FPCATEGORY],
imsg,&ordinal)) {
cat = (categoryNode *)DataOrd2Node(&categories,ordinal);
strncpy(currFilter.category,cat->node.ln_Name,CATNAMESIZE);
}
else AmiHelpKey(imsg,FILTER_PANEL);
break;
case IDCMP_GADGETUP:
replyval = FALSE;
done=FilterHandleGadget(imsg);
break;
}
if (replyval) GF_ReplyIMsg(imsg);
}
}
#endif
GF_SetGadgetAttrs (filterGUI, FP_FilterSpecs[GID_FPCATEGORY]->gs_Gadget,
GTLV_Labels, ~0,
TAG_DONE);
GF_SetGUIAttr(filterGUI, GUI_OpenGUI, FALSE, TAG_DONE);
AmiUnlock();
return (fretval);
}
/***************************************************
* FilterHandleGadget()
*
* Handles gadget events for this panel
****************************************************/
BOOL FilterHandleGadget(struct IntuiMessage *imsg)
{
struct Gadget *gad = (struct Gadget *)(imsg->IAddress);
UWORD code = imsg->Code;
BOOL done = FALSE;
categoryNode *cat;
char newamntstr[AMNTSIZE+1];
char newdatestr[DATESIZE+1];
switch (gad->GadgetID) {
case GID_FPCHECKS:
currFilter.checks = code;
break;
case GID_FPWITHDRAWALS:
currFilter.withdrawals = code;
break;
case GID_FPDEPOSITS:
currFilter.deposits = code;
break;
case GID_FPPRINTED:
switch (code) {
case FILTERNA:
currFilter.andflag &= ~PRINTED;
currFilter.notflag &= ~PRINTED;
break;
case FILTERYES:
currFilter.andflag |= PRINTED;
currFilter.notflag &= ~PRINTED;
break;
case FILTERNO:
currFilter.andflag &= ~PRINTED;
currFilter.notflag |= PRINTED;
break;
}
currFilter.printcode = code;
break;
case GID_FPCLEARED:
switch (code) {
case FILTERNA:
currFilter.andflag &= ~CLEARED;
currFilter.notflag &= ~CLEARED;
break;
case FILTERYES:
currFilter.andflag |= CLEARED;
currFilter.notflag &= ~CLEARED;
break;
case FILTERNO:
currFilter.andflag &= ~CLEARED;
currFilter.notflag |= CLEARED;
break;
}
currFilter.clearcode = code;
break;
case GID_FPVOIDED:
switch (code) {
case FILTERNA:
currFilter.andflag &= ~VOIDED;
currFilter.notflag &= ~VOIDED;
break;
case FILTERYES:
currFilter.andflag |= VOIDED;
currFilter.notflag &= ~VOIDED;
break;
case FILTERNO:
currFilter.andflag &= ~VOIDED;
currFilter.notflag |= VOIDED;
break;
}
currFilter.voidcode = code;
break;
case GID_FPTAX:
switch (code) {
case FILTERNA:
currFilter.andflag &= ~TAXDEDUCT;
currFilter.notflag &= ~TAXDEDUCT;
break;
case FILTERYES:
currFilter.andflag |= TAXDEDUCT;
currFilter.notflag &= ~TAXDEDUCT;
break;
case FILTERNO:
currFilter.andflag &= ~TAXDEDUCT;
currFilter.notflag |= TAXDEDUCT;
break;
}
currFilter.taxcode = code;
break;
case GID_FPRECONCILED:
switch (code) {
case FILTERNA:
currFilter.andflag &= ~RECONCILED;
currFilter.notflag &= ~RECONCILED;
break;
case FILTERYES:
currFilter.andflag |= RECONCILED;
currFilter.notflag &= ~RECONCILED;
break;
case FILTERNO:
currFilter.andflag &= ~RECONCILED;
currFilter.notflag |= RECONCILED;
break;
}
currFilter.reconcilecode = code;
break;
case GID_FPAMNTRANGE:
currFilter.amntrange = code;
FilterDisableAR(!code);
break;
case GID_FPCHECKRANGE:
currFilter.checkrange = code;
FilterDisableCR(!code);
break;
case GID_FPCHECKFROM:
currFilter.checkfrom =(UWORD)((struct StringInfo*)gad->SpecialInfo)->LongInt;
break;
case GID_FPCHECKTO:
currFilter.checkto =(UWORD)((struct StringInfo*)gad->SpecialInfo)->LongInt;
break;
case GID_FPAMNTFROM:
/* special case return early.... activated gadget */
if (!DataVerifyAmnt(((struct StringInfo*)gad->SpecialInfo)->Buffer,newamntstr) ) {
DisplayBeep(filtWin->WScreen);
DataAnnounceAmount(filterGUI);
GF_ReplyIMsg(imsg);
DataSitNSpin(FP_FilterSpecs[GID_FPAMNTFROM]->gs_Gadget,filtWin);
return (done);
}
else {
DataStoreAmnt(&currFilter.amountFrom,newamntstr );
GF_SetGadgetAttrs(filterGUI,FP_FilterSpecs[GID_FPAMNTFROM]->gs_Gadget,
GTST_String,newamntstr,
TAG_DONE);
}
break;
case GID_FPAMNTTO:
/* special case return early.... activated gadget */
if (!DataVerifyAmnt(((struct StringInfo*)gad->SpecialInfo)->Buffer,newamntstr) ) {
DisplayBeep(filtWin->WScreen);
DataAnnounceAmount(filterGUI);
GF_ReplyIMsg(imsg);
DataSitNSpin(FP_FilterSpecs[GID_FPAMNTTO]->gs_Gadget,filtWin);
return (done);
}
else {
DataStoreAmnt(&currFilter.amountTo,newamntstr );
GF_SetGadgetAttrs(filterGUI,FP_FilterSpecs[GID_FPAMNTTO]->gs_Gadget,
GTST_String,newamntstr,
TAG_DONE);
}
break;
case GID_FPMEMO:
currFilter.usememo = code;
FilterDisableMEMO(!code);
break;
case GID_FPPAYEE:
currFilter.usepayee = code;
FilterDisablePAYEE(!code);
break;
case GID_FPPAYEESTR:
strcpy(currFilter.payee,((struct StringInfo*)gad->SpecialInfo)->Buffer);
break;
case GID_FPMEMOSTR:
strcpy(currFilter.payee,((struct StringInfo*)gad->SpecialInfo)->Buffer);
break;
case GID_FPUSECAT:
currFilter.usecategory = code;
FilterDisableCAT(!code);
break;
case GID_FPCATEGORY:
cat = (categoryNode *)DataOrd2Node(&categories,code);
strncpy(currFilter.category,cat->catname,CATNAMESIZE);
break;
case GID_FPDATERANGE:
currFilter.daterange = code;
FilterDisableDR(!code);
break;
case GID_FPDATEFROM:
/* special case return early.... activated gadget */
if (!DataVerifyDate(((struct StringInfo*)gad->SpecialInfo)->Buffer,newdatestr) ) {
DisplayBeep(filtWin->WScreen);
DataAnnounceDate(filterGUI);
GF_ReplyIMsg(imsg);
DataSitNSpin(FP_FilterSpecs[GID_FPDATEFROM]->gs_Gadget,filtWin);
return (done);
}
else {
DataStoreDate(&currFilter.dateFrom,newdatestr );
GF_SetGadgetAttrs(filterGUI,FP_FilterSpecs[GID_FPDATEFROM]->gs_Gadget,
GTST_String,newdatestr,
TAG_DONE);
}
break;
case GID_FPDATETO:
/* special case return early.... activated gadget */
if (!DataVerifyDate(((struct StringInfo*)gad->SpecialInfo)->Buffer,newdatestr) ) {
DisplayBeep(filtWin->WScreen);
DataAnnounceDate(filterGUI);
GF_ReplyIMsg(imsg);
DataSitNSpin(FP_FilterSpecs[GID_FPDATETO]->gs_Gadget,filtWin);
return (done);
}
else {
DataStoreDate(&currFilter.dateTo,newdatestr );
GF_SetGadgetAttrs(filterGUI,FP_FilterSpecs[GID_FPDATETO]->gs_Gadget,
GTST_String,newdatestr,
TAG_DONE);
}
break;
case GID_FPCANCEL:
fretval = FALSE;
done = TRUE;
break;
case GID_FPOK:
if (FilterGoodbye(imsg, &currFilter)) {
amiChangedItems = TRUE;
done = TRUE;
fretval = TRUE;
}
else return (FALSE);
break;
}
GF_ReplyIMsg(imsg);
return (done);
}
/****************************************************
* FilterInit()
*
* Initialize the settings
*****************************************************/
void FilterInit(void)
{
char amntfrom[AMNTSIZE], amntto[AMNTSIZE];
char strdate[DATESIZE+1];
/* grab window */
GF_GetGUIAttr(filterGUI,GUI_Window,&filtWin,TAG_DONE);
memcpy(&currFilter, &filterControl, sizeof(filterSetting));
/* update gfx */
if (currFilter.checkrange == FILTERNA)
FilterDisableCR(TRUE);
if (currFilter.amntrange == FILTERNA)
FilterDisableAR(TRUE);
if (currFilter.daterange == FILTERNA)
FilterDisableDR(TRUE);
if (currFilter.usecategory == FILTERNA)
FilterDisableCAT(TRUE);
if (currFilter.usepayee == FILTERNA)
FilterDisablePAYEE(TRUE);
if (currFilter.usememo == FILTERNA)
FilterDisableMEMO(TRUE);
GF_SetGadgetAttrs (filterGUI, FP_FilterSpecs[GID_FPCATEGORY]->gs_Gadget,
GTLV_Labels, &categories,
TAG_DONE);
GF_SetGadgetAttrs (filterGUI, FP_FilterSpecs[GID_FPCHECKS]->gs_Gadget,
GTCB_Checked,currFilter.checks,
TAG_DONE);
GF_SetGadgetAttrs (filterGUI, FP_FilterSpecs[GID_FPWITHDRAWALS]->gs_Gadget,
GTCB_Checked,currFilter.withdrawals,
TAG_DONE);
GF_SetGadgetAttrs (filterGUI, FP_FilterSpecs[GID_FPDEPOSITS]->gs_Gadget,
GTCB_Checked,currFilter.deposits,
TAG_DONE);
GF_SetGadgetAttrs (filterGUI, FP_FilterSpecs[GID_FPCHECKRANGE]->gs_Gadget,
GTCY_Active,currFilter.checkrange,
TAG_DONE);
GF_SetGadgetAttrs (filterGUI, FP_FilterSpecs[GID_FPAMNTRANGE]->gs_Gadget,
GTCY_Active,currFilter.amntrange,
TAG_DONE);
GF_SetGadgetAttrs (filterGUI, FP_FilterSpecs[GID_FPPRINTED]->gs_Gadget,
GTCY_Active,currFilter.printcode,
TAG_DONE);
GF_SetGadgetAttrs (filterGUI, FP_FilterSpecs[GID_FPVOIDED]->gs_Gadget,
GTCY_Active, currFilter.voidcode,
TAG_DONE);
GF_SetGadgetAttrs (filterGUI, FP_FilterSpecs[GID_FPCLEARED]->gs_Gadget,
GTCY_Active, currFilter.clearcode,
TAG_DONE);
GF_SetGadgetAttrs (filterGUI, FP_FilterSpecs[GID_FPTAX]->gs_Gadget,
GTCY_Active, currFilter.taxcode,
TAG_DONE);
GF_SetGadgetAttrs (filterGUI, FP_FilterSpecs[GID_FPRECONCILED]->gs_Gadget,
GTCY_Active, currFilter.reconcilecode,
TAG_DONE);
GF_SetGadgetAttrs (filterGUI, FP_FilterSpecs[GID_FPPAYEE]->gs_Gadget,
GTCY_Active, currFilter.usepayee,
TAG_DONE);
GF_SetGadgetAttrs (filterGUI, FP_FilterSpecs[GID_FPMEMO]->gs_Gadget,
GTCY_Active, currFilter.usememo,
TAG_DONE);
GF_SetGadgetAttrs (filterGUI, FP_FilterSpecs[GID_FPCHECKFROM]->gs_Gadget,
GTIN_Number, currFilter.checkfrom,
TAG_DONE);
GF_SetGadgetAttrs (filterGUI, FP_FilterSpecs[GID_FPCHECKTO]->gs_Gadget,
GTIN_Number, currFilter.checkto,
TAG_DONE);
DataBuildAmnt(TRUE,&currFilter.amountFrom,amntfrom);
DataBuildAmnt(TRUE,&currFilter.amountTo,amntto);
GF_SetGadgetAttrs (filterGUI, FP_FilterSpecs[GID_FPAMNTFROM]->gs_Gadget,
GTST_String,amntfrom,
TAG_DONE);
GF_SetGadgetAttrs (filterGUI, FP_FilterSpecs[GID_FPAMNTTO]->gs_Gadget,
GTST_String,amntto,
TAG_DONE);
GF_SetGadgetAttrs (filterGUI, FP_FilterSpecs[GID_FPPAYEESTR]->gs_Gadget,
GTST_String,currFilter.payee,
TAG_DONE);
GF_SetGadgetAttrs (filterGUI, FP_FilterSpecs[GID_FPMEMOSTR]->gs_Gadget,
GTST_String,currFilter.memo,
TAG_DONE);
GF_SetGadgetAttrs (filterGUI, FP_FilterSpecs[GID_FPUSECAT]->gs_Gadget,
GTCY_Active,currFilter.usecategory,
TAG_DONE);
GF_SetGadgetAttrs (filterGUI, FP_FilterSpecs[GID_FPCATEGORY]->gs_Gadget,
GTLV_Selected, DataNode2Ord(&categories,currFilter.category),
TAG_DONE);
/* now do the date thing */
GF_SetGadgetAttrs (filterGUI, FP_FilterSpecs[GID_FPDATERANGE]->gs_Gadget,
GTCY_Active,currFilter.daterange,
TAG_DONE);
DataBuildDate(&currFilter.dateFrom, strdate);
GF_SetGadgetAttrs (filterGUI, FP_FilterSpecs[GID_FPDATEFROM]->gs_Gadget,
GTST_String,strdate,
TAG_DONE);
DataBuildDate(&currFilter.dateTo, strdate);
GF_SetGadgetAttrs (filterGUI, FP_FilterSpecs[GID_FPDATETO]->gs_Gadget,
GTST_String,strdate,
TAG_DONE);
}
/***************************************************************
* FilterDisableCR()
*
* Disable/enable check ranging
****************************************************************/
void FilterDisableCR(BOOL dis)
{
GF_SetGadgetAttrs (filterGUI, FP_FilterSpecs[GID_FPCHECKFROM]->gs_Gadget,
GA_Disabled, dis,
TAG_DONE);
GF_SetGadgetAttrs (filterGUI, FP_FilterSpecs[GID_FPCHECKTO]->gs_Gadget,
GA_Disabled, dis,
TAG_DONE);
}
/***************************************************************
* FilterDisableAR()
*
* Disable/enable amount ranging
****************************************************************/
void FilterDisableAR(BOOL dis)
{
GF_SetGadgetAttrs (filterGUI, FP_FilterSpecs[GID_FPAMNTFROM]->gs_Gadget,
GA_Disabled, dis,
TAG_DONE);
GF_SetGadgetAttrs (filterGUI, FP_FilterSpecs[GID_FPAMNTTO]->gs_Gadget,
GA_Disabled, dis,
TAG_DONE);
}
/***************************************************************
* FilterDisablePAYEE()
*
* Disable/enable payee ranging
****************************************************************/
void FilterDisablePAYEE(BOOL dis)
{
GF_SetGadgetAttrs (filterGUI, FP_FilterSpecs[GID_FPPAYEESTR]->gs_Gadget,
GA_Disabled, dis,
TAG_DONE);
}
/***************************************************************
* FilterDisableMEMO()
*
* Disable/enable MEMO ranging
****************************************************************/
void FilterDisableMEMO(BOOL dis)
{
GF_SetGadgetAttrs (filterGUI, FP_FilterSpecs[GID_FPMEMOSTR]->gs_Gadget,
GA_Disabled, dis,
TAG_DONE);
}
/***************************************************************
* FilterDisableDR()
*
* Disable/enable date ranging
****************************************************************/
void FilterDisableDR(BOOL dis)
{
GF_SetGadgetAttrs (filterGUI, FP_FilterSpecs[GID_FPDATEFROM]->gs_Gadget,
GA_Disabled, dis,
TAG_DONE);
GF_SetGadgetAttrs (filterGUI, FP_FilterSpecs[GID_FPDATETO]->gs_Gadget,
GA_Disabled, dis,
TAG_DONE);
}
/***************************************************************
* FilterDisableCAT()
*
* Disable/enable date ranging
****************************************************************/
void FilterDisableCAT(BOOL dis)
{
GF_SetGadgetAttrs (filterGUI, FP_FilterSpecs[GID_FPCATEGORY]->gs_Gadget,
GA_Disabled, dis,
TAG_DONE);
}
/***************************************************
* FilterGoodbye()
*
* Grab strings
****************************************************/
BOOL FilterGoodbye(struct IntuiMessage *imsg, filterSetting *temp)
{
char newdatestr[DATESIZE+1];
char newamntstr[AMNTSIZE+1];
char *grab;
/* first check "special" entries */
if (temp->daterange) {
grab = ((struct StringInfo *)(FP_FilterSpecs[GID_FPDATETO]->gs_Gadget)->SpecialInfo)->Buffer;
if (!DataVerifyDate(grab,newdatestr) ) {
DisplayBeep(filtWin->WScreen);
DataAnnounceDate(filterGUI);
GF_ReplyIMsg(imsg);
DataSitNSpin(FP_FilterSpecs[GID_FPDATETO]->gs_Gadget,filtWin);
return (FALSE);
}
else {
DataStoreDate(&temp->dateTo,newdatestr);
}
grab = ((struct StringInfo *)(FP_FilterSpecs[GID_FPDATEFROM]->gs_Gadget)->SpecialInfo)->Buffer;
if (!DataVerifyDate(grab,newdatestr) ) {
DisplayBeep(filtWin->WScreen);
DataAnnounceDate(filterGUI);
GF_ReplyIMsg(imsg);
DataSitNSpin(FP_FilterSpecs[GID_FPDATEFROM]->gs_Gadget,filtWin);
return (FALSE);
}
else {
DataStoreDate(&temp->dateFrom,newdatestr);
}
}
if (temp->amntrange) {
grab = ((struct StringInfo *)(FP_FilterSpecs[GID_FPAMNTFROM]->gs_Gadget)->SpecialInfo)->Buffer;
if (!DataVerifyAmnt(grab,newamntstr) ) {
DisplayBeep(filtWin->WScreen);
DataAnnounceAmount(filterGUI);
GF_ReplyIMsg(imsg);
DataSitNSpin(FP_FilterSpecs[GID_FPAMNTFROM]->gs_Gadget,filtWin);
return (FALSE);
}
else {
DataStoreAmnt(&temp->amountFrom,newamntstr );
}
grab = ((struct StringInfo *)(FP_FilterSpecs[GID_FPAMNTTO]->gs_Gadget)->SpecialInfo)->Buffer;
if (!DataVerifyAmnt(grab,newamntstr) ) {
DisplayBeep(filtWin->WScreen);
DataAnnounceAmount(filterGUI);
GF_ReplyIMsg(imsg);
DataSitNSpin(FP_FilterSpecs[GID_FPAMNTTO]->gs_Gadget,filtWin);
return (FALSE);
}
else {
DataStoreAmnt(&temp->amountTo,newamntstr );
}
}
/* now just stuff in strings */
temp->checkfrom =(UWORD)((struct StringInfo*)(FP_FilterSpecs[GID_FPCHECKFROM]->gs_Gadget)->SpecialInfo)->LongInt;
temp->checkto =(UWORD)((struct StringInfo*)(FP_FilterSpecs[GID_FPCHECKTO]->gs_Gadget)->SpecialInfo)->LongInt;
/* grab memo/payee fields */
grab = ((struct StringInfo *)(FP_FilterSpecs[GID_FPPAYEESTR]->gs_Gadget)->SpecialInfo)->Buffer;
strcpy(temp->payee,grab);
grab = ((struct StringInfo *)(FP_FilterSpecs[GID_FPMEMOSTR]->gs_Gadget)->SpecialInfo)->Buffer;
strcpy(temp->memo,grab);
/* create memo/payee patterns */
ParsePatternNoCase(temp->payee,temp->payeetoken,STRINGSIZE*2+2);
ParsePatternNoCase(temp->memo,temp->memotoken,STRINGSIZE*2+2);
return (TRUE);
}