home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
AmigActive 6
/
AACD06.ISO
/
AACD
/
Utilities
/
amiCheck
/
Source
/
edittempPanel.c
< prev
next >
Wrap
C/C++ Source or Header
|
1998-06-11
|
11KB
|
430 lines
/* edittempPanel.c
*
* defines the GUIFront characteristics of the edit template panel
*/
#include <stdio.h>
#include <intuition/gadgetclass.h>
#include "amiCheck.h"
#include "regGadget.h"
#include "edittempPanel.h"
#include "dataBase.h"
#include "newTempPanel.h"
#include "seltempPanel.h"
#include <string.h>
/* prototypes */
BOOL EditHandleGadget(struct IntuiMessage*);
void EditEnableGads(void);
void EditDisableGads(void);
void EditTempInit(void);
ExtErrorData EditExtData;
GUIFront *edittempGUI;
UWORD listActive;
WORD currSelOrd;
BOOL noItem;
/* define gadgetspec */
GadgetSpec TPgadgetspecs[] =
{
{LISTVIEW_KIND,20,8, {0,0,0,0,NULL,NULL,GID_TPTEMPLIST,
PLACETEXT_ABOVE},ListView,GS_DefaultTags},
{BUTTON_KIND,0,0,{0,0,0,0,"_New", NULL, GID_TPNEW,
PLACETEXT_IN}, NULL, GS_DefaultTags},
{BUTTON_KIND,0,0,{0,0,0,0,"_Remove", NULL, GID_TPDEL,
PLACETEXT_IN}, NULL, GS_DefaultTags},
{BUTTON_KIND,0,0,{0,0,0,0,"_Edit", NULL, GID_TPEDIT,
PLACETEXT_IN}, NULL, GS_DefaultTags},
{BUTTON_KIND,0,0,{0,0,0,0,"_Up", NULL, GID_TPUP,
PLACETEXT_IN}, NULL, GS_DefaultTags},
{BUTTON_KIND,0,0,{0,0,0,0,"_Down", NULL, GID_TPDOWN,
PLACETEXT_IN}, NULL, GS_DefaultTags},
{BUTTON_KIND,0,0,{0,0,0,0,"_Top", NULL, GID_TPTOP,
PLACETEXT_IN}, NULL, GS_DefaultTags},
{BUTTON_KIND,0,0,{0,0,0,0,"_Bottom", NULL, GID_TPBOTTOM,
PLACETEXT_IN}, NULL, GS_DefaultTags},
{BUTTON_KIND,0,0,{0,0,0,0,"_OK", NULL, GID_TPOK,
PLACETEXT_IN}, NULL, GS_DefaultTags},
{BUTTON_KIND,0,0,{0,0,0,0,"_Cancel", NULL, GID_TPCANCEL,
PLACETEXT_IN}, NULL, GS_DefaultTags},
};
/* set up array of pointers to our specs */
GadgetSpec *TP_EditTempSpecs[] =
{
&TPgadgetspecs[0],
&TPgadgetspecs[1],
&TPgadgetspecs[2],
&TPgadgetspecs[3],
&TPgadgetspecs[4],
&TPgadgetspecs[5],
&TPgadgetspecs[6],
&TPgadgetspecs[7],
&TPgadgetspecs[8],
&TPgadgetspecs[9],
NULL,
};
/* define the layout of this panel */
ULONG TP_EditTempPanel[] =
{
GUIL_Flags, GUILF_PropShare | GUILF_EqualWidth,
GUIL_HorizGroup, 1,
GUIL_Flags, GUILF_PropShare,
GUIL_FrameType, GUILFT_Recess,
GUIL_VertGroup, 1,
GUIL_HorizGroup,1,
GUIL_FrameType, GUILFT_Ridge,
GUIL_FrameHeadline, "Current Templates",
GUIL_GadgetSpecID, GID_TPTEMPLIST,
GUIL_VertGroup,1,
GUIL_Flags, GUILF_PropShare | GUILF_EqualWidth | GUILF_EqualHeight,
GUIL_GadgetSpecID, GID_TPUP,
GUIL_GadgetSpecID, GID_TPDOWN,
GUIL_GadgetSpecID, GID_TPTOP,
GUIL_GadgetSpecID, GID_TPBOTTOM,
TAG_DONE,
TAG_DONE,
GUIL_HorizGroup,1,
GUIL_FrameType, GUILFT_Ridge,
GUIL_Flags, GUILF_EqualSize | GUILF_EqualWidth,
GUIL_GadgetSpecID, GID_TPEDIT,
GUIL_GadgetSpecID, GID_TPDEL,
GUIL_GadgetSpecID, GID_TPNEW,
TAG_DONE,
TAG_DONE,
TAG_DONE,
GUIL_HorizGroup,1,
GUIL_Flags, GUILF_EqualSize | GUILF_EqualWidth,
GUIL_GadgetSpecID, GID_TPOK,
GUIL_GadgetSpecID, GID_TPCANCEL,
TAG_DONE,
TAG_DONE,
};
/****************************************************
* EditTempGUI ()
*
* Creates the GUI for the edit temp panel.
*****************************************************/
void EditTempGUI(void)
{
BOOL done = FALSE;
UWORD ordinal;
ULONG signal;
AmiLock();
/* install temporary list */
NewList(&testtemps);
DataCopyList(&templates,&testtemps, DataAddTemp);
GF_SetGUIAttr(edittempGUI,GUI_OpenGUI, TRUE, TAG_DONE);
EditTempInit();
/* 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)) {
switch (imsg->Class) {
case IDCMP_REFRESHWINDOW:
RegRefresh(TRUE);
break;
case IDCMP_CLOSEWINDOW:
DataFreeList(&testtemps);
NewList(&testtemps);
done = TRUE;
break;
case IDCMP_RAWKEY:
if (GF_ProcessListView(edittempGUI,TP_EditTempSpecs[GID_TPTEMPLIST],
imsg,&ordinal)) {
currSelOrd = listActive = ordinal;
if (listActive >= DEFAULT_TEMPS && noItem==TRUE)
EditEnableGads();
else if (listActive < DEFAULT_TEMPS)
EditDisableGads();
}
else AmiHelpKey(imsg,EDITTEMP_PANEL);
break;
case IDCMP_GADGETUP:
done=EditHandleGadget(imsg);
break;
}
GF_ReplyIMsg(imsg);
}
}
GF_SetGadgetAttrs(edittempGUI,TPgadgetspecs[GID_TPTEMPLIST].gs_Gadget,
GTLV_Labels, ~0,
TAG_DONE);
GF_SetGUIAttr(edittempGUI,GUI_OpenGUI, FALSE, TAG_DONE);
AmiUnlock();
}
/***************************************************
* EditHandleGadget()
*
* Handles gadget events for this panel
****************************************************/
BOOL EditHandleGadget(struct IntuiMessage *imsg)
{
static ULONG micros = 0, secs = 0;
struct Gadget *gad = (struct Gadget *)(imsg->IAddress);
UWORD code = imsg->Code;
BOOL done = FALSE;
templateNode *curr, *copy;
switch (gad->GadgetID) {
case GID_TPDEL:
if (listActive >= DEFAULT_TEMPS) {
DataListRemove(edittempGUI,TPgadgetspecs[GID_TPTEMPLIST].gs_Gadget,
&testtemps, &listActive);
if (IsListEmpty(&testtemps))
currSelOrd = -1;
else currSelOrd = listActive;
if (listActive < DEFAULT_TEMPS)
EditDisableGads();
}
break;
case GID_TPUP:
if (listActive > DEFAULT_TEMPS) {
DataListUp(edittempGUI,TPgadgetspecs[GID_TPTEMPLIST].gs_Gadget,
&testtemps, &listActive);
currSelOrd = listActive;
}
break;
case GID_TPDOWN:
if (listActive >= DEFAULT_TEMPS) {
DataListDown(edittempGUI,TPgadgetspecs[GID_TPTEMPLIST].gs_Gadget,
&testtemps, &listActive);
currSelOrd = listActive;
}
break;
case GID_TPBOTTOM:
if (listActive >= DEFAULT_TEMPS) {
DataListBottom(edittempGUI,TPgadgetspecs[GID_TPTEMPLIST].gs_Gadget,
&testtemps, &listActive, DataCountNodes(&testtemps));
currSelOrd = listActive;
}
break;
case GID_TPTOP:
if (listActive > DEFAULT_TEMPS) {
DataListTop(edittempGUI,TPgadgetspecs[GID_TPTEMPLIST].gs_Gadget,
&testtemps, &listActive, DEFAULT_TEMPS);
}
break;
case GID_TPTEMPLIST:
if (listActive == code && listActive >= DEFAULT_TEMPS) {
if (DoubleClick(secs,micros,imsg->Seconds,imsg->Micros))
goto EDITLABEL;
}
listActive = code;
secs = imsg->Seconds;
micros = imsg->Micros;
if ( listActive >= DEFAULT_TEMPS && noItem == TRUE)
EditEnableGads();
else if (listActive < DEFAULT_TEMPS)
EditDisableGads();
break;
case GID_TPNEW:
curr = NewTempGUI(NULL,"Enter NEW Template");
if (curr != NULL) {
GF_SetGadgetAttrs(edittempGUI,TPgadgetspecs[GID_TPTEMPLIST].gs_Gadget,
GTLV_Labels, ~0,
TAG_DONE);
DataAddTemp(&testtemps, curr);
listActive = DataNode2Ord(&testtemps,curr->tempname);
GF_SetGadgetAttrs(edittempGUI,TPgadgetspecs[GID_TPTEMPLIST].gs_Gadget,
GTLV_Labels, &testtemps,
GTLV_Selected,listActive,
GTLV_MakeVisible,listActive,
TAG_DONE);
if (noItem == TRUE)
EditEnableGads();
}
break;
case GID_TPEDIT:
EDITLABEL:
copy = (templateNode *)DataOrd2Node(&testtemps,(LONG)listActive);
curr = NewTempGUI(copy, "Edit Template");
if (curr != NULL) {
GF_SetGadgetAttrs(edittempGUI,TPgadgetspecs[GID_TPTEMPLIST].gs_Gadget,
GTLV_Labels, ~0,
TAG_DONE);
memcpy(&(copy->template),&(curr->template),sizeof(entryNode));
memcpy(copy->tempname,curr->tempname,TEMPNAMESIZE);
GF_SetGadgetAttrs(edittempGUI,TPgadgetspecs[GID_TPTEMPLIST].gs_Gadget,
GTLV_Labels, &testtemps,
GTLV_Selected, listActive,
TAG_DONE);
}
break;
case GID_TPCANCEL:
DataFreeList(&testtemps);
NewList(&testtemps);
done = TRUE;
break;
case GID_TPOK:
amiChangedItems = TRUE;
if (selWin != NULL)
SelTempStrip();
DataMoveList(&testtemps,&templates);
if (selWin != NULL)
SelTempInstall();
NewList(&testtemps);
done = TRUE;
if (currSelOrd != -1)
amntState.currTemplate = currSelOrd;
break;
}
return (done);
}
/*****************************************************
* EditEnableGads()
*
* Enable the gadgets if an item has been selected
******************************************************/
void EditEnableGads(void)
{
int x;
if (noItem == FALSE)
return;
for (x=GID_TPDEL;x<=GID_TPBOTTOM;x++)
GF_SetGadgetAttrs(edittempGUI,TP_EditTempSpecs[x]->gs_Gadget,
GA_Disabled,FALSE,
TAG_DONE);
noItem = FALSE;
}
/*****************************************************
* EditDisableGads()
*
* Disable the gadgets if an item is not selected
******************************************************/
void EditDisableGads(void)
{
int x;
if (noItem == TRUE)
return;
for (x=GID_TPDEL;x<=GID_TPBOTTOM;x++)
GF_SetGadgetAttrs(edittempGUI,TP_EditTempSpecs[x]->gs_Gadget,
GA_Disabled,TRUE,
TAG_DONE);
noItem = TRUE;
}
/****************************************************
* EditTempInit()
*
* Set up some globals
*****************************************************/
void EditTempInit(void)
{
listActive = 0;
/* grab template ord info */
listActive = currSelOrd = amntState.currTemplate;
/* make curr sel the active one for convenience */
GF_SetGadgetAttrs(edittempGUI,TPgadgetspecs[GID_TPTEMPLIST].gs_Gadget,
GTLV_Labels, &testtemps,
GTLV_Selected,listActive,
GTLV_MakeVisible,listActive,
TAG_DONE);
if (listActive < DEFAULT_TEMPS) {
noItem = FALSE;
EditDisableGads();
}
else {
noItem = TRUE;
EditEnableGads();
}
}