<*PRAGMA LL*>An
HVBar.T is an adjustable bar that allows a user to
   adjust the division of space between the children of an HVSplit.
   An HVBar must be a child of an HVSplit.  When the user pushes
   a mouse button over the bar, the cursor changes shape and the outline
   of the bar is highlighted.  The highlight follows the cursor as long
   as the button is down.  When the button comes up, the bar calls
   HVSplit.Adjust to move the bar to the currently highlighted
   position.  If the user tries to move the bar outside the range of
   positions that are consistent with the size constraints of the
   children of the parent HVSplit, the highlighted bar will not
   follow the cursor.  If the user chords while dragging, then adjusting
   mode is cancelled.
The bar has methods that you can override that are called each time the bar is moved, or continuously during adjustment.
   In order for the bar to highlight correctly, some ancestor of the
   HVSplit on which it is installed must be a HighlightVBT.
   Since Trestle.Install automatically inserts a HighlightVBT
   over top-level windows, you usually don't have to worry about this.
   
INTERFACEThe callHVBar ; IMPORT VBT, PaintOp, Pixmap, TextureVBT; TYPE T <: Public; Public = TextureVBT.T OBJECT METHODS <* LL = VBT.mu *> pre(READONLY cd: VBT.MouseRec); post(READONLY cd: VBT.MouseRec); during(n: INTEGER); <* LL <= VBT.mu *> init(size: REAL := DefaultSize; op: PaintOp.T := PaintOp.BgFg; txt: Pixmap.T := Pixmap.Gray): T END;
v.init(...) initializes v as an HVBar with
   the given properties and returns v.  This includes
   calling  TextureVBT.T.init(v, op, txt).
   The argument size gives the number of millimeters that the bar
   will occupy in the parent HVSplit.
   An adjusting bar b calls b.pre(cd) when it begins adjusting
   in response to a mouse click cd.  It calls b.during(k) each
   time the mouse moves during dragging, where k is the coordinate that
   the lo (i.e., west or north) edge of the bar would move to if
   dragging were stopped at that instant.  Finally, the bar calls
   b.post(cd) when it stops adjusting in response to an upclick
   or chord cd.  The HVSplit will be adjusted (but not redisplayed)
   before b.post(cd) is called.
   The default pre and during methods highlight the position the
   bar would move to if dragging were stopped.  The default post
   method removes the highlighting.  
CONST
  DefaultSize = 2.5;
PROCEDURE New(
    size := DefaultSize;
    op := PaintOp.BgFg;
    txt := Pixmap.Gray): T; <* LL.sup <= VBT.mu *>
New(...)is equivalent toNEW(T).init(...).
END HVBar.