File: SVEditToolMenusImplC.mesa
Last edited by Bier on May 4, 1987 5:40:55 pm PDT
Copyright © 1984 by Xerox Corporation. All rights reserved.
Created August 9, 1984 10:47:05 pm PDT
Contents: Procedures which build sections of the EditTool
DIRECTORY
AtomButtons, IO, Menus, MessageWindow, PopUpSelection, PredefSweeps, Rope, ViewerTools, SVEditToolMenus, SVEditUser, SVInterfaceTypes, SVSceneTypes, SVUserInput, SVViewersOnScene, TFI3d, VFonts, ViewerClasses;
SVEditToolMenusImplC: CEDAR PROGRAM
IMPORTS AtomButtons, MessageWindow, PopUpSelection, SVEditUser, SVUserInput, SVViewersOnScene, VFonts, ViewerTools
EXPORTS SVEditToolMenus =
BEGIN
EditToolData: TYPE = SVInterfaceTypes.EditToolData;
MasterObject: TYPE = SVSceneTypes.MasterObject;
MasterObjectList: TYPE = SVSceneTypes.MasterObjectList;
Scene: TYPE = SVSceneTypes.Scene;
SVData: TYPE = SVInterfaceTypes.SVData;
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;
column2Quarter: CARDINAL = 190;
column2Half: CARDINAL = 225;
column3: CARDINAL = SVEditToolMenus.column3;
nameSize: CARDINAL = 140;
numberSize: CARDINAL = 80;
numberSize3: CARDINAL = 160;
boldFont: VFonts.Font; -- initialized in Init below;
BuildCurrentSceneSection: PUBLIC PROC [editToolData: EditToolData] = {
This section implements a set of buttons, text windows, and options listers in this format:
Scene: <SCENENAME> NEW VIEWER NEW OUTPUT
Help! ColorMap! BWMap! ReStart! DestroyAll!
nextX: INTEGER;
editToolData.height ← editToolData.height + entryVSpace; -- space down from the top of the viewer
Scene: <SCENENAME> New Viewer  New Output
nextX ← AtomButtons.BuildButtonLine[editToolData.outer, 0, editToolData.height, editToolData, SVUserInput.EventNotify, LIST[
[button["Scene:", LIST[LIST[$ScenePrompt]] ]],
[text["DefaultScene", SceneNameInData, nameSize]]
]];
nextX ← AtomButtons.BuildUnQueuedButtonLine [editToolData.outer, nextX, editToolData.height, editToolData, LIST[
["New Viewer", button, NewViewerButton],
["New Typescript", button, NewTypescriptButton]
]];
editToolData.height ← editToolData.height + entryVSpace + entryHeight;
Restart! DestroyAll! Extra Stuff
nextX ← AtomButtons.BuildButtonLine[editToolData.outer, 0, editToolData.height, editToolData, SVUserInput.EventNotify, LIST[
[button["Help!", LIST[LIST[$Help]] ]],
[button["Revive!", LIST[LIST[$Revive]] ]]
]];
nextX ← AtomButtons.BuildUnQueuedButtonLine [editToolData.outer, nextX, editToolData.height, editToolData, LIST[
["DestroyAll", button, DestroyAllButton, NIL, 0, -1, TRUE, ConfirmDestroyAll],
["Extra Stuff", button, ExtrasMenu, NIL, 0, -1, TRUE]
]];
editToolData.height ← editToolData.height + entryVSpace + entryHeight;
};
PopUpMenuEntry: TYPE = RECORD [
name: Rope.ROPE,
input: LIST OF REF ANY];
ExtractChoiceList: PROC [menu: LIST OF PopUpMenuEntry] RETURNS [choices: LIST OF Rope.ROPE] = {
pos: LIST OF Rope.ROPE;
newCell: LIST OF Rope.ROPE;
Non-destructive (copies the menu names).
IF menu = NIL THEN ERROR;
choices ← CONS[menu.first.name, NIL];
pos ← choices;
FOR l: LIST OF PopUpMenuEntry ← menu.rest, l.rest UNTIL l = NIL DO
newCell ← CONS[l.first.name, NIL];
pos.rest ← newCell;
pos ← newCell;
ENDLOOP;
};
ExtrasMenu: Menus.ClickProc = {
editToolData: EditToolData ← NARROW[clientData];
menu: LIST OF PopUpMenuEntry;
menu ← LIST [
["LinesOfLongitude", LIST[$LinesOfLongitude]],
["LinesOfLatitude", LIST[$LinesOfLatitude]]
];
QueuePopUpMenuAction["Extras", menu, editToolData, mouseButton#blue];
};
QueuePopUpMenuAction: PROC [label: Rope.ROPE, menu: LIST OF PopUpMenuEntry, editToolData: EditToolData, onceOnly: BOOLTRUE] = {
index: NAT;
choices: LIST OF Rope.ROPE ← ExtractChoiceList[menu];
DO
index ← PopUpSelection.Request[header: label, choice: choices];
IF index < 0 THEN ERROR;
IF index = 0 THEN RETURN;
FOR entries: LIST OF PopUpMenuEntry ← menu, entries.rest UNTIL entries = NIL DO
IF index = 1 THEN {
SVUserInput.EventNotify[editToolData, entries.first.input];
EXIT;
};
index ← index - 1;
REPEAT
FINISHED => ERROR;
ENDLOOP;
IF onceOnly THEN RETURN;
ENDLOOP;
};
BuildTextInputSection: PUBLIC PROC [editToolData: EditToolData] = {
nextX: INTEGER;
SkitterAssembly: <name>
Text1: <name>
Selected Text  Plane! Source! Target! Parent!
New: <name>  Parent: <name>
TopSource: <obname> TopTarget: <obname>
SkitterAssembly: <name> Source! Target! Parent!
nextX ← AtomButtons.BuildButtonLine[editToolData.outer, 0, editToolData.height, editToolData, SVUserInput.EventNotify, LIST[
[button["Skitter:", LIST[LIST[$CurrentAssemblyPrompt]] ]],
[text["", CurrentSceneInData, nameSize]]
]];
editToolData.height ← editToolData.height + entryVSpace + entryHeight;
Text1: <name> Source! Target! Parent!
nextX ← AtomButtons.BuildButtonLine[editToolData.outer, 0, editToolData.height, editToolData, SVUserInput.EventNotify, LIST[
[button["Text1:", LIST[LIST[$Text1PromptButton]] ]],
[text["sceneAssembly", Text1InData, nameSize]]
]];
editToolData.height ← editToolData.height + entryVSpace + entryHeight;
Selected Text  Plane! Source! Target! Parent!
nextX ← AtomButtons.BuildButtonLine[editToolData.outer, 0, editToolData.height, editToolData, SVUserInput.EventNotify, LIST[
[label["Selected Text:"]],
[button["Plane!", LIST[LIST[$SelectedTextPlaneButton]], column2, TRUE]],
[button["Source!", LIST[LIST[$SelectedTextSourceButton]], column2Half, TRUE]],
[button["Target!", LIST[LIST[$SelectedTextTargetButton]], -1, TRUE]],
[button["Parent!", LIST[LIST[$SelectedTextParentButton]], -1, TRUE]]
]];
editToolData.height ← editToolData.height + entryVSpace + entryHeight;
};
BuildDerivedTextSection: PUBLIC PROC [editToolData: EditToolData] = {
nextX: INTEGER;
New: <Text>  Parent: <Text>
Source: <obname> Target: <coordsystem>
Plane: <obname>
nextX ← AtomButtons.BuildButtonLine[editToolData.outer, 0, editToolData.height, editToolData, SVUserInput.EventNotify, LIST[
[button["New:", LIST[LIST[$NewPrompt]] ]],
[text["Charlie", NewNameInData, nameSize]],
[button["Parent:", LIST[LIST[$ParentPrompt]], column2Quarter ]],
[text["sceneAssembly", ParentNameInData, nameSize]]
]];
editToolData.height ← editToolData.height + entryVSpace + entryHeight;
nextX ← AtomButtons.BuildButtonLine[editToolData.outer, 0, editToolData.height, editToolData, SVUserInput.EventNotify, LIST[
[label["Source:"]],
[text["", SourceNameInData, nameSize, -1, TRUE]],
[label["Target:", NIL, 0, column2Quarter]],
[text["", TargetNameInData, nameSize, -1, TRUE]]
]];
editToolData.height ← editToolData.height + entryVSpace + entryHeight;
nextX ← AtomButtons.BuildButtonLine[editToolData.outer, 0, editToolData.height, editToolData, SVUserInput.EventNotify, LIST[
[label["Plane:"]],
[text["", PlaneNameInData, nameSize, -1, TRUE]]
]];
editToolData.height ← editToolData.height + entryVSpace + entryHeight;
};
SceneNameInData: AtomButtons.InitButtonProc = {
editToolData: EditToolData ← NARROW[clientData];
editToolData.sceneSection.sceneName ← button;
};
ConfirmDestroyAll: PROC [clientData: REF ANY] = {
editToolData: EditToolData ← NARROW[clientData];
MessageWindow.Append["Will Close Down Solidviews"];
};
CurrentSceneInData: AtomButtons.InitButtonProc = {
editToolData: EditToolData ← NARROW[clientData];
editToolData.sceneSection.current ← button;
};
Text1InData: AtomButtons.InitButtonProc = {
editToolData: EditToolData ← NARROW[clientData];
editToolData.sceneSection.text1 ← button;
};
NewNameInData: AtomButtons.InitButtonProc = {
editToolData: EditToolData ← NARROW[clientData];
editToolData.sceneSection.new ← button;
};
ParentNameInData: AtomButtons.InitButtonProc = {
editToolData: EditToolData ← NARROW[clientData];
editToolData.sceneSection.parent ← button;
};
SourceNameInData: AtomButtons.InitButtonProc = {
editToolData: EditToolData ← NARROW[clientData];
editToolData.sceneSection.source ← button;
ViewerTools.InhibitUserEdits[editToolData.sceneSection.source];
};
TargetNameInData: AtomButtons.InitButtonProc = {
editToolData: EditToolData ← NARROW[clientData];
editToolData.sceneSection.target ← button;
ViewerTools.InhibitUserEdits[editToolData.sceneSection.target];
};
PlaneNameInData: AtomButtons.InitButtonProc = {
editToolData: EditToolData ← NARROW[clientData];
editToolData.sceneSection.plane ← button;
ViewerTools.InhibitUserEdits[editToolData.sceneSection.plane];
};
NewViewerButton: PROC [parent: ViewerClasses.Viewer, clientData: REF ANYNIL,
mouseButton: Menus.MouseButton ← red, shift, control: BOOLFALSE] = {
editToolData: EditToolData ← NARROW[clientData];
SVViewersOnScene.NewViewer[editToolData];
};
NewTypescriptButton: PROC [parent: ViewerClasses.Viewer, clientData: REF ANYNIL,
mouseButton: Menus.MouseButton ← red, shift, control: BOOLFALSE] = {
editToolData: EditToolData ← NARROW[clientData];
SVEditUser.NewOutput[editToolData];
};
DestroyAllButton: PROC [parent: ViewerClasses.Viewer, clientData: REF ANYNIL,
mouseButton: Menus.MouseButton ← red, shift, control: BOOLFALSE] = {
editToolData: EditToolData ← NARROW[clientData];
SVViewersOnScene.DestroyAllSolidviewsWindows[editToolData];
};
Init: PROC = {
boldFont ← VFonts.EstablishFont[family: "Helvetica", size: 10, bold: TRUE,
italic: FALSE, defaultOnFailure: TRUE];
};
Init[];
END.