DIRECTORY CD, CDIO, CDSequencer, CDViewer, IO, Menus, TerminalIO, ViewerClasses, ViewerOps; CDSaveButton: CEDAR PROGRAM IMPORTS CDIO, CDSequencer, CDViewer, Menus, ViewerOps, TerminalIO = BEGIN AddSaveDesignButtonToCDViewers: PROC = { isDesign: BOOL; design: CD.Design; rect: CD.DesignRect; Checker: ViewerOps.EnumProc = { -- [v: Viewer] RETURNS [BOOL _ TRUE] IF v.class.flavor#$Chipndale THEN RETURN[TRUE]; [isDesign, design, rect] _ CDViewer.DesignOf[v]; IF NOT isDesign THEN RETURN[TRUE]; IF v.menu=NIL THEN ViewerOps.SetMenu[v, Menus.CreateMenu[] ]; IF Menus.FindEntry[v.menu, "SaveDesign"]=NIL THEN Menus.AppendMenuEntry[ menu: v.menu, entry: Menus.CreateEntry[ name: "SaveDesign", proc: SaveDesignMenuProc, clientData: design, guarded: TRUE]]; RETURN[TRUE]}; CDSequencer.ImplementCommand[a: $SaveDesign, p: SaveDesign]; ViewerOps.EnumerateViewers[Checker] }; SaveDesignMenuProc: Menus.ClickProc = BEGIN ENABLE TerminalIO.UserAbort => GOTO userAbort; viewer: ViewerClasses.Viewer _ NARROW[parent]; design: CD.Design _ NARROW[clientData]; comm: CDSequencer.Command _ NEW[CDSequencer.CommandRec _ [design: design, a: $SaveDesign]]; CDSequencer.ExecuteCommand[comm: comm]; EXITS userAbort => {TerminalIO.WriteRope["discarded\n"]} END; SaveDesign: PROC [comm: CDSequencer.Command] = { name: IO.ROPE _ CDIO.MakeName [comm.design.name, "dale", CDIO.GetWorkingDirectory[comm.design]]; TerminalIO.WriteRope["Saving: "]; TerminalIO.WriteRope[name]; TerminalIO.WriteRope[" . . . "]; [ ] _ CDIO.WriteDesign[comm.design, name]; TerminalIO.WriteRope["done\n"]; }; AddSaveDesignButtonToCDViewers[]; END. FCDSaveButton.mesa Copyright c 1985 by Xerox Corporation. All rights reserved. Compile CDSaveButton; run CDSaveButton; AddSaveDesignButtonToCDViewers Last Edited by Curry, April 10, 1985 6:00:29 pm PST PROC [parent: REF ANY, clientData: REF ANY _ NIL, mouseButton: MouseButton _ red, shift, control: BOOL _ FALSE] Ê”˜šÐblœ™Jšœ<™