namespace Terminal.Gui;
///
/// The Label displays a string at a given position and supports multiple lines separated by
/// newline characters. Multi-line Labels support word wrap.
///
///
/// The view is functionality identical to and is included for API
/// backwards compatibility.
///
public class Label : View
{
///
public Label ()
{
Height = 1;
AutoSize = true;
// Things this view knows how to do
AddCommand (
Command.Default,
() =>
{
// BUGBUG: This is a hack, but it does work.
bool can = CanFocus;
CanFocus = true;
SetFocus ();
SuperView.FocusNext ();
CanFocus = can;
return true;
}
);
AddCommand (Command.Accept, () => AcceptKey ());
// Default key bindings for this view
KeyBindings.Add (KeyCode.Space, Command.Accept);
}
///
/// The event fired when the user clicks the primary mouse button within the Bounds of this or
/// if the user presses the action key while this view is focused. (TODO: IsDefault)
///
///
/// Client code can hook up to this event, it is raised when the button is activated either with the mouse or the
/// keyboard.
///
public event EventHandler Clicked;
/// Virtual method to invoke the event.
public virtual void OnClicked () { Clicked?.Invoke (this, EventArgs.Empty); }
///
public override bool OnEnter (View view)
{
Application.Driver.SetCursorVisibility (CursorVisibility.Invisible);
return base.OnEnter (view);
}
/// Method invoked when a mouse event is generated
///
/// true, if the event was handled, false otherwise.
public override bool OnMouseEvent (MouseEvent mouseEvent)
{
var args = new MouseEventEventArgs (mouseEvent);
if (OnMouseClick (args))
{
return true;
}
if (MouseEvent (mouseEvent))
{
return true;
}
if (mouseEvent.Flags == MouseFlags.Button1Clicked)
{
if (!HasFocus && SuperView is { })
{
if (!SuperView.HasFocus)
{
SuperView.SetFocus ();
}
SetFocus ();
SetNeedsDisplay ();
}
OnClicked ();
return true;
}
return false;
}
private bool AcceptKey ()
{
if (!HasFocus)
{
SetFocus ();
}
OnClicked ();
return true;
}
}