(* Copyright (C) 1992, Digital Equipment Corporation *) (* All rights reserved. *) (* See the file COPYRIGHT for a full description. *) (* *) (* by Steve Glassman, Mark Manasse and Greg Nelson *) (* Last modified on Mon Dec 14 10:07:31 PST 1992 by msm *) (* modified on Mon Feb 24 13:58:25 PST 1992 by muller *) (* modified on Wed Oct 23 0:26:59 PDT 1991 by gnelson *) (* modified on Thu Apr 12 15:21:37 PDT 1990 by steveg *) <*PRAGMA LL*> INTERFACE TrestleClass; IMPORT Trestle, VBT, Point, Rect, Region, ScrnPixmap, ScrnColorMap, Thread; FROM TrestleComm IMPORT Failure; FROM Trestle IMPORT ScreenID; REVEAL Trestle.T <: Public; VAR connectMu: MUTEX; <* LL = VBT.mu + epsilon *> closeMu: MUTEX; <* LL maximal *> TYPE RootVBT <: VBT.Split; Public = RootVBT OBJECT closed := FALSE <* LL = closedMu *> METHODS attach(v: VBT.T) RAISES {Failure}; (* tr.attach(v) attaches v to tr, leaving v invisible. *) (* It must make v a descendant of tr even if it raises Failure *) (* v must be attached for the rest of the methods *) decorate(v: VBT.T; old, new: Decoration) RAISES {Failure}; (* new is on v's prop list. *) iconize(v: VBT.T) RAISES {Failure}; overlap(v: VBT.T; id: ScreenID; READONLY nw: Point.T) RAISES {Failure}; moveNear(v, w: VBT.T) RAISES {Failure}; installOffscreen(v: VBT.T; width, height: CARDINAL; preferredScreenType: VBT.ScreenType) RAISES {Failure}; setColorMap(v: VBT.T; cm: ScrnColorMap.T); getScreens(): Trestle.ScreenArray RAISES {Failure}; captureScreen( id: ScreenID; READONLY clip: Rect.T; VAR (* out *) br: Region.T) : ScrnPixmap.T RAISES {Failure}; allCeded(): BOOLEAN RAISES {Failure}; tickTime(): INTEGER; swap(v, w: VBT.T) RAISES {Failure}; getName(v: VBT.T): TEXT RAISES {Failure}; setScreens(sa: Trestle.ScreenArray) RAISES {Failure}; nameList(nm: TEXT): REF ARRAY OF TEXT RAISES {Failure}; moveNearByName(v: VBT.T; nm: TEXT) RAISES {Failure}; swapByName(v: VBT.T; nm: TEXT) RAISES {Failure}; deleteByName(nm: TEXT) RAISES {Failure}; takeOver(id: ScreenID; v: VBT.T) RAISES {Failure}; (* Initially v is attached *) restore(id: ScreenID; v: VBT.T) RAISES {Failure}; takeOverMouse(id: ScreenID; v: VBT.T) RAISES {Failure}; releaseMouse(id: ScreenID; v: VBT.T) RAISES {Failure}; setHighlight( id: ScreenID; READONLY r: Rect.T; border: CARDINAL) RAISES {Failure}; addParent(prnt: VBT.T; id: ScreenID) RAISES {Failure}; remParent(prnt: VBT.T; id: ScreenID) RAISES {Failure}; warpCursor(id: ScreenID; READONLY pt: Point.T) RAISES {Failure}; (* getConfig(id: ScreenID; p: Trestle.ConfigClosure) RAISES {Failure}; setConfig(id: ScreenID; c: Trestle.Config) RAISES {Failure}; *) lastCeded(): VBT.TimeStamp RAISES {Failure}; (* getParameters(): Trestle.Parameters RAISES {Failure}; setParameters(p: Trestle.Parameters) RAISES {Failure}; *) (* the following methods are to support telepointing on shared windows; all have LL = VBT.mu *) trestleId(): TEXT; windowId(v: VBT.T): TEXT; updateBuddies(v: VBT.T; trsls, ids: ARRAY OF TEXT); END; TYPE Decoration = BRANDED REF RECORD inst, windowTitle, iconTitle, applName: TEXT; bgColorR, bgColorG, bgColorB: REAL; iconWindow: VBT.T END; TYPE InstallRef = REF RECORD installed: BOOLEAN; c: Thread.Condition; trsl: Trestle.T END; (* There is one of these on the property set of every installed VBT, with installed=TRUE. *) (* Each different "type" of Trestle.T (e.g., an XClient.T) registers a ConnectClosure; these are tried in turn by Trestle.Connect. *) TYPE ConnectClosure = OBJECT METHODS <* LL.sup <= TrestleClass.connectMu *> apply(inst: TEXT; localOnly: BOOLEAN; VAR (*OUT*) t: Trestle.T): BOOLEAN END; (* If cc is a ConnectClosure, cc.apply(inst, localOnly, t) is like t := Trestle.Connect(inst, localOnly); RETURN TRUE, provided that inst and localOnly are acceptable to cc; otherwise it is equivalent to t := NIL; RETURN FALSE. When cc.apply is called, LL.sup <= TrestleClass.connectMu. *) PROCEDURE RegisterConnectClosure(cc: ConnectClosure); (* Add cc to the list of ConnectClosures that will be tried by Connect. LL.sup < VBT.mu *) PROCEDURE Connect( inst: TEXT := NIL; localOnly: BOOLEAN := FALSE) : Trestle.T RAISES {Failure}; <* LL.sup <= TrestleClass.connectMu *> (* Implements Trestle.Connect. *) END TrestleClass.