<> <> <> DIRECTORY FS USING [ComponentPositions, Error, ExpandName], Graph USING [BackgroundIndex, CaretIndex, ColorMap, ColorMode, Error, GraphHandle, GraphProc, ROPE, Viewer], GraphCleanUp USING [CleanUpHandle], GraphOps USING [Lock, Unlock], GraphPrivate USING [CallWithLock, GetGraph, PaintAll, RemoveAllCurves, ShowChart, ShowController, SwitchAuto, SwitchCaretVisibility, SwitchCaretBlinking, SwitchSlope, SwitchTarget, SwitchGrid, UserEditAllowed, WriteGraphFile, WriteTextFile], GraphUtil USING [BlinkMsg, ControllerNotNil, HandleFromViewer, HandleNotNil, Print, ReplaceFileExt, SetCursorForBackgroundIndex, UseCedarColors, UseDefaultColors, UseMyColors, WDirOfViewer], Menus USING [AppendMenuEntry, CreateEntry, CreateMenu, GetNumberOfLines, Menu, MenuLine, MenuProc, MouseButton], PopUpMenu USING [RequestSelection], Rope USING [Concat, Find, IsEmpty], Terminal USING [ColorCursorPresentation, Current, SetColorCursorPresentation, Virtual], TiogaMenuOps USING [AllLevels, FewerLevels, FirstLevelOnly, MoreLevels], <> ViewerBLT USING [ChangeNumberOfLines], ViewerOps USING [FindViewer, MoveViewer, OpenIcon, PaintViewer, SaveViewer, TopViewer], ViewerTools USING [GetSelectionContents, MakeNewTextViewer]; GraphMenus: CEDAR PROGRAM IMPORTS FS, Graph, GraphCleanUp, GraphOps, GraphPrivate, GraphUtil, Menus, PopUpMenu, Rope, Terminal, TiogaMenuOps, ViewerBLT, ViewerOps, ViewerTools EXPORTS GraphPrivate = { OPEN Graph, GraphOps, GraphPrivate, GraphUtil; <> <<>> <> ControllerMenus: PUBLIC PROC [] RETURNS [menu: Menus.Menu] = { menu _ Menus.CreateMenu[2]; Menus.AppendMenuEntry [menu, Menus.CreateEntry[name: "Chart", proc: ShowChartProc]]; Menus.AppendMenuEntry [menu, Menus.CreateEntry[name: "Spec", proc: ShowSpecProc]]; Menus.AppendMenuEntry [menu, Menus.CreateEntry[name: "Values", proc: ShowXYsProc]]; Menus.AppendMenuEntry [menu, Menus.CreateEntry[name: "Table", proc: ShowTableProc]]; Menus.AppendMenuEntry [menu, Menus.CreateEntry[name: "Levels", proc: LevelsProc]]; <<>> <> Menus.AppendMenuEntry[ menu, Menus.CreateEntry[name: "AutoDiv", proc: AutoDivisionsProc], 1]; Menus.AppendMenuEntry[ menu, Menus.CreateEntry[name: "AutoBounds", proc: AutoBoundsProc], 1]; Menus.AppendMenuEntry[ menu, Menus.CreateEntry[name: "Xhair1", proc: PrimXhairProc], 1]; Menus.AppendMenuEntry[ menu, Menus.CreateEntry[name: "Xhair2", proc: SecXhairProc], 1]; Menus.AppendMenuEntry[ menu, Menus.CreateEntry[name: "Slope", proc: SlopeProc], 1]; Menus.AppendMenuEntry[ menu, Menus.CreateEntry[name: "TextCaret", proc: TextCaretProc], 1]; Menus.AppendMenuEntry[ menu, Menus.CreateEntry[name: "TargetX", proc: TargetXProc], 1]; Menus.AppendMenuEntry[ menu, Menus.CreateEntry[name: "TargetY", proc: TargetYProc], 1]; Menus.AppendMenuEntry[ menu, Menus.CreateEntry[name: "GridX", proc: GridXProc], 1]; Menus.AppendMenuEntry[ menu, Menus.CreateEntry[name: "GridY", proc: GridYProc], 1]; <> Menus.AppendMenuEntry[ menu, Menus.CreateEntry[name: "FirstLevelOnly", proc: FirstLevelOnlyProc], 2]; Menus.AppendMenuEntry[ menu, Menus.CreateEntry[name: "MoreLevels", proc: MoreLevelsProc], 2]; Menus.AppendMenuEntry[ menu, Menus.CreateEntry[name: "FewerLevels", proc: FewerLevelsProc], 2]; Menus.AppendMenuEntry[ menu, Menus.CreateEntry[name: "AllLevels", proc: AllLevelsProc], 2]; }; -- ControllerMenus <<>> <> ShowSpecProc: Menus.MenuProc = { <> handle: GraphHandle _ HandleFromViewer[NARROW[parent]]; proc: GraphProc = { IF ControllerNotNil[handle.controller] THEN { OPEN handle.controller; IF NOT specVisible THEN { specVisible _ TRUE; -- rule always goes with spec. xysVisible _ tableVisible _ FALSE; <> ViewerOps.MoveViewer[viewer: xys, x: 1000, y: 0, w: 0, h: 0, paint: FALSE]; IF table # NIL THEN ViewerOps.MoveViewer[ viewer: table, x: 1000, y: 0, w: 0, h: 0, paint: FALSE]; ViewerOps.MoveViewer[viewer: spec, x: 0, y: 0, w: viewer.ww, h: 400, paint: TRUE]; <> }; }; }; CallWithLock[handle, proc]; }; -- ShowSpecProc ShowXYsProc: Menus.MenuProc = { <> handle: GraphHandle _ HandleFromViewer[NARROW[parent]]; proc: GraphProc = { IF ControllerNotNil[handle.controller] THEN { OPEN handle.controller; IF NOT xysVisible THEN { xysVisible _ TRUE; specVisible _ tableVisible _ FALSE; -- rule always goes with spec. ViewerOps.MoveViewer[viewer: spec, x: 1000, y: 0, w: 0, h: 0, paint: FALSE]; <> IF table # NIL THEN ViewerOps.MoveViewer[ viewer: table, x: 1000, y: 0, w: 0, h: 0, paint: FALSE]; ViewerOps.MoveViewer[viewer: xys, x: 0, y: 0, w: viewer.ww, h: 1000, paint: TRUE]; <> }; }; }; CallWithLock[handle, proc]; }; -- ShowXYsProc ShowTableProc: Menus.MenuProc = { <> handle: GraphHandle _ HandleFromViewer[NARROW[parent]]; proc: GraphProc = { IF ControllerNotNil[handle.controller] THEN { OPEN handle.controller; IF NOT tableVisible THEN { tableVisible _ TRUE; specVisible _ xysVisible _ FALSE; -- rule always goes with spec. ViewerOps.MoveViewer[viewer: spec, x: 1000, y: 0, w: 0, h: 0, paint: FALSE]; <> ViewerOps.MoveViewer[viewer: xys, x: 1000, y: 0, w: 0, h: 0, paint: FALSE]; IF table # NIL THEN ViewerOps.MoveViewer[ viewer: table, x: 0, y: 0, w: viewer.ww, h: 1000, paint: TRUE]; <> }; }; }; CallWithLock[handle, proc]; }; -- ShowTableProc ShowChartProc: Menus.MenuProc = { handle: GraphHandle _ HandleFromViewer[NARROW[parent]]; Lock[handle]; <> ShowChart[handle]; -- will unlock handle. - No more, 11/13/85. Unlock[handle]; -- added this on 11/13/85. }; -- ShowChartProc LevelsProc: Menus.MenuProc = { handle: GraphHandle _ HandleFromViewer[NARROW[parent]]; IF HandleNotNil[handle] THEN { Lock[handle]; { OPEN handle; numLines: Menus.MenuLine _ Menus.GetNumberOfLines[controller.menu]; SELECT numLines FROM 2 => numLines _ 3; 3 => numLines _ 2; ENDCASE => ERROR; ViewerBLT.ChangeNumberOfLines[controller.viewer, numLines]; }; Unlock[handle]; }; }; -- SwitchesProc SwitchIt: PROC [wasOn: BOOL, mouseButton: Menus.MouseButton, label: ROPE] RETURNS [BOOL] = { RETURN[SELECT mouseButton FROM red => NOT wasOn, blue => wasOn, ENDCASE => SELECT PopUpMenu.RequestSelection[ label: label, choice: LIST["on (red)", "off (blue)"], default: 1] FROM 1 => NOT wasOn, 2 => wasOn, ENDCASE => FALSE]; }; -- SwitchIt AutoDivisionsProc: Menus.MenuProc = { handle: GraphHandle _ HandleFromViewer[NARROW[parent]]; proc: GraphProc = { OPEN handle; IF SwitchIt[graph.auto[divisions], mouseButton, "Auto Divisions"] THEN SwitchAuto[handle, divisions]; }; CallWithLock[handle, proc]; }; -- AutoDivisionsProc AutoBoundsProc: Menus.MenuProc = { handle: GraphHandle _ HandleFromViewer[NARROW[parent]]; proc: GraphProc = { OPEN handle; IF SwitchIt[graph.auto[bounds], mouseButton, "Auto Bounds"] THEN SwitchAuto[handle, bounds]; }; CallWithLock[handle, proc]; }; -- AutoBoundsProc <> <> <> <> <> <