Provided by: ivtools-dev_1.2.11a1-2_amd64 bug


       Control, ControlState - select and execute an action


       #include <InterViews/control.h>


       A control is a monoscene that allows an action to be selected and executed.  The component
       of a control determines the appearance associated with the control.  A control state is  a
       subject  that  coordinates  a  group  of  related  controls.  The control state contains a
       pointer to the currently selected control (if any).

       Controls are useful for grabbing input  and  moving  over  potentially  selectable  items.
       Examples  of  controls  include  popup  menus,  pull-down  menus,  and  menu items.  It is
       generally not necessary to call functions directly on a control.


              Construct a new control with the given interactor as the component.

              Destruct a control.  Because a control is a monoscene, deleting it implies deleting
              its component interactor.

       ControlState* State()
       void SetState(ControlState*)
              Get or set the control state associated with a control.

       virtual void Handle(Event&)
              Controls  are  initially  inactive.  A DownEvent causes a control to become active.
              If an active control receives an EnterEvent, it will set the current  selection  to
              itself.   If  an  active  control  receives  a  LeaveEvent, it will set the current
              selection to nil.

       virtual void Enable(boolean)
       boolean Enabled()
              Depending on the argument, Enable enables (true) or disables (false)  the  control.
              Control  subclasses  can  check  whether  the  control  is enabled with the Enabled
              operation and then take whatever action is appropriate.

       virtual void Select()
              Highlight the control and call the protected virtual functions Open and  Grab  (see

       virtual void Unselect()
              Call the protected virtual function Close and then unhighlight the control.

       virtual void Do()
              Implement  a  selected  action.  When a control sees an UpEvent, it calls Do on the
              current selection.

       Control* ParentControl()
       Control* RootControl()
              The control hierarchy does not necessarily correspond to the interactor  hierarchy.
              These  operations  return  the  control's parent control or the root of the control
              hierarchy, if any, as defined by control subclasses.


       virtual void Down()
       virtual void Up()
              Down and Up are called when the  control  receives  a  DownEvent  and  an  UpEvent,
              respectively.   By  default,  Down  activates  the control if it is enabled, and Up
              deactivates the control and calls Do on the current selection.

       virtual void Enter()
       virtual void Leave()
              Enter makes the control the current selection if it is enabled  and  active,  while
              Leave nullifies the current selection if the control is enabled and active.

       virtual void Open()
       virtual void Close()
              The  base  class Open and Close do nothing, but subclasses may insert and remove an
              interactor, such as a pull-down menu.

       virtual void Grab()
              Grab reads input and only passes through an  event  if  its  target  is  an  active

       virtual void Skip()
              Skip reads and discards input events until it reads an event targeted for a control
              that is currently grabbing input, as indicated by IsGrabbing (see below).

       virtual void Busy()
       virtual void Done()
              The Up operation calls Busy just before it calls Do on the  target,  and  it  calls
              Done  immediately  afterwards.   These operations do nothing by default; subclasses
              may reimplement them to start and stop some indication that the  control  is  doing
              its job.

       virtual boolean IsGrabbing(Interactor*)
              IsGrabbing returns true if the given interactor is grabbing control.

       void Reparent(Control* target, Control* parent)
              Set  target's  parent  to parent.  Controls that compose child controls should call
              this operation on their children.


       Event(3I), Interactor(3I), Menu(3I), Scene(3I)