using System.Reflection.Metadata.Ecma335;
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.HotKey, FocusNext);
// Default key bindings for this view
KeyBindings.Add (Key.Space, Command.Accept);
TitleChanged += Label_TitleChanged;
}
private void Label_TitleChanged (object sender, StateEventArgs e)
{
base.Text = e.NewValue;
TextFormatter.HotKeySpecifier = HotKeySpecifier;
}
///
public override string Text
{
get => base.Title;
set => base.Text = base.Title = value;
}
///
public override Rune HotKeySpecifier
{
get => base.HotKeySpecifier;
set => TextFormatter.HotKeySpecifier = base.HotKeySpecifier = value;
}
private new bool? FocusNext ()
{
var me = SuperView?.Subviews.IndexOf (this) ?? -1;
if (me != -1 && me < SuperView?.Subviews.Count - 1)
{
SuperView?.Subviews [me + 1].SetFocus ();
}
return true;
}
///
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 (!CanFocus)
{
FocusNext ();
}
if (!HasFocus && SuperView is { })
{
if (!SuperView.HasFocus)
{
SuperView.SetFocus ();
}
SetFocus ();
SetNeedsDisplay ();
}
OnAccept ();
return true;
}
return false;
}
}