/// <summary> /// Removes the specified input event listener so that it no longer /// receives input events from this node. /// </summary> /// <param name="listener">The input listener to remove.</param> public virtual void RemoveInputEventListener(PInputEventListener listener) { KeyDown -= new PInputEventHandler(listener.OnKeyDown); KeyPress -= new PInputEventHandler(listener.OnKeyPress); KeyUp -= new PInputEventHandler(listener.OnKeyUp); Click -= new PInputEventHandler(listener.OnClick); DoubleClick -= new PInputEventHandler(listener.OnDoubleClick); MouseDown -= new PInputEventHandler(listener.OnMouseDown); MouseUp -= new PInputEventHandler(listener.OnMouseUp); MouseMove -= new PInputEventHandler(listener.OnMouseMove); MouseDrag -= new PInputEventHandler(listener.OnMouseDrag); MouseEnter -= new PInputEventHandler(listener.OnMouseEnter); MouseLeave -= new PInputEventHandler(listener.OnMouseLeave); MouseWheel -= new PInputEventHandler(listener.OnMouseWheel); DragEnter -= new PInputEventHandler(listener.OnDragEnter); DragLeave -= new PInputEventHandler(listener.OnDragLeave); DragOver -= new PInputEventHandler(listener.OnDragOver); DragDrop -= new PInputEventHandler(listener.OnDragDrop); GotFocus -= new PInputEventHandler(listener.OnGotFocus); LostFocus -= new PInputEventHandler(listener.OnLostFocus); }
/// <summary> /// Raise the given input event. /// </summary> /// <param name="e">The arguments for this input event.</param> /// <param name="handler">The delegate to dispatch this event to.</param> /// <remarks> /// If an event has been set as handled, and the delegate is not a member of a listener /// class, then the event is consumed. If the delegate is a member of a listener class /// the decision of consumption is left up to the filter associated with that class. /// </remarks> protected virtual void HandleEvent(PInputEventArgs e, PInputEventHandler handler) { if (handler != null) { Delegate[] list = handler.GetInvocationList(); for (int i = list.Length - 1; i >= 0; i--) { Delegate each = list[i]; if (each.Target is PInputEventListener) { PInputEventListener listener = (PInputEventListener)each.Target; if (listener.DoesAcceptEvent(e)) { // The source is the node from which the event originated, not the // picked node. ((PInputEventHandler)each)(this, e); } } else if (!e.Handled) { // The source is the node from which the event originated, not the // picked node. ((PInputEventHandler)each)(this, e); } } } }
/// <summary> /// Adds the specified input event listener to receive input events /// from this node. /// </summary> /// <param name="listener">The new input listener</param> public virtual void AddInputEventListener(PInputEventListener listener) { KeyDown += new PInputEventHandler(listener.OnKeyDown); KeyPress += new PInputEventHandler(listener.OnKeyPress); KeyUp += new PInputEventHandler(listener.OnKeyUp); Click += new PInputEventHandler(listener.OnClick); DoubleClick += new PInputEventHandler(listener.OnDoubleClick); MouseDown += new PInputEventHandler(listener.OnMouseDown); MouseUp += new PInputEventHandler(listener.OnMouseUp); MouseMove += new PInputEventHandler(listener.OnMouseMove); MouseDrag += new PInputEventHandler(listener.OnMouseDrag); MouseEnter += new PInputEventHandler(listener.OnMouseEnter); MouseLeave += new PInputEventHandler(listener.OnMouseLeave); MouseWheel += new PInputEventHandler(listener.OnMouseWheel); DragEnter += new PInputEventHandler(listener.OnDragEnter); DragLeave += new PInputEventHandler(listener.OnDragLeave); DragOver += new PInputEventHandler(listener.OnDragOver); DragDrop += new PInputEventHandler(listener.OnDragDrop); GotFocus += new PInputEventHandler(listener.OnGotFocus); LostFocus += new PInputEventHandler(listener.OnLostFocus); }