#nullable enable
using System.ComponentModel;
namespace Terminal.Gui;
///
/// Specifies the event arguments for . This is a higher-level construct than
/// the wrapped class and is used for the events defined on
/// and subclasses
/// of View (e.g. and ).
///
public class MouseEventArgs : HandledEventArgs
{
///
/// Flags indicating the state of the mouse buttons and the type of event that occurred.
///
public MouseFlags Flags { get; set; }
///
/// The screen-relative mouse position.
///
public Point ScreenPosition { get; set; }
/// The deepest View who's contains .
public View? View { get; set; }
///
/// The position of the mouse in 's Viewport-relative coordinates. Only valid if
/// is set.
///
public Point Position { get; set; }
///
/// Gets whether contains any of the button pressed related flags.
///
public bool IsPressed => Flags.HasFlag (MouseFlags.Button1Pressed)
|| Flags.HasFlag (MouseFlags.Button2Pressed)
|| Flags.HasFlag (MouseFlags.Button3Pressed)
|| Flags.HasFlag (MouseFlags.Button4Pressed);
///
/// Gets whether contains any of the button released related flags.
///
public bool IsReleased => Flags.HasFlag (MouseFlags.Button1Released)
|| Flags.HasFlag (MouseFlags.Button2Released)
|| Flags.HasFlag (MouseFlags.Button3Released)
|| Flags.HasFlag (MouseFlags.Button4Released);
///
/// Gets whether contains any of the single-clicked related flags.
///
public bool IsSingleClicked => Flags.HasFlag (MouseFlags.Button1Clicked)
|| Flags.HasFlag (MouseFlags.Button2Clicked)
|| Flags.HasFlag (MouseFlags.Button3Clicked)
|| Flags.HasFlag (MouseFlags.Button4Clicked);
///
/// Gets whether contains any of the double-clicked related flags.
///
public bool IsDoubleClicked => Flags.HasFlag (MouseFlags.Button1DoubleClicked)
|| Flags.HasFlag (MouseFlags.Button2DoubleClicked)
|| Flags.HasFlag (MouseFlags.Button3DoubleClicked)
|| Flags.HasFlag (MouseFlags.Button4DoubleClicked);
///
/// Gets whether contains any of the triple-clicked related flags.
///
public bool IsTripleClicked => Flags.HasFlag (MouseFlags.Button1TripleClicked)
|| Flags.HasFlag (MouseFlags.Button2TripleClicked)
|| Flags.HasFlag (MouseFlags.Button3TripleClicked)
|| Flags.HasFlag (MouseFlags.Button4TripleClicked);
///
/// Gets whether contains any of the mouse button clicked related flags.
///
public bool IsSingleDoubleOrTripleClicked =>
Flags.HasFlag (MouseFlags.Button1Clicked)
|| Flags.HasFlag (MouseFlags.Button2Clicked)
|| Flags.HasFlag (MouseFlags.Button3Clicked)
|| Flags.HasFlag (MouseFlags.Button4Clicked)
|| Flags.HasFlag (MouseFlags.Button1DoubleClicked)
|| Flags.HasFlag (MouseFlags.Button2DoubleClicked)
|| Flags.HasFlag (MouseFlags.Button3DoubleClicked)
|| Flags.HasFlag (MouseFlags.Button4DoubleClicked)
|| Flags.HasFlag (MouseFlags.Button1TripleClicked)
|| Flags.HasFlag (MouseFlags.Button2TripleClicked)
|| Flags.HasFlag (MouseFlags.Button3TripleClicked)
|| Flags.HasFlag (MouseFlags.Button4TripleClicked);
///
/// Gets whether contains any of the mouse wheel related flags.
///
public bool IsWheel => Flags.HasFlag (MouseFlags.WheeledDown)
|| Flags.HasFlag (MouseFlags.WheeledUp)
|| Flags.HasFlag (MouseFlags.WheeledLeft)
|| Flags.HasFlag (MouseFlags.WheeledRight);
/// Returns a that represents the current .
/// A that represents the current .
public override string ToString () { return $"({ScreenPosition}):{Flags}:{View?.Id}:{Position}"; }
}