home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
AmigActive 6
/
AACD06.ISO
/
AACD
/
Utilities
/
amiCheck
/
Source
/
seltempPanel.c
< prev
next >
Wrap
C/C++ Source or Header
|
1998-06-11
|
8KB
|
346 lines
/* seltempPanel.c
*
* defines the GUIFront characteristics of the seltemp panel
*/
#include <stdio.h>
#include <intuition/gadgetclass.h>
#include <clib/intuition_protos.h>
#include "amiCheck.h"
#include "seltempPanel.h"
#include "dataBase.h"
#include "regGadget.h"
/* prototypes */
void SelHandleGadget(struct IntuiMessage *);
void SelBuildList(void);
UWORD SelTrueTemplate(UWORD index);
struct Window *selWin = NULL;
GUIFront *seltempGUI;
ExtErrorData selExtData;
static BOOL done;
WORD usrSel;
static UWORD ordinal;
BOOL selAttach = FALSE;
UWORD filterSel;
struct List usrTemplates;
enum {
SELALL,
SELCHECK,
SELWITH,
SELDEP,
};
/* quick configure of some gadgets */
STRPTR templatelabels[] =
{
"All",
"Checks",
"Withdrawals",
"Deposits",
NULL,
};
struct TagItem templateCycleTags[] =
{
{GTCY_Labels, templatelabels},
{TAG_DONE},
};
/* define gadgetspec */
GadgetSpec SPgadgetspecs[] =
{
{LISTVIEW_KIND,20,10, {0,0,0,0,NULL,NULL,GID_SPTEMPLIST,
PLACETEXT_ABOVE},ListView,GS_DefaultTags},
{BUTTON_KIND,0,0,{0,0,0,0,"_OK", NULL, GID_SPOK,
PLACETEXT_IN}, NULL, GS_DefaultTags},
{BUTTON_KIND,0,0,{0,0,0,0,"_Cancel", NULL, GID_SPCANCEL,
PLACETEXT_IN}, NULL, GS_DefaultTags},
{CYCLE_KIND,0,0, {0,0,0,0,"_Filter",NULL,GID_SPFILTER,
PLACETEXT_LEFT},templateCycleTags,GS_DefaultTags},
};
/* set up array of pointers to our specs */
GadgetSpec *SP_SelTempSpecs[] =
{
&SPgadgetspecs[0],
&SPgadgetspecs[1],
&SPgadgetspecs[2],
&SPgadgetspecs[3],
NULL,
};
/* define the layout of this panel */
ULONG SP_SelTempPanel[] =
{
GUIL_Flags, GUILF_PropShare | GUILF_EqualWidth,
GUIL_VertGroup,0,
GUIL_GadgetSpecID, GID_SPFILTER,
GUIL_GadgetSpecID, GID_SPTEMPLIST,
TAG_DONE,
TAG_DONE,
};
/****************************************************
* SelTempGUI
*
* create gui for this panel
*****************************************************/
void SelTempGUI(void)
{
done = FALSE;
usrSel = amntState.currTemplate;
/*AmiLock();*/
if (selWin == NULL) {
GF_SetGUIAttr(seltempGUI, GUI_OpenGUI, TRUE, TAG_DONE);
SelTempStrip();
GF_GetGUIAttr(seltempGUI, GUI_Window, &selWin, TAG_DONE);
ResetMenuStrip(selWin,menuStrip);
usrSel = amntState.currTemplate;
GF_SetGadgetAttrs(seltempGUI,SPgadgetspecs[GID_SPTEMPLIST].gs_Gadget,
GTLV_Labels, &templates,
GTLV_MakeVisible, amntState.currTemplate,
GTLV_Selected,amntState.currTemplate,
TAG_DONE);
selAttach = TRUE;
filterSel = SELALL;
NewList(&usrTemplates);
GF_SetGadgetAttrs(seltempGUI,SPgadgetspecs[GID_SPFILTER].gs_Gadget,
GTCY_Active, filterSel,
TAG_DONE);
}
else {
WindowToFront(selWin);
ActivateWindow(selWin);
}
#if 0
/* Process input events */
while (!done)
{
struct IntuiMessage *imsg;
/* Wait for an event to occur */
GF_Wait(guiapp,0);
/* 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))
{
if (imsg->IDCMPWindow->UserData == gui)
AmiLocalMsg(imsg);
else SelTempMsg(imsg);
GF_ReplyIMsg(imsg);
}
}
GF_SetGUIAttr(seltempGUI, GUI_OpenGUI, FALSE, TAG_DONE);
selWin = NULL;
SelTempStrip();
/* AmiUnlock();*/
#endif
}
/********************************************************
* SelTempMsg()
*
* Handles messages from afar
**********************************************************/
BOOL SelTempMsg(struct IntuiMessage *imsg)
{
BOOL done = FALSE;
switch (imsg->Class) {
case IDCMP_CLOSEWINDOW:
done = TRUE;
break;
case IDCMP_RAWKEY:
if (imsg->Code == 0x44) {
amntState.currTemplate = SelTrueTemplate(usrSel);
AmiEnterData();
}
else if (imsg->Code == 0x40) {
done = TRUE;
}
else if (GF_ProcessListView(seltempGUI,SP_SelTempSpecs[GID_SPTEMPLIST],
imsg,&ordinal)) {
usrSel = ordinal;
if (filterSel == SELALL)
amntState.currTemplate = ordinal;
else amntState.currTemplate = SelTrueTemplate(usrSel);
AmiNewTemp();
}
else AmiHelpKey(imsg,SELTEMP_PANEL);
break;
case IDCMP_REFRESHWINDOW:
RegRefresh(TRUE);
break;
case IDCMP_MENUPICK:
amidone = done = AmiHandleMenu(imsg);
if (seldone == TRUE)
done = seldone;
break;
case IDCMP_GADGETUP:
SelHandleGadget(imsg);
break;
}
if (done) {
SelTempStrip();
selWin = NULL;
}
return (done);
}
/***************************************************
* SelHandleGadget....
*
* double clicks and OK will change ord val.
****************************************************/
void SelHandleGadget(struct IntuiMessage *imsg)
{
struct List *list;
struct Gadget *gad = (struct Gadget *)(imsg->IAddress);
UWORD code = imsg->Code;
switch (gad->GadgetID) {
case GID_SPTEMPLIST:
/* find curr template based on which list? */
amntState.currTemplate = usrSel = code;
if (filterSel != SELALL)
amntState.currTemplate = SelTrueTemplate(code);
AmiNewTemp();
AmiEnterData();
break;
case GID_SPFILTER:
amntState.currTemplate = SelTrueTemplate(usrSel);
/* detach and free list */
SelTempStrip();
if (filterSel != SELALL) {
DataFreeList(&usrTemplates);
}
filterSel = code;
if (filterSel != SELALL) {
SelBuildList();
amntState.currTemplate = usrSel = 0;
list = &usrTemplates;
}
else {
usrSel = amntState.currTemplate;
list = &templates;
}
GF_SetGadgetAttrs(seltempGUI,SPgadgetspecs[GID_SPTEMPLIST].gs_Gadget,
GTLV_Labels, list,
GTLV_Selected, usrSel,
GTLV_MakeVisible, usrSel,
TAG_DONE);
selAttach = TRUE;
break;
}
}
/***********************************************************
* SelTempStrip()
*
*
************************************************************/
void SelTempStrip(void)
{
if (selAttach == TRUE) {
GF_SetGadgetAttrs(seltempGUI,SPgadgetspecs[GID_SPTEMPLIST].gs_Gadget,
GTLV_Labels, ~0,
TAG_DONE);
selAttach = FALSE;
}
}
/***********************************************************
* SelTempInstall()
*
*
************************************************************/
void SelTempInstall(void)
{
amntState.currTemplate = 0;
SelTempStrip();
GF_SetGadgetAttrs(seltempGUI,SPgadgetspecs[GID_SPTEMPLIST].gs_Gadget,
GTLV_Labels, &templates,
GTLV_Selected, amntState.currTemplate,
GTLV_MakeVisible, amntState.currTemplate,
TAG_DONE);
selAttach = TRUE;
filterSel = SELALL;
NewList(&usrTemplates);
GF_SetGadgetAttrs(seltempGUI,SPgadgetspecs[GID_SPFILTER].gs_Gadget,
GTCY_Active, filterSel,
TAG_DONE);
AmiNewTemp();
}
/************************************************************
* SelBuildList(void)
*
* Build a temporary list
*************************************************************/
void SelBuildList(void)
{
templateNode *node = NULL;
while ( (node = (templateNode *)DataGetNext(&templates,(struct Node *)node)) != NULL) {
if (node->template.type == filterSel-1 || filterSel == SELALL)
DataAddTemp(&usrTemplates, node);
}
}
/*****************************************************************
* SelTrueTemplate(int,int)
*
* Find actual template from sublist
******************************************************************/
UWORD SelTrueTemplate(UWORD index)
{
templateNode *node;
if (filterSel != SELALL) {
node = (templateNode *)DataOrd2Node(&usrTemplates,index);
return ((UWORD)DataNode2Ord(&templates,node->node.ln_Name));
}
else return (amntState.currTemplate);
}