/* * EDIT.C */ #include "defs.h" Prototype int OpenEditWindow(void); Prototype void CloseEditWindow(void); Prototype void HandleEditGadget(IMsg *); Prototype void UpdateEWinInfo(TplRegion *); Prototype NewGadget *MakeENG(short, short, short, short, char *, short, long, APTR); Prototype Window *EWin; Prototype long EWinMask; Prototype char *DefName; Prototype char *LabName; Prototype char *RegName; Prototype char *MaxName; Prototype List EList; Window *EWin; Gadget *EGList; long EWinMask; NewGadget ENg; char *CycLabels[] = { "Invisible", "Button", "String", "ListView", "Cycle", NULL }; char *CycOrient[] = { "Text Left", "Text Right", "Text Above", "Text Below", "Text In", NULL }; List EList; char *DefName; char *LabName; char *RegName; char *AddName; char *MaxName; Gadget *EGadType; Gadget *EGadOrient; Gadget *EGadRegText; Gadget *EGadLabText; Gadget *EGadDefText; Gadget *EGadAddText; Gadget *EGadMaxBufLen; Gadget *EGadList; OpenEditWindow() { Gadget *gad; NewList(&EList); if ((gad = CreateContext(&EGList)) == NULL) return(-1); ENg.ng_TextAttr = Scr->Font; ENg.ng_VisualInfo= Ng.ng_VisualInfo; EGadType = gad = CreateGadget(CYCLE_KIND, gad, MakeENG(20, 20, 110, 16, NULL, EGAD_TYPES, 0, 0), GTCY_Labels, CycLabels, TAG_END ); if (gad == NULL) return(-1); EGadOrient = gad = CreateGadget(CYCLE_KIND, gad, MakeENG(20, 40, 110, 16, NULL, EGAD_LABPL, 0, 0), GTCY_Labels, CycOrient, TAG_END ); if (gad == NULL) return(-1); gad = CreateGadget(BUTTON_KIND, gad, MakeENG(135, 20, 40, 16, "NEW", EGAD_NEW, PLACETEXT_IN, 0), TAG_END ); if (gad == NULL) return(-1); gad = CreateGadget(BUTTON_KIND, gad, MakeENG(180, 20, 40, 16, "DEL", EGAD_DEL, PLACETEXT_IN, 0), TAG_END ); if (gad == NULL) return(-1); gad = CreateGadget(BUTTON_KIND, gad, MakeENG(140, 40, 80, 16, "UPDATE", EGAD_UPDATE, PLACETEXT_IN, 0), TAG_END ); gad = CreateGadget(BUTTON_KIND, gad, MakeENG(225, 20, 40, 16, "MOV", EGAD_MOVE, PLACETEXT_IN, 0), TAG_END ); if (gad == NULL) return(-1); gad = CreateGadget(BUTTON_KIND, gad, MakeENG(270, 20, 40, 16, "SIZ", EGAD_SIZE, PLACETEXT_IN, 0), TAG_END ); if (gad == NULL) return(-1); gad = CreateGadget(BUTTON_KIND, gad, MakeENG(315, 20, 70, 16, "WANDER", EGAD_WANDER, PLACETEXT_IN, 0), TAG_END ); if (gad == NULL) return(-1); EGadRegText = gad = CreateGadget(STRING_KIND, gad, MakeENG(100, 60, 100, 16, "REGION", EGAD_REGNAME, PLACETEXT_LEFT, 0), GTST_MaxChars, 32, TAG_END ); if (gad == NULL) return(-1); RegName = ((StringInfo *)gad->SpecialInfo)->Buffer; EGadLabText = gad = CreateGadget(STRING_KIND, gad, MakeENG(100, 80, 100, 16, "LABEL", EGAD_LABEL, PLACETEXT_LEFT, 0), GTST_MaxChars, 32, TAG_END ); if (gad == NULL) return(-1); LabName = ((StringInfo *)gad->SpecialInfo)->Buffer; EGadDefText = gad = CreateGadget(STRING_KIND, gad, MakeENG(100, 100, 100, 16, "DEFAULT", EGAD_DEFAULT, PLACETEXT_LEFT, 0), GTST_MaxChars, 32, TAG_END ); if (gad == NULL) return(-1); DefName = ((StringInfo *)gad->SpecialInfo)->Buffer; EGadMaxBufLen = gad = CreateGadget(STRING_KIND, gad, MakeENG(100, 120, 50, 16, "BUFLEN", EGAD_MAXBUFLEN, PLACETEXT_LEFT, 0), GTST_MaxChars, 3, TAG_END ); if (gad == NULL) return(-1); MaxName = ((StringInfo *)gad->SpecialInfo)->Buffer; /* * Item List */ gad = CreateGadget(BUTTON_KIND, gad, MakeENG(225, 145, 40, 16, "ADD", EGAD_LADD, PLACETEXT_IN, 0), TAG_END ); if (gad == NULL) return(-1); gad = CreateGadget(BUTTON_KIND, gad, MakeENG(270, 145, 40, 16, "DEL", EGAD_LDEL, PLACETEXT_IN, 0), TAG_END ); if (gad == NULL) return(-1); EGadAddText = gad = CreateGadget(STRING_KIND, gad, MakeENG(225, 125, 175, 16, "ENUM", EGAD_ENUMSTR, PLACETEXT_BELOW, 0), GTST_MaxChars, 32, TAG_END ); if (gad == NULL) return(-1); AddName = ((StringInfo *)gad->SpecialInfo)->Buffer; EGadList = gad = CreateGadget(LISTVIEW_KIND, gad, MakeENG(225, 40, 175, 80, NULL, EGAD_ENUM, 0, 0), GTLV_Labels, &EList, GTLV_ShowSelected, EGadAddText, TAG_END ); /* * Window */ EWin = OpenWindowTags(NULL, WA_Flags, WFLG_DRAGBAR|WFLG_DEPTHGADGET|WFLG_CLOSEGADGET| WFLG_SIMPLE_REFRESH|WFLG_ACTIVATE|WFLG_REPORTMOUSE| WFLG_SIZEGADGET, WA_IDCMP, IDCMP_NEWSIZE|IDCMP_MOUSEBUTTONS|IDCMP_GADGETDOWN| IDCMP_GADGETUP|IDCMP_MENUPICK|IDCMP_VANILLAKEY| IDCMP_RAWKEY|IDCMP_CHANGEWINDOW|IDCMP_CLOSEWINDOW| IDCMP_REFRESHWINDOW|IDCMP_MOUSEMOVE|IDCMP_ACTIVEWINDOW, WA_Left, 0, WA_Top, 0, WA_InnerWidth, 400, WA_InnerHeight, 160, WA_Title, "TPL CONTROL", WA_MinWidth, 32, WA_MinHeight, 32, WA_MaxWidth, -1, WA_MaxHeight, -1, WA_AutoAdjust, 1, WA_PubScreen, NULL, WA_PubScreenFallBack, 1, WA_Gadgets, EGList, TAG_END ); if (EWin == NULL) return(-1); EWinMask = 1 << EWin->UserPort->mp_SigBit; GT_RefreshWindow(EWin, NULL); return(1); } void CloseEditWindow() { if (EWin) { ClearMenuStrip(EWin); CloseWindow(EWin); EWin = NULL; } if (EGList) { FreeGadgets(EGList); EGList = NULL; } /* if (ENg.ng_VisualInfo) { FreeVisualInfo(ENg.ng_VisualInfo); ENg.ng_VisualInfo = NULL; } */ } void HandleEditGadget(im) IMsg *im; { switch(((Gadget *)im->IAddress)->GadgetID) { case EGAD_TYPES: NewType = im->Code; break; case EGAD_LABPL: NewFlags= 1 << im->Code; break; case EGAD_NEW: CurState = STATE_NEWREGION; DisableGadgets(); break; case EGAD_WANDER: CurState = STATE_WANDER; EnableGadgets(); break; case EGAD_DEL: DisableGadgets(); CurState = STATE_DELREGION; break; case EGAD_MOVE: DisableGadgets(); CurState = STATE_MOVEREGION; break; case EGAD_SIZE: DisableGadgets(); CurState = STATE_SIZEREGION; break; #ifdef NOTDEF case EGAD_REGNAME: if (CurRegion) { StringInfo *si = (StringInfo *)(((Gadget *)im->IAddress)->SpecialInfo); printf("%08lx %08lx\n", si->Buffer, RegName); if (CurRegion->rg_Node.ln_Name) free(CurRegion->rg_Node.ln_Name); CurRegion->rg_Node.ln_Name = strdup(si->Buffer); SetCurRegion(CurRegion); } break; case EGAD_LABEL: if (CurRegion) { StringInfo *si = (StringInfo *)(((Gadget *)im->IAddress)->SpecialInfo); if (CurRegion->rg_LabText) free(CurRegion->rg_LabText); CurRegion->rg_LabText = strdup(si->Buffer); } break; case EGAD_DEFAULT: if (CurRegion) { StringInfo *si = (StringInfo *)(((Gadget *)im->IAddress)->SpecialInfo); if (CurRegion->rg_DefText) free(CurRegion->rg_DefText); CurRegion->rg_DefText = strdup(si->Buffer); } break; #endif case EGAD_ENUMSTR: case EGAD_LADD: if (AddName[0] == 0) break; GT_SetGadgetAttrs(EGadList, EWin, NULL, GTLV_Labels, -1, TAG_END ); { MaxNode *mn; for (mn = GetHead(&EList); mn; mn = GetSucc(mn)) { if (strcmp(AddName, mn->ln_Name) == 0) break; } if (mn == NULL) AddNode(&EList, AddName, 1); } GT_SetGadgetAttrs(EGadList, EWin, NULL, GTLV_Labels, &EList, TAG_END ); break; case EGAD_LDEL: GT_SetGadgetAttrs(EGadList, EWin, NULL, GTLV_Labels, -1, TAG_END ); { MaxNode *mn; for (mn = GetHead(&EList); mn; mn = GetSucc(mn)) { if (strcmp(AddName, mn->ln_Name) == 0) { Remove(mn); free(mn->ln_Name); free(mn); break; } } } GT_SetGadgetAttrs(EGadList, EWin, NULL, GTLV_Labels, &EList, TAG_END ); break; case EGAD_UPDATE: /* * Update currently selected gadget from TPL CONTROL window */ if (CurRegion) { UpdateTplRegion(CurRegion); SetCurRegion(CurRegion); CurState = STATE_WANDER; ReMakeEverything(); /* MakeAllGadgets(); RefreshGList(GList, Win, NULL, -1); GT_RefreshWindow(Win, NULL); */ } break; } } void UpdateEWinInfo(rg) TplRegion *rg; { NewType = rg->rg_Type; NewFlags= rg->rg_Flags; sprintf(TmpBuf, "%d", rg->rg_MaxBufLen); GT_SetGadgetAttrs(EGadMaxBufLen, EWin, NULL, GTST_String, TmpBuf, TAG_END ); GT_SetGadgetAttrs(EGadType, EWin, NULL, GTCY_Active, rg->rg_Type, TAG_END ); GT_SetGadgetAttrs(EGadOrient, EWin, NULL, GTCY_Active, (rg->rg_Flags & 0x0001) ? 0 : (rg->rg_Flags & 0x0002) ? 1 : (rg->rg_Flags & 0x0004) ? 2 : (rg->rg_Flags & 0x0008) ? 4 : (rg->rg_Flags & 0x0010) ? 5 : 0, TAG_END ); GT_SetGadgetAttrs(EGadRegText, EWin, NULL, GTST_String, (rg->rg_Node.ln_Name) ? rg->rg_Node.ln_Name : "", TAG_END ); GT_SetGadgetAttrs(EGadLabText, EWin, NULL, GTST_String, (rg->rg_LabText) ? rg->rg_LabText : "", TAG_END ); GT_SetGadgetAttrs(EGadDefText, EWin, NULL, GTST_String, (rg->rg_DefText) ? rg->rg_DefText : "", TAG_END ); if (rg->rg_Type == RGT_CYCLE || rg->rg_Type == RGT_SELLIST) { MaxNode *mn; GT_SetGadgetAttrs(EGadList, EWin, NULL, GTLV_Labels, -1, TAG_END ); while (mn = RemHead(&EList)) { free(mn->ln_Name); free(mn); } for (mn = GetHead(&rg->rg_ListSet); mn; mn = GetSucc(mn)) { AddNode(&EList, mn->ln_Name, 1); } GT_SetGadgetAttrs(EGadList, EWin, NULL, GTLV_Labels, &EList, TAG_END ); } } NewGadget * MakeENG(le, te, w, h, ltext, gadid, flags, user) short le; short te; short w; short h; char *ltext; short gadid; long flags; APTR user; { ENg.ng_LeftEdge = le; ENg.ng_TopEdge = te; ENg.ng_Width = w; ENg.ng_Height= h; ENg.ng_GadgetText = ltext; ENg.ng_GadgetID = gadid; ENg.ng_Flags = flags; ENg.ng_UserData = user; return(&ENg); }