home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chip 1998 March
/
Chip_1998-03_cd.bin
/
tema
/
MINICAD
/
MC7DEMO
/
MINICAD.1
/
SETUP_DL.MPC
< prev
next >
Wrap
Text File
|
1997-04-30
|
10KB
|
329 lines
PROCEDURE SetupLinks;
{
⌐1997, Diehl Graphsoft, Inc.
Developed by Frank Brault
Last modified: 04/18/97
}
LABEL 1,2;
CONST
{*** DATA LABEL LAYER, CLASS, RECORD & FIELD NAMES ***}
kPlotLayerName = 'Light Plot';
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 ***}
kFieldSeparator = ',';
kEmptyValue = '0';
kDefaultClass = 'None';
kTemporaryClass = 'tmp';
tempLocusName = 'tempLocus';
kUnlinkCreate = TRUE;
kUnlinkUpdate = TRUE;
kLinkUpdateFound = TRUE;
kLinkUpdateNew = TRUE;
kLinkDeleteBefore = TRUE;
kLinkCreateNew = TRUE;
kLinkCreateMissing = TRUE;
kLabelUpdate = TRUE;
kLabelDeleteOrphan = TRUE;
VAR
tHan,linkHan,symHan,layerHan,recHan,keyHan,LegendLayerHan: HANDLE;
str1,str2,str3,str4,str5,str6,str7:STRING;
contents,size,symName,nextID:STRING;
DBRef,layerRef,classRef,recRef,fldRef,strRef : STRING;
textStr,linkItem,linkField,linkID:STRING;
fldItemStr,fldItem,fieldName,recordName,nameStr : STRING;
fldCount,i,j,dataLabelCount,recCount:INTEGER;
item,x1,x2,classIndex,counter : INTEGER;
tx,ty,tx1,ty1,tx2,ty2,myLayerScale : REAL;
cancel,finished,needDialog,hasAll : BOOLEAN;
flag : ARRAY[1..8] OF BOOLEAN; {result flags}
PROCEDURE CenterDialog(dX1,dX2 : INTEGER; VAR x1,x2 : INTEGER);
VAR
scrX1,scrY1,scrX2,scrY2,w : INTEGER;
BEGIN
GetScreen(scrX1,scrY1,scrX2,scrY2);
w := dX2 - dX1;
x1 := ((scrX1 + scrX2) DIV 2) - (w DIV 2);
x2 := x1 + w;
END;
PROCEDURE ParseStr(write : BOOLEAN);
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, kEmptyValue, 4, 0);
fldCount:= fldCount +1;
DELETE(fldItemStr,1,item);
END;
IF write THEN NEWFIELD(kRec, fldItemStr, kEmptyValue, 4, 0);
fldCount:= fldCount +1;
END;
BEGIN
PushAttrs;
{*** Initialize result flags ***}
FOR i:=1 TO 8 DO flag[i]:= FALSE;
{*** Check for at least one symbol ***}
IF SymDefNum < 1 THEN
BEGIN
AlrtDialog('There should be at least 1 symbol defined in this file before running this procedure.');
GOTO 2;
END;
{*** Check for active symbol definition ***}
IF ActSymDef = NIL THEN
BEGIN
CENTERDIALOG(0,320,x1,x2);
BEGINDIALOG(3,1,x1,185,x2,330);
ADDBUTTON('OK',1,1,237,101,301,124);
ADDBUTTON('Cancel',2,1,158,101,222,124);
ADDFIELD('There is no symbol currently selected.',3,1,18,29,288,47);
ADDFIELD('Data labels will use first symbol in file.',4,1,18,52,295,70);
ENDDIALOG;
GetDialog(3);
finished := FALSE;
cancel:= FALSE;
REPEAT DialogEvent(item);
IF item = 2 THEN
BEGIN
finished := TRUE;
cancel := TRUE;
END;
IF item = 1 THEN finished := TRUE;
UNTIL finished;
CLRDIALOG;
IF cancel THEN GOTO 2;
symHan:= FSymDef;
WHILE getType(SymHan) =11 DO symHan:= FInfolder(SymHan);
symName:= GetName(symHan);
SETACTSYMBOL(symName);
END; {of IF ActSymDef = NIL}
{*** CHECK FOR EXISTING DATALABEL ELEMENTS ***}
{*** Check for Layer ***}
layerHan:= FLayer;
WHILE layerHan<>NIL DO
BEGIN
IF GetLName(layerHan) = kLegendLayerName THEN
BEGIN
flag[1]:= TRUE;
LegendLayerHan:=layerHan;
{*** The layer already exists ***}
END;
layerHan:= NextLayer(layerHan);
END;
{*** Check for Class ***}
classIndex:= ClassNum;
counter:=0;
FOR counter:=1 TO classIndex DO
BEGIN
IF ClassList(counter) = kLabelKeyClassName THEN flag[2]:= TRUE;
{*** The class already exists ***}
END;
{*** 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]:= TRUE;
IF nameStr = kIDRec THEN flag[4]:= TRUE;
IF nameStr = kDLinkRec THEN flag[5]:= TRUE;
END;
{*** Check for Key Symbol ***}
IF (COUNT(N=kLegendSymName)<>0) THEN flag[6]:= TRUE;
{*** Check for Key Labels ***}
IF (COUNT((L=kLegendLayerName) & (C=kLabelKeyClassName))<>0) THEN flag[7]:= TRUE;
dataLabelCount:= COUNT((L=kLegendLayerName) & (C=kLabelKeyClassName));
{*** Data Labels Results Dialog ***}
{*** Check if needed ***}
needDialog:= FALSE;
FOR i:=1 TO 8 DO IF flag[i] THEN needDialog:= TRUE;
IF needDialog THEN BEGIN
hasAll:= TRUE;
FOR i:=1 TO 7 DO IF NOT(flag[i]) THEN hasAll:= FALSE;
IF hasAll THEN BEGIN
ALRTDIALOG('This file has all of the required elements for the
Data Labels system.');
GOTO 2;
END;
{*** Load Dialog Strings ***}
str1:= CONCAT('Layer: ''',kLegendLayerName,'''');
str2:= CONCAT('Class: ''',kLabelKeyClassName,'''');
str3:= CONCAT('Record: ''',kRec,'''');
str4:= CONCAT('Record: ''',kIDRec,'''');
str5:= CONCAT('Record: ''',kDLinkRec,'''');
str6:= CONCAT('Symbol Key named: ''',kLegendSymName,'''');
str7:= kLabelKeyClassName;
IF flag[7] THEN
str7:= CONCAT(NUM2STR(0,dataLabelCount),' ''', str7,''' items');
CENTERDIALOG(0,320,x1,x2);
BEGINDIALOG(4,1,x1,130,x2,461);
ADDBUTTON('Continue',1,1,225,285,311,308);
ADDBUTTON('Cancel',2,1,145,285,209,308);
ADDFIELD('________________',3,1,9,17,148,35);
ADDFIELD('Data Labels Results',4,1,10,9,149,27);
ADDFIELD('The checked items below are already',5,1,19,45,300,63);
ADDFIELD('present. Continue to append missing',6,1,19,68,267,86);
ADDFIELD('structures.',7,1,19,91,300,109);
ADDBUTTON(str1,8,2,9,133,319,151);
ADDBUTTON(str2,9,2,9,151,316,169);
ADDBUTTON(str3,10,2,9,169,319,187);
ADDBUTTON(str4,11,2,9,187,317,205);
ADDBUTTON(str5,12,2,9,205,319,223);
ADDBUTTON(str6,13,2,9,223,314,241);
ADDBUTTON(str7,14,2,9,241,315,259);
ENDDIALOG;
GetDialog(4);
SetItem(8,flag[1]);
SetItem(9,flag[2]);
SetItem(10,flag[3]);
SetItem(11,flag[4]);
SetItem(12,flag[5]);
SetItem(13,flag[6]);
SetItem(14,flag[7]);
finished := FALSE;
cancel:= FALSE;
REPEAT DialogEvent(item);
IF item = 1 THEN finished := TRUE;
IF item = 2 THEN
BEGIN
finished := TRUE;
cancel := TRUE;
END;
UNTIL finished;
CLRDIALOG;
IF cancel THEN GOTO 2;
END;
IF (GetLScale(LegendLayerHan) = 1.0) THEN SetScale(24);
{*** Parse field name string for field count ***}
ParseStr(FALSE);
{*** Data Labels Setup Dialog ***}
IF (FLAG[7] = FALSE) THEN BEGIN
str1:=CONCAT('(up to ',fldCount,')');
CENTERDIALOG(0,342,x1,x2);
BEGINDIALOG(1,1,x1,75,x2,431);
ADDBUTTON('OK',1,1,255,294,319,317);
ADDBUTTON('Cancel',2,1,175,294,239,317);
ADDFIELD('_____________________',3,1,24,21,201,39);
ADDFIELD('Data Labels Setup Dialog',4,1,23,14,200,31);
ADDFIELD('This procedure places an instance of the',5,1,25,56,289,73);
ADDFIELD('active symbol at the origin. The symbol',6,1,25,78,298,95);
ADDFIELD('and labels may be moved if desired,',7,1,25,100,327,117);
ADDFIELD('after the procedure.',8,1,25,122,171,139);
ADDFIELD('Enter the number of labels to be placed',9,1,25,163,310,180);
ADDFIELD(str1,10,1,248,185,410,202);
ADDFIELD('with the legend symbol:',11,1,25,185,192,202);
ADDFIELD('The procedure uses default field names.',12,1,25,207,309,224);
ADDFIELD('(Change to Instrument field names if other labels are desired.)',13,1,25,251,316,268);
ADDFIELD('3',14,2,201,182,233,202);
ENDDIALOG;
GetDialog(1);
SelField(14);
finished := FALSE;
cancel:= FALSE;
REPEAT DialogEvent(item);
IF item = 2 THEN
BEGIN
finished := TRUE;
cancel := TRUE;
END;
IF item = 1 THEN finished := TRUE;
UNTIL finished;
str1:= GetField(14);
CLRDIALOG;
IF cancel THEN GOTO 2;
dataLabelCount:=str2Num(str1);
if dataLabelCount>fldCount THEN dataLabelCount:=fldCount;
END;
IF flag[1] = FALSE THEN Layer(kLegendLayerName);
IF flag[3] = FALSE THEN ParseStr(TRUE);
IF flag[4] = FALSE THEN NewField(kIDRec,kIDFld,kEmptyValue,4,0);
IF flag[5] = FALSE THEN BEGIN
NewField(kDLinkRec,kDLinkID,kEmptyValue,4,0);
NewField(kDLinkRec,kDLinkFldName,kEmptyValue,4,0);
END;
IF flag[6] = FALSE THEN
BEGIN
Layer(kLegendLayerName);
symHan:= ActSymDef;
symName:=GetName(symHan);
NameObject(kLegendSymName);
Symbol(symName, 0, 0, 0);
keyHan:=LNewObj;
SetRecord(keyHan,kIDRec);
SetRField(keyHan,kIDRec,kIDFld,NUM2STR(0,kIDStart+COUNT(ALL)));
i := NumRecords(keyHan);
IF (i>0) THEN BEGIN
FOR j := 1 to i DO BEGIN
recHan := GetRecord(keyHan,j);
recordName:= GetName(recHan);
IF recordName = kRec THEN flag[8]:=TRUE;
END; {of FOR j := 1 to i}
END; {of IF (i>0) Statement}
END; {of IF flag[6] Statement}
IF flag[7] = FALSE THEN
BEGIN
tx:= 0;
ty:= 0;
TEXTJUST(2);
TEXTSIZE(9);
Layer(kLegendLayerName);
NameClass(kLabelKeyClassName);
recHan := GetObject(kRec);
FOR j := 1 to dataLabelCount DO BEGIN
TEXTORIGIN(tx,ty);
str1 := GetFldName(recHan,j);
BEGINTEXT;
str1
ENDTEXT;
tHan:= LNEWOBJ;
GetBBox(tHan,tx1,ty1,tx2,ty2);
ty:= ty2+((ty2-ty1)*.5));
END;
END; {of IF flag[7] Statement}
IF flag[8] THEN BEGIN
DelRecord(keyHan,kRec);
END;
DoMenuText('Normal Scale');
LAYER(kLegendLayerName);
DSelectAll;
LAYER(kPlotLayerName);
DoMenuText('Show/Snap/Modify Others');
ALRTDIALOG('Arrange the labels in the legend as desired, then
place instruments in Light Plot layer.');
2:PopAttrs;
END;
RUN(SetupLinks);