DIRECTORY AtomButtons, IO, Menus, MessageWindow, PopUpSelection, SVPredefSweeps, Rope, ViewerTools, SVEditToolMenus, SVEditUser, SVInterfaceTypes, SVSceneTypes, SVUserInput, SVViewersOnScene, 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; 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] = { nextX: INTEGER; editToolData.height _ editToolData.height + entryVSpace; -- space down from the top of the viewer 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; 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; 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: BOOL _ TRUE] = { 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; 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; 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; 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; 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 ANY _ NIL, mouseButton: Menus.MouseButton _ red, shift, control: BOOL _ FALSE] = { editToolData: EditToolData _ NARROW[clientData]; SVViewersOnScene.NewViewer[editToolData]; }; NewTypescriptButton: PROC [parent: ViewerClasses.Viewer, clientData: REF ANY _ NIL, mouseButton: Menus.MouseButton _ red, shift, control: BOOL _ FALSE] = { editToolData: EditToolData _ NARROW[clientData]; SVEditUser.NewOutput[editToolData]; }; DestroyAllButton: PROC [parent: ViewerClasses.Viewer, clientData: REF ANY _ NIL, mouseButton: Menus.MouseButton _ red, shift, control: BOOL _ FALSE] = { editToolData: EditToolData _ NARROW[clientData]; SVViewersOnScene.DestroyAllSolidviewsWindows[editToolData]; }; Init: PROC = { boldFont _ VFonts.EstablishFont[family: "Helvetica", size: 10, bold: TRUE, italic: FALSE, defaultOnFailure: TRUE]; }; Init[]; END. าFile: SVEditToolMenusImplC.mesa Last edited by Bier on August 7, 1987 1:30:51 pm PDT Copyright c 1984 by Xerox Corporation. All rights reserved. Created August 9, 1984 10:47:05 pm PDT Contents: Procedures which build sections of the EditTool Declare the standard distances between menu lines. This section implements a set of buttons, text windows, and options listers in this format: Scene: NEW VIEWER NEW OUTPUT Help! ColorMap! BWMap! ReStart! DestroyAll! Scene: New Viewer New Output Restart! DestroyAll! Extra Stuff Non-destructive (copies the menu names). SkitterAssembly: Text1: Selected Text Plane! Source! Target! Parent! New: Parent: TopSource: TopTarget: SkitterAssembly: Source! Target! Parent! Text1: Source! Target! Parent! Selected Text Plane! Source! Target! Parent! New: Parent: Source: Target: Plane: ส 6˜Iheadšœ™Iprocšœ4™4Jšœ ฯmœ1™˜>M˜—š œžœ,žœžœžœ9žœžœ˜˜Lšœžœ ˜0Lšœ)˜)L˜—š œžœ,žœžœžœ9žœžœ˜œLšœžœ ˜0Lšœ#˜#L˜—š œžœ,žœžœžœ9žœžœ˜™Lšœžœ ˜0Lšœ;˜;L˜M˜M˜—š œžœ˜MšœEžœ žœžœ˜rM˜M˜—Mšœ˜L˜Lšžœ˜L˜J˜—…—!.