#nullable enable
using System;
namespace UICatalog.Scenarios;
///
/// Provides an editor UI for the Margin, Border, and Padding of a View.
///
public class AdornmentsEditor : EditorBase
{
public AdornmentsEditor ()
{
Title = "AdornmentsEditor";
TabStop = TabBehavior.TabGroup;
ExpanderButton!.Orientation = Orientation.Horizontal;
Initialized += AdornmentsEditor_Initialized;
SchemeName = "Dialog";
}
public MarginEditor? MarginEditor { get; set; }
public BorderEditor? BorderEditor { get; private set; }
public PaddingEditor? PaddingEditor { get; private set; }
///
protected override void OnViewToEditChanged ()
{
//Enabled = ViewToEdit is not Adornment;
if (MarginEditor is { })
{
MarginEditor.AdornmentToEdit = ViewToEdit?.Margin ?? null;
}
if (BorderEditor is { })
{
BorderEditor.AdornmentToEdit = ViewToEdit?.Border ?? null;
}
if (PaddingEditor is { })
{
PaddingEditor.AdornmentToEdit = ViewToEdit?.Padding ?? null;
}
if (Padding is { })
{
Padding.Text = $"View: {GetIdentifyingString (ViewToEdit)}";
}
}
private string GetIdentifyingString (View? view)
{
if (view is null)
{
return "null";
}
if (!string.IsNullOrEmpty (view.Id))
{
return view.Id;
}
if (!string.IsNullOrEmpty (view.Title))
{
return view.Title;
}
if (!string.IsNullOrEmpty (view.Text))
{
return view.Text;
}
return view.GetType ().Name;
}
public bool ShowViewIdentifier
{
get => Padding is { } && Padding.Thickness != Thickness.Empty;
set
{
if (Padding is null)
{
return;
}
Padding.Thickness = value ? new (0, 2, 0, 0) : Thickness.Empty;
}
}
private void AdornmentsEditor_Initialized (object? sender, EventArgs e)
{
MarginEditor = new ()
{
X = -1,
Y = 0,
SuperViewRendersLineCanvas = true,
BorderStyle = LineStyle.Single
};
MarginEditor.Border!.Thickness = MarginEditor.Border!.Thickness with { Bottom = 0 };
Add (MarginEditor);
BorderEditor = new ()
{
X = Pos.Left (MarginEditor),
Y = Pos.Bottom (MarginEditor),
SuperViewRendersLineCanvas = true,
BorderStyle = LineStyle.Single
};
BorderEditor.Border!.Thickness = BorderEditor.Border!.Thickness with { Bottom = 0 };
Add (BorderEditor);
PaddingEditor = new ()
{
X = Pos.Left (BorderEditor),
Y = Pos.Bottom (BorderEditor),
SuperViewRendersLineCanvas = true,
BorderStyle = LineStyle.Single
};
PaddingEditor.Border!.Thickness = PaddingEditor.Border!.Thickness with { Bottom = 0 };
Add (PaddingEditor);
Width = Dim.Auto (maximumContentDim: Dim.Func (_ => MarginEditor.Frame.Width - 2));
MarginEditor.ExpanderButton!.Collapsed = true;
BorderEditor.ExpanderButton!.Collapsed = true;
PaddingEditor.ExpanderButton!.Collapsed = true;
MarginEditor.AdornmentToEdit = ViewToEdit?.Margin ?? null;
BorderEditor.AdornmentToEdit = ViewToEdit?.Border ?? null;
PaddingEditor.AdornmentToEdit = ViewToEdit?.Padding ?? null;
}
}