DIRECTORY Atom USING[ MakeAtom ], CommandTool USING[Run, DoCommand], Commander USING[Handle, CommandObject], DB USING [Attribute, DeclareEntity, Domain, Entity, GetP, V2S, SetP, S2V], DBIcons USING [IsRegistered], IO USING[noInputStream], MessageWindow USING[Append, Clear], Nut USING [CreateProc], PressPrinter USING[IsAPressFile], Rope, PrincOpsUtils USING[ IsBound], ShowPress USING[CreateShowViewer], SquirrelTool USING[squirrelOut], TiogaMenuOps USING[ Open ], ViewerClasses USING [Viewer], ViewerOps USING [FindViewer, OpenIcon, PaintViewer, AddProp], Whiteboard; WhiteboardToolImpl: CEDAR PROGRAM IMPORTS Atom, CommandTool, DB, DBIcons, IO, MessageWindow, PressPrinter, TiogaMenuOps, Rope, PrincOpsUtils, ShowPress, SquirrelTool, ViewerOps, Whiteboard EXPORTS Whiteboard = BEGIN OPEN DB, Whiteboard; ROPE: TYPE = Rope.ROPE; Viewer: TYPE = ViewerClasses.Viewer; CreateTextViewer: PUBLIC Nut.CreateProc = BEGIN IF PressPrinter.IsAPressFile[eName] THEN TRUSTED{ IF NOT PrincOpsUtils.IsBound[link: ShowPress.CreateShowViewer] THEN { MessageWindow.Append["Running ShowPressPackage", TRUE]; IF CommandTool.Run["ShowPressPackage"].error THEN { MessageWindow.Append["Can't load ShowPress", TRUE]; RETURN[NIL] } ELSE MessageWindow.Append["Done.", TRUE] }; MessageWindow.Append[message: Rope.Cat["Reading ", eName], clearFirst: TRUE]; v _ ShowPress.CreateShowViewer[eName].parent; v.icon _ document; ViewerOps.AddProp[ v, $IconLabel, Whiteboard.ShortName[eName] ]; MessageWindow.Append[message: "Done.", clearFirst: TRUE]; RETURN[v] }; v _ ViewerOps.FindViewer[eName]; IF v = NIL OR v.destroyed THEN { MessageWindow.Append[message: Rope.Cat["Reading ", eName], clearFirst: TRUE]; v _ TiogaMenuOps.Open[fileName: eName]; MessageWindow.Clear[] } ELSE Open[v]; RETURN[v]; END; CreateToolViewer: PUBLIC Nut.CreateProc = BEGIN tool: Entity; instructions: ROPE; v _ ViewerOps.FindViewer[eName]; IF v # NIL THEN { iconName: Rope.ROPE = DBIcons.IsRegistered[eName].name; iconAtom: ATOM = IF iconName.Length[] = 0 THEN NIL ELSE Atom.MakeAtom[iconName]; Open[v]; ViewerOps.AddProp[v, $ToolInfo, NEW[Whiteboard.ToolInfo _ [Atom.MakeAtom[eName], iconAtom, instructions]]]; RETURN[v] }; tool _ DeclareEntity[d: Whiteboard.ToolViewer, name: eName, version: OldOnly]; IF tool = NIL THEN RETURN[NIL]; instructions _ V2S[GetP[tool, Whiteboard.instructions]]; IF Rope.Equal[instructions, ""] THEN RETURN; { cmdHandle: Commander.Handle = NEW[Commander.CommandObject _ []]; cmdHandle.err _ cmdHandle.out _ SquirrelTool.squirrelOut; cmdHandle.in _ IO.noInputStream; [] _ CommandTool.DoCommand[Rope.Concat[instructions, "\n"], cmdHandle] }; v _ ViewerOps.FindViewer[eName]; IF v = NIL THEN RETURN[NIL]; { iconName: Rope.ROPE = DBIcons.IsRegistered[eName].name; iconAtom: ATOM = IF iconName.Length[] = 0 THEN NIL ELSE Atom.MakeAtom[iconName]; Open[v]; ViewerOps.AddProp[v, $ToolInfo, NEW[Whiteboard.ToolInfo _ [Atom.MakeAtom[eName], iconAtom, instructions]]]; RETURN[v] } END; ExtractName: PUBLIC PROCEDURE[name: ROPE] RETURNS[ROPE] = BEGIN pos: INTEGER; pos _ Rope.Find[name, ": "]; IF pos < 0 THEN pos _ 0 ELSE pos _ pos + 2; RETURN[Rope.Substr[name, pos, Rope.Length[name]-pos-11]]; -- remove the " (Squirrel)" too END; Open: PROCEDURE[viewer: Viewer] = BEGIN IF viewer#NIL THEN IF viewer.iconic THEN ViewerOps.OpenIcon[viewer] ELSE ViewerOps.PaintViewer[viewer, all]; END; RegisterTool: PUBLIC PROC [toolName, instructions: Rope.ROPE] ~ { tool: DB.Entity = DB.DeclareEntity[d: Whiteboard.ToolViewer, name: toolName, version: OldOnly]; IF tool = NIL THEN RETURN; instructions _ Rope.Cat["///Commands/AddSearchRules ///Commands ; ///Commands/Push Commands ; ", instructions," ; ///Commands/Pop"]; [] _ DB.SetP[tool, Whiteboard.instructions, S2V[instructions]] }; GetToolInfo: PUBLIC PROC [toolName: Rope.ROPE] RETURNS[instructions: Rope.ROPE] ~ { tool: DB.Entity = DB.DeclareEntity[d: Whiteboard.ToolViewer, name: toolName, version: OldOnly]; IF tool = NIL THEN RETURN; instructions _ V2S[GetP[tool, Whiteboard.instructions]] }; END. Change Log Cattell August 11, 1982 12:23 pm: Removed StartTrap call, want to selectively start up whiteboards. Also make GetIconInfo recover gracefully if icon relation has been deleted or not initialized. Cattell October 11, 1982 9:29 pm: GetIcon must catch MultipleMatch on GetEntityByName, because there may be more than one sub-type of the domain; in this case just use nut icon. .WhiteboardToolImpl.mesa last edit by Maxwell, June 23, 1983 10:25 am Willie-Sue, February 22, 1983 4:30 pm Cattell, September 23, 1983 8:57 am Donahue, August 2, 1983 4:35 pm *********************** creating entities ************************** try to find a viewer that might have been created Êë˜J˜Jšœ™šœ ™ Jšœ™Jšœ%™%Jšœ#™#Jšœ™J˜—šÏk ˜ Jšœœ ˜Jšœ œ˜"Jšœ œ˜'šœ˜J˜A—Jšœœ˜Jšœœ˜Jšœœ˜#Jšœœ˜Jšœ œ˜!J˜Jšœœ ˜Jšœ œ˜"Jšœ œ˜ Jšœ œ ˜Jšœœ ˜Jšœ œ.˜=J˜ J˜—šœœ˜!šœ˜Jšœœ œ˜@J˜Q—Jšœ ˜Jš˜Jšœœ ˜J˜Jšœœœ˜Jšœœ˜$J˜—JšœE™EJ˜šœœ˜)Jš˜šœ"œ˜)šœœœ9˜Lšœ3œ˜9Jšœ*˜,Jš˜Jšœ/œœœ˜CJšœœ˜+—JšœGœ˜MJ˜-J˜J˜@Jšœ3œ˜9Jšœ˜ ——J˜ šœœœ œ˜!JšœGœ˜MJ˜'J˜—Jšœ ˜ Jšœ˜ Jšœ˜J˜—šœœ˜)Jš˜J˜ Jšœœ˜J˜ šœœ˜šœœ$˜9Jš œ œœœœœ˜PJ˜Jšœ œH˜k—Jšœ˜ —J˜NJš œœœœœ˜J˜8šœœœ˜,šœ œ˜BJ˜9Jšœœ˜ ˜IJšœ1™1J˜ Jš œœœœœ˜šœœ$˜9Jš œ œœœœœ˜PJ˜Jšœ œH˜k—Jšœ˜ ———Jšœ˜J˜—š Ïn œœ œœœœ˜9Jš˜Jšœœ˜ J˜Jšœ œ œ˜+Jšœ4Ïc˜YJšœ˜J˜—šžœ œ˜!Jš˜šœœ˜Jšœœ˜0Jšœ$˜(—Jšœ˜J˜—šž œœœœ˜AJšœœ œK˜_Jšœœœœ˜Jšœ„˜„Jšœ7˜>J˜J˜—š ž œœœœœœ˜SJšœœ œK˜_Jšœœœœ˜J˜7J˜—˜Jšœ˜J˜—J˜ J˜J˜ÃJ˜J˜±J˜—…—@Y