home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chip 1998 March
/
Chip_1998-03_cd.bin
/
tema
/
MINICAD
/
MC7DEMO
/
MINICAD.1
/
DRAWMTRX.MPC
< prev
next >
Wrap
Text File
|
1997-04-30
|
4KB
|
145 lines
PROCEDURE DrawMatrix;
LABEL 1,2;
CONST
kLayerName = 'Adjacency Matrix';
kSpaceSymName = 'Space Name Box';
kRelationSymName = 'Relationship Box';
kWorksheetName='Area Worksheet';
kSpaceRec = 'Space';
kSpaceFld = 'Name';
kAdjacentRec = 'Adjacency';
kAdjacentFld = 'Code';
kNameColumn = 1;
kMaxArray = 20;
VAR
WSH,snbHan,rbHan : HANDLE;
snbHEIGHT, snbWIDTH : REAL;
rbHEIGHT, rbWIDTH, mX, mY : REAL;
X1, Y1, X2, Y2, curSY, curSX, curRY, curRX : REAL;
startRow,numRows,numCols,numNames,r,i,blankOffset : INTEGER;
str,worksheetName,spaceName : STRING;
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;
FUNCTION PermissionDeniedToDelete : BOOLEAN;
VAR
result, finished, cancel : BOOLEAN;
item, x1, x2 : INTEGER;
layerHan : HANDLE;
BEGIN
finished := FALSE;
cancel:= FALSE;
layerHan := GetObject(kLayerName);
LAYER(kLayerName);
IF FActLayer <> Nil THEN BEGIN
{IF ( NumObj ( layerHan ) ) <> 0 THEN BEGIN}
CenterDialog(0,320,x1,x2);
BeginDialog(1,1,x1,189,x2,323);
AddButton('Delete',1,1,211,82,275,105);
AddButton('Cancel',2,1,128,82,192,105);
AddField('Existing items in layer',3,1,49,24,208,42);
AddField( Concat( ' ╘',kLayerName,'╒ will be deleted.' ), 4,1,49,47,277,65);
EndDialog;
GetDialog(1);
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 result := TRUE
ELSE BEGIN
DoMenuText('Active Only');
SelectObj(L=kLayerName);
DeleteObjs;
END;
END;
PermissionDeniedToDelete := result;
END;
BEGIN
PUSHATTRS;
ANGLEVAR;
IF PermissionDeniedToDelete THEN GoTo 1;
{** Try named worksheet CONST}
WSH:=GETOBJECT(kWorksheetName);
{** Try active worksheet}
IF (WSH=NIL) THEN WSH:=ActSSheet;
{** Try getting worksheet name from user}
IF (WSH=NIL) THEN BEGIN
worksheetName:=STRDIALOG('Enter the name of the worksheet to be sorted.','Worksheet 1');
WSH:=GETOBJECT(worksheetName);
END;
{** If no worksheet then punch out with dialog╔}
IF ((WSH=NIL)|(GetType(WSH)<>18)) THEN BEGIN
SYSBEEP;
ALRTDIALOG('I can╒t find a worksheet by that name.');
GOTO 1;
END;
SelectSS(WSH);
SprdSize(WSH,numRows,numCols);
{** Check if array limit is big enough}
IF numCols > kMaxArray THEN BEGIN
str:= CONCAT('Increase CONST kMaxArray to at least ',numCols,'.');
ALRTDIALOG(str);
GOTO 1;
END;
SETCURSOR(WATCHC);
snbHan:=GetObject(kSpaceSymName);
snbHEIGHT:= HHeight(snbHan);
snbWIDTH:= HWidth(snbHan);
rbHan:=GetObject(kRelationSymName);
rbHEIGHT:= HHeight(rbHan);
rbWIDTH:= HWidth(rbHan);
{** Get number of names }
numNames:= 0;
IF GETCELLSTR(WSH,1,1) = 'Name' THEN startRow:= 2
ELSE startRow:= 1;
IF GETCELLSTR(WSH,1,1) = '' THEN startRow:= 2;
FOR r:= startRow TO numRows DO
IF CELLHASSTR(WSH,r,kNameColumn) THEN numNames:= numNames +1;
curSY:= snbHEIGHT * (numNames/2);
curSX:= -(snbWIDTH + ((rbWidth/2)*(numNames-2)))/2;
curRY:= curSY-snbHEIGHT;
curRX:= curSX + snbWIDTH - (rbWidth/2);
blankOffset:= 0;
FOR r:= startRow TO numRows DO BEGIN
IF CELLHASSTR(WSH,r,kNameColumn) THEN BEGIN
spaceName:= GETCELLSTR(WSH,r,kNameColumn);
Symbol(kSpaceSymName,curSX,curSY,#0);
SetRecord(LNewObj,kSpaceRec);
SetRField(LNewObj,kSpaceRec,kSpaceFld,spaceName);
IF ((r - blankOffset) <= numNames) THEN Symbol(kRelationSymName,curRX,curRY,#0);
mX:= curRX;
mY:= curRY;
{** Insert relationship boxes}
FOR i:= 2 TO (r-blankOffset)-1 DO BEGIN
IF (r-blankOffset) > numNames THEN GOTO 2;
mX:= mX+(rbWIDTH/2);
mY:= mY+(rbHEIGHT/2);
Symbol(kRelationSymName,mX,mY,#0);
2:END;
curSY:= curSY-snbHEIGHT;
curRY:= curRY-rbHEIGHT;
END
{** Increment blank space counter }
ELSE blankOffset:= blankOffset + 1;
snbHan:=LNewObj;
SETDSELECT(snbHan);
CLOSESS(WSH);
END;
1:POPATTRS;
END;
RUN(DrawMatrix);