Copyright (C) 1993, Digital Equipment Corporation 
 All rights reserved. 
 See the file COPYRIGHT for a full description. 
 Last modified on Wed Jul  6 17:02:59 PDT 1994 by bharat 
 modified on Fri Jul 2 16:59:25 PDT 1993 by mhb 
A ZHandleVBT is a child of a ZSplit and it can reposition and resize its child.


IMPORT  FormsVBT, Rect, VBT, ZSplit;

  <* SUBTYPE T <: MultiFilter.T *>
  T <: Public;
  Public = ZSplit.T OBJECT
             selection: Selection;
             <* LL <= *>
             init     (ch: VBT.T; selection: Selection := NIL): T;
             on       (singlemode: BOOLEAN);
             off      ();
             getchild (): VBT.T;
             getDomain () : Rect.T;
             replaceChild(fv : VBT.T);
  (* The call "v.init(ch)" initialize "v" as a "ZHandleVBT".  Und so
     weiter. *)
  (* If a selection parameter is given it should have already been
     initialized *)
  (* v.on(sm) turns the handle on and sets feedback style depending on
     sm *)
  (* turns the handle off -- note these methods are used by the *)
  (* Selection object to implement the protocol *)

  Selection <: PublicSelect;

  PublicSelect =
      init (size: CARDINAL; singlemode: BOOLEAN; dialog:FormsVBT.T);

      (* This initializes a selection table of size size *)
      (* ZHandleVBTs are given a Selection parameter which determines
         the *)
      (* Selection Protocol.  If none is defined an arbitray number of
         objects can *)
      (* be selected *)

      on (v: T; singlemode: BOOLEAN);
      (* This is called by ZHandleVBT.Ts when they are turned ON *)

      off (v: T; singlemode: BOOLEAN);
      (* This is called by ZHandleVBT.Ts when they are turned OFF *)

      (* There are two modes - single-mode and multiple-mode *)
      (* You may choose to override these methods to enforce a different *)
      (* protocol.  The built in protocol is as follows :- *)

      (* ZHandleVBTs call the on/off method of their associated
         Selection *)
      (* if one is defined when they are turned on or off *)
      (* the Selection object calls the on/off methods *)
      (* of ZHandleVBTs in its purview *)
      (* if none is defined they just turn on/off in single mode *)

      (* 1.  ON in single mode : Flushes selection, adds current vbt *)
      (* 2.  ON in multiple mode : Flushes selection except for siblings&
      (* 3.  OFF in single mode : Flushes selection *)
      (* 4.  OFF in multiple mode : Removes only current element *)

      (* The default feedback is Black in single mode, Gray in multiple
         Mode *)

      getSelectionSize (): CARDINAL;
      getSelection     (indx: CARDINAL): T;
      inSingleMode     (): BOOLEAN;

      alignSelectedObjects(kind: TEXT; alignmentStyle: TEXT; dontStretch:= FALSE);
      shapeSelectedObjects(kind: TEXT;  shapingStyle: TEXT);
      distributeSelectedObjects(mode: TEXT);

PROCEDURE NewSelection(n : T; s : Selection);
changes the selection of a ZHandleVBT