using System;
using System.Linq;
using System.Text.Json.Serialization;
using NStack;
using static Terminal.Gui.ConfigurationManager;
namespace Terminal.Gui {
///
/// The FrameView is a container frame that draws a frame around the contents. It is similar to
/// a GroupBox in Windows.
///
public class FrameView : View {
///
/// Initializes a new instance of the class using layout.
///
/// Frame.
/// Title.
/// Views.
public FrameView (Rect frame, ustring title = null, View [] views = null) : base (frame)
{
SetInitialProperties (frame, title, views);
}
///
/// Initializes a new instance of the class using layout.
///
/// Title.
public FrameView (ustring title)
{
SetInitialProperties (Rect.Empty, title, null);
}
///
/// Initializes a new instance of the class using layout.
///
public FrameView () : this (title: string.Empty) {
}
///
/// The default for 's border. The default is .
///
///
/// This property can be set in a Theme to change the default for all s.
///
[SerializableConfigurationProperty (Scope = typeof (ThemeScope)), JsonConverter (typeof (JsonStringEnumConverter))]
public static LineStyle DefaultBorderStyle { get; set; } = LineStyle.Single;
void SetInitialProperties (Rect frame, ustring title, View [] views = null)
{
this.Title = title;
Border.Thickness = new Thickness (1);
Border.BorderStyle = DefaultBorderStyle;
//Border.ColorScheme = ColorScheme;
Border.Data = "Border";
}
///
public override bool OnEnter (View view)
{
if (Subviews.Count == 0 || !Subviews.Any (subview => subview.CanFocus)) {
Application.Driver?.SetCursorVisibility (CursorVisibility.Invisible);
}
return base.OnEnter (view);
}
}
}