home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chip 1998 March
/
Chip_1998-03_cd.bin
/
tema
/
MINICAD
/
MC7DEMO
/
MINICAD.1
/
EDIT_DL.MPC
< prev
next >
Wrap
Text File
|
1997-04-30
|
5KB
|
181 lines
PROCEDURE EditLinks;
LABEL 1,2,3;
CONST
{DATA LABEL LAYER, CLASS, RECORD & FIELD NAMES}
kLegendLayerName = 'Legend';
kLegendSymName ='Key Symbol';
kLabelKeyClassName ='Key Labels';
kIDStart = 1000;
kIDRec = 'Key Symbol Data';
kIDFld = 'Next ID';
kDLinkRec ='Links';
kDLinkID ='Linked to';
kDLinkFldName ='Item';
kRec ='Instruments';
kFldItems = 'Focus,Color,Dimmer,Unit Number,Circuit,Channel,Lamp,Type,Position,Template,Ganged with,Remarks,Frame Size';
{***** DATA LABEL OPTIONS *****}
kUnlinkCreate = TRUE;
kUnlinkUpdate = TRUE;
kLinkUpdateFound = TRUE;
kLinkUpdateNew = TRUE;
kLinkDeleteBefore = TRUE;
kLinkCreateNew = TRUE;
kLinkCreateMissing = TRUE;
kLabelUpdate = TRUE;
kLabelDeleteOrphan = TRUE;
{***** OTHER LOCAL CONSTANTS *****}
kShowHelp=TRUE;
VAR
g,tHan,symHan:HANDLE;
x,y:REAL;
str,linkID,linkField,DBRef:STRING;
ctr:INTEGER;
done,quit,go,firstTimeThru:BOOLEAN;
PROCEDURE ParseStr(write : BOOLEAN);
VAR
fldCount, item : INTEGER;
fldItemStr, fieldName : STRING;
BEGIN
fldCount:=0;
fldItemStr:= kFldItems;
WHILE(POS(',',fldItemStr) <> 0) DO
BEGIN
item:= POS(',',fldItemStr);
fieldName:= COPY(fldItemStr,1,item-1);
IF write THEN NEWFIELD(kRec, fieldName, '0', 4, 0)
ELSE fldCount:= fldCount +1;
DELETE(fldItemStr,1,item);
END;
IF write THEN NEWFIELD(kRec, fldItemStr, '0', 4, 0)
ELSE fldCount:= fldCount +1;
END;
FUNCTION needSetUp : BOOLEAN;
VAR
flag : ARRAY[1..8] OF BOOLEAN; {result flags}
recHan, layerHan : HANDLE;
i, classIndex, counter, recCount : INTEGER;
nameStr : STRING;
BEGIN
{*** Initialize result flags ***}
FOR i:=1 TO 7 DO flag[i]:= TRUE;
flag[8]:= FALSE;
{*** CHECK FOR EXISTING DATALABEL ELEMENTS ***}
{*** Check for Layer ***}
layerHan:= FLayer;
WHILE layerHan<>NIL DO
BEGIN
IF GetLName(layerHan) = kLegendLayerName THEN flag[1]:= FALSE;
{*** The layer already exists ***}
layerHan:= NextLayer(layerHan);
END;
{*** Check for Class ***}
classIndex:= ClassNum;
counter:=0;
FOR counter:=1 TO classIndex DO IF ClassList(counter) = kLabelKeyClassName THEN flag[2]:= FALSE;
{*** The class already exists ***}
{*** Check for Record Instances ***}
recCount:= NUMRECORDS(NIL);
FOR i:= 1 TO recCount DO
BEGIN
recHan:= GETRECORD(NIL,i);
nameStr:= GetName(recHan);
IF nameStr = kRec THEN flag[3]:= FALSE;
IF nameStr = kIDRec THEN flag[4]:= FALSE;
IF nameStr = kDLinkRec THEN flag[5]:= FALSE;
END;
{*** Check for Key Symbol ***}
IF (COUNT(N=kLegendSymName)<>0) THEN flag[6]:= FALSE;
{*** Check for Key Labels ***}
IF (COUNT((L=kLegendLayerName) & (C=kLabelKeyClassName))<>0) THEN flag[7]:= FALSE;
{*** Check if result dialog is needed ***}
FOR i:=1 TO 7 DO IF flag[i] THEN flag[8]:= TRUE;
needSetUp:= flag[8];
END;
BEGIN
PushAttrs;
IF needSetUp THEN BEGIN
SYSBEEP;
ALRTDIALOG('This command needs certain elements. Please run the command
Set up Data Labels╔');
GOTO 1;
END;
firstTimeThru:= TRUE;
tHan:=FSACTLAYER;
go:= FALSE;
quit:= FALSE;
2:done:=FALSE;
IF kShowHelp THEN MESSAGE('Select a data label for editing. Press any key to exit.');
SetCursor(ArrowC);
WHILE NOT done DO
BEGIN
IF (tHan <> NIL) AND (firstTimeThru) THEN GOTO 3;
REPEAT
IF KEYDOWN(ctr) THEN done := TRUE;
UNTIL MOUSEDOWN(x,y) OR done;
IF (NOT done) THEN tHan:=PICKOBJECT(x,y);
3:firstTimeThru:= FALSE;
IF (tHan<>NIL) AND (GETTYPE(tHan)=10) AND (EVALSTR(tHan,(R IN ['Links']))='True') THEN
BEGIN
IF done THEN GOTO 1;
IF kShowHelp THEN MESSAGE('Data label selected.');
IF g <> NIL THEN SETDSELECT(g);
SETSELECT(tHan);
REDRAW;
IF tHan <> NIL THEN g:= tHan;
str:= GETTEXT(tHan);
SetCursor(TextBarC);
str:=STRDIALOG('Enter the text to be replaced.',str);
IF DIDCANCEL THEN BEGIN
IF kShowHelp THEN MESSAGE('Data link unchanged.')
GOTO 2;
END
ELSE
BEGIN
IF kShowHelp THEN MESSAGE('Updating database╔');
SetText(tHan,Str);
REDRAW;
DBRef:=CONCAT('(''',kDLinkRec,'''.''',kDLinkID,''')');
linkID:=EVALSTR(tHan,DBRef);
DBRef:=CONCAT('(''',kDLinkRec,'''.''',kDLinkFldName,''')');
linkField:=EVALSTR(tHan,DBRef);
symHan:= GetObject(linkID);
SETRFIELD(symHan,kRec,linkField,str);
GOTO 2;
END;
END
ELSE
BEGIN
SYSBEEP;
IF g <> NIL THEN SETDSELECT(g);
IF tHan <> NIL THEN SETSELECT(tHan);
REDRAW;
IF tHan <> NIL THEN g:= tHan;
IF done THEN
BEGIN
quit:=YNDIALOG('Data label not selected. Exit?');
IF quit THEN GOTO 1
ELSE GOTO 2;
END
ELSE IF kShowHelp THEN MESSAGE('Data label not selected.');
END;
END;
1:PopAttrs;
CLRMESSAGE;
END;
RUN(EditLinks);