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. /// The . public FrameView (Rect frame, ustring title = null, View [] views = null, Border border = null) : base (frame) { SetInitialProperties (frame, title, views, border); } /// /// Initializes a new instance of the class using layout. /// /// Title. /// The . public FrameView (ustring title, Border border = null) { SetInitialProperties (Rect.Empty, title, null, border); } /// /// Initializes a new instance of the class using layout. /// public FrameView () : this (title: string.Empty) { } /// /// The default for . 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 BorderStyle DefaultBorderStyle { get; set; } = BorderStyle.Single; void SetInitialProperties (Rect frame, ustring title, View [] views = null, Border border = null) { this.Title = title; if (border == null) { Border = new Border () { BorderStyle = DefaultBorderStyle, //DrawMarginFrame = true //Title = title }; } else { Border = border; //if (ustring.IsNullOrEmpty (border.Title)) { // border.Title = title; //} } BorderFrame.Thickness = new Thickness (1); BorderFrame.BorderStyle = Border.BorderStyle; //BorderFrame.ColorScheme = ColorScheme; BorderFrame.Data = "BorderFrame"; } /// public override bool OnEnter (View view) { if (Subviews.Count == 0 || !Subviews.Any (subview => subview.CanFocus)) { Application.Driver?.SetCursorVisibility (CursorVisibility.Invisible); } return base.OnEnter (view); } } }