<* PRAGMA LL *> <* PRAGMA SUBTYPE *>A
GuardedBtnVBT protects its child against unintentional mouse
   clicks.  While the guard is displayed, mouse clicks are not
   forwarded.  To remove the guard, click on the button.  The guard is
   restored after the next upclick, chord-cancel, or when the mouse
   leaves the domain of the VBT.
   Typically, a GuardedBtnVBT is placed above a ``dangerous''
   button, like one that terminates an application.  This forces the
   user to click twice to terminate the application---the first time
   to remove the guard, and the second time to invoke the button that
   terminates the application.
   A GuardedBtnVBT is much closer to being a VBTkit switch than a
   Trestle button.  There's a callback method (invoked when the
   guard is removed), and the guard is a multi-filter.  However, the
   client does not provide a feedback; it is hard-wired into the
   GuardedBtnVBT implementation. 
INTERFACEGuardedBtnVBT ; IMPORT ButtonVBT, PaintOp, VBT; TYPE T <: Public; <* SUBTYPE T <: MultiFilter.T *> Public = ButtonVBT.T OBJECT METHODS <* LL <= VBT.mu *> init (ch: VBT.T; colors: PaintOp.ColorScheme := NIL): T; <* LL = VBT.mu *> callback (READONLY cd: VBT.MouseRec); END; END GuardedBtnVBT.