Browse Source

Improve events filter

pull/5991/head
Max Katz 5 years ago
parent
commit
f83d8e55ea
  1. 2
      src/Avalonia.Diagnostics/Diagnostics/Controls/FilterTextBox.cs
  2. 25
      src/Avalonia.Diagnostics/Diagnostics/ViewModels/EventsPageViewModel.cs
  3. 9
      src/Avalonia.Diagnostics/Diagnostics/Views/EventsPageView.xaml

2
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<FilterTextBox, bool> UseCaseSensitiveFilterProperty =
AvaloniaProperty.RegisterDirect<FilterTextBox, bool>(nameof(UseCaseSensitiveFilter),
o => o.UseCaseSensitiveFilter, (o, v) => o.UseCaseSensitiveFilter = v,
defaultBindingMode: BindingMode.TwoWay);
public static readonly DirectProperty<FilterTextBox, bool> UseWholeWordFilterProperty =
AvaloniaProperty.RegisterDirect<FilterTextBox, bool>(nameof(UseWholeWordFilter),
o => o.UseWholeWordFilter, (o, v) => o.UseWholeWordFilter = v,

25
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<EventTreeNode, bool> 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)

9
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">
<UserControl.Styles>
@ -35,7 +36,13 @@
<Grid Grid.Column="0" RowDefinitions="Auto,*,Auto">
<TextBox Classes="clearButton" Grid.Row="0" Margin="0,0,0,2" Text="{Binding EventTypeFilter}" Watermark="Search event types" />
<controls:FilterTextBox Grid.Row="0" Margin="0,0,0,2"
DataContext="{Binding EventsFilter}"
Text="{Binding FilterString}"
Watermark="Filter events"
UseCaseSensitiveFilter="{Binding UseCaseSensitiveFilter}"
UseWholeWordFilter="{Binding UseWholeWordFilter}"
UseRegexFilter="{Binding UseRegexFilter}" />
<TreeView Grid.Row="1" Items="{Binding Nodes}" SelectedItem="{Binding SelectedNode, Mode=TwoWay}" >
<TreeView.DataTemplates>

Loading…
Cancel
Save