<<>> <> DIRECTORY Draw2d, Imager, QuadTree, Rope, Vector, ViewerClasses; Browser2D: CEDAR DEFINITIONS = BEGIN Item: TYPE = REF ItemRec; ItemRec: TYPE = RECORD [ class: ItemClass, data: REF ANY ]; ItemClass: TYPE = REF ItemClassRec; ItemClassRec: TYPE = RECORD [ paint: ItemPaintProc ¬ NIL, selectionNotify: ItemSelectionNotifyProc ¬ NIL, distanceTo: ItemDistanceToProc ¬ NIL, boundingBox: ItemBoundingBoxProc --must not be defaulted ]; ItemPaintProc: TYPE = PROC [self: Item, commonData: REF ANY, context: Imager.Context, zip: Draw2d.Zip, how: Instruction]; <> <> Instruction: TYPE = {normal, userSelected, clientSelected, deSelect}; ItemSelectionNotifyProc: TYPE = PROC [self: Item, commonData: REF ANY, how: Instruction]; <> ItemDistanceToProc: TYPE = PROC [self: Item, commonData: REF ANY, location: Vector.VEC] RETURNS [distance: REAL]; <> <> ItemBoundingBoxProc: TYPE = PROC [self: Item, commonData: REF ANY] RETURNS [box: BoundingBox]; BoundingBox: TYPE = QuadTree.BoundingBox; <> LeastCommonBoundingBox: PROC [a, b: BoundingBox] RETURNS [c: BoundingBox]; BrowserHandle: TYPE = REF BrowserHandleRec; BrowserHandleRec: TYPE; Create: PROC [size: BoundingBox, selectionDistance: REAL, icon: ViewerClasses.IconFlavor, caption: Rope.ROPE, commonData: REF ANY, Destroy: DestroyProc ¬ NIL] RETURNS [browser: BrowserHandle]; DestroyProc: TYPE = PROC [commonData: REF ANY]; AddItem: PROC [browser: BrowserHandle, item: Item, paint: BOOL ¬ FALSE]; RepaintBrowser: PROC [browser: BrowserHandle]; <> SelectItem: PROC [browser: BrowserHandle, item: Item]; <> BlinkSelections: PROC [browser: BrowserHandle, times: INT ¬ 3, delayMSecs: INT ¬ 1000]; <> ClearAllSelections: PROC [browser: BrowserHandle]; CenterSelections: PROC [browser: BrowserHandle, margin: Vector.VEC, tolerance: Vector.VEC, force: BOOLEAN ¬ FALSE] RETURNS [moved: BOOLEAN]; <> CenterEverything: PROC [browser: BrowserHandle]; SetMessageWindow: PROC [browser: BrowserHandle, contents: Rope.ROPE, times: INT ¬ 0, delayMSecs: INT ¬ 1000]; < 0 blinks the message window.>> END.