123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290 |
- using System.Globalization;
- using System;
- using Terminal.Gui;
- using System.Linq;
- using NStack;
- using Terminal.Gui.Configuration;
- namespace UICatalog.Scenarios {
- [ScenarioMetadata (Name: "Frames Demo", Description: "Demonstrates Margin, Border, and Padding on Views.")]
- [ScenarioCategory ("Layout")]
- [ScenarioCategory ("Borders")]
- public class Frames : Scenario {
- public class ThicknessEditor : View {
- private Thickness thickness;
- public Thickness Thickness {
- get => thickness;
- set {
- thickness = value;
- ThicknessChanged?.Invoke (this, new ThicknessEventArgs () { Thickness = Thickness });
- }
- }
- public event EventHandler<ThicknessEventArgs> ThicknessChanged;
- public ThicknessEditor ()
- {
- Margin.Thickness = new Thickness (1);
- BorderFrame.Thickness = new Thickness (1);
- }
- public override void BeginInit ()
- {
- base.BeginInit ();
- var topEdit = new TextField ("") {
- X = Pos.Center (),
- Y = 0,
- Width = 5
- };
- topEdit.TextChanging += (e) => {
- try {
- Thickness = new Thickness (Thickness.Left,
- int.Parse (e.NewText.ToString ()), Thickness.Right,
- Thickness.Bottom);
- } catch {
- if (!e.NewText.IsEmpty) {
- e.Cancel = true;
- }
- }
- };
- topEdit.Text = $"{Thickness.Top}";
- Add (topEdit);
- var leftEdit = new TextField ("") {
- X = 0,
- Y = Pos.Bottom (topEdit),
- Width = 5
- };
- leftEdit.TextChanging += (e) => {
- try {
- Thickness = new Thickness (int.Parse (e.NewText.ToString ()),
- Thickness.Top, Thickness.Right,
- Thickness.Bottom);
- } catch {
- if (!e.NewText.IsEmpty) {
- e.Cancel = true;
- }
- }
- };
- leftEdit.Text = $"{Thickness.Left}";
- Add (leftEdit);
- var rightEdit = new TextField ("") {
- X = Pos.Right (topEdit) + 1,
- Y = Pos.Bottom (topEdit),
- Width = 5
- };
- rightEdit.TextChanging += (e) => {
- try {
- Thickness = new Thickness (Thickness.Left,
- Thickness.Top, int.Parse (e.NewText.ToString ()),
- Thickness.Bottom);
- } catch {
- if (!e.NewText.IsEmpty) {
- e.Cancel = true;
- }
- }
- };
- rightEdit.Text = $"{Thickness.Right}";
- Add (rightEdit);
- var bottomEdit = new TextField ("") {
- X = Pos.Center (),
- Y = Pos.Bottom (leftEdit),
- Width = 5
- };
- bottomEdit.TextChanging += (e) => {
- try {
- Thickness = new Thickness (Thickness.Left,
- Thickness.Top, Thickness.Right,
- int.Parse (e.NewText.ToString ()));
- } catch {
- if (!e.NewText.IsEmpty) {
- e.Cancel = true;
- }
- }
- };
- bottomEdit.Text = $"{Thickness.Bottom}";
- Add (bottomEdit);
- var copyTop = new Button ("Copy Top") {
- X = Pos.Center (),
- Y = Pos.AnchorEnd (1)
- };
- copyTop.Clicked += () => {
- Thickness = new Thickness (Thickness.Top);
- if (topEdit.Text.IsEmpty) {
- topEdit.Text = "0";
- }
- bottomEdit.Text = leftEdit.Text = rightEdit.Text = topEdit.Text;
- };
- Add (copyTop);
- LayoutSubviews ();
- Height = Margin.Thickness.Vertical + BorderFrame.Thickness.Vertical + Padding.Thickness.Vertical + 4;
- Width = 20;
- }
- }
- public class FramesEditor : Window {
- public FramesEditor (NStack.ustring title, View viewToEdit)
- {
- viewToEdit.Margin.ColorScheme = Colors.ColorSchemes ["Toplevel"];
- var marginEditor = new ThicknessEditor () {
- X = 20,
- Y = 0,
- Title = "Margin",
- Thickness = viewToEdit.Margin.Thickness,
- };
- marginEditor.ThicknessChanged += (s, a) => {
- viewToEdit.Margin.Thickness = a.Thickness;
- };
- Add (marginEditor);
- viewToEdit.BorderFrame.ColorScheme = Colors.ColorSchemes ["Base"];
- var borderEditor = new ThicknessEditor () {
- X = Pos.Right(marginEditor),
- Y = 0,
- Title = "Border",
- Thickness = viewToEdit.BorderFrame.Thickness,
- };
- borderEditor.ThicknessChanged += (s, a) => {
- viewToEdit.BorderFrame.Thickness = a.Thickness;
- };
- Add (borderEditor);
- viewToEdit.Padding.ColorScheme = Colors.ColorSchemes ["Error"];
- var paddingEditor = new ThicknessEditor () {
- X = Pos.Right (borderEditor),
- Y = 0,
- Title = "Padding",
- Thickness = viewToEdit.Padding.Thickness,
- };
- paddingEditor.ThicknessChanged += (s, a) => {
- viewToEdit.Padding.Thickness = a.Thickness;
- };
- Add (paddingEditor);
- viewToEdit.Y = Pos.Center () + 4;
- Add (new Label ("BorderStyle:"));
- var borderStyleEnum = Enum.GetValues (typeof (BorderStyle)).Cast<BorderStyle> ().ToList ();
- var rbBorderStyle = new RadioGroup (borderStyleEnum.Select (
- e => NStack.ustring.Make (e.ToString ())).ToArray ()) {
- X = 2,
- Y = 1,
- SelectedItem = (int)viewToEdit.BorderFrame.BorderStyle
- };
- Add (rbBorderStyle);
- //rbBorderStyle.SelectedItemChanged += (e) => {
- // viewToEdit.BorderFrame.BorderStyle = (BorderStyle)e.SelectedItem;
- // viewToEdit.SetNeedsDisplay ();
- //};
- //Add (new Label ("Background:") {
- // Y = 5
- //});
- //var colorEnum = Enum.GetValues (typeof (Color)).Cast<Color> ().ToList ();
- //var rbBackground = new RadioGroup (colorEnum.Select (
- // e => NStack.ustring.Make (e.ToString ())).ToArray ()) {
- // X = 2,
- // Y = 6,
- // SelectedItem = (int)viewToEdit.Border.BackgroundColor
- //};
- //rbBackground.SelectedItemChanged += (e) => {
- // if (viewToEdit.Border != null) {
- // viewToEdit.Border.BackgroundColor = (Color)e.SelectedItem;
- // }
- //};
- //Add (rbBackground);
- //Add (new Label ("BorderBrush:") {
- // X = Pos.AnchorEnd (20),
- // Y = 5
- //});
- //var rbBorderBrush = new RadioGroup (colorEnum.Select (
- // e => NStack.ustring.Make (e.ToString ())).ToArray ()) {
- // X = Pos.AnchorEnd (18),
- // Y = 6,
- // SelectedItem = (int)viewToEdit.Border.ForgroundColor
- //};
- //rbBorderBrush.SelectedItemChanged += (e) => {
- // if (viewToEdit.Border != null) {
- // viewToEdit.Border.ForgroundColor = (Color)e.SelectedItem;
- // }
- //};
- //Add (rbBorderBrush);
- viewToEdit.X = Pos.Center ();
- viewToEdit.Y = Pos.Bottom (marginEditor);
- viewToEdit.Width = 50;
- viewToEdit.Height = 20;
- Add (viewToEdit);
- LayoutSubviews ();
- Title = title;
- }
- }
- public override void Init ()
- {
- Application.Init ();
- ConfigurationManager.Themes.Theme = Theme;
- ConfigurationManager.Apply ();
- Application.Top.ColorScheme = Colors.ColorSchemes [TopLevelColorScheme];
- var view = new Window ();
- var tf1 = new TextField ("1234567890") { Width = 10 };
- var button = new Button ("Press me!") {
- X = Pos.Center (),
- Y = Pos.Center (),
- };
- button.Clicked += () => MessageBox.Query (20, 7, "Hi", $"I'm a {view.GetType().Name}?", "Yes", "No");
- var label = new Label ($"I'm a {view.GetType ().Name}") {
- X = Pos.Center (),
- Y = Pos.Center () - 1,
- };
- var tf2 = new TextField ("1234567890") {
- X = Pos.AnchorEnd (10),
- Y = Pos.AnchorEnd (1),
- Width = 10
- };
- var tv = new TextView () {
- Y = Pos.AnchorEnd (2),
- Width = 10,
- Height = Dim.Fill (),
- Text = "1234567890"
- };
- view.Margin.Thickness = new Thickness (3);
- view.Margin.ColorScheme = Colors.ColorSchemes ["Dialog"];
- view.Add (tf1, button, label, tf2, tv);
- view.LayoutComplete += (a) => view.Title = view.ToString ();
- var editor = new FramesEditor (
- $"{Application.QuitKey} to Quit - Scenario: {GetName ()}",
- view);
- Application.Run (editor);
- Application.Shutdown ();
- }
- public override void Run ()
- {
- }
- }
- }
|