CDMakeLabelCell.mesa (part of ChipNDale)
Copyright © 1985 by Xerox Corporation. All rights reserved.
Created by Christian Jacobi, October 2, 1985 3:46:55 pm PDT
Last edited by: Christian Jacobi, December 29, 1986 10:48:25 am PST
DIRECTORY
CD,
CDCells,
CDCommandOps,
CDCommandOpsExtras2,
CDCreateLabels,
CDDirectory,
CDOps,
CDOrient,
CDProperties,
CDSequencer,
CDTexts,
Imager,
RefTab,
Rope,
TerminalIO;
CDMakeLabelCell:
CEDAR
PROGRAM
IMPORTS CD, CDCells, CDCommandOps, CDCommandOpsExtras2, CDCreateLabels, CDDirectory, CDOps, CDOrient, CDProperties, RefTab, Rope, TerminalIO =
BEGIN
abortPlot: REF BOOL ← NEW[BOOL ← FALSE];
contextFilter: REF CD.ContextFilter ← NEW[CD.ContextFilter←ALL[TRUE]];
myProp: REF ← NEW[INT];
DrawContext:
PROC [pr:
CD.DrawRef, proc:
CD.DrawContextLayerProc, ob:
CD.Object, pos:
CD.Position, orient:
CD.Orientation, layer:
CD.Layer] =
BEGIN
IF ob=NIL THEN RETURN;
WITH ob.specificRef
SELECT
FROM
tp: CDTexts.TextPtr => {
ref: RefTab.Ref ~ NARROW[pr.devicePrivate];
tCell: CD.Object ← NIL;
WITH ref.Fetch[ob].val
SELECT
FROM
cob: CD.Object => tCell ← cob;
ENDCASE => {
tiogaFont: Imager.Font ← NIL;
WITH CDProperties.GetProp[tp.cdFont.properties, $OriginalFont]
SELECT
FROM
f: Imager.Font => tiogaFont ← f;
ENDCASE => RETURN;
IF tiogaFont#
NIL
AND tiogaFont.name.Length[]>17
AND Rope.Equal["Xerox/TiogaFonts/", tiogaFont.name.Substr[len: 17],
FALSE]
THEN {
--realy is tiogafont
tCell ← CDCreateLabels.CreateTextCell[pr.design, tp.text, tiogaFont, tp.cdFont.scaleI, layer];
}
ELSE {
tCell ← CDCreateLabels.CreateTextCell[pr.design, tp.text, tp.cdFont.font, 1, layer];
};
[] ← ref.Store[ob, tCell]
};
IF tCell#
NIL
THEN {
origin:
CD.Position ← CDOrient.MapPoint[
pointInCell: CD.ClientOrigin[ob],
cellSize: ob.size,
cellInstOrient: orient,
cellInstPos: pos
];
[] ← CDCells.IncludeOb[cell: cell, ob: tCell, position: origin, orientation: orient, mode: dontPropagate];
};
};
ENDCASE => NULL;
END;
cell: CD.Object;
ProtectedMakeLabelCell:
PROC[comm: CDSequencer.Command] =
BEGIN
design: CD.Design ← comm.design;
dr:
CD.DrawRef =
CD.CreateDrawRef[[
drawContext: DrawContext,
contextFilter: contextFilter,
devicePrivate: RefTab.Create[],
design: design
]];
cell ← CDCells.CreateEmptyCell[];
CDOps.DrawDesign[design, dr];
[] ← CDCells.RepositionCell[cell, NIL];
[] ← CDDirectory.Include[design, cell, "dummy"];
[] ← CDCells.IncludeOb[design: design, ob: cell];
END;
MakeLabelCellComm:
PROC [comm: CDSequencer.Command] =
BEGIN
TerminalIO.WriteRope["make a label cell\n"];
[] ← CDCommandOps.CallWithResource[ProtectedMakeLabelCell, comm, $MakeLabelCell, abortPlot];
END;
CDCommandOpsExtras2.RegisterWithMenu[$ProgramMenu, "make a label cell", "a cell with labels containing all texts", $MakeLabelCellComm, MakeLabelCellComm, doQueueAndMark];
END.