//
// Label.cs: Label control
//
// Authors:
// Miguel de Icaza (miguel@gnome.org)
//
using System;
using NStack;
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 ()
{
SetInitialProperties ();
}
///
public Label (Rect frame, bool autosize = false) : base (frame)
{
SetInitialProperties (autosize);
}
///
public Label (ustring text, bool autosize = true) : base (text)
{
SetInitialProperties (autosize);
}
///
public Label (Rect rect, ustring text, bool autosize = false) : base (rect, text)
{
SetInitialProperties (autosize);
}
///
public Label (int x, int y, ustring text, bool autosize = true) : base (x, y, text)
{
SetInitialProperties (autosize);
}
///
public Label (ustring text, TextDirection direction, bool autosize = true)
: base (text, direction)
{
SetInitialProperties (autosize);
}
void SetInitialProperties (bool autosize = true)
{
Height = 1;
AutoSize = autosize;
//HotKeySpecifier = new Rune ('_');
//if (HotKey != Key.Null) {
// AddKeyBinding (Key.Space | HotKey, Command.Accept);
//}
}
///
/// Clicked , raised 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;
///
/// Method invoked when a mouse event is generated
///
///
/// true, if the event was handled, false otherwise.
public override bool OnMouseEvent (MouseEvent mouseEvent)
{
MouseEventEventArgs args = new MouseEventEventArgs (mouseEvent);
if (OnMouseClick (args))
return true;
if (MouseEvent (mouseEvent))
return true;
if (mouseEvent.Flags == MouseFlags.Button1Clicked) {
if (!HasFocus && SuperView != null) {
if (!SuperView.HasFocus) {
SuperView.SetFocus ();
}
SetFocus ();
SetNeedsDisplay ();
}
OnClicked ();
return true;
}
return false;
}
///
public override bool OnEnter (View view)
{
Application.Driver.SetCursorVisibility (CursorVisibility.Invisible);
return base.OnEnter (view);
}
///
public override bool ProcessHotKey (KeyEvent ke)
{
if (ke.Key == (Key.AltMask | HotKey)) {
if (!HasFocus) {
SetFocus ();
}
OnClicked ();
return true;
}
return base.ProcessHotKey (ke);
}
///
/// Virtual method to invoke the event.
///
public virtual void OnClicked ()
{
Clicked?.Invoke (this, EventArgs.Empty);
}
}
}