View.Hierarchy.cs -> nullable enable

This commit is contained in:
Tig
2024-08-26 14:18:01 -07:00
parent 1a16f43495
commit 45ccf1d5d5
8 changed files with 26 additions and 27 deletions

View File

@@ -1,3 +1,4 @@
#nullable enable
using System.Diagnostics;
namespace Terminal.Gui;
@@ -5,8 +6,8 @@ namespace Terminal.Gui;
public partial class View // SuperView/SubView hierarchy management (SuperView, SubViews, Add, Remove, etc.)
{
private static readonly IList<View> _empty = new List<View> (0).AsReadOnly ();
private List<View> _subviews; // This is null, and allocated on demand.
private View _superView;
private List<View>? _subviews; // This is null, and allocated on demand.
private View? _superView;
/// <summary>Indicates whether the view was added to <see cref="SuperView"/>.</summary>
public bool IsAdded { get; private set; }
@@ -19,7 +20,7 @@ public partial class View // SuperView/SubView hierarchy management (SuperView,
/// <value>The super view.</value>
public virtual View SuperView
{
get => _superView;
get => _superView!;
set => throw new NotImplementedException ();
}
@@ -42,14 +43,9 @@ public partial class View // SuperView/SubView hierarchy management (SuperView,
/// <returns>The view that was added.</returns>
public virtual View Add (View view)
{
if (view is null)
{
return view;
}
if (_subviews is null)
{
_subviews = new ();
_subviews = [];
}
Debug.WriteLineIf (_subviews.Contains (view), $"BUGBUG: {view} has already been added to {this}.");
@@ -116,11 +112,11 @@ public partial class View // SuperView/SubView hierarchy management (SuperView,
/// <summary>Get the top superview of a given <see cref="View"/>.</summary>
/// <returns>The superview view.</returns>
public View GetTopSuperView (View view = null, View superview = null)
public View? GetTopSuperView (View? view = null, View? superview = null)
{
View top = superview ?? Application.Top;
View? top = superview ?? Application.Top;
for (View v = view?.SuperView ?? this?.SuperView; v != null; v = v.SuperView)
for (View? v = view?.SuperView ?? this?.SuperView; v != null; v = v.SuperView)
{
top = v;
@@ -160,9 +156,12 @@ public partial class View // SuperView/SubView hierarchy management (SuperView,
/// lifecycle to be transferred to the caller; the caller muse call <see cref="Dispose"/>.
/// </para>
/// </remarks>
public virtual View Remove (View view)
/// <returns>
/// The removed View. <see langword="null"/> if the View could not be removed.
/// </returns>
public virtual View? Remove (View view)
{
if (view is null || _subviews is null)
if (_subviews is null)
{
return view;
}
@@ -236,7 +235,7 @@ public partial class View // SuperView/SubView hierarchy management (SuperView,
subview,
x =>
{
int idx = _subviews.IndexOf (x);
int idx = _subviews!.IndexOf (x);
if (idx + 1 < _subviews.Count)
{
@@ -257,7 +256,7 @@ public partial class View // SuperView/SubView hierarchy management (SuperView,
subview,
x =>
{
_subviews.Remove (x);
_subviews!.Remove (x);
_subviews.Add (x);
}
);
@@ -274,7 +273,7 @@ public partial class View // SuperView/SubView hierarchy management (SuperView,
subview,
x =>
{
int idx = _subviews.IndexOf (x);
int idx = _subviews!.IndexOf (x);
if (idx > 0)
{
@@ -295,7 +294,7 @@ public partial class View // SuperView/SubView hierarchy management (SuperView,
subview,
x =>
{
_subviews.Remove (x);
_subviews!.Remove (x);
_subviews.Insert (0, subview);
}
);
@@ -308,7 +307,7 @@ public partial class View // SuperView/SubView hierarchy management (SuperView,
/// <param name="action"></param>
private void PerformActionForSubview (View subview, Action<View> action)
{
if (_subviews.Contains (subview))
if (_subviews!.Contains (subview))
{
action (subview);
}

View File

@@ -2,7 +2,7 @@
namespace Terminal.Gui.ViewTests;
public class AddRemoveNavigationTests (ITestOutputHelper _output) : TestsAllViews
public class AddRemoveNavigationTests () : TestsAllViews
{
[Fact]
public void Add_First_Subview_Gets_Focus ()
@@ -199,7 +199,7 @@ public class AddRemoveNavigationTests (ITestOutputHelper _output) : TestsAllView
top.Remove (subView);
Assert.True (top.HasFocus);
Assert.Equal (null, top.Focused);
Assert.Null (top.Focused);
Assert.False (subView.HasFocus);
}

View File

@@ -2,7 +2,7 @@
namespace Terminal.Gui.ViewTests;
public class AdvanceFocusTests (ITestOutputHelper _output)
public class AdvanceFocusTests ()
{
[Fact]
public void AdvanceFocus_CanFocus_Mixed ()

View File

@@ -2,7 +2,7 @@
namespace Terminal.Gui.ViewTests;
public class CanFocusTests (ITestOutputHelper _output) : TestsAllViews
public class CanFocusTests () : TestsAllViews
{
[Fact]
public void CanFocus_False_Prevents_SubSubView_HasFocus ()

View File

@@ -2,7 +2,7 @@
namespace Terminal.Gui.ViewTests;
public class HasFocusChangeEventTests (ITestOutputHelper _output) : TestsAllViews
public class HasFocusChangeEventTests () : TestsAllViews
{
#region HasFocusChanging_NewValue_True

View File

@@ -2,7 +2,7 @@
namespace Terminal.Gui.ViewTests;
public class HasFocusTests (ITestOutputHelper _output) : TestsAllViews
public class HasFocusTests () : TestsAllViews
{
[Fact]

View File

@@ -4,7 +4,7 @@ using static System.Net.Mime.MediaTypeNames;
namespace Terminal.Gui.ViewTests;
public class NavigationTests (ITestOutputHelper _output) : TestsAllViews
public class NavigationTests () : TestsAllViews
{
[Theory]
[MemberData (nameof (AllViewTypes))]

View File

@@ -2,7 +2,7 @@
namespace Terminal.Gui.ViewTests;
public class SetFocusTests (ITestOutputHelper _output) : TestsAllViews
public class SetFocusTests () : TestsAllViews
{
[Fact]
public void SetFocus_With_Null_Superview_Does_Not_Throw_Exception ()