diff --git a/src/Avalonia.Diagnostics/Diagnostics/Controls/FilterTextBox.axaml b/src/Avalonia.Diagnostics/Diagnostics/Controls/FilterTextBox.axaml new file mode 100644 index 0000000000..0cacc0031d --- /dev/null +++ b/src/Avalonia.Diagnostics/Diagnostics/Controls/FilterTextBox.axaml @@ -0,0 +1,88 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/src/Avalonia.Diagnostics/Diagnostics/Controls/FilterTextBox.cs b/src/Avalonia.Diagnostics/Diagnostics/Controls/FilterTextBox.cs new file mode 100644 index 0000000000..f81ef56549 --- /dev/null +++ b/src/Avalonia.Diagnostics/Diagnostics/Controls/FilterTextBox.cs @@ -0,0 +1,54 @@ +using System; +using Avalonia.Controls; +using Avalonia.Data; +using Avalonia.Styling; + +namespace Avalonia.Diagnostics.Controls +{ + internal class FilterTextBox : TextBox, IStyleable + { + public static readonly DirectProperty UseRegexFilterProperty = + AvaloniaProperty.RegisterDirect(nameof(UseRegexFilter), + 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, + defaultBindingMode: BindingMode.TwoWay); + + private bool _useRegexFilter, _useCaseSensitiveFilter, _useWholeWordFilter; + + public FilterTextBox() + { + Classes.Add("filter-text-box"); + } + + public bool UseRegexFilter + { + get => _useRegexFilter; + set => SetAndRaise(UseRegexFilterProperty, ref _useRegexFilter, value); + } + + public bool UseCaseSensitiveFilter + { + get => _useCaseSensitiveFilter; + set => SetAndRaise(UseCaseSensitiveFilterProperty, ref _useCaseSensitiveFilter, value); + } + + public bool UseWholeWordFilter + { + get => _useWholeWordFilter; + set => SetAndRaise(UseWholeWordFilterProperty, ref _useWholeWordFilter, value); + } + + Type IStyleable.StyleKey => typeof(TextBox); + } +} diff --git a/src/Avalonia.Diagnostics/Diagnostics/ViewModels/FilterViewModel.cs b/src/Avalonia.Diagnostics/Diagnostics/ViewModels/FilterViewModel.cs index 2d7d2a769c..f3145a2470 100644 --- a/src/Avalonia.Diagnostics/Diagnostics/ViewModels/FilterViewModel.cs +++ b/src/Avalonia.Diagnostics/Diagnostics/ViewModels/FilterViewModel.cs @@ -9,7 +9,7 @@ namespace Avalonia.Diagnostics.ViewModels internal class FilterViewModel : ViewModelBase, INotifyDataErrorInfo { private readonly Dictionary _errors = new Dictionary(); - private string _propertyFilter = string.Empty; + private string _propertyString = string.Empty; private bool _useRegexFilter, _useCaseSensitiveFilter, _useWholeWordFilter; private string _processedFilter; private Regex _filterRegex; @@ -25,13 +25,13 @@ namespace Avalonia.Diagnostics.ViewModels { void ClearError() { - if (_errors.Remove(nameof(PropertyFilter))) + if (_errors.Remove(nameof(FilterString))) { - ErrorsChanged?.Invoke(this, new DataErrorsChangedEventArgs(nameof(PropertyFilter))); + ErrorsChanged?.Invoke(this, new DataErrorsChangedEventArgs(nameof(FilterString))); } } - _processedFilter = PropertyFilter.Trim(); + _processedFilter = FilterString.Trim(); try { @@ -52,17 +52,17 @@ namespace Avalonia.Diagnostics.ViewModels } catch (Exception exception) { - _errors[nameof(PropertyFilter)] = exception.Message; - ErrorsChanged?.Invoke(this, new DataErrorsChangedEventArgs(nameof(PropertyFilter))); + _errors[nameof(FilterString)] = exception.Message; + ErrorsChanged?.Invoke(this, new DataErrorsChangedEventArgs(nameof(FilterString))); } } - public string PropertyFilter + public string FilterString { - get => _propertyFilter; + get => _propertyString; set { - if (RaiseAndSetIfChanged(ref _propertyFilter, value)) + if (RaiseAndSetIfChanged(ref _propertyString, value)) { UpdateFilterRegex(); RefreshFilter?.Invoke(this, EventArgs.Empty); diff --git a/src/Avalonia.Diagnostics/Diagnostics/Views/ControlDetailsView.xaml b/src/Avalonia.Diagnostics/Diagnostics/Views/ControlDetailsView.xaml index ab651b2a06..e6e19643a2 100644 --- a/src/Avalonia.Diagnostics/Diagnostics/Views/ControlDetailsView.xaml +++ b/src/Avalonia.Diagnostics/Diagnostics/Views/ControlDetailsView.xaml @@ -2,6 +2,7 @@ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:conv="clr-namespace:Avalonia.Diagnostics.Converters" xmlns:local="clr-namespace:Avalonia.Diagnostics.Views" + xmlns:controls="clr-namespace:Avalonia.Diagnostics.Controls" xmlns:vm="clr-namespace:Avalonia.Diagnostics.ViewModels" x:Class="Avalonia.Diagnostics.Views.ControlDetailsView" x:Name="Main"> @@ -12,24 +13,19 @@ - - - - - - + + + + +