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, Print, RemoveAllCurves, ShowChart, ShowController, SwitchAuto, SwitchCaretVisibility, SwitchCaretBlinking, SwitchSlope, SwitchTarget, SwitchGrid, UserEditAllowed, WriteGraphFile, WriteTextFile], GraphUtil USING [BlinkMsg, ControllerNotNil, HandleFromViewer, HandleNotNil, 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 MONITOR 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] = { ENABLE UNWIND => NULL; 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: ENTRY Menus.MenuProc = { ENABLE UNWIND => NULL; 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: ENTRY Menus.MenuProc = { ENABLE UNWIND => NULL; 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: ENTRY Menus.MenuProc = { ENABLE UNWIND => NULL; 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: ENTRY Menus.MenuProc = { ENABLE UNWIND => NULL; 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: ENTRY Menus.MenuProc = { ENABLE UNWIND => NULL; 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: ENTRY Menus.MenuProc = { ENABLE UNWIND => NULL; 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: ENTRY Menus.MenuProc = { ENABLE UNWIND => NULL; 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 PrimXhairProc: ENTRY Menus.MenuProc = { ENABLE UNWIND => NULL; SwitchCaret[parent, mouseButton, primary, shift]; }; SecXhairProc: ENTRY Menus.MenuProc = { ENABLE UNWIND => NULL; SwitchCaret[parent, mouseButton, secondary, shift]; }; TextCaretProc: ENTRY Menus.MenuProc = { ENABLE UNWIND => NULL; SwitchCaret[parent, mouseButton, text, shift]; }; SwitchCaret: PROC[parent: REF ANY, mouseButton: Menus.MouseButton, index: CaretIndex, shift: BOOL] = { handle: GraphHandle _ HandleFromViewer[NARROW[parent]]; proc: GraphProc = { OPEN handle; IF shift THEN { IF SwitchIt[chart.caretState[index].toBlink, mouseButton, "Blinking"] THEN { SwitchCaretBlinking[handle, index]; IF chart.caretState[index].toBlink AND NOT graph.caret[index].on THEN SwitchCaretVisibility[handle, index]; } } ELSE IF SwitchIt[graph.caret[index].on, mouseButton, "Caret"] THEN SwitchCaretVisibility[handle, index]; }; CallWithLock[handle, proc]; }; -- SwitchCaret SlopeProc: ENTRY Menus.MenuProc = { ENABLE UNWIND => NULL; handle: GraphHandle _ HandleFromViewer[NARROW[parent]]; proc: GraphProc = { OPEN handle; IF SwitchIt[graph.showSlope, mouseButton, "Slope"] THEN SwitchSlope[handle]; }; CallWithLock[handle, proc]; }; -- SlopeProc TargetXProc: ENTRY Menus.MenuProc = { ENABLE UNWIND => NULL; handle: GraphHandle _ HandleFromViewer[NARROW[parent]]; proc: GraphProc = { IF SwitchIt[handle.graph.target[x].on, mouseButton, "Target X"] THEN SwitchTarget[handle, x]}; CallWithLock[handle, proc]; }; -- TargetXProc TargetYProc: ENTRY Menus.MenuProc = { ENABLE UNWIND => NULL; handle: GraphHandle _ HandleFromViewer[NARROW[parent]]; proc: GraphProc = { IF SwitchIt[handle.graph.target[y].on, mouseButton, "Target X"] THEN SwitchTarget[handle, y]}; CallWithLock[handle, proc]; }; -- TargetYProc GridXProc: ENTRY Menus.MenuProc = { ENABLE UNWIND => NULL; handle: GraphHandle _ HandleFromViewer[NARROW[parent]]; proc: GraphProc = { IF SwitchIt[handle.graph.grids[x], mouseButton, "Vertical Grids"] THEN SwitchGrid[handle, x]}; CallWithLock[handle, proc]; }; -- GridXProc GridYProc: ENTRY Menus.MenuProc = { ENABLE UNWIND => NULL; handle: GraphHandle _ HandleFromViewer[NARROW[parent]]; proc: GraphProc = { IF SwitchIt[handle.graph.grids[y], mouseButton, "Horiz. Grids"] THEN SwitchGrid[handle, y]}; CallWithLock[handle, proc]; }; -- GridYProc FirstLevelOnlyProc: ENTRY Menus.MenuProc = { ENABLE UNWIND => NULL; handle: GraphHandle _ HandleFromViewer[NARROW[parent]]; proc: GraphProc = {TiogaMenuOps.FirstLevelOnly[handle.controller.table]}; CallWithLock[handle, proc]; }; -- FirstLevelOnlyProc MoreLevelsProc: ENTRY Menus.MenuProc = { ENABLE UNWIND => NULL; handle: GraphHandle _ HandleFromViewer[NARROW[parent]]; proc: GraphProc = {TiogaMenuOps.MoreLevels[handle.controller.table]}; CallWithLock[handle, proc]; }; -- MoreLevelsProc FewerLevelsProc: ENTRY Menus.MenuProc = { ENABLE UNWIND => NULL; handle: GraphHandle _ HandleFromViewer[NARROW[parent]]; proc: GraphProc = {TiogaMenuOps.FewerLevels[handle.controller.table]}; CallWithLock[handle, proc]; }; -- FewerLevelsProc AllLevelsProc: ENTRY Menus.MenuProc = { ENABLE UNWIND => NULL; handle: GraphHandle _ HandleFromViewer[NARROW[parent]]; proc: GraphProc = {TiogaMenuOps.AllLevels[handle.controller.table]}; CallWithLock[handle, proc]; }; -- AllLevelsProc ChartMenus: PUBLIC PROC [] RETURNS [menu: Menus.Menu] = { ENABLE UNWIND => NULL; menu _ Menus.CreateMenu[]; Menus.AppendMenuEntry [menu, Menus.CreateEntry["Color", SetColorProc]]; Menus.AppendMenuEntry [menu, Menus.CreateEntry["Cursor", SetCursorColorProc]]; Menus.AppendMenuEntry [menu, Menus.CreateEntry["Background", SetBackgroundIndexProc]]; Menus.AppendMenuEntry [menu, Menus.CreateEntry["Get", GetGraphProc]]; --, guarded: TRUE]]; Menus.AppendMenuEntry [menu, Menus.CreateEntry["Merge", MergeGraphProc]]; Menus.AppendMenuEntry [menu, Menus.CreateEntry["Store", PutGraphProc]]; Menus.AppendMenuEntry [menu, Menus.CreateEntry["List", ListGraphProc]]; Menus.AppendMenuEntry [menu, Menus.CreateEntry["Interpress", InterpressProc]]; Menus.AppendMenuEntry [menu, Menus.CreateEntry["Clear/Refresh", ClearRefreshProc]]; Menus.AppendMenuEntry [menu, Menus.CreateEntry["Controller", ShowControllerProc]]; }; -- ChartMenus SetColorProc: ENTRY Menus.MenuProc = { ENABLE UNWIND => NULL; handle: GraphHandle _ HandleFromViewer[NARROW[parent]]; proc: GraphProc = { OPEN handle; newColorMap: ColorMap; newColorMode: ColorMode; SELECT PopUpMenu.RequestSelection[ label: "Options", choice: LIST[ "my colors", "graph default colors", "my colors _ graph default", "cedar default colors", "black and white" ], default: 1] FROM 1 => {newColorMode _ color; newColorMap _ mine}; 2 => {newColorMode _ color; newColorMap _ default}; 3 => {newColorMode _ color; newColorMap _ replace}; 4 => {newColorMode _ color; newColorMap _ cedar}; 5 => {newColorMode _ bw; newColorMap _ colorMap}; ENDCASE => {newColorMode _ colorMode; newColorMap _ colorMap}; SetCursorForBackgroundIndex[backgroundIndex]; IF colorMode # newColorMode THEN { colorMode _ newColorMode; PaintAll[handle, TRUE, FALSE, TRUE]; }; IF colorMap # newColorMap THEN { colorMap _ newColorMap; SELECT newColorMap FROM mine => UseMyColors[handle]; cedar => UseCedarColors[]; default => UseDefaultColors[]; replace => UseDefaultColors[handle]; ENDCASE; }; }; -- proc CallWithLock[handle, proc]; }; -- SetColorProc SetCursorColorProc: ENTRY Menus.MenuProc = { ENABLE UNWIND => NULL; handle: GraphHandle _ HandleFromViewer[NARROW[parent]]; proc: GraphProc = { OPEN handle; virtual: Terminal.Virtual _ Terminal.Current[]; SELECT PopUpMenu.RequestSelection[ label: "Options", choice: LIST["black", "white"], default: 1] FROM 1 => [] _ Terminal.SetColorCursorPresentation[virtual, onesAreBlack]; 2 => [] _ Terminal.SetColorCursorPresentation[virtual, onesAreWhite]; ENDCASE => SetCursorForBackgroundIndex[backgroundIndex]; -- * }; CallWithLock[handle, proc]; }; -- SetCursorColorProc SetBackgroundIndexProc: ENTRY Menus.MenuProc = { ENABLE UNWIND => NULL; handle: GraphHandle _ HandleFromViewer[NARROW[parent]]; proc: GraphProc = { OPEN handle; newBkGndIndex: BackgroundIndex = SELECT PopUpMenu.RequestSelection[ label: "Options", choice: LIST["white", "gray", "dark gray", "black"], default: 1] FROM 1 => white, 2 => gray, 3 => darkGray, 4 => black, ENDCASE => backgroundIndex; IF backgroundIndex # newBkGndIndex THEN { backgroundIndex _ newBkGndIndex; SetCursorForBackgroundIndex[backgroundIndex]; PaintAll[handle, TRUE, FALSE, TRUE]; }; }; CallWithLock[handle, proc]; }; -- SetBackgroundIndexProc GetGraphProc: ENTRY Menus.MenuProc = { ENABLE UNWIND => NULL; handle: GraphHandle _ HandleFromViewer[NARROW[parent]]; proc: GraphProc = { OPEN handle; file, msg: ROPE _ NIL; [file, msg] _ SelectedFile[WDirOfViewer[chart.viewer], "graph"]; IF msg = NIL THEN { SELECT PopUpMenu.RequestSelection[ label: "Confirm replacing data with", choice: LIST[file], default: 1] FROM 1 => { handle _ GraphCleanUp.CleanUpHandle[handle, FALSE]; msg _ GetGraph[handle, file ! Error => {msg _ info; CONTINUE}]; IF msg = NIL THEN { -- replace the caption. handle.chart.viewer.name _ file; ViewerOps.PaintViewer[handle.chart.viewer, caption, FALSE, NIL]; }; }; ENDCASE; }; IF msg # NIL THEN BlinkMsg[msg]; }; IF UserEditAllowed[handle] THEN CallWithLock[handle, proc]; }; -- GetGraphProc SelectedFile: PROC [defaultWDir, defaultExt: ROPE] RETURNS [file, msg: ROPE _ NIL] = { file _ ViewerTools.GetSelectionContents[]; IF file.IsEmpty[] THEN msg _ "Please select a file name." ELSE { [file, ] _ FS.ExpandName[file, defaultWDir ! FS.Error => {msg _ error.explanation; CONTINUE}]; IF msg = NIL THEN IF file.Find["."] < 0 THEN file _ ReplaceFileExt[file, defaultExt]; }; }; -- SelectedFile MergeGraphProc: ENTRY Menus.MenuProc = { ENABLE UNWIND => NULL; handle: GraphHandle _ HandleFromViewer[NARROW[parent]]; proc: GraphProc = { OPEN handle; file, msg: ROPE _ NIL; [file, msg] _ SelectedFile[WDirOfViewer[chart.viewer], "graph"]; IF msg = NIL THEN { SELECT PopUpMenu.RequestSelection[ label: "Confirm merging data from", choice: LIST[file], default: 1] FROM 1 => msg _ GetGraph[handle, file ! Error => {msg _ info; CONTINUE}]; ENDCASE; }; IF msg # NIL THEN BlinkMsg[msg]; }; IF UserEditAllowed[handle] THEN CallWithLock[handle, proc]; }; -- MergeGraphProc ListGraphProc: ENTRY Menus.MenuProc = { ENABLE UNWIND => NULL; handle: GraphHandle _ HandleFromViewer[NARROW[parent]]; proc: GraphProc = { OPEN handle; file, msg: ROPE _ NIL; [file, msg] _ SelectedFile[WDirOfViewer[chart.viewer], "list"]; IF file.Find["/", 1] > 1 OR file.Find["]"] > 1 THEN msg _ "Please specify a local directory."; IF msg = NIL THEN { SELECT PopUpMenu.RequestSelection[ label: "Confirm listing data in", choice: LIST[file], default: 1] FROM 1 => { v: Viewer; msg _ WriteTextFile[handle, file]; v _ ViewerOps.FindViewer[file]; IF v = NIL THEN { v _ ViewerTools.MakeNewTextViewer[info: [name: file, file: file]]; ViewerOps.SaveViewer[v]; }; IF v.iconic THEN ViewerOps.OpenIcon[icon: v, bottom: FALSE] ELSE ViewerOps.TopViewer[viewer: v]; }; ENDCASE; }; IF msg # NIL THEN BlinkMsg[msg]; }; CallWithLock[handle, proc]; }; -- ListGraphProc PutGraphProc: ENTRY Menus.MenuProc = { ENABLE UNWIND => NULL; handle: GraphHandle _ HandleFromViewer[NARROW[parent]]; proc: GraphProc = { OPEN handle; file, msg, newName: ROPE; [file, msg] _ SelectedFile[WDirOfViewer[chart.viewer], "graph"]; IF file.Find["/", 1] > 1 OR file.Find["]"] > 1 THEN msg _ "Please specify a local directory."; IF msg = NIL THEN { SELECT PopUpMenu.RequestSelection[ label: "Confirm file name", choice: LIST[file], default: 1] FROM 1 => [msg, newName] _ WriteGraphFile[handle, file ! Error => {msg _ info; CONTINUE}]; ENDCASE; }; IF msg = NIL THEN BlinkMsg[newName.Concat[" is written."]] ELSE BlinkMsg[msg] }; CallWithLock[handle, proc]; }; -- PutGraphProc InterpressProc: ENTRY Menus.MenuProc = { ENABLE UNWIND => NULL; handle: GraphHandle _ HandleFromViewer[NARROW[parent]]; proc: GraphProc = { OPEN handle; file, msg: ROPE _ NIL; printingColorMode, colorModeSave: ColorMode; SELECT PopUpMenu.RequestSelection[ label: "Options", choice: LIST["color", "black and white"], default: 1] FROM 1 => printingColorMode _ color; 2 => printingColorMode _ bw; ENDCASE => msg _ "You must choose either color or black-and-white."; IF msg = NIL THEN [file, msg] _ SelectedFile[WDirOfViewer[chart.viewer], "ip"]; IF file.Find["/", 1] > 1 OR file.Find["]"] > 1 THEN msg _ "Please specify a local directory."; IF msg = NIL THEN SELECT PopUpMenu.RequestSelection[ label: "Confirm writing interpress master in", choice: LIST[file], default: 1] FROM 1 => { colorModeSave _ colorMode; colorMode _ printingColorMode; msg _ Print[handle, file ! Error => {msg _ info; CONTINUE}]; IF msg = NIL THEN msg _ file.Concat[" is written."]; colorMode _ colorModeSave; }; ENDCASE; BlinkMsg[msg]; }; CallWithLock[handle, proc]; }; -- InterpressProc ClearRefreshProc: ENTRY Menus.MenuProc = { ENABLE UNWIND => NULL; handle: GraphHandle _ HandleFromViewer[NARROW[parent]]; proc: GraphProc = { OPEN handle; SELECT PopUpMenu.RequestSelection[ label: "Options", choice: LIST["refresh", "clear and refresh", "update div/bounds", "remove all curves"], default: 1] FROM 1 => PaintAll[handle, FALSE, FALSE, TRUE]; 2 => PaintAll[handle, TRUE, FALSE, TRUE]; 3 => PaintAll[handle, TRUE, TRUE, TRUE]; 4 => RemoveAllCurves[handle]; ENDCASE; }; CallWithLock[handle, proc]; }; -- ClearRefreshProc ShowControllerProc: ENTRY Menus.MenuProc = { handle: GraphHandle _ HandleFromViewer[NARROW[parent]]; IF UserEditAllowed[handle] THEN { proc: GraphProc = { ShowController[handle, WDirOfViewer[handle.chart.viewer]]; }; CallWithLock[handle, proc]; }; }; -- ShowControllerProc }. LOG. SChen, create at October 9, 1985 6:41:19 pm PDT ΘGraphMenus.mesa, Copyright c 1985 by Xerox Corporation. All rights reserved. Last Edited by: Sweetsun Chen, November 27, 1985 3:42:10 pm PST TiogaOps USING [Jump, ViewerDoc], menus switches levels menus menuprocs show up the spec panel ViewerOps.MoveViewer[viewer: rule, x: 0, y: 399, w: rule.ww, h: 1, paint: FALSE]; ViewerOps.PaintViewer[viewer: viewer, hint: client]; show up the XY values panel ViewerOps.MoveViewer[viewer: rule, x: 1000, y: 0, w: rule.ww, h: 1, paint: FALSE]; ViewerOps.PaintViewer[viewer: viewer, hint: client]; show up the table of texts and curves ViewerOps.MoveViewer[viewer: rule, x: 1000, y: 0, w: rule.ww, h: 1, paint: FALSE]; ViewerOps.PaintViewer[viewer: viewer, hint: client]; handle.waitingGraph _ TRUE; AutoBoundsProc: Menus.MenuProc = { handle: GraphHandle _ HandleFromViewer[NARROW[parent]]; proc: GraphProc = { OPEN handle; wasOn: BOOL _ graph.auto[bounds]; update, switchIt: BOOL _ TRUE; SELECT mouseButton FROM red => switchIt _ NOT wasOn; blue => switchIt _ wasOn; ENDCASE => SELECT PopUpMenu.RequestSelection[ label: "Auto Bounds", choice: LIST["on (red)", "off (blue)"], default: 1] FROM 1 => switchIt _ NOT wasOn; 2 => switchIt _ wasOn; ENDCASE => switchIt _ update _ FALSE; IF switchIt THEN SwitchAuto[handle, bounds] ELSE IF update AND wasOn THEN { IF chart.viewer = NIL THEN graph.bounds _ DataBounds[graph.entityList, graph.bounds] ELSE PaintAll[handle]; }; }; CallWithLock[handle, proc]; }; -- AutoBoundsProc menuprocs [parent: REF, clientData: REF, mouseButton: MouseButton, shift, control: BOOL] chart.viewer (parent) # nil try selected viewer first. v: Viewer _ ViewerTools.GetSelectedViewer[]; IF v = NIL THEN msg _ hint ELSE IF v.class.flavor = $Text THEN file _ v.file Κ›˜JšœΟmœ1™Mšœ™Icode™/—šΟk ˜ Jšžœžœ)˜1JšœžœSžœ ˜lJšœ žœ˜#Jšœ žœ˜Jšœ žœζ˜ψJšœ žœ¨˜·Jšœžœe˜pJšœ žœ˜#Jšœžœ˜#Jšœ žœI˜WJšœ žœ6˜HJšœ žœ™!Jšœ žœ˜&Jšœ žœH˜WJšœ žœ+˜<—J˜šœ žœž˜Jšžœžœ‹˜•Jšžœžœ*˜G—J˜J™šΟnœžœžœžœ˜>Jšžœžœžœ˜Jšœ˜˜Jšœ>˜>—šœ˜Jšœ=˜=—šœ˜Jšœ>˜>—šœ˜Jšœ?˜?—šœ˜Jšœ=˜=—J™J™šœ˜JšœG˜G—šœ˜JšœG˜G—šœ˜JšœB˜B—šœ˜JšœA˜A—šœ˜Jšœ=˜=—šœ˜JšœE˜E—šœ˜JšœA˜A—šœ˜JšœA˜A—šœ˜Jšœ=˜=—šœ˜Jšœ=˜=—J˜J™ šœ˜JšœO˜O—šœ˜JšœG˜G—šœ˜JšœI˜I—šœ˜JšœE˜E—J˜JšœΟc˜—™Jšœ ™ šœžœ˜&J™Jšžœžœžœ˜Jšœ'žœ ˜7˜šžœ%žœžœ˜Ešžœžœ žœ˜Jšœžœ ˜2Jšœžœ˜"JšœJžœ™QJšœDžœ˜Kšžœ žœžœ˜)Jšœ1žœ˜8—JšœLžœ˜RJšœ4™4Jšœ˜—J˜—J˜—Jšœ˜Jšœ ˜J˜—šœ žœ˜%Jšœ™Jšžœžœžœ˜Jšœ'žœ ˜7˜šžœ%žœžœ˜Ešžœžœ žœ˜Jšœ žœ˜Jšœžœ ˜BJšœEžœ˜LJšœKžœ™Ršžœ žœžœ˜)Jšœ1žœ˜8—JšœLžœ˜RJšœ4™4J˜—J˜—J˜—Jšœ˜Jšœ ˜J˜—šœžœ˜'J™%Jšžœžœžœ˜Jšœ'žœ ˜7˜šžœ%žœžœ˜Ešžœžœžœ˜Jšœžœ˜Jšœžœ ˜@JšœEžœ˜LJšœKžœ™RJšœDžœ˜Kšžœ žœžœ˜)Jšœ9žœ˜?—Jšœ4™4J˜—J˜—J˜—Jšœ˜Jšœ ˜J˜—šœžœ˜'Jšžœžœžœ˜Jšœ'žœ ˜7J˜ Jšœžœ™Jšœ +˜>Jšœ ˜*Jšœ ˜J˜—šœ žœ˜$Jšžœžœžœ˜Jšœ'žœ ˜7šžœžœ˜šœžœ˜JšœC˜Cšžœ ž˜Jšœ˜Jšœ˜Jšžœžœ˜—Jšœ;˜;J˜—J˜—Jšœ ˜J˜—š Ÿœžœ žœ)žœžœžœ˜\šžœžœ ž˜Jšœžœ˜Jšœ˜šžœžœ˜-Jšœžœ(ž˜FJšœžœ˜Jšœ ˜ Jšžœžœ˜——Jšœ  ˜J˜—šœžœ˜+Jšžœžœžœ˜Jšœ'žœ ˜7šœžœ˜ Jšžœ@žœ˜eJ˜—Jšœ˜Jšœ ˜J˜—šœžœ˜(Jšžœžœžœ˜Jšœ'žœ ˜7šœžœ˜ Jšžœ:žœ˜\J˜—Jšœ˜Jšœ ˜J˜—šœ"™"Jšœ'žœ ™7šœžœ™ Jšœžœ™!Jšœžœžœ™šžœ ž™Jšœžœ™Jšœžœ™šžœžœ™-Jšœžœ(ž™NJšœ žœ™Jšœ žœ™Jšžœžœ™%J™——Jšžœ žœ™+šžœžœžœžœ™Jšžœžœžœ:™TJšžœ™J™—J™—Jšœ™Jšœ ™J™—šœžœ˜'Jšžœžœžœ˜Jšœ1˜1Jšœ˜J˜—šœžœ˜&Jšžœžœžœ˜Jšœ3˜3Jšœ˜J˜—šœžœ˜'Jšžœžœžœ˜Jšœ.˜.Jšœ˜J˜š Ÿ œžœ žœžœ<žœ˜fJšœ'žœ ˜7šœžœ˜ šžœžœ˜šžœDžœ˜LJšœ#˜#šžœ!žœžœž˜EJšœ%˜%—J˜—J˜—Jšžœžœ7žœ&˜hJ˜—Jšœ˜Jšœ ˜J˜——šœ žœ˜#Jšžœžœžœ˜Jšœ'žœ ˜7šœžœ˜ Jšžœ1žœ˜LJ˜—Jšœ˜Jšœ  ˜J˜—šœ žœ˜%Jšžœžœžœ˜Jšœ'žœ ˜7šœ˜šžœ>ž˜DJšœ˜——Jšœ˜Jšœ ˜J˜—šœ žœ˜&Jšžœžœžœ˜Jšœ'žœ ˜7šœ˜šžœ>ž˜DJšœ˜——Jšœ˜Jšœ ˜J˜—šœ žœ˜#Jšžœžœžœ˜Jšœ'žœ ˜7šœ˜šžœ@ž˜FJšœ˜——Jšœ˜Jšœ  ˜J˜—šœ žœ˜#Jšžœžœžœ˜Jšœ'žœ ˜7šœ˜šžœ>ž˜DJšœ˜——Jšœ˜Jšœ  ˜—J˜šœžœ˜,Jšžœžœžœ˜Jšœ'žœ ˜7JšœI˜IJšœ˜Jšœ ˜J˜—šœžœ˜)Jšžœžœžœ˜Jšœ'žœ ˜7JšœE˜EJšœ˜Jšœ ˜J˜—šœžœ˜)Jšžœžœžœ˜Jšœ'žœ ˜7JšœF˜FJšœ˜Jšœ ˜J˜—šœžœ˜'Jšžœžœžœ˜Jšœ'žœ ˜7JšœD˜DJšœ˜Jšœ ˜—J˜—šŸ œžœžœžœ˜9Jšžœžœžœ˜Jšœ˜˜Jšœ2˜2—˜Jšœ8˜8—˜Jšœ@˜@—šœ˜Jšœ0 ˜E—šœ˜Jšœ3˜3—šœ˜Jšœ2˜2—˜J˜2—˜J˜9—˜J˜=—˜J˜<—Jšœ  ˜J˜J™ šœžœ˜&JšœN™NJšžœžœžœ˜Jšœ'žœ ˜7šœžœ˜ Jšœ˜Jšœ˜šžœ˜"Jšœ˜šœžœ˜ Jšœ ˜ Jšœ˜Jšœ˜Jšœ˜Jšœ˜Jšœ˜—Jšœ ž˜Jšœ0˜0Jšœ3˜3Jšœ3˜3Jšœ1˜1Jšœ1˜1Jšžœ7˜>—Jšœ-˜-šžœžœ˜"Jšœ˜Jšœ™Jšœžœžœžœ˜$J˜—šžœžœ˜ Jšœ˜šžœ ž˜Jšœ˜Jšœ˜J˜J˜$Jšžœ˜—J˜—Jšœ ˜ —Jšœ˜Jšœ ˜J˜—šœžœ˜,Jšžœžœžœ˜Jšœ'žœ ˜7šœžœ˜ Jšœ/˜/šžœ˜"Jšœ˜Jšœžœ˜Jšœ ž˜JšœE˜EJšœE˜EJšžœ2 ˜=—J˜—Jšœ˜Jšœ ˜J˜—šœžœ˜0Jšžœžœžœ˜Jšœ'žœ ˜7šœžœ˜ šœ!žœ˜CJšœ˜Jšœžœ(˜4Jšœ ž˜Jšœ ˜ Jšœ ˜ Jšœ˜J˜ Jšžœ˜—šžœ!žœ˜)Jšœ ˜ Jšœ-˜-Jšœžœžœžœ˜$J˜—J˜—Jšœ˜Jšœ ˜J˜—šœžœ˜&Jšžœžœžœ˜Jšœ'žœ ˜7šœžœ˜ Jšœ žœžœ˜Jšœ@˜@šžœžœžœ˜šžœ˜"Jšœ.žœž˜Jšœ˜Jšœ,žœ˜3Jšœ4žœ˜?šžœžœžœ ˜+J˜ Jšœ4žœžœ˜@J˜—J˜—Jšžœ˜—J˜—Jšžœžœžœ˜ J˜—Jšžœžœ˜;Jšœ ˜J˜š Ÿ œžœžœžœ žœžœ˜V™Jšœ,™,Jšžœžœžœ ™Jšžœžœžœ™1—Jšœ*˜*Jšžœžœ#˜9šžœ˜šœ žœ˜,Jšžœ$žœ˜1—Jš žœžœžœžœžœ)˜UJ˜—Jšœ ˜—J˜—šœžœ˜(Jšžœžœžœ˜Jšœ'žœ ˜7šœžœ˜ Jšœ žœžœ˜Jšœ@˜@šžœžœžœ˜šžœ˜"Jšœ,žœž˜HJšœ9žœ˜DJšžœ˜—J˜—Jšžœžœžœ˜ J˜—Jšžœžœ˜;Jšœ ˜J˜—šœžœ˜'Jšžœžœžœ˜Jšœ'žœ ˜7šœžœ˜ Jšœ žœžœ˜Jšœ?˜?Jšžœžœžœ+˜^šžœžœžœ˜šžœ˜"Jšœ*žœž˜Fšœ˜Jšœ ˜ J˜"Jšœ˜šžœžœžœ˜JšœB˜BJ˜J˜—Jšžœ žœ%žœ˜;Jšžœ ˜$J˜—Jšžœ˜—J˜—Jšžœžœžœ˜ J˜—Jšœ˜Jšœ ˜J™—šœžœ˜&Jšžœžœžœ˜Jšœ'žœ ˜7šœžœ˜ Jšœžœ˜Jšœ@˜@Jšžœžœžœ+˜^šžœžœžœ˜šžœ˜"Jšœ$žœž˜@šœ1˜1Jšœžœ˜#—Jšžœ˜—J˜—Jšžœžœžœ)˜:Jšžœ˜J˜—Jšœ˜Jšœ ˜J˜—šœžœ˜(Jšžœžœžœ˜Jšœ'žœ ˜7šœžœ˜ Jšœ žœžœ˜Jšœ,˜,šžœ˜"Jšœ˜Jšœžœ˜)Jšœ ž˜Jšœ˜Jšœ˜Jšžœ=˜D—Jšžœžœžœ>˜OJšžœžœžœ+˜^šžœžœžœžœ˜4Jšœ7žœž˜Sšœ˜Jšœ˜Kšœ˜Jšœ1žœ˜