home *** CD-ROM | disk | FTP | other *** search
- /* scriptPanel.c
- *
- * defines the GUIFront characteristics of the script panel
- */
-
- #include <stdio.h>
- #include <intuition/gadgetclass.h>
- #include <exec/memory.h>
- #include <clib/exec_protos.h>
- #include <clib/asl_protos.h>
- #include <libraries/asl.h>
-
- #include "amiCheck.h"
- #include "regGadget.h"
- #include "dataBase.h"
- #include "scriptPanel.h"
- #include <string.h>
-
-
- /* prototypes */
- BOOL ScriptHandleGadget(struct IntuiMessage *);
- BOOL ScriptInit(void);
- void ScriptDisableGads(BOOL);
- scriptNode *ScriptAddNode(char *);
- BOOL ScriptSave (char *);
- BOOL ScriptLoad (char *);
-
- WORD scriptEntries;
- struct Window *scriptWin;
- struct List scriptList;
- ExtErrorData ScriptExtData;
- GUIFront *scriptGUI;
- UWORD scriptlistActive;
- char sctitle[100];
- char fname[100];
-
- /* quick configure of some gadgets */
-
- /* define gadgetspec */
- GadgetSpec SCPgadgetspecs[] =
- {
- {LISTVIEW_KIND,20,8, {0,0,0,0,NULL,NULL,GID_SCPTEMPLIST,
- PLACETEXT_ABOVE},ListView,GS_DefaultTags},
-
- {LISTVIEW_KIND,20,8, {0,0,0,0,NULL,NULL,GID_SCPLIST,
- PLACETEXT_ABOVE},ListView,GS_DefaultTags},
-
- {BUTTON_KIND,0,0,{0,0,0,0,"_Open", NULL, GID_SCPOPEN,
- PLACETEXT_IN}, NULL, GS_DefaultTags},
-
- {BUTTON_KIND,0,0,{0,0,0,0,"_Save", NULL, GID_SCPSAVE,
- PLACETEXT_IN}, NULL, GS_DefaultTags},
-
- {BUTTON_KIND,0,0,{0,0,0,0,"Save _As", NULL, GID_SCPSAVEAS,
- PLACETEXT_IN}, NULL, GS_DefaultTags},
-
- {BUTTON_KIND,0,0,{0,0,0,0,"_Up", NULL, GID_SCPUP,
- PLACETEXT_IN}, NULL, GS_DefaultTags},
-
- {BUTTON_KIND,0,0,{0,0,0,0,"_Down", NULL, GID_SCPDOWN,
- PLACETEXT_IN}, NULL, GS_DefaultTags},
-
- {BUTTON_KIND,0,0,{0,0,0,0,"_Top", NULL, GID_SCPTOP,
- PLACETEXT_IN}, NULL, GS_DefaultTags},
-
- {BUTTON_KIND,0,0,{0,0,0,0,"_Bottom", NULL, GID_SCPBOTTOM,
- PLACETEXT_IN}, NULL, GS_DefaultTags},
-
- {BUTTON_KIND,0,0,{0,0,0,0,"_Remove", NULL, GID_SCPREMOVE,
- PLACETEXT_IN}, NULL, GS_DefaultTags},
-
- {BUTTON_KIND,0,0,{0,0,0,0,"_Cancel", NULL, GID_SCPCANCEL,
- PLACETEXT_IN}, NULL, GS_DefaultTags},
- };
-
- /* set up array of pointers to our specs */
- GadgetSpec *SCP_ScriptSpecs[] =
- {
- &SCPgadgetspecs[0],
- &SCPgadgetspecs[1],
- &SCPgadgetspecs[2],
- &SCPgadgetspecs[3],
- &SCPgadgetspecs[4],
- &SCPgadgetspecs[5],
- &SCPgadgetspecs[6],
- &SCPgadgetspecs[7],
- &SCPgadgetspecs[8],
- &SCPgadgetspecs[9],
- &SCPgadgetspecs[10],
- NULL,
- };
-
-
- /* define the layout of this panel */
- ULONG SCP_ScriptPanel[] =
- {
- GUIL_Flags, GUILF_PropShare | GUILF_EqualWidth,
-
- GUIL_HorizGroup, 1,
- GUIL_Flags, GUILF_PropShare,
- GUIL_FrameType, GUILFT_Recess,
-
- GUIL_VertGroup, 1,
-
- GUIL_HorizGroup,1,
-
- GUIL_HorizGroup,1,
- GUIL_FrameType, GUILFT_Ridge,
- GUIL_FrameHeadline, "Templates",
-
- GUIL_GadgetSpecID, GID_SCPTEMPLIST,
- TAG_DONE,
-
- GUIL_HorizGroup,1,
-
- GUIL_FrameType, GUILFT_Ridge,
- GUIL_FrameHeadline, "Script List",
-
- GUIL_GadgetSpecID, GID_SCPLIST,
-
- GUIL_VertGroup,1,
- GUIL_Flags, GUILF_PropShare | GUILF_EqualWidth | GUILF_EqualHeight,
-
- GUIL_GadgetSpecID, GID_SCPUP,
- GUIL_GadgetSpecID, GID_SCPDOWN,
- GUIL_GadgetSpecID, GID_SCPTOP,
- GUIL_GadgetSpecID, GID_SCPBOTTOM,
- GUIL_GadgetSpecID, GID_SCPREMOVE,
- TAG_DONE,
- TAG_DONE,
-
- TAG_DONE,
-
- TAG_DONE,
-
- TAG_DONE,
-
- GUIL_HorizGroup,1,
- GUIL_Flags, GUILF_EqualSize | GUILF_EqualWidth,
-
- GUIL_GadgetSpecID, GID_SCPSAVE,
- GUIL_GadgetSpecID, GID_SCPSAVEAS,
- GUIL_GadgetSpecID, GID_SCPOPEN,
- GUIL_GadgetSpecID, GID_SCPCANCEL,
-
- TAG_DONE,
-
- TAG_DONE,
- };
-
-
- /****************************************************
- * ScriptGUI ()
- *
- * Creates the GUI for the script panel.
- *****************************************************/
- void ScriptGUI(void)
- {
- BOOL done = FALSE;
- BOOL noreply;
- UWORD ordinal;
- ULONG signal;
-
- AmiLock();
-
- GF_SetGUIAttr(scriptGUI, GUI_OpenGUI, TRUE, TAG_DONE);
- /* grab window */
- GF_GetGUIAttr(scriptGUI,GUI_Window,&scriptWin,TAG_DONE);
- if (!ScriptInit())
- done = TRUE;
-
-
- /* 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))
- {
- noreply = TRUE;
- switch (imsg->Class) {
- case IDCMP_REFRESHWINDOW:
- RegRefresh(TRUE);
- break;
-
- case IDCMP_CLOSEWINDOW:
- done = TRUE;
- break;
-
- case IDCMP_RAWKEY:
- AmiHelpKey(imsg,SCRIPT_PANEL);
-
- if (IsListEmpty(&scriptList))
- break;
- if (GF_ProcessListView(scriptGUI,SCP_ScriptSpecs[GID_SCPLIST],
- imsg,&ordinal)) {
- scriptlistActive = ordinal;
- ScriptDisableGads(FALSE);
- }
- break;
-
- case IDCMP_GADGETUP:
- noreply = FALSE;
- done=ScriptHandleGadget(imsg);
- break;
- }
-
-
- if (noreply) GF_ReplyIMsg(imsg);
- }
- }
-
- GF_SetGadgetAttrs(scriptGUI,SCPgadgetspecs[GID_SCPLIST].gs_Gadget,
- GTLV_Labels, ~0,
- TAG_DONE);
-
- GF_SetGadgetAttrs(scriptGUI,SCPgadgetspecs[GID_SCPTEMPLIST].gs_Gadget,
- GTLV_Labels, ~0,
- TAG_DONE);
-
- DataFreeList(&scriptList);
- GF_SetGUIAttr(scriptGUI, GUI_OpenGUI, FALSE, TAG_DONE);
- AmiUnlock();
- return;
- }
-
- /***************************************************
- * ScriptHandleGadget()
- *
- * Handles gadget events for this panel
- ****************************************************/
- BOOL ScriptHandleGadget(struct IntuiMessage *imsg)
- {
- BOOL done = FALSE;
- struct Gadget *gad = (struct Gadget *)(imsg->IAddress);
- UWORD code = imsg->Code;
- templateNode *temp;
- scriptNode *scr;
-
- switch (gad->GadgetID) {
-
- case GID_SCPTEMPLIST:
- if (code == SCRIPTTYPE)
- break;
-
- temp = (templateNode *)DataOrd2Node(&templates,code);
- GF_SetGadgetAttrs(scriptGUI,SCPgadgetspecs[GID_SCPLIST].gs_Gadget,
- GTLV_Labels, ~0,
- TAG_DONE);
-
- scr=ScriptAddNode(temp->tempname);
- scriptlistActive = scriptEntries;
- GF_SetGadgetAttrs(scriptGUI,SCPgadgetspecs[GID_SCPLIST].gs_Gadget,
- GTLV_Labels, &scriptList,
- GTLV_Selected,scriptlistActive,
- TAG_DONE);
-
- scriptEntries++;
- ScriptDisableGads(FALSE);
-
- GF_SetGadgetAttrs(scriptGUI,SCPgadgetspecs[GID_SCPSAVEAS].gs_Gadget,
- GA_Disabled, FALSE,
- TAG_DONE);
- break;
-
- case GID_SCPLIST:
- scriptlistActive = code;
- ScriptDisableGads(FALSE);
- break;
-
- case GID_SCPSAVE:
- if (ScriptSave(fname) != TRUE)
- AmiAnnounce("Encountered trouble trying to save script.");
- break;
-
- case GID_SCPSAVEAS:
- GF_LockGUI(scriptGUI);
- if (AmiGetFile(scriptGUI,scriptsaveASL,fname,100)) {
- if (ScriptSave(fname) != TRUE)
- AmiAnnounce("Encountered trouble trying to save script.");
-
- DataAttachIcon(iconPath,"AC_Script",fname);
- GF_SetGadgetAttrs(scriptGUI,SCPgadgetspecs[GID_SCPSAVE].gs_Gadget,
- GA_Disabled, FALSE,
- TAG_DONE);
-
- sprintf(sctitle,"Script Editor: %s",scriptsaveASL->fr_File);
- SetWindowTitles(scriptWin,sctitle,(UBYTE *)-1);
- }
- GF_UnlockGUI(scriptGUI);
-
- break;
-
- case GID_SCPOPEN:
- GF_LockGUI(scriptGUI);
- if (AmiGetFile(scriptGUI,scriptASL,fname,100)) {
- GF_SetGadgetAttrs(scriptGUI,SCPgadgetspecs[GID_SCPLIST].gs_Gadget,
- GTLV_Labels, ~0,
- TAG_DONE);
-
- DataFreeList(&scriptList);
- sprintf(sctitle,"Script Editor: %s",scriptASL->fr_File);
- SetWindowTitles(scriptWin,sctitle,(UBYTE *)-1);
-
- if (ScriptLoad(fname) != TRUE)
- AmiAnnounce("Encountered trouble trying to load script.");
-
- GF_SetGadgetAttrs(scriptGUI,SCPgadgetspecs[GID_SCPSAVE].gs_Gadget,
- GA_Disabled, FALSE,
- TAG_DONE);
-
- GF_SetGadgetAttrs(scriptGUI,SCPgadgetspecs[GID_SCPSAVEAS].gs_Gadget,
- GA_Disabled, FALSE,
- TAG_DONE);
-
- GF_SetGadgetAttrs(scriptGUI,SCPgadgetspecs[GID_SCPLIST].gs_Gadget,
- GTLV_Labels, &scriptList,
- GTLV_Selected, ~0,
- TAG_DONE);
-
- ScriptDisableGads(TRUE);
- }
- GF_UnlockGUI(scriptGUI);
- break;
-
- case GID_SCPREMOVE:
- DataListRemove(scriptGUI, SCPgadgetspecs[GID_SCPLIST].gs_Gadget,
- &scriptList, &scriptlistActive);
-
- if (IsListEmpty(&scriptList))
- ScriptDisableGads(TRUE);
-
- scriptEntries--;
- break;
-
- case GID_SCPUP:
- DataListUp(scriptGUI, SCPgadgetspecs[GID_SCPLIST].gs_Gadget,
- &scriptList, &scriptlistActive);
- break;
-
- case GID_SCPDOWN:
- DataListDown(scriptGUI, SCPgadgetspecs[GID_SCPLIST].gs_Gadget,
- &scriptList, &scriptlistActive);
- break;
-
- case GID_SCPTOP:
- DataListTop(scriptGUI, SCPgadgetspecs[GID_SCPLIST].gs_Gadget,
- &scriptList, &scriptlistActive,0);
- break;
-
- case GID_SCPBOTTOM:
- DataListBottom(scriptGUI, SCPgadgetspecs[GID_SCPLIST].gs_Gadget,
- &scriptList, &scriptlistActive, scriptEntries);
- break;
-
- case GID_SCPCANCEL:
- done = TRUE;
- break;
-
- }
-
- GF_ReplyIMsg(imsg);
- return (done);
- }
-
- /****************************************************
- * ScriptInit()
- *
- * Set up some globals
- *****************************************************/
- BOOL ScriptInit(void)
- {
-
- sprintf(sctitle,"Script Editor: untitled.ACscript");
- SetWindowTitles(scriptWin,sctitle,(UBYTE *)-1);
-
- NewList (&scriptList);
-
- scriptlistActive = -1;
- scriptEntries = 0;
- GF_SetGadgetAttrs(scriptGUI,SCPgadgetspecs[GID_SCPTEMPLIST].gs_Gadget,
- GTLV_Labels, &templates,
- GTLV_Selected,~0,
- TAG_DONE);
-
- GF_SetGadgetAttrs(scriptGUI,SCPgadgetspecs[GID_SCPLIST].gs_Gadget,
- GTLV_Labels, ~0,
- GTLV_Selected,~0,
- TAG_DONE);
-
- GF_SetGadgetAttrs(scriptGUI,SCPgadgetspecs[GID_SCPSAVE].gs_Gadget,
- GA_Disabled, TRUE,
- TAG_DONE);
-
- GF_SetGadgetAttrs(scriptGUI,SCPgadgetspecs[GID_SCPSAVEAS].gs_Gadget,
- GA_Disabled, TRUE,
- TAG_DONE);
-
- ScriptDisableGads(TRUE);
-
- return (TRUE);
- }
-
- /****************************************************
- * ScriptDisableGads()
- *
- * Disable/Enable extra gadgets
- *****************************************************/
- void ScriptDisableGads(BOOL dis)
- {
-
- GF_SetGadgetAttrs(scriptGUI,SCPgadgetspecs[GID_SCPREMOVE].gs_Gadget,
- GA_Disabled, dis,
- TAG_DONE);
-
- GF_SetGadgetAttrs(scriptGUI,SCPgadgetspecs[GID_SCPUP].gs_Gadget,
- GA_Disabled, dis,
- TAG_DONE);
-
- GF_SetGadgetAttrs(scriptGUI,SCPgadgetspecs[GID_SCPDOWN].gs_Gadget,
- GA_Disabled, dis,
- TAG_DONE);
-
- GF_SetGadgetAttrs(scriptGUI,SCPgadgetspecs[GID_SCPTOP].gs_Gadget,
- GA_Disabled, dis,
- TAG_DONE);
-
- GF_SetGadgetAttrs(scriptGUI,SCPgadgetspecs[GID_SCPBOTTOM].gs_Gadget,
- GA_Disabled, dis,
- TAG_DONE);
-
- }
-
- /****************************************************
- * ScriptAddNode()
- *
- * Add a node to the script list
- *****************************************************/
- scriptNode *ScriptAddNode(char *name)
- {
- scriptNode *temp;
-
- temp = (scriptNode *)AllocVec(sizeof(scriptNode),MEMF_CLEAR);
- if (temp == NULL)
- return(NULL);
-
- strcpy(temp->scname, name);
- temp->node.ln_Name = temp->scname;
- AddTail(&scriptList,temp);
-
- return (temp);
- }
-
- /**************************************************************************
- * ScriptSave()
- *
- * Saves a script file
- ***************************************************************************/
- BOOL ScriptSave (char *fname)
- {
- scriptNode *temp = (scriptNode *)scriptList.lh_Head, *next;
- FILE *file;
-
- if (IsListEmpty(&scriptList))
- return(TRUE);
-
- if ( (file = fopen(fname,"w")) == NULL)
- return (FALSE);
-
- while ( (next = (scriptNode *)(temp->node.ln_Succ)) ) {
- fprintf(file,"%s",temp->scname);
- if (temp->node.ln_Succ != NULL)
- fprintf(file,"\n");
- temp = next;
- }
-
- fclose(file);
- return (TRUE);
- }
-
- /**************************************************************************
- * ScriptLoad()
- *
- * Loads a script file
- ***************************************************************************/
- BOOL ScriptLoad (char *fname)
- {
- char template[100];
- FILE *file;
-
- NewList(&scriptList);
- scriptEntries = 0;
-
- if ( (file = fopen(fname,"r")) == NULL)
- return (FALSE);
-
- /* while ( fscanf(file,"%s",template) != EOF) {*/
- while ( fgets(template,99,file) != NULL) {
- if (strlen(template) > 0)
- template[strlen(template)-1] = 0;
-
- ScriptAddNode(template);
- scriptEntries ++;
- }
-
- fclose(file);
- return (TRUE);
- }
-