From f83d8e55ea80a73da2b2a24377a30f082684b0b9 Mon Sep 17 00:00:00 2001 From: Max Katz Date: Sat, 29 May 2021 02:25:56 -0400 Subject: [PATCH] Improve events filter --- .../Diagnostics/Controls/FilterTextBox.cs | 2 -- .../ViewModels/EventsPageViewModel.cs | 25 ++++--------------- .../Diagnostics/Views/EventsPageView.xaml | 9 ++++++- 3 files changed, 13 insertions(+), 23 deletions(-) diff --git a/src/Avalonia.Diagnostics/Diagnostics/Controls/FilterTextBox.cs b/src/Avalonia.Diagnostics/Diagnostics/Controls/FilterTextBox.cs index f81ef56549..66fad557d5 100644 --- a/src/Avalonia.Diagnostics/Diagnostics/Controls/FilterTextBox.cs +++ b/src/Avalonia.Diagnostics/Diagnostics/Controls/FilterTextBox.cs @@ -12,13 +12,11 @@ namespace Avalonia.Diagnostics.Controls o => o.UseRegexFilter, (o, v) => o.UseRegexFilter = v, defaultBindingMode: BindingMode.TwoWay); - public static readonly DirectProperty UseCaseSensitiveFilterProperty = AvaloniaProperty.RegisterDirect(nameof(UseCaseSensitiveFilter), o => o.UseCaseSensitiveFilter, (o, v) => o.UseCaseSensitiveFilter = v, defaultBindingMode: BindingMode.TwoWay); - public static readonly DirectProperty UseWholeWordFilterProperty = AvaloniaProperty.RegisterDirect(nameof(UseWholeWordFilter), o => o.UseWholeWordFilter, (o, v) => o.UseWholeWordFilter = v, diff --git a/src/Avalonia.Diagnostics/Diagnostics/ViewModels/EventsPageViewModel.cs b/src/Avalonia.Diagnostics/Diagnostics/ViewModels/EventsPageViewModel.cs index dd85fcf14c..7a157dec62 100644 --- a/src/Avalonia.Diagnostics/Diagnostics/ViewModels/EventsPageViewModel.cs +++ b/src/Avalonia.Diagnostics/Diagnostics/ViewModels/EventsPageViewModel.cs @@ -23,7 +23,6 @@ namespace Avalonia.Diagnostics.ViewModels }; private readonly MainViewModel _mainViewModel; - private string _eventTypeFilter; private FiredEvent _selectedEvent; private EventTreeNodeBase _selectedNode; @@ -37,6 +36,9 @@ namespace Avalonia.Diagnostics.ViewModels .Select(g => new EventOwnerTreeNode(g.Key, g, this)) .ToArray(); + EventsFilter = new FilterViewModel(); + EventsFilter.RefreshFilter += (s, e) => UpdateEventFilters(); + EnableDefault(); } @@ -58,11 +60,7 @@ namespace Avalonia.Diagnostics.ViewModels set => RaiseAndSetIfChanged(ref _selectedNode, value); } - public string EventTypeFilter - { - get => _eventTypeFilter; - set => RaiseAndSetIfChanged(ref _eventTypeFilter, value); - } + public FilterViewModel EventsFilter { get; } public void Clear() { @@ -125,16 +123,6 @@ namespace Avalonia.Diagnostics.ViewModels } } - protected override void OnPropertyChanged(PropertyChangedEventArgs e) - { - base.OnPropertyChanged(e); - - if (e.PropertyName == nameof(EventTypeFilter)) - { - UpdateEventFilters(); - } - } - private void EvaluateNodeEnabled(Func eval) { void ProcessNode(EventTreeNodeBase node) @@ -161,9 +149,6 @@ namespace Avalonia.Diagnostics.ViewModels private void UpdateEventFilters() { - var filter = EventTypeFilter; - bool hasFilter = !string.IsNullOrEmpty(filter); - foreach (var node in Nodes) { FilterNode(node, false); @@ -171,7 +156,7 @@ namespace Avalonia.Diagnostics.ViewModels bool FilterNode(EventTreeNodeBase node, bool isParentVisible) { - bool matchesFilter = !hasFilter || node.Text.IndexOf(filter, StringComparison.OrdinalIgnoreCase) >= 0; + bool matchesFilter = EventsFilter.Filter(node.Text); bool hasVisibleChild = false; if (node.Children != null) diff --git a/src/Avalonia.Diagnostics/Diagnostics/Views/EventsPageView.xaml b/src/Avalonia.Diagnostics/Diagnostics/Views/EventsPageView.xaml index d16fc40aac..a9c2688a18 100644 --- a/src/Avalonia.Diagnostics/Diagnostics/Views/EventsPageView.xaml +++ b/src/Avalonia.Diagnostics/Diagnostics/Views/EventsPageView.xaml @@ -2,6 +2,7 @@ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:vm="clr-namespace:Avalonia.Diagnostics.ViewModels" xmlns:conv="clr-namespace:Avalonia.Diagnostics.Converters" + xmlns:controls="clr-namespace:Avalonia.Diagnostics.Controls" x:Class="Avalonia.Diagnostics.Views.EventsPageView" Margin="2"> @@ -35,7 +36,13 @@ - +