// Copyright (c) The Avalonia Project. All rights reserved.
// Licensed under the MIT license. See licence.md file in the project root for full license information.
using System;
using System.Collections.Generic;
namespace Avalonia.Interactivity
{
///
/// Tracks registered s.
///
public class RoutedEventRegistry
{
private readonly Dictionary> _registeredRoutedEvents =
new Dictionary>();
///
/// Gets the instance.
///
public static RoutedEventRegistry Instance { get; }
= new RoutedEventRegistry();
///
/// Registers a on a type.
///
/// The type.
/// The event.
///
/// You won't usually want to call this method directly, instead use the
///
/// method.
///
public void Register(Type type, RoutedEvent @event)
{
type = type ?? throw new ArgumentNullException(nameof(type));
@event = @event ?? throw new ArgumentNullException(nameof(@event));
if (!_registeredRoutedEvents.TryGetValue(type, out var list))
{
list = new List();
_registeredRoutedEvents.Add(type, list);
}
list.Add(@event);
}
///
/// Returns all routed events, that are currently registered in the event registry.
///
/// All routed events, that are currently registered in the event registry.
public IEnumerable GetAllRegistered()
{
foreach (var events in _registeredRoutedEvents.Values)
{
foreach (var e in events)
{
yield return e;
}
}
}
///
/// Returns all routed events registered with the provided type.
/// If the type is not found or does not provide any routed events, an empty list is returned.
///
/// The type.
/// All routed events registered with the provided type.
public IReadOnlyList GetRegistered(Type type)
{
type = type ?? throw new ArgumentNullException(nameof(type));
if (_registeredRoutedEvents.TryGetValue(type, out var events))
{
return events;
}
return Array.Empty();
}
///
/// Returns all routed events registered with the provided type.
/// If the type is not found or does not provide any routed events, an empty list is returned.
///
/// The type.
/// All routed events registered with the provided type.
public IReadOnlyList GetRegistered()
{
return GetRegistered(typeof(TOwner));
}
}
}