ui/src/split/MenuBtnVBT.m3


Copyright (C) 1994, Digital Equipment Corp.
 by Steve Glassman, Mark Manasse and Greg Nelson           
<*PRAGMA LL*>

MODULE MenuBtnVBT;

IMPORT VBT, Filter, ButtonVBT, BtnVBTClass, TextVBT;

FROM VBT IMPORT ClickType;

REVEAL
  T = ButtonVBT.T BRANDED OBJECT
  OVERRIDES
    mouse := Mouse;
    init := Be
  END;

PROCEDURE Be(v: T; ch: VBT.T; p: ButtonVBT.Proc;
  ref: REFANY := NIL): ButtonVBT.T =
  BEGIN
    EVAL ButtonVBT.T.init(v, ch, p, ref);
    v.armed := TRUE;
    RETURN v
  END Be;

PROCEDURE New(
    ch: VBT.T;
    action: ButtonVBT.Proc;
    ref: REFANY := NIL): T RAISES {} =
  BEGIN
    RETURN Be(NEW(T), ch, action, ref)
  END New;

PROCEDURE Mouse(v: T; READONLY cd: VBT.MouseRec) RAISES {} =
  BEGIN
    Filter.T.mouse(v, cd);
    IF cd.clickType # ClickType.FirstDown THEN
      IF (cd.clickType = ClickType.LastUp) AND NOT cd.cp.gone
      THEN
        IF NOT v.ready THEN v.pre() END;
        v.action(v, cd);
        v.post()
      ELSIF v.ready THEN
        v.cancel()
      END;
      v.ready := FALSE
    END
  END Mouse;

PROCEDURE TextItem(name: TEXT;
  action: ButtonVBT.Proc;
  ref: REFANY := NIL): T RAISES {} =
  BEGIN
    RETURN
    New(TextVBT.New(name, 0.0, 0.5, 3.0, 0.5),
        action := action,
        ref := ref)
  END TextItem;

BEGIN
END MenuBtnVBT.