home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
AmigActive 6
/
AACD06.ISO
/
AACD
/
Utilities
/
amiCheck
/
Source
/
reconcilePanel.c
< prev
next >
Wrap
C/C++ Source or Header
|
1998-06-11
|
6KB
|
239 lines
/* reconcilePanel.c
*
* defines the GUIFront characteristics of the reconcile panel
*/
#include <stdio.h>
#include <intuition/gadgetclass.h>
#include "amiCheck.h"
#include "mainPanel.h"
#include "reconcilePanel.h"
#include "dataBase.h"
#include <string.h>
#include "regGadget.h"
/* prototypes */
BOOL RecHandleGadget(struct IntuiMessage *);
void RecInit(void);
ExtErrorData RecExtData;
GUIFront *recGUI;
char recstr[AMNTSIZE+1];
BOOL doit = FALSE;
/* quick configure of some gadgets */
struct TagItem warnTags[] =
{
{GTTX_Text,"If this does not match statement,"},
{TAG_DONE},
};
struct TagItem resTags[] =
{
{GTTX_Text,"POSTPONE reconcile by canceling."},
{TAG_DONE},
};
/* define gadgetspec */
GadgetSpec RCPgadgetspecs[] =
{
{TEXT_KIND,AMNTSIZE,0,{0,0,0,0,"Reconcile Result:",NULL,GID_RCPCURR,
PLACETEXT_LEFT},TxtBorder,GS_DefaultTags},
{TEXT_KIND,0,0,{0,0,0,0,NULL,NULL,GID_RCPWARN,
PLACETEXT_LEFT},warnTags,GS_DefaultTags},
{TEXT_KIND,0,0,{0,0,0,0,NULL,NULL,GID_RCPRESULTS,
PLACETEXT_LEFT},resTags,GS_DefaultTags},
{BUTTON_KIND,0,0,{0,0,0,0,"_OK", NULL, GID_RCPOK,
PLACETEXT_IN}, NULL, GS_DefaultTags},
{BUTTON_KIND,0,0,{0,0,0,0,"_Cancel", NULL, GID_RCPCANCEL,
PLACETEXT_IN}, NULL, GS_DefaultTags},
};
/* set up array of pointers to our specs */
GadgetSpec *RCP_RecSpecs[] =
{
&RCPgadgetspecs[0],
&RCPgadgetspecs[1],
&RCPgadgetspecs[2],
&RCPgadgetspecs[3],
&RCPgadgetspecs[4],
NULL,
};
/* define the layout of this panel */
ULONG RCP_RecPanel[] =
{
GUIL_Flags, GUILF_PropShare | GUILF_EqualWidth,
GUIL_HorizGroup, 2,
GUIL_Flags, GUILF_PropShare | GUILF_EqualHeight,
GUIL_FrameType, GUILFT_Recess,
GUIL_VertGroup, 3,
GUIL_Flags, GUILF_PropShare | GUILF_EqualWidth,
GUIL_GadgetSpecID, GID_RCPCURR,
GUIL_VertGroup,0,
GUIL_GadgetSpecID, GID_RCPWARN,
GUIL_GadgetSpecID, GID_RCPRESULTS,
TAG_DONE,
TAG_DONE,
TAG_DONE,
GUIL_HorizGroup,1,
GUIL_Flags, GUILF_EqualSize | GUILF_EqualWidth,
GUIL_GadgetSpecID, GID_RCPOK,
GUIL_GadgetSpecID, GID_RCPCANCEL,
TAG_DONE,
TAG_DONE,
};
/****************************************************
* ReconcileGUI ()
*
* Creates the GUI for the sort panel.
*****************************************************/
void ReconcileGUI(void)
{
BOOL done = FALSE;
ULONG signal;
AmiLock();
doit = FALSE;
GF_SetGUIAttr(recGUI, GUI_OpenGUI, TRUE, TAG_DONE);
RecInit();
/* Process input events */
while (!done)
{
struct IntuiMessage *imsg;
/* Wait for an event to occur */
signal = GF_Wait(guiapp,AmigaGuideSignal(agc));
/* 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.
*/
if (signal & AmigaGuideSignal(agc)) {
AmiHelpMsg();
continue;
}
while (imsg = GF_GetIMsg(guiapp))
{
switch (imsg->Class) {
case IDCMP_RAWKEY:
AmiHelpKey(imsg,RECONCILE_PANEL);
break;
case IDCMP_CLOSEWINDOW:
done = TRUE;
break;
case IDCMP_GADGETUP:
done=RecHandleGadget(imsg);
break;
case IDCMP_REFRESHWINDOW:
RegRefresh(TRUE);
break;
}
GF_ReplyIMsg(imsg);
}
}
GF_SetGUIAttr(recGUI, GUI_OpenGUI, FALSE, TAG_DONE);
AmiUnlock();
if (doit == TRUE) {
/* re-filter now that we have potentially marked up flags */
AmiDisableSel(TRUE);
AmiLock();
DataRebuildFilters();
if (autosort == TRUE && !IsListEmpty(&sortfields))
DataSortFilter((filterNode *)filtered.mlh_Head,
(filterNode *)filtered.mlh_TailPred,
(sortNode *)sortfields.lh_Head);
RegNewFilter();
/* update the filter balance */
DataFilterBalance(&filtered);
DataBuildBal(usrAccount.decimal,&filtAmnt,filtStr);
AmiUpdateFilt(filtStr);
AmiUnlock();
}
return;
}
/***************************************************
* RecHandleGadget()
*
* Handles gadget events for this panel
****************************************************/
BOOL RecHandleGadget(struct IntuiMessage *imsg)
{
BOOL done = FALSE;
struct Gadget *gad = (struct Gadget *)(imsg->IAddress);
UWORD code = imsg->Code;
char amntstr[AMNTSIZE+1];
switch (gad->GadgetID) {
case GID_RCPCANCEL:
done = TRUE;
break;
case GID_RCPOK:
amiChangedItems = TRUE;
amntState.stateAmnt = DataReconcile(TRUE);
DataBuildBal(usrAccount.decimal,&amntState.stateAmnt,amntstr);
AmiUpdateState(amntstr);
done= doit= TRUE;
break;
}
return (done);
}
/****************************************************
* RecInit()
*
* Set up some globals
*****************************************************/
void RecInit(void)
{
balanceType bal;
bal = DataReconcile(FALSE);
DataBuildBal(usrAccount.decimal,&bal,recstr);
/* initialize our amount */
GF_SetGadgetAttrs (recGUI, RCP_RecSpecs[GID_RCPCURR]->gs_Gadget,
GTTX_Text, recstr,
TAG_DONE);
}