home *** CD-ROM | disk | FTP | other *** search
- /* 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();
- }
- }
-