// 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)); } } }