home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Club Amiga de Montreal - CAM
/
CAM_CD_1.iso
/
files
/
568b.lha
/
PowerSource_v3.0
/
source.lzh
/
source
/
Ied.c
< prev
next >
Wrap
Text File
|
1991-09-15
|
27KB
|
907 lines
/*----------------------------------------------------------------------*
Ied.c version 3.0 - © Copyright 1991 Jaba Development
Author : Jan van den Baard
Purpose: The editing on items and subitems.
*----------------------------------------------------------------------*/
/*---------------------------------------------------*
Gadgets created with GadgetEd V2.5
which is (c) Copyright 1990-91 by Jaba Development
written by Jan van den Baard
*---------------------------------------------------*/
static SHORT Border0_pairs[] = {
-1,-1,266,-1,266,140,-1,140,-1,-1 };
static SHORT Border1_pairs[] = {
-1,-1,266,-1,266,9,-1,9,-1,-1 };
static struct Border Border_bord[] = {
3,2,0,0,JAM1,5,(SHORT *)&Border0_pairs,&Border_bord[1],
3,2,0,0,JAM1,5,(SHORT *)&Border1_pairs,NULL };
static struct IntuiText Render_text = {
0,1,JAM1,84,3,NULL,(UBYTE *)"Edit MenuItem",NULL };
static struct IntuiText Render_text1 = {
0,1,JAM1,88,3,NULL,(UBYTE *)"Edit SubItem",NULL };
static SHORT CANCEL_pairs0[] = {
-1,-1,58,-1,58,35,-1,35,-1,-1 };
static struct Border CANCEL_bord = {
0,0,0,0,JAM1,5,(SHORT *)&CANCEL_pairs0,NULL };
static struct IntuiText CANCEL_text = {
0,1,JAM1,5,14,NULL,(UBYTE *)"CANCEL",NULL };
#define CANCEL_ID 17
static struct Gadget CANCEL = {
NULL,205,103,58,35,
GADGHCOMP,
RELVERIFY,
BOOLGADGET,
(APTR)&CANCEL_bord,NULL,
&CANCEL_text,NULL,NULL,CANCEL_ID,NULL };
static SHORT OKIDOKI_pairs0[] = {
-1,-1,58,-1,58,35,-1,35,-1,-1 };
static struct Border OKIDOKI_bord = {
0,0,0,0,JAM1,5,(SHORT *)&OKIDOKI_pairs0,NULL };
static struct IntuiText OKIDOKI_text = {
0,1,JAM1,21,14,NULL,(UBYTE *)"OK",NULL };
#define OKIDOKI_ID 16
static struct Gadget OKIDOKI = {
&CANCEL,139,103,58,35,
GADGHCOMP,
RELVERIFY,
BOOLGADGET,
(APTR)&OKIDOKI_bord,NULL,
&OKIDOKI_text,NULL,NULL,OKIDOKI_ID,NULL };
static UBYTE HEIGHT_buf[5] = "0";
static struct StringInfo HEIGHT_info = {
(UBYTE *)&HEIGHT_buf,NULL,0,5,0,0,0,0,0,0,NULL,NULL,NULL };
static SHORT HEIGHT_pairs0[] = {
-1,-1,59,-1,59,8,-1,8,-1,-1 };
static struct Border HEIGHT_bord = {
0,0,2,0,JAM1,5,(SHORT *)&HEIGHT_pairs0,NULL };
static struct IntuiText HEIGHT_text = {
0,1,JAM2,5,-9,NULL,(UBYTE *)"HEIGHT",NULL };
#define HEIGHT_ID 15
static struct Gadget HEIGHT = {
&OKIDOKI,72,130,59,8,
GADGHCOMP+GADGDISABLED,
RELVERIFY+STRINGCENTER+LONGINT,
STRGADGET,
(APTR)&HEIGHT_bord,NULL,
&HEIGHT_text,NULL,(APTR)&HEIGHT_info,HEIGHT_ID,NULL };
static UBYTE WIDTH_buf[5] = "0";
static struct StringInfo WIDTH_info = {
(UBYTE *)&WIDTH_buf,NULL,0,5,0,0,0,0,0,0,NULL,NULL,NULL };
static SHORT WIDTH_pairs0[] = {
-1,-1,59,-1,59,8,-1,8,-1,-1 };
static struct Border WIDTH_bord = {
0,0,2,0,JAM1,5,(SHORT *)&WIDTH_pairs0,NULL };
static struct IntuiText WIDTH_text = {
0,1,JAM2,10,-9,NULL,(UBYTE *)"WIDTH",NULL };
#define WIDTH_ID 14
static struct Gadget WIDTH = {
&HEIGHT,8,130,59,8,
GADGHCOMP+GADGDISABLED,
RELVERIFY+STRINGCENTER+LONGINT,
STRGADGET,
(APTR)&WIDTH_bord,NULL,
&WIDTH_text,NULL,(APTR)&WIDTH_info,WIDTH_ID,NULL };
static UBYTE TOP_buf[5] = "0";
static struct StringInfo TOP_info = {
(UBYTE *)&TOP_buf,NULL,0,5,0,0,0,0,0,0,NULL,NULL,NULL };
static SHORT TOP_pairs0[] = {
-1,-1,59,-1,59,8,-1,8,-1,-1 };
static struct Border TOP_bord = {
0,0,2,0,JAM1,5,(SHORT *)&TOP_pairs0,NULL };
static struct IntuiText TOP_text = {
0,1,JAM2,16,-9,NULL,(UBYTE *)"TOP",NULL };
#define TOP_ID 13
static struct Gadget TOP = {
&WIDTH,72,111,59,8,
GADGHCOMP+GADGDISABLED,
RELVERIFY+STRINGCENTER+LONGINT,
STRGADGET,
(APTR)&TOP_bord,NULL,
&TOP_text,NULL,(APTR)&TOP_info,TOP_ID,NULL };
static UBYTE LEFT_buf[5] = "0";
static struct StringInfo LEFT_info = {
(UBYTE *)&LEFT_buf,NULL,0,5,0,0,0,0,0,0,NULL,NULL,NULL };
static SHORT LEFT_pairs0[] = {
-1,-1,59,-1,59,8,-1,8,-1,-1 };
static struct Border LEFT_bord = {
0,0,2,0,JAM1,5,(SHORT *)&LEFT_pairs0,NULL };
static struct IntuiText LEFT_text = {
0,1,JAM2,15,-9,NULL,(UBYTE *)"LEFT",NULL };
#define LEFT_ID 12
static struct Gadget LEFT = {
&TOP,8,111,59,8,
GADGHCOMP+GADGDISABLED,
RELVERIFY+STRINGCENTER+LONGINT,
STRGADGET,
(APTR)&LEFT_bord,NULL,
&LEFT_text,NULL,(APTR)&LEFT_info,LEFT_ID,NULL };
static SHORT FORMAT_pairs0[] = {
-1,-1,124,-1,124,9,-1,9,-1,-1 };
static struct Border FORMAT_bord = {
0,0,0,0,JAM1,5,(SHORT *)&FORMAT_pairs0,NULL };
#define FORMAT_ID 11
static struct Gadget FORMAT = {
&LEFT,8,89,124,9,
GADGHCOMP,
RELVERIFY,
BOOLGADGET,
(APTR)&FORMAT_bord,NULL,
NULL,NULL,NULL,FORMAT_ID,NULL };
static SHORT DRMD_pairs0[] = {
-1,-1,124,-1,124,9,-1,9,-1,-1 };
static struct Border DRMD_bord = {
0,0,0,0,JAM1,5,(SHORT *)&DRMD_pairs0,NULL };
#define DRMD_ID 10
static struct Gadget DRMD = {
&FORMAT,139,89,124,9,
GADGHCOMP,
RELVERIFY,
BOOLGADGET,
(APTR)&DRMD_bord,NULL,
NULL,NULL,NULL,DRMD_ID,NULL };
static UBYTE ITEXT_buf[33];
static struct StringInfo ITEXT_info = {
(UBYTE *)&ITEXT_buf,NULL,0,33,0,0,0,0,0,0,NULL,NULL,NULL };
static SHORT ITEXT_pairs0[] = {
-1,-1,124,-1,124,8,-1,8,-1,-1 };
static struct Border ITEXT_bord = {
0,0,2,0,JAM1,5,(SHORT *)&ITEXT_pairs0,NULL };
static struct IntuiText ITEXT_text = {
0,1,JAM2,26,-9,NULL,(UBYTE *)"ITEM TEXT",NULL };
#define ITEXT_ID 9
static struct Gadget ITEXT = {
&DRMD,139,76,124,8,
GADGHCOMP,
RELVERIFY+STRINGCENTER,
STRGADGET,
(APTR)&ITEXT_bord,NULL,
&ITEXT_text,NULL,(APTR)&ITEXT_info,ITEXT_ID,NULL };
static UBYTE CK_buf[2];
static struct StringInfo CK_info = {
(UBYTE *)&CK_buf,NULL,0,2,0,0,0,0,0,0,NULL,NULL,NULL };
static SHORT CK_pairs0[] = {
-1,-1,124,-1,124,8,-1,8,-1,-1 };
static struct Border CK_bord = {
0,0,2,0,JAM1,5,(SHORT *)&CK_pairs0,NULL };
static struct IntuiText CK_text = {
0,1,JAM2,17,-9,NULL,(UBYTE *)"COMMAND KEY",NULL };
#define CK_ID 8
static struct Gadget CK = {
&ITEXT,8,76,124,8,
GADGHCOMP,
RELVERIFY+STRINGCENTER,
STRGADGET,
(APTR)&CK_bord,NULL,
&CK_text,NULL,(APTR)&CK_info,CK_ID,NULL };
static SHORT IE_pairs0[] = {
-1,-1,124,-1,124,9,-1,9,-1,-1 };
static struct Border IE_bord = {
0,0,0,0,JAM1,5,(SHORT *)&IE_pairs0,NULL };
static struct IntuiText IE_text = {
0,1,JAM1,18,1,NULL,(UBYTE *)"ITEMENABLED",NULL };
#define IE_ID 7
static struct Gadget IE = {
&CK,139,54,124,9,
GADGHCOMP+SELECTED,
TOGGLESELECT+GADGIMMEDIATE,
BOOLGADGET,
(APTR)&IE_bord,NULL,
&IE_text,NULL,NULL,IE_ID,NULL };
static SHORT MT_pairs0[] = {
-1,-1,124,-1,124,9,-1,9,-1,-1 };
static struct Border MT_bord = {
0,0,0,0,JAM1,5,(SHORT *)&MT_pairs0,NULL };
static struct IntuiText MT_text = {
0,1,JAM1,22,1,NULL,(UBYTE *)"MENUTOGGLE",NULL };
#define MT_ID 6
static struct Gadget MT = {
&IE,139,41,124,9,
GADGHCOMP,
TOGGLESELECT+GADGIMMEDIATE,
BOOLGADGET,
(APTR)&MT_bord,NULL,
&MT_text,NULL,NULL,MT_ID,NULL };
static SHORT CI_pairs0[] = {
-1,-1,124,-1,124,9,-1,9,-1,-1 };
static struct Border CI_bord = {
0,0,0,0,JAM1,5,(SHORT *)&CI_pairs0,NULL };
static struct IntuiText CI_text = {
0,1,JAM1,34,1,NULL,(UBYTE *)"CHECKIT",NULL };
#define CI_ID 5
static struct Gadget CI = {
&MT,139,28,124,9,
GADGHCOMP,
TOGGLESELECT+GADGIMMEDIATE,
BOOLGADGET,
(APTR)&CI_bord,NULL,
&CI_text,NULL,NULL,CI_ID,NULL };
static SHORT CD_pairs0[] = {
-1,-1,124,-1,124,9,-1,9,-1,-1 };
static struct Border CD_bord = {
0,0,0,0,JAM1,5,(SHORT *)&CD_pairs0,NULL };
static struct IntuiText CD_text = {
0,1,JAM1,34,1,NULL,(UBYTE *)"CHECKED",NULL };
#define CD_ID 4
static struct Gadget CD = {
&CI,139,15,124,9,
GADGHCOMP,
TOGGLESELECT+GADGIMMEDIATE,
BOOLGADGET,
(APTR)&CD_bord,NULL,
&CD_text,NULL,NULL,CD_ID,NULL };
static SHORT CS_pairs0[] = {
-1,-1,124,-1,124,9,-1,9,-1,-1 };
static struct Border CS_bord = {
0,0,0,0,JAM1,5,(SHORT *)&CS_pairs0,NULL };
static struct IntuiText CS_text = {
0,1,JAM1,34,1,NULL,(UBYTE *)"COMMSEQ",NULL };
#define CS_ID 3
static struct Gadget CS = {
&CD,8,54,124,9,
GADGHCOMP,
TOGGLESELECT+GADGIMMEDIATE,
BOOLGADGET,
(APTR)&CS_bord,NULL,
&CS_text,NULL,NULL,CS_ID,NULL };
static SHORT HN_pairs0[] = {
-1,-1,124,-1,124,9,-1,9,-1,-1 };
static struct Border HN_bord = {
0,0,0,0,JAM1,5,(SHORT *)&HN_pairs0,NULL };
static struct IntuiText HN_text = {
0,1,JAM1,30,1,NULL,(UBYTE *)"HIGHNONE",NULL };
#define HN_ID 2
static struct Gadget HN = {
&CS,8,41,124,9,
GADGHCOMP,
TOGGLESELECT+GADGIMMEDIATE,
BOOLGADGET,
(APTR)&HN_bord,NULL,
&HN_text,3L,NULL,HN_ID,NULL };
static SHORT HB_pairs0[] = {
-1,-1,124,-1,124,9,-1,9,-1,-1 };
static struct Border HB_bord = {
0,0,0,0,JAM1,5,(SHORT *)&HB_pairs0,NULL };
static struct IntuiText HB_text = {
0,1,JAM1,34,1,NULL,(UBYTE *)"HIGHBOX",NULL };
#define HB_ID 1
static struct Gadget HB = {
&HN,8,28,124,9,
GADGHCOMP,
TOGGLESELECT+GADGIMMEDIATE,
BOOLGADGET,
(APTR)&HB_bord,NULL,
&HB_text,5L,NULL,HB_ID,NULL };
static SHORT HC_pairs0[] = {
-1,-1,124,-1,124,9,-1,9,-1,-1 };
static struct Border HC_bord = {
0,0,0,0,JAM1,5,(SHORT *)&HC_pairs0,NULL };
static struct IntuiText HC_text = {
0,1,JAM1,30,1,NULL,(UBYTE *)"HIGHCOMP",NULL };
#define HC_ID 0
static struct Gadget HC = {
&HB,8,15,124,9,
GADGHCOMP+SELECTED,
TOGGLESELECT+GADGIMMEDIATE,
BOOLGADGET,
(APTR)&HC_bord,NULL,
&HC_text,6L,NULL,HC_ID,NULL };
static struct NewWindow nw_item = {
24,15,272,144,0,1,
GADGETDOWN+GADGETUP+CLOSEWINDOW,
NOCAREREFRESH+SMART_REFRESH+ACTIVATE+RMBTRAP+BORDERLESS,
NULL,NULL,
NULL,NULL,NULL,
150,50,320,256,CUSTOMSCREEN };
extern struct Window *MainWindow;
extern struct Screen *MainScreen;
extern struct RastPort *MainRP;
extern struct Gadget *Gadget;
extern struct MyMenu *ParentMenu;
extern struct MyMenuItem *ParentItem;
extern struct ListItem *ItemsList, *SubsList;
extern struct MyMenu *MenuStrip;
extern struct MemoryChain Memory;
extern struct MyMenuItem dummy;
extern struct MenuItem TheItem[], SubItem[];
extern struct Menu ItemMenuStrip[], SubMenuStrip[];
extern ULONG Class;
extern UWORD Code, ItemCount, SubCount;
extern UWORD ActEd, ItemTotal, SubTotal;
extern UWORD FrontPen, BackPen;
extern BOOL Saved;
static struct Window *IedWindow;
static UWORD FormatNum = 0L, DrMdNum = 0L;
static UBYTE DrMd[] = { JAM1,JAM2,COMPLEMENT,INVERSVID };
static struct IntuiText FmatText[] = {
0,1,JAM2,18,1,NULL,(UBYTE *)"AUTO FORMAT",NULL,
0,1,JAM2,18,1,NULL,(UBYTE *)"USER FORMAT",NULL
};
static struct IntuiText DrMdText[] = {
0,1,JAM2,46,1,NULL,(UBYTE *)"JAM1",NULL,
0,1,JAM2,46,1,NULL,(UBYTE *)"JAM2",NULL,
0,1,JAM2,22,1,NULL,(UBYTE *)"COMPLEMENT",NULL,
0,1,JAM2,26,1,NULL,(UBYTE *)"INVERSVID",NULL
};
void SetNIL( void )
{
register struct Gadget *g;
for(g = &HB; g; g = g->NextGadget) {
if(TestBits((ULONG)g->GadgetType,BOOLGADGET))
g->Flags = GADGHCOMP;
}
HC.Flags = SELECTED;
IE.Flags = SELECTED;
CK_buf[0] = 0;
ITEXT_buf[0] = 0;
FormatNum = 0;
DrMdNum = 0;
LEFT.Flags = GADGDISABLED;
TOP.Flags = GADGDISABLED;
WIDTH.Flags = GADGDISABLED;
HEIGHT.Flags = GADGDISABLED;
redisplay(&ITEXT);
}
struct MyMenuItem *MakeItem( void )
{
struct MyMenuItem *item;
struct IntuiText *itext;
WORD top, width;
if(NOT ITEXT_buf[0]) return(NULL);
width = TEXT_WIDTH(MainRP,(char *)&ITEXT_buf[0]) + TEXTSPACING;
if(SelectTest(&CS)) width += 40;
if(SelectTest(&CI)) width += 20;
if(ActEd == ITEMED) {
if((width + 10) > MainScreen->Width)
goto nfErr;
if(ParentMenu->FirstItem == &dummy)
top = MainScreen->BarHeight-1;
else
top = ItemHeight( ParentMenu->FirstItem ) + MainScreen->BarHeight-1;
} else {
if((width + ParentItem->Width) > MainScreen->Width)
goto nfErr;
if(NOT ParentItem->SubItem)
top = ParentItem->TopEdge + MainScreen->BarHeight - 1;
else
top = ItemHeight(ParentItem->SubItem) + ParentItem->TopEdge + MainScreen->BarHeight - 1;
}
if(MainScreen->Width == 320)
top += MainScreen->MenuHBorder;
if((top + TEXT_HEIGHT(MainRP) + ITEMSPACING + MainScreen->MenuHBorder) > MainScreen->Height)
goto nfErr;
if(NOT(item = (struct MyMenuItem *)AllocItem(&Memory,(ULONG)sizeof(struct MyMenuItem),MEMF_PUBLIC)))
goto itErr;
if(NOT(itext = (struct IntuiText *)MakeIText(&ITEXT_buf[0],DrMd[DrMdNum],80L)))
goto itErr;
if(NOT FormatNum)
item->Height = TEXT_HEIGHT(MainRP) + ITEMSPACING;
else {
item->LeftEdge = LEFT_info.LongInt;
item->TopEdge = TOP_info.LongInt;
item->Width = WIDTH_info.LongInt;
item->Height = HEIGHT_info.LongInt;
item->SpecialFlags = USERFORMAT;
}
if(SelectTest(&HC)) item->Flags = HIGHCOMP;
else if(SelectTest(&HB)) item->Flags = HIGHBOX;
else item->Flags = HIGHNONE;
if(SelectTest(&CI)) { item->Flags |= CHECKIT;
itext->LeftEdge = 18;
}
if(SelectTest(&CS)) { item->Flags |= COMMSEQ;
item->Command = CK_buf[0];
}
if(SelectTest(&MT)) item->Flags |= MENUTOGGLE;
if(SelectTest(&IE)) item->Flags |= ITEMENABLED;
if(SelectTest(&CD)) item->Flags |= CHECKED;
item->ItemFill = (APTR)itext;
item->Flags |= ITEMTEXT;
if(ActEd == ITEMED) {
ItemCount++;
ItemTotal++;
} else {
SubCount++;
SubTotal++;
}
return(item);
itErr:
enable_window();
ok();
Error("Out of memory!");
if(item) FreeMenuItem(item);
return(NULL);
nfErr:
enable_window();
ok();
Error("Item won't fit!");
return(NULL);
}
void RemoveItem( struct ListItem *l )
{
struct MyMenuItem *item, *pitem;
struct ListItem *pred;
UWORD count;
WORD width, left;
UBYTE message[36];
Saved = FALSE;
if(ActEd == ITEMED)
item = l->Item;
else
item = l->SubItem;
StringFormat((char *)&message,"Delete: %.27s",((struct IntuiText *)item->ItemFill)->IText);
if(Ask(&message[0],"Are you sure?") == FALSE)
return;
ClearMenuStrip(MainWindow);
if(ActEd == ITEMED) {
if(l == ItemsList) {
for(count = 1; count < 5; count++)
TheItem[count].SubItem = l->AItem.NextItem;
ItemsList = (struct ListItem *)l->AItem.NextItem;
} else {
pred = (struct ListItem *)FindPredItem(ItemsList, l);
pred->AItem.NextItem = l->AItem.NextItem;
}
} else {
if(l == SubsList) {
for(count = 1; count < 4; count++)
SubItem[count].SubItem = l->AItem.NextItem;
SubsList = (struct ListItem *)l->AItem.NextItem;
} else {
pred = (struct ListItem *)FindPredItem(SubsList,l);
pred->AItem.NextItem = l->AItem.NextItem;
}
}
if(ActEd == ITEMED) {
if(item == ParentMenu->FirstItem) {
ParentMenu->FirstItem = item->NextItem;
if(NOT item->NextItem) ParentMenu->FirstItem = (struct MyMenuItem *)&dummy;
} else {
pitem = (struct MyMenuItem *)FindPredItem(ParentMenu->FirstItem, item);
pitem->NextItem = item->NextItem;
}
} else {
if(item == ParentItem->SubItem)
ParentItem->SubItem = item->NextItem;
else {
pitem = (struct MyMenuItem *)FindPredItem(ParentItem->SubItem,item);
pitem->NextItem = item->NextItem;
}
}
FreeMenuItem(item);
if(ActEd == ITEMED) {
ItemCount--;
ItemTotal--;
} else {
SubCount--;
SubTotal--;
}
Mistake:
ReformatM();
ReformatList(ActEd);
if(ActEd == ITEMED)
SetMenuStrip(MainWindow,&ItemMenuStrip[0]);
else
SetMenuStrip(MainWindow,&SubMenuStrip[0]);
SetMainMenus();
}
ULONG CheckHotKey( UBYTE key )
{
register struct MyMenu *menu;
register struct MyMenuItem *it, *sb;
for(menu = MenuStrip; menu; menu = menu->NextMenu) {
if(menu->FirstItem != &dummy) {
for(it = menu->FirstItem; it; it = it->NextItem) {
if(it->Command == key)
return(TRUE);
if(it->SubItem) {
for(sb = it->SubItem; sb; sb = sb->NextItem) {
if(sb->Command == key)
return(TRUE);
}
}
}
}
}
return(FALSE);
}
struct MyMenuItem *EditItem( struct ListItem *l, ULONG ModeIns )
{
struct MyMenuItem *TheItem, *Last, *Edit, *TheList;
struct IntuiText *itext, *tt;
BOOL running = TRUE;
ULONG flags;
WORD left, width;
SetNIL();
if(ActEd == ITEMED) {
tt = &Render_text;
TheList = ParentMenu->FirstItem;
} else {
tt = &Render_text1;
TheList = ParentItem->SubItem;
}
if((NOT l) || ModeIns) {
LEFT_info.LongInt = 0;
if(TheList == &dummy || NOT TheList)
TOP_info.LongInt = 0;
else
TOP_info.LongInt = ItemHeight(TheList);
StringFormat((char *)&TOP_buf[0],"%ld",TOP_info.LongInt);
WIDTH_info.LongInt = 10;
HEIGHT_info.LongInt = 9;
strcpy((char *)&LEFT_buf[0],"0");
strcpy((char *)&WIDTH_buf[0],"10");
strcpy((char *)&HEIGHT_buf[0],"9");
} else if(l && (NOT ModeIns)) {
if(ActEd == ITEMED)
Edit = l->Item;
else
Edit = l->SubItem;
itext = (struct IntuiText *)Edit->ItemFill;
strcpy((char *)&ITEXT_buf[0],itext->IText);
flags = (ULONG)Edit->Flags;
HC.Flags = IE.Flags = NULL;
if(TestBits(flags,HIGHNONE)) HN.Flags = SELECTED;
else if(TestBits(flags,HIGHCOMP)) HC.Flags = SELECTED;
else HB.Flags = SELECTED;
if(TestBits(flags,CHECKIT)) CI.Flags = SELECTED;
if(TestBits(flags,COMMSEQ)) { CS.Flags = SELECTED;
CK_buf[0] = Edit->Command;
CK_buf[1] = 0;
}
if(TestBits(flags,MENUTOGGLE)) MT.Flags = SELECTED;
if(TestBits(flags,ITEMENABLED)) IE.Flags = SELECTED;
if(TestBits(flags,CHECKED)) CD.Flags = SELECTED;
LEFT_info.LongInt = Edit->LeftEdge;
TOP_info.LongInt = Edit->TopEdge;
WIDTH_info.LongInt = Edit->Width;
HEIGHT_info.LongInt = Edit->Height;
StringFormat((char *)&LEFT_buf[0],"%ld",Edit->LeftEdge);
StringFormat((char *)&TOP_buf[0],"%ld",Edit->TopEdge);
StringFormat((char *)&WIDTH_buf[0],"%ld",Edit->Width);
StringFormat((char *)&HEIGHT_buf[0],"%ld",Edit->Height);
if(TestBits((ULONG)Edit->SpecialFlags,USERFORMAT)) {
LEFT.Flags = GADGHCOMP;
TOP.Flags = GADGHCOMP;
WIDTH.Flags = GADGHCOMP;
HEIGHT.Flags = GADGHCOMP;
FormatNum = 1;
}
for(DrMdNum = 0; DrMdNum < 4; DrMdNum++)
if(itext->DrawMode == DrMd[DrMdNum])
break;
}
FORMAT.GadgetText = &FmatText[FormatNum];
DRMD.GadgetText = &DrMdText[DrMdNum];
nw_item.Screen = MainScreen;
if(NOT(IedWindow = (struct Window *)OpenWindow(&nw_item)))
return(NULL);
disable_window();
buisy();
draw(IedWindow,&HC,&Border_bord[0],tt);
ActivateGadget(&ITEXT,IedWindow,NULL);
do {
WaitPort(IedWindow->UserPort);
while(read_msg(IedWindow)) {
switch(Class) {
case GADGETUP:
switch(Gadget->GadgetID) {
case OKIDOKI_ID:
if(NOT ITEXT_buf[0]) {
DisplayBeep(MainScreen);
break;
}
case CANCEL_ID:
running = FALSE;
break;
case FORMAT_ID:
if(FormatNum) {
OffGList(IedWindow,&LEFT,NULL,4);
FORMAT.GadgetText = &FmatText[0];
FormatNum = 0;
} else {
OnGList(IedWindow,&LEFT,NULL,4);
FORMAT.GadgetText = &FmatText[1];
FormatNum = 1;
}
SetAPen(IedWindow->RPort,1);
RectFill(IedWindow->RPort,8,89,132,98);
RefreshGList(&FORMAT,IedWindow,NULL,1);
break;
case DRMD_ID:
if(DrMdNum == 3)
DrMdNum = 0;
else
DrMdNum++;
DRMD.GadgetText = &DrMdText[DrMdNum];
SetAPen(IedWindow->RPort,1);
RectFill(IedWindow->RPort,139,89,263,98);
RefreshGList(&DRMD,IedWindow,NULL,1);
break;
case CK_ID:
if(NOT CK_buf[0])
DeSelectGadget(IedWindow,&CS,NULL);
else {
if(NOT CheckHotKey(CK_buf[0]))
SelectGadget(IedWindow,&CS,NULL);
else {
DeSelectGadget(IedWindow,&CS,NULL);
CK_buf[0] = 0;
enable_window();
Error("Hotkey already used !");
disable_window();
RefreshGList(&CK,IedWindow,NULL,1);
}
}
break;
case LEFT_ID:
case TOP_ID:
case WIDTH_ID:
case HEIGHT_ID:
CheckNumbers(ParentMenu->LeftEdge+LEFT_info.LongInt,MainScreen->BarHeight+TOP_info.LongInt,WIDTH_info.LongInt,HEIGHT_info.LongInt);
break;
}
case GADGETDOWN:
switch(Gadget->GadgetID) {
case HC_ID:
case HB_ID:
case HN_ID:
MutualExclude(IedWindow,Gadget,&HC,NULL);
SelectGadget(IedWindow,Gadget,NULL);
break;
case CS_ID:
if(SelectTest(&CS))
ActivateGadget(&CK,IedWindow,NULL);
else {
CK_buf[0] = 0;
RefreshGList(&CK,IedWindow,NULL,1);
}
break;
}
}
}
} while(running == TRUE);
CloseWindow(IedWindow);
if(Gadget->GadgetID == OKIDOKI_ID && ModeIns && l) {
Saved = FALSE;
if(ActEd == ITEMED)
Edit = l->Item;
else
Edit = l->SubItem;
if((TheItem = MakeItem())) {
if(l->Item == TheList || l->SubItem == TheList) {
TheItem->NextItem = TheList;
if(ActEd == ITEMED)
ParentMenu->FirstItem = TheItem;
else
ParentItem->SubItem = TheItem;
TheList = TheItem;
} else {
Last = (struct MyMenuItem *)FindPredItem(TheList,Edit);
Last->NextItem = TheItem;
TheItem->NextItem = Edit;
}
TheItem->ItsListItem = (struct ListItem *)CreateListItem((APTR)TheItem,ActEd,TRUE,l,TRUE);
ReformatM();
ReformatList(ActEd);
enable_window();
ok();
return(NULL);
} else
return(NULL);
} else if(Gadget->GadgetID == OKIDOKI_ID && (NOT l)) {
Saved = FALSE;
if((TheItem = MakeItem())) {
if(TheList == &dummy || NOT TheList) {
if(ActEd == ITEMED)
ParentMenu->FirstItem = TheItem;
else
ParentItem->SubItem = TheItem;
} else {
Last = (struct MyMenuItem *)LastItem(TheList);
Last->NextItem = TheItem;
}
TheItem->ItsListItem = (struct ListItem *)CreateListItem((APTR)TheItem, ActEd, FALSE, NULL,TRUE);
ReformatM();
enable_window();
ok();
return(NULL);
} else
return(NULL);
} else if(Gadget->GadgetID == OKIDOKI_ID && l && (NOT ModeIns)) {
Saved = FALSE;
if(NOT FormatNum) {
Edit->Width = TEXT_WIDTH(MainRP,(char *)&ITEXT_buf[0]) + TEXTSPACING;
Edit->SpecialFlags = NULL;
} else {
Edit->LeftEdge = LEFT_info.LongInt;
Edit->TopEdge = TOP_info.LongInt;
Edit->Width = WIDTH_info.LongInt;
Edit->Height = HEIGHT_info.LongInt;
Edit->SpecialFlags = USERFORMAT;
}
if(SelectTest(&HC)) Edit->Flags = HIGHCOMP;
else if(SelectTest(&HB)) Edit->Flags = HIGHBOX;
else Edit->Flags = HIGHNONE;
if(SelectTest(&CI)) { Edit->Flags |= CHECKIT;
if(NOT FormatNum)
Edit->Width += 20;
itext->LeftEdge = 18;
}
if(SelectTest(&CS)) { Edit->Flags |= COMMSEQ;
Edit->Command = CK_buf[0];
if(NOT FormatNum)
Edit->Width += 40;
}
if(SelectTest(&MT)) Edit->Flags |= MENUTOGGLE;
if(SelectTest(&IE)) Edit->Flags |= ITEMENABLED;
if(SelectTest(&CD)) Edit->Flags |= CHECKED;
Edit->Flags |= ITEMTEXT;
itext->DrawMode = DrMd[DrMdNum];
itext->FrontPen = FrontPen;
itext->BackPen = BackPen;
strcpy((char *)itext->IText,(char *)&ITEXT_buf[0]);
strncpy((char *)&l->Letters[0],(char *)itext->IText,9);
ReformatM();
enable_window();
ok();
return(NULL);
}
enable_window();
ok();
return(NULL);
}