File: SVEditToolMenusImplE.mesa
Last edited by Bier on May 4, 1987 5:39:03 pm PDT
Copyright © 1984 by Xerox Corporation. All rights reserved.
Contents: Procedures which build sections of the EditTool (continued).
DIRECTORY
AtomButtons, Rope, Rules, VFonts, SVEditToolMenus, SVInterfaceTypes, SVUserInput;
SVEditToolMenusImplE: CEDAR PROGRAM
IMPORTS AtomButtons, SVUserInput, VFonts
EXPORTS SVEditToolMenus =
BEGIN
EditToolData: TYPE = SVInterfaceTypes.EditToolData;
Declare the standard distances between menu lines.
entryHeight: CARDINAL = SVEditToolMenus.entryHeight;
entryVSpace: CARDINAL = SVEditToolMenus.entryVSpace;
entryHSpace: CARDINAL = SVEditToolMenus.entryHSpace;
column0: CARDINAL = SVEditToolMenus.column0;
column1: CARDINAL = SVEditToolMenus.column1;
column2: CARDINAL = SVEditToolMenus.column2;
column3: CARDINAL = SVEditToolMenus.column3;
numberSize: CARDINAL = 80;
numberSize3: CARDINAL = 160;
BuildLightSourceSection: PUBLIC PROC [editToolData: EditToolData] = {
This section implements a set of buttons, text windows, and options listers in this format:
AddLight! DeleteLight! EditLight!
lightName: <rope> position: <BOOL> color: <red, green, blue>
nextX: INTEGER;
lightNameSize: NAT;
nextX ← AtomButtons.BuildButtonLine[editToolData.outer, 0, editToolData.height, editToolData, SVUserInput.EventNotify, LIST[
[button["AddLight!", LIST[LIST[$AddLight, $Add], NIL, LIST[$AddLight, $Replace]] ]],
[button["DeleteLight!", LIST[LIST[$DeleteLight]] ]],
[button["EditLight!", LIST[LIST[$EditLight]] ]]
]];
editToolData.height ← editToolData.height + entryVSpace + entryHeight;
lightNameSize ← VFonts.StringWidth["MysteriousLight "];
nextX ← AtomButtons.BuildButtonLine[editToolData.outer, 0, editToolData.height, editToolData, SVUserInput.EventNotify, LIST[
[button["light name:", LIST[LIST[$LightNamePrompt]] ]],
[text["WhiteLight", LightNameInData, lightNameSize]],
[button["position:", LIST[LIST[$LightPositionPrompt]] ]],
[text["600, 600, 600", LightPositionInData, numberSize3]]
]];
editToolData.height ← editToolData.height + entryVSpace + entryHeight;
nextX ← AtomButtons.BuildButtonLine[editToolData.outer, 0, editToolData.height, editToolData, SVUserInput.EventNotify, LIST[
[button["color:", LIST[LIST[$LightColorPrompt]] ]],
[text["0.75, 0.75, 0.75", LightColorInData, numberSize3]],
[button["SetAmbient!", LIST[LIST[$SetAmbient]] ]],
[button["GetAmbient!", LIST[LIST[$GetAmbient]] ]]
]];
editToolData.height ← editToolData.height + entryVSpace + entryHeight;
};
BuildShadowSection: PUBLIC PROC [editToolData: EditToolData] = {
This section implements a set of buttons in this format:
Shadows: FALSE Set!
nextX: INTEGER;
Shadows: FALSE Set!
nextX ← AtomButtons.BuildButtonLine[editToolData.outer, 0, editToolData.height, editToolData, SVUserInput.EventNotify, LIST[
[button["Shadows:", LIST[LIST[$ShadowsPrompt]] ]],
[label["FALSE", ShadowLabelInData]],
[button["Set!", LIST[LIST[$SetShadows]] ]]
]];
editToolData.height ← editToolData.height + entryVSpace + entryHeight;
};
boldFont: VFonts.Font ← VFonts.EstablishFont[family: "Helvetica", size: 10, bold: TRUE,
 italic: FALSE, defaultOnFailure: TRUE];
BuildTransformSection1: PUBLIC PROC [editToolData: EditToolData] = {
This section implements a set of buttons, text windows, and options listers in this format:
SCALE PRIMITIVE X,Y,Z: <x,y,z>
EVENSCALEs scalar: <real>
nextX: INTEGER;
SCALEX,Y,Z: <x,y,z>
nextX ← AtomButtons.BuildButtonLine[editToolData.outer, 0, editToolData.height, editToolData, SVUserInput.EventNotify, LIST[
[button["ScalePrimitive!", LIST[LIST[$ScalePrimitive,$Do],NIL,LIST[$ScalePrimitive,$Undo]], -1, FALSE, boldFont]],
[button["X, Y, Z:", LIST[LIST[$ScaleXYZPrompt]], column2 ]],
[text["2, 2, 2", ScaleXYZInData, numberSize3]]
]];
editToolData.height ← editToolData.height + entryVSpace + entryHeight;
EVENSCALE X,Y,Z: <x,y,z>
nextX ← AtomButtons.BuildButtonLine[editToolData.outer, 0, editToolData.height, editToolData, SVUserInput.EventNotify, LIST[
[button["EvenScale!", LIST[LIST[$EvenScale,$Do],NIL,LIST[$EvenScale,$Undo]], -1, FALSE, boldFont ]],
[button["scalar:", LIST[LIST[$EvenScaleXYZPrompt]], column2 ]],
[text["2", ScalarInData, numberSize]]
]];
editToolData.height ← editToolData.height + entryVSpace + entryHeight;
};
BuildTransformSection2: PUBLIC PROC [editToolData: EditToolData] = {
TRANSLATE X,Y,Z,:<x,y,z>
ROTX ROTY ROTZ DEGREES: <degrees>
NormalizeRot! Normalize! Align! Abut! AbutX! AbutY! AbutZ!
nextX: INTEGER;
TRANSLATE X,Y,Z,:<x,y,z>
nextX ← AtomButtons.BuildButtonLine[editToolData.outer, 0, editToolData.height, editToolData, SVUserInput.EventNotify, LIST[
[button["Translate!", LIST[LIST[$Trans,$Do],NIL,LIST[$Trans,$Undo]], -1, FALSE, boldFont ]],
[button["X, Y, Z:", LIST[LIST[$TranslateXYZPrompt]], column2 ]],
[text["0, 200, 0", TransXYZInData, numberSize3]]
]];
editToolData.height ← editToolData.height + entryVSpace + entryHeight;
ROTX ROTY ROTZ DEGREES: <degrees>
nextX ← AtomButtons.BuildButtonLine[editToolData.outer, 0, editToolData.height, editToolData, SVUserInput.EventNotify, LIST[
[button["RotX!", LIST[LIST[$RotX,$Do],NIL,LIST[$RotX,$Undo]], -1, FALSE, boldFont ]],
[button["RotY!", LIST[LIST[$RotY,$Do],NIL,LIST[$RotY,$Undo]], -1, FALSE, boldFont ]],
[button["RotZ!", LIST[LIST[$RotZ,$Do],NIL,LIST[$RotZ,$Undo]], -1, FALSE, boldFont ]],
[button["degrees:", LIST[LIST[$DegreesPrompt]], column2 ]],
[text["10", DegreesInData, numberSize]]
]];
editToolData.height ← editToolData.height + entryVSpace + entryHeight;
nextX ← AtomButtons.BuildButtonLine[editToolData.outer, 0, editToolData.height, editToolData, SVUserInput.EventNotify, LIST[
[button["NormalizeRot!", LIST[LIST[$NormalizeRot]] ]],
[button["Normalize!", LIST[LIST[$Normalize]] ]],
[button["Align!", LIST[LIST[$Align]] ]],
[button["Abut!", LIST[LIST[$Abut]] ]],
[button["AbutX!", LIST[LIST[$AbutX]] ]],
[button["AbutY!", LIST[LIST[$AbutY]] ]],
[button["AbutZ!", LIST[LIST[$AbutZ]] ]]
]];
editToolData.height ← editToolData.height + entryVSpace + entryHeight;
}; -- end of BuildTransfromSection
LightNameInData: AtomButtons.UpdateProc = {
editToolData: EditToolData ← NARROW[clientData];
editToolData.lightSection.name ← button;
};
LightPositionInData: AtomButtons.UpdateProc = {
editToolData: EditToolData ← NARROW[clientData];
editToolData.lightSection.position ← button;
};
LightColorInData: AtomButtons.UpdateProc = {
editToolData: EditToolData ← NARROW[clientData];
editToolData.lightSection.color ← button;
};
ShadowLabelInData: AtomButtons.UpdateProc = {
editToolData: EditToolData ← NARROW[clientData];
editToolData.shadowSection.shadowLabel ← button;
editToolData.shadowSection.shadowValue ← FALSE;
};
ScaleXYZInData: AtomButtons.UpdateProc = {
editToolData: EditToolData ← NARROW[clientData];
editToolData.transformSection.scaleXYZ ← button;
};
ScalarInData: AtomButtons.UpdateProc = {
editToolData: EditToolData ← NARROW[clientData];
editToolData.transformSection.scalar ← button;
};
TransXYZInData: AtomButtons.UpdateProc = {
editToolData: EditToolData ← NARROW[clientData];
editToolData.transformSection.transXYZ ← button;
};
DegreesInData: AtomButtons.UpdateProc = {
editToolData: EditToolData ← NARROW[clientData];
editToolData.transformSection.degrees ← button;
};
END.