home *** CD-ROM | disk | FTP | other *** search
- PROCEDURE UpdateLinks;
- LABEL 1,2;
- 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 *****}
-
- kTextType = 10;
-
- VAR
- tHan,linkHan,symHan: HANDLE;
- str,contents,size:STRING;
- textStr,item,linkField,DBRef,linkID:STRING;
-
- 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 set up 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;
- SETCURSOR(WATCHC);
- DSelectObj(NOT(R IN [kDLinkRec]));
- tHan := LSActLayer;
- WHILE tHan <> NIL DO
- BEGIN
- IF GETTYPE(tHan) <> kTextType THEN GOTO 2;
- DBRef:=CONCAT('(''',kDLinkRec,'''.''',kDLinkID,''')');
- linkID:=EVALSTR(tHan,DBRef);
- DBRef:=CONCAT('(''',kDLinkRec,'''.''',kDLinkFldName,''')');
- linkField:=EVALSTR(tHan,DBRef);
- symHan:= GetObject(linkID);
- DBRef:=CONCAT('(''',kRec,'''.''',linkField,''')');
- str:=EVALSTR(symHan,DBRef);
- SETTEXT(tHan,str);
- 2:tHan :=PrevSObj(tHan);
- END;
- 1:PopAttrs
- END;
- RUN(UpdateLinks);