Preview refactor, Console rename form
This commit is contained in:
@@ -6,7 +6,7 @@ using TerminalUI.Traits;
|
||||
|
||||
namespace TerminalUI.Controls;
|
||||
|
||||
public sealed partial class ItemsControl<TDataContext, TItem>
|
||||
public sealed partial class ItemsControl<TDataContext, TItem>
|
||||
: View<ItemsControl<TDataContext, TItem>, TDataContext>, IVisibilityChangeHandler
|
||||
{
|
||||
private readonly List<IView> _forceRerenderChildren = new();
|
||||
@@ -17,7 +17,7 @@ public sealed partial class ItemsControl<TDataContext, TItem>
|
||||
private object? _itemsSource;
|
||||
[Notify] private Orientation _orientation = Orientation.Vertical;
|
||||
|
||||
public Func<IView<TItem>?> ItemTemplate { get; set; } = DefaultItemTemplate;
|
||||
public Func<IView<TItem>> ItemTemplate { get; set; } = DefaultItemTemplate;
|
||||
|
||||
public IReadOnlyList<IView<TItem>> Children => _children.AsReadOnly();
|
||||
|
||||
@@ -41,7 +41,6 @@ public sealed partial class ItemsControl<TDataContext, TItem>
|
||||
var consumer = new OcConsumer();
|
||||
_children = observableDeclarative
|
||||
.Selecting(i => CreateItem(i))
|
||||
.OfTypeComputing<IView<TItem>>()
|
||||
.For(consumer);
|
||||
_itemsDisposables.Add(consumer);
|
||||
}
|
||||
@@ -50,16 +49,15 @@ public sealed partial class ItemsControl<TDataContext, TItem>
|
||||
var consumer = new OcConsumer();
|
||||
_children = readOnlyObservableDeclarative
|
||||
.Selecting(i => CreateItem(i))
|
||||
.OfTypeComputing<IView<TItem>>()
|
||||
.For(consumer);
|
||||
_itemsDisposables.Add(consumer);
|
||||
}
|
||||
else if (_itemsSource is ICollection<TItem> collection)
|
||||
_children = collection.Select(CreateItem).OfType<IView<TItem>>().ToList();
|
||||
_children = collection.Select(CreateItem).ToList();
|
||||
else if (_itemsSource is TItem[] array)
|
||||
_children = array.Select(CreateItem).OfType<IView<TItem>>().ToList();
|
||||
_children = array.Select(CreateItem).ToList();
|
||||
else if (_itemsSource is IEnumerable<TItem> enumerable)
|
||||
_children = enumerable.Select(CreateItem).OfType<IView<TItem>>().ToList();
|
||||
_children = enumerable.Select(CreateItem).ToList();
|
||||
else if (value is null)
|
||||
{
|
||||
_children = new List<IView<TItem>>();
|
||||
@@ -173,14 +171,14 @@ public sealed partial class ItemsControl<TDataContext, TItem>
|
||||
return neededRerender;
|
||||
}
|
||||
|
||||
private IView<TItem>? CreateItem(TItem dataContext)
|
||||
private IView<TItem> CreateItem(TItem dataContext)
|
||||
{
|
||||
var newItem = ItemTemplate();
|
||||
AddChild(newItem, _ => dataContext);
|
||||
return newItem;
|
||||
}
|
||||
|
||||
private static IView<TItem>? DefaultItemTemplate() => null;
|
||||
private static IView<TItem> DefaultItemTemplate() => new TextBlock<TItem> {Text = typeof(TItem).ToString()};
|
||||
|
||||
public void ChildVisibilityChanged(IView child)
|
||||
{
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
using System.Buffers;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.ComponentModel;
|
||||
using System.Diagnostics;
|
||||
using System.Runtime.CompilerServices;
|
||||
using GeneralInputKey;
|
||||
using PropertyChanged.SourceGenerator;
|
||||
@@ -321,6 +322,7 @@ public abstract partial class View<TConcrete, T> : IView<T> where TConcrete : Vi
|
||||
|
||||
public virtual TChild AddChild<TChild>(TChild child) where TChild : IView<T>
|
||||
{
|
||||
Debug.Assert(child != null);
|
||||
child.DataContext = DataContext;
|
||||
var mapper = new DataContextMapper<T, T>(this, child, d => d);
|
||||
SetupNewChild(child, mapper);
|
||||
@@ -331,6 +333,7 @@ public abstract partial class View<TConcrete, T> : IView<T> where TConcrete : Vi
|
||||
public virtual TChild AddChild<TChild, TDataContext>(TChild child, Func<T?, TDataContext?> dataContextMapper)
|
||||
where TChild : IView<TDataContext>
|
||||
{
|
||||
Debug.Assert(child != null);
|
||||
child.DataContext = dataContextMapper(DataContext);
|
||||
var mapper = new DataContextMapper<T, TDataContext>(this, child, dataContextMapper);
|
||||
SetupNewChild(child, mapper);
|
||||
@@ -395,7 +398,7 @@ public abstract partial class View<TConcrete, T> : IView<T> where TConcrete : Vi
|
||||
|
||||
_disposables.Clear();
|
||||
KeyHandlers.Clear();
|
||||
|
||||
|
||||
Disposed?.Invoke(this);
|
||||
}
|
||||
}
|
||||
@@ -411,7 +414,7 @@ public abstract partial class View<TConcrete, T> : IView<T> where TConcrete : Vi
|
||||
{
|
||||
foreach (var keyHandler in KeyHandlers)
|
||||
{
|
||||
keyHandler((TConcrete)this, keyEventArgs);
|
||||
keyHandler((TConcrete) this, keyEventArgs);
|
||||
if (keyEventArgs.Handled) return;
|
||||
}
|
||||
}
|
||||
@@ -427,6 +430,6 @@ public abstract partial class View<TConcrete, T> : IView<T> where TConcrete : Vi
|
||||
public TConcrete WithKeyHandler(Action<TConcrete, GeneralKeyEventArgs> keyHandler)
|
||||
{
|
||||
KeyHandlers.Add(keyHandler);
|
||||
return (TConcrete)this;
|
||||
return (TConcrete) this;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user