Browse Source

Added #nullable to SelectingItemsControl.

pull/4533/head
Steven Kirk 6 years ago
parent
commit
a9f05f22c2
  1. 38
      src/Avalonia.Controls/Primitives/SelectingItemsControl.cs

38
src/Avalonia.Controls/Primitives/SelectingItemsControl.cs

@ -16,6 +16,8 @@ using Avalonia.Interactivity;
using Avalonia.Logging;
using Avalonia.VisualTree;
#nullable enable
namespace Avalonia.Controls.Primitives
{
/// <summary>
@ -61,8 +63,8 @@ namespace Avalonia.Controls.Primitives
/// <summary>
/// Defines the <see cref="SelectedItem"/> property.
/// </summary>
public static readonly DirectProperty<SelectingItemsControl, object> SelectedItemProperty =
AvaloniaProperty.RegisterDirect<SelectingItemsControl, object>(
public static readonly DirectProperty<SelectingItemsControl, object?> SelectedItemProperty =
AvaloniaProperty.RegisterDirect<SelectingItemsControl, object?>(
nameof(SelectedItem),
o => o.SelectedItem,
(o, v) => o.SelectedItem = v,
@ -105,13 +107,13 @@ namespace Avalonia.Controls.Primitives
private static readonly IList Empty = Array.Empty<object>();
private readonly Selection _selection = new Selection();
private int _selectedIndex = -1;
private object _selectedItem;
private IList _selectedItems;
private object? _selectedItem;
private IList? _selectedItems;
private bool _ignoreContainerSelectionChanged;
private bool _syncingSelectedItems;
private int _updateCount;
private int _updateSelectedIndex;
private object _updateSelectedItem;
private object? _updateSelectedItem;
/// <summary>
/// Initializes static members of the <see cref="SelectingItemsControl"/> class.
@ -163,7 +165,7 @@ namespace Avalonia.Controls.Primitives
/// <summary>
/// Gets or sets the selected item.
/// </summary>
public object SelectedItem
public object? SelectedItem
{
get => _selectedItem;
set
@ -261,7 +263,7 @@ namespace Avalonia.Controls.Primitives
/// </summary>
/// <param name="eventSource">The control that raised the event.</param>
/// <returns>The container or null if the event did not originate in a container.</returns>
protected IControl GetContainerFromEventSource(IInteractive eventSource)
protected IControl? GetContainerFromEventSource(IInteractive eventSource)
{
var parent = (IVisual)eventSource;
@ -290,7 +292,7 @@ namespace Avalonia.Controls.Primitives
if (SelectedIndex != -1)
{
newIndex = IndexOf((IEnumerable)e.NewValue, SelectedItem);
newIndex = IndexOf((IEnumerable?)e.NewValue, SelectedItem);
}
if (AlwaysSelected && Items != null && Items.Cast<object>().Any())
@ -483,7 +485,7 @@ namespace Avalonia.Controls.Primitives
/// <param name="direction">The direction to move.</param>
/// <param name="wrap">Whether to wrap when the selection reaches the first or last item.</param>
/// <returns>True if the selection was moved; otherwise false.</returns>
protected bool MoveSelection(IControl from, NavigationDirection direction, bool wrap)
protected bool MoveSelection(IControl? from, NavigationDirection direction, bool wrap)
{
if (Presenter?.Panel is INavigableContainer container &&
GetNextControl(container, direction, from, wrap) is IControl next)
@ -833,14 +835,14 @@ namespace Avalonia.Controls.Primitives
/// </summary>
/// <param name="sender">The event sender.</param>
/// <param name="e">The event args.</param>
private void SelectedItemsCollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
private void SelectedItemsCollectionChanged(object? sender, NotifyCollectionChangedEventArgs e)
{
if (_syncingSelectedItems)
{
return;
}
void Add(IList newItems, IList addedItems = null)
void Add(IList newItems, IList? addedItems = null)
{
foreach (var item in newItems)
{
@ -865,8 +867,8 @@ namespace Avalonia.Controls.Primitives
}
}
IList added = null;
IList removed = null;
IList? added = null;
IList? removed = null;
switch (e.Action)
{
@ -983,8 +985,8 @@ namespace Avalonia.Controls.Primitives
var item = ElementAt(Items, index);
var itemChanged = !Equals(item, oldItem);
var added = -1;
HashSet<int> removedIndexes = null;
List<object> removedItems = null;
HashSet<int>? removedIndexes = null;
List<object?>? removedItems = null;
_selectedIndex = index;
_selectedItem = item;
@ -1011,7 +1013,7 @@ namespace Avalonia.Controls.Primitives
}
else
{
removedItems ??= new List<object>();
removedItems ??= new List<object?>();
removedItems.Add(oldItem);
}
@ -1050,7 +1052,7 @@ namespace Avalonia.Controls.Primitives
if (removedIndexes is object)
{
removedItems ??= new List<object>();
removedItems ??= new List<object?>();
foreach (var removed in removedIndexes)
{
@ -1065,7 +1067,7 @@ namespace Avalonia.Controls.Primitives
var e = new SelectionChangedEventArgs(
SelectionChangedEvent,
(IList)removedItems ?? Array.Empty<object>(),
(IList?)removedItems ?? Array.Empty<object>(),
added != -1 ? new[] { ElementAt(Items, added) } : Array.Empty<object>());
RaiseEvent(e);
}

Loading…
Cancel
Save