DIRECTORY Buttons USING [ButtonProc], ChoiceButtons USING [BuildEnumTypeSelection, ButtonList, SelectionNotifierProc], Containers USING [Create, ChildXBound], Convert USING [AtomFromRope, RopeFromAtom], Rope USING [ROPE], Trc USING [BuildControlViewer, ClassEnumProc, ClassFromFlavor, Copy, EnumerateRegisteredClasses, NotifyListeners, TRC, TRCRep], TrcButtons USING [AttachNewTrcToButton, Create, TrcFromButton], TrcStandardClasses USING [EnumerateRegisteredParametricClasses, NewChainTrc, NewIdentityTrc, ReplaceNthTrcInChain], TrcViewers USING [CreateTRCViewer, InfoFromTRCViewer, NewTrc], ViewerClasses USING [Viewer, ViewerRec], ViewerOps USING [DestroyViewer, EstablishViewerPosition, PaintViewer, SetOpenHeight]; TrcToolImpl: CEDAR PROGRAM IMPORTS ChoiceButtons, Containers, Convert, Trc, TrcButtons, TrcStandardClasses, TrcViewers, ViewerOps ~ BEGIN ROPE: TYPE ~ Rope.ROPE; width: NAT ~ 100; cWidth: NAT ~ 250; margin: NAT ~ 10; sq: NAT ~ 15; Data: TYPE ~ REF DataRep; DataRep: TYPE ~ RECORD [ novice: BOOL, chainTrc: Trc.TRC, --the parent chain trc trcV, controlV, viewer, sibling: ViewerClasses.Viewer _ NIL ]; BuildNewControlViewer: PROC [data: Data, trc: Trc.TRC, paint: BOOL _ TRUE] ~ { IF data.controlV#NIL THEN ViewerOps.DestroyViewer[viewer: data.controlV, paint: FALSE]; data.controlV _ Trc.BuildControlViewer[trc: trc, info: [parent: data.viewer, wx: 0, wy: sq*15, ww: 17*sq, wh: sq*3, border: FALSE, scrollable: FALSE]]; --This should init trc.instance ViewerOps.EstablishViewerPosition[viewer: data.controlV, x: data.controlV.wx, y: data.controlV.wy, w: 1000, h: IF data.controlV.openHeight=0 THEN data.controlV.wh ELSE data.controlV.openHeight]; ViewerOps.EstablishViewerPosition[viewer: data.viewer, x: data.viewer.wx, y: data.viewer.wy, w: data.viewer.ww, h: data.controlV.wy + data.controlV.wh]; IF data.sibling#NIL THEN ViewerOps.EstablishViewerPosition[viewer: data.sibling, x: data.sibling.wx, y: data.viewer.wh + sq, w: data.sibling.ww, h: data.sibling.wh]; IF paint THEN { ViewerOps.PaintViewer[viewer: data.controlV, hint: client]; IF data.sibling#NIL THEN ViewerOps.PaintViewer[viewer: data.sibling, hint: client]; }; }; NotifyEnumButtons: ChoiceButtons.SelectionNotifierProc = { data: Data ~ NARROW[clientdata]; trc: Trc.TRC ~ NEW[Trc.TRCRep _ [class: Trc.ClassFromFlavor[Convert.AtomFromRope[name]], instance: NIL]]; NewTrcInMainViewer[data, trc, FALSE]; ViewerOps.PaintViewer[viewer: data.viewer.parent, hint: client]; }; MakeTrcTool: PUBLIC PROC [info: ViewerClasses.ViewerRec _ []] RETURNS [v: ViewerClasses.Viewer] ~ { FillContainer: PROC [v, sibling: ViewerClasses.Viewer, novice: BOOL] ~ { iden: Trc.TRC ~ TrcStandardClasses.NewIdentityTrc[]; GetButtonList: PROC [preferredDefault: ATOM] RETURNS [list: ChoiceButtons.ButtonList _ NIL, default: ROPE _ NIL] ~ { EnumProc: Trc.ClassEnumProc = { rope: ROPE ~ Convert.RopeFromAtom[from: class.flavor, quote: FALSE]; IF class.flavor=preferredDefault THEN default _ rope; IF class.control#NIL THEN list _ CONS[rope, list]; }; (IF novice THEN TrcStandardClasses.EnumerateRegisteredParametricClasses ELSE Trc.EnumerateRegisteredClasses)[EnumProc]; IF default=NIL THEN default _ list.first; }; data: Data ~ NEW[DataRep _ [novice: novice, viewer: v, sibling: sibling, chainTrc: chain]]; buttonList: ChoiceButtons.ButtonList; defaultButton: ROPE; [list: buttonList, default: defaultButton] _ GetButtonList[IF novice THEN $Linear ELSE $Edit]; [] _ ChoiceButtons.BuildEnumTypeSelection[viewer: v, x: 0, y: 0, buttonNames: buttonList, default: defaultButton, borderOnButtons: FALSE, notifyClientProc: NotifyEnumButtons, clientdata: data, style: menuSelection, allInOneRow: FALSE, maxWidth: 17*sq]; data.trcV _ TrcViewers.CreateTRCViewer[trc: TrcStandardClasses.NewIdentityTrc[], rectangle: [0,0,1,1], dx: 0.05, info: IF data.novice THEN [parent: data.viewer, wx: 12*sq, wy: 3*sq, ww: 5*sq, wh: 5*sq, scrollable: FALSE] ELSE [parent: data.viewer, wx: 0, wy: 3*sq, ww: 11*sq, wh: 11*sq, scrollable: FALSE], paint: FALSE]; NotifyEnumButtons[name: defaultButton, clientdata: data]; FOR column: NAT IN [0..2) DO wx: INTEGER ~ sq*(12+3*column); FOR row: NAT IN [(IF novice THEN 2 ELSE 0) .. 4) DO wy: INTEGER ~ sq*(3+3*row); [] _ TrcButtons.Create[trc: iden, rectangle: [0,0,1,1], dx: 0.1, info: [parent: v, wx: wx, wy: wy, ww: 2*sq, wh: 2*sq, scrollable: FALSE], proc: BugTrcButton, clientData: data, paint: FALSE]; ENDLOOP; ENDLOOP; }; chain: Trc.TRC _ TrcStandardClasses.NewChainTrc[LIST[TrcStandardClasses.NewIdentityTrc[], TrcStandardClasses.NewIdentityTrc[]]]; --The NIL's act as placeholders top, bottom: ViewerClasses.Viewer; IF info.name = NIL THEN info.name _ "Trc Tool"; v _ Containers.Create[info: info, paint: FALSE]; top _ Containers.Create[info: [border: FALSE, scrollable: FALSE, ww: v.ww, wh: v.wh, parent: v], paint: FALSE]; Containers.ChildXBound[container: v, child: top]; bottom _ Containers.Create[info: [border: FALSE, scrollable: FALSE, ww: v.ww, wh: v.wh, parent: v], paint: FALSE]; Containers.ChildXBound[container: v, child: bottom]; FillContainer[v: top, sibling: bottom, novice: TRUE]; FillContainer[v: bottom, sibling: NIL, novice: FALSE]; [] _ TrcViewers.CreateTRCViewer[trc: chain, rectangle: [0,0,1,1], dx: 0.05, info: [parent: top, wx: 0, wy: 3*sq, ww: 11*sq, wh: 11*sq, scrollable: FALSE]]; ViewerOps.SetOpenHeight[viewer: v, clientHeight: top.wy + top.wh + sq]; ViewerOps.PaintViewer[viewer: v, hint: all]; }; NewTrcInMainViewer: PROC [data: Data, trc: Trc.TRC, paint: BOOL _ TRUE] ~ { TrcViewers.NewTrc[data.trcV, trc, paint]; BuildNewControlViewer[data, trc]; TrcStandardClasses.ReplaceNthTrcInChain[chain: data.chainTrc, new: trc, n: IF data.novice THEN 1 ELSE 0]; Trc.NotifyListeners[trc: trc, fork: TRUE]; }; BugTrcButton: Buttons.ButtonProc = { button: ViewerClasses.Viewer ~ NARROW[parent]; data: Data ~ NARROW[clientData]; SELECT mouseButton FROM red => { --Copy from button to main viewer copy: Trc.TRC ~ Trc.Copy[TrcButtons.TrcFromButton[button]]; NewTrcInMainViewer[data, copy]; }; yellow => { big: Trc.TRC ~ TrcViewers.InfoFromTRCViewer[data.trcV].trc; little: Trc.TRC ~ TrcButtons.TrcFromButton[button]; TrcButtons.AttachNewTrcToButton[button: button, trc: big]; NewTrcInMainViewer[data, little]; }; blue => { copy: Trc.TRC ~ Trc.Copy[TrcViewers.InfoFromTRCViewer[data.trcV].trc]; TrcButtons.AttachNewTrcToButton[button: button, trc: copy]; }; ENDCASE => ERROR; }; END. θTrcToolImpl.mesa Copyright c 1986 by Xerox Corporation. All rights reserved. Eric Nickell, April 10, 1986 9:52:15 am PST EXPORTS ExportsList OPEN Interface; trcV is the trc viewer controlV is the controlling viewer viewer is the enclosing container sibling, if non-NIL, is the container below viewer [class: Trc.Class] RETURNS [quit: BOOL _ FALSE] [parent: REF ANY, clientData: REF ANY _ NIL, mouseButton: Menus.MouseButton _ red, shift: BOOL _ FALSE, control: BOOL _ FALSE] ΚX˜šœ™Icodešœ<™Kšœœ˜(Kšœ œF˜UK˜—K˜Kšœ œ˜Kšœ_˜fKšœ™Kšœ˜šœ™K˜Kšœœœ˜Kšœœ˜Kšœœ˜Kšœœ˜Kšœœ˜ K˜šœœœ ˜šœ œœ˜Kšœœ˜ KšœœΟc˜+šœ8˜;K™K™"K™!Kšœœ™2—Kšœ˜——code2•StartOfExpansion% -- [name: ROPE, clientdata: REF ANY]š Οnœœœ œœ˜NK–6[viewer: ViewerClasses.Viewer, paint: BOOL _ TRUE]šœœœ7œ˜WKšœ|œœž˜·Kšœoœœœ˜ΒK–X[viewer: ViewerClasses.Viewer, x: INTEGER, y: INTEGER, w: INTEGER, h: INTEGER]šœ˜˜˜Kšœœœ˜₯šœœ˜K–w[viewer: ViewerClasses.Viewer, hint: ViewerOps.PaintHint, clearClient: BOOL _ TRUE, whatChanged: REF ANY _ NIL]˜;Kšœœ;˜SKšœ˜—K˜—šœ:˜:Kšœ œ ˜ Kšœ œœQœ˜iK–B[viewer: ViewerClasses.Viewer, trc: TRC, paint: BOOL _ TRUE]šœœ˜%K–w[viewer: ViewerClasses.Viewer, hint: ViewerOps.PaintHint, clearClient: BOOL _ TRUE, whatChanged: REF ANY _ NIL]šœ@˜@Kšœ˜—šŸ œœœ&œ˜cšŸ œœ,œ˜HL–[]šœ œ'˜4šŸ œœœœ#œ œœ˜tšœ˜Kšœ/™/K–$[from: ATOM, quote: BOOL _ TRUE]šœœ3œ˜DKšœœ˜5Kšœœœœ ˜2Kšœ˜—Kšœœœ9œ+˜wKšœ œœ˜)Kšœ˜—Kšœ œK˜[Kšœ%˜%Kšœœ˜K˜Kšœ;œœ œ˜^K–œ[viewer: ViewerClasses.Viewer, x: CARDINAL _ 0B (0), y: CARDINAL _ 0B (0), title: ROPE _ NIL, buttonNames: ChoiceButtons.ButtonList, default: ROPE _ NIL, borderOnButtons: BOOL _ TRUE, notifyClientProc: ChoiceButtons.SelectionNotifierProc, permit: ChoiceButtons.EnumPermissionProc, clientdata: REF ANY _ NIL, style: ChoiceButtons.StyleChoice, allInOneRow: BOOL _ TRUE, maxWidth: INTEGER]šœƒœ\œ˜όK–[]š œwœ œLœœJœ œ˜ΑKšœ9˜9šœ œœ˜Kšœœ˜š œœœœœœ ˜3Kšœœ˜K–Κ[trc: TRC, rectangle: ImagerTransformation.Rectangle, dx: REAL, info: ViewerClasses.ViewerRec, proc: Buttons.ButtonProc, clientData: REF ANY _ NIL, fork: BOOL _ TRUE, paint: BOOL _ TRUE]šœƒœ0œ˜ΏKšœ˜—Kšœ˜—Kšœ˜—Kšœ œ"œNž˜‘K–™[info: ViewerClasses.ViewerRec _ [class: NIL, wx: 0, wy: 0, ww: 0, wh: 0, cx: 0, cy: 0, cw: 0, ch: 0, lock: [process: PROCESS#0B, count: 0B (0)], tipTable: NIL, name: NIL, file: NIL, label: NIL, menu: NIL, icon: 177777B?, column: left, caption: FALSE, scrollable: TRUE, hscrollable: FALSE, iconic: TRUE, border: TRUE, newVersion: FALSE, newFile: FALSE, visible: TRUE, offDeskTop: FALSE, destroyed: FALSE, init: FALSE, saveInProgress: FALSE, inhibitDestroy: FALSE, guardDestroy: FALSE, paintingWedged: FALSE, ...], paint: BOOL _ TRUE]šœ"˜"K˜Kšœ œœ˜/K–™[info: ViewerClasses.ViewerRec _ [class: NIL, wx: 0, wy: 0, ww: 0, wh: 0, cx: 0, cy: 0, cw: 0, ch: 0, lock: [process: PROCESS#0B, count: 0B (0)], tipTable: NIL, name: NIL, file: NIL, label: NIL, menu: NIL, icon: 177777B?, column: left, caption: FALSE, scrollable: TRUE, hscrollable: FALSE, iconic: TRUE, border: TRUE, newVersion: FALSE, newFile: FALSE, visible: TRUE, offDeskTop: FALSE, destroyed: FALSE, init: FALSE, saveInProgress: FALSE, inhibitDestroy: FALSE, guardDestroy: FALSE, paintingWedged: FALSE, ...], paint: BOOL _ TRUE]šœ)œ˜0K˜K–™[info: ViewerClasses.ViewerRec _ [class: NIL, wx: 0, wy: 0, ww: 0, wh: 0, cx: 0, cy: 0, cw: 0, ch: 0, lock: [process: PROCESS#0B, count: 0B (0)], tipTable: NIL, name: NIL, file: NIL, label: NIL, menu: NIL, icon: 177777B?, column: left, caption: FALSE, scrollable: TRUE, hscrollable: FALSE, iconic: TRUE, border: TRUE, newVersion: FALSE, newFile: FALSE, visible: TRUE, offDeskTop: FALSE, destroyed: FALSE, init: FALSE, saveInProgress: FALSE, inhibitDestroy: FALSE, guardDestroy: FALSE, paintingWedged: FALSE, ...], paint: BOOL _ TRUE]šœ'œœ)œ˜oK–B[container: Containers.Container, child: ViewerClasses.Viewer]šœ1˜1K–™[info: ViewerClasses.ViewerRec _ [class: NIL, wx: 0, wy: 0, ww: 0, wh: 0, cx: 0, cy: 0, cw: 0, ch: 0, lock: [process: PROCESS#0B, count: 0B (0)], tipTable: NIL, name: NIL, file: NIL, label: NIL, menu: NIL, icon: 177777B?, column: left, caption: FALSE, scrollable: TRUE, hscrollable: FALSE, iconic: TRUE, border: TRUE, newVersion: FALSE, newFile: FALSE, visible: TRUE, offDeskTop: FALSE, destroyed: FALSE, init: FALSE, saveInProgress: FALSE, inhibitDestroy: FALSE, guardDestroy: FALSE, paintingWedged: FALSE, ...], paint: BOOL _ TRUE]šœ*œœ)œ˜rK–B[container: Containers.Container, child: ViewerClasses.Viewer]šœ4˜4K˜Kšœ/œ˜5Kšœ"œ œ˜6K˜Kšœ“œ˜›K˜K–9[viewer: ViewerClasses.Viewer, clientHeight: INTEGER]˜GK–w[viewer: ViewerClasses.Viewer, hint: ViewerOps.PaintHint, clearClient: BOOL _ TRUE, whatChanged: REF ANY _ NIL]˜Kšœ,˜,Kšœ˜—K˜–‚ -- [parent: REF ANY, clientData: REF ANY _ NIL, mouseButton: Menus.MouseButton _ red, shift: BOOL _ FALSE, control: BOOL _ FALSE]š Ÿœœœ œœ˜KKšœ)˜)Kšœ!˜!KšœKœ œœ˜iK–"[trc: TRC, fork: BOOL _ FALSE]šœ$œ˜*K˜—˜$KšΠck~™~Kšœœ ˜.Kšœ œ ˜ šœ ˜šœ ž!˜*Kšœ œ.˜;K˜Kšœ˜—šœ ˜ Kšœ œ/˜;Kšœ œ$˜3K–,[button: ViewerClasses.Viewer, trc: TRC]šœ:˜:Kšœ!˜!Kšœ˜—šœ ˜ K– [viewer: ViewerClasses.Viewer]šœ œ9˜FK–,[button: ViewerClasses.Viewer, trc: TRC]˜;Kšœ˜—Kšœœ˜—K˜——K˜Kšœ˜—…—0D