Browse Source

Merge pull request #6769 from workgroupengineering/features/DevTools/Hide_Implemented_Ineterfaces

feat(DevTools): Allow to Show/Hide implemented interfaces on Control Details
pull/7295/head
Max Katz 5 years ago
committed by GitHub
parent
commit
08659fcd7e
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 5
      src/Avalonia.Diagnostics/Diagnostics/DevToolsOptions.cs
  2. 21
      src/Avalonia.Diagnostics/Diagnostics/ViewModels/ControlDetailsViewModel.cs
  3. 17
      src/Avalonia.Diagnostics/Diagnostics/ViewModels/MainViewModel.cs
  4. 6
      src/Avalonia.Diagnostics/Diagnostics/ViewModels/TreePageViewModel.cs
  5. 13
      src/Avalonia.Diagnostics/Diagnostics/Views/MainView.xaml

5
src/Avalonia.Diagnostics/Diagnostics/DevToolsOptions.cs

@ -30,6 +30,11 @@ namespace Avalonia.Diagnostics
/// </summary> /// </summary>
public int? StartupScreenIndex { get; set; } public int? StartupScreenIndex { get; set; }
/// <summary>
/// Gets or sets a value indicating whether DevTools should be displayed implemented interfaces on Control details. The default value is true.
/// </summary>
public bool ShowImplementedInterfaces { get; set; } = true;
/// <summary> /// <summary>
/// Allow to customizze SreenshotHandler /// Allow to customizze SreenshotHandler
/// </summary> /// </summary>

21
src/Avalonia.Diagnostics/Diagnostics/ViewModels/ControlDetailsViewModel.cs

@ -27,6 +27,7 @@ namespace Avalonia.Diagnostics.ViewModels
private readonly Stack<(string Name,object Entry)> _selectedEntitiesStack = new(); private readonly Stack<(string Name,object Entry)> _selectedEntitiesStack = new();
private string? _selectedEntityName; private string? _selectedEntityName;
private string? _selectedEntityType; private string? _selectedEntityType;
private bool _showImplementedInterfaces;
public ControlDetailsViewModel(TreePageViewModel treePage, IAvaloniaObject avaloniaObject) public ControlDetailsViewModel(TreePageViewModel treePage, IAvaloniaObject avaloniaObject)
{ {
@ -246,18 +247,21 @@ namespace Avalonia.Diagnostics.ViewModels
} }
} }
private IEnumerable<PropertyViewModel> GetClrProperties(object o) private IEnumerable<PropertyViewModel> GetClrProperties(object o, bool showImplementedInterfaces)
{ {
foreach (var p in GetClrProperties(o, o.GetType())) foreach (var p in GetClrProperties(o, o.GetType()))
{ {
yield return p; yield return p;
} }
foreach (var i in o.GetType().GetInterfaces()) if (showImplementedInterfaces)
{ {
foreach (var p in GetClrProperties(o, i)) foreach (var i in o.GetType().GetInterfaces())
{ {
yield return p; foreach (var p in GetClrProperties(o, i))
{
yield return p;
}
} }
} }
} }
@ -454,7 +458,7 @@ namespace Avalonia.Diagnostics.ViewModels
SelectedEntityName = entityName; SelectedEntityName = entityName;
SelectedEntityType = o.ToString(); SelectedEntityType = o.ToString();
var properties = GetAvaloniaProperties(o) var properties = GetAvaloniaProperties(o)
.Concat(GetClrProperties(o)) .Concat(GetClrProperties(o, _showImplementedInterfaces))
.OrderBy(x => x, PropertyComparer.Instance) .OrderBy(x => x, PropertyComparer.Instance)
.ThenBy(x => x.Name) .ThenBy(x => x.Name)
.ToList(); .ToList();
@ -475,5 +479,12 @@ namespace Avalonia.Diagnostics.ViewModels
inpc2.PropertyChanged += ControlPropertyChanged; inpc2.PropertyChanged += ControlPropertyChanged;
} }
} }
internal void UpdatePropertiesView(bool showImplementedInterfaces)
{
_showImplementedInterfaces = showImplementedInterfaces;
SelectedProperty = null;
NavigateToProperty(_avaloniaObject, (_avaloniaObject as IControl)?.Name ?? _avaloniaObject.ToString());
}
} }
} }

17
src/Avalonia.Diagnostics/Diagnostics/ViewModels/MainViewModel.cs

@ -31,6 +31,7 @@ namespace Avalonia.Diagnostics.ViewModels
private IInputRoot? _pointerOverRoot; private IInputRoot? _pointerOverRoot;
private IScreenshotHandler? _screenshotHandler; private IScreenshotHandler? _screenshotHandler;
private bool _showPropertyType; private bool _showPropertyType;
private bool _showImplementedInterfaces;
public MainViewModel(AvaloniaObject root) public MainViewModel(AvaloniaObject root)
{ {
@ -323,6 +324,22 @@ namespace Avalonia.Diagnostics.ViewModels
{ {
_screenshotHandler = options.ScreenshotHandler; _screenshotHandler = options.ScreenshotHandler;
StartupScreenIndex = options.StartupScreenIndex; StartupScreenIndex = options.StartupScreenIndex;
ShowImplementedInterfaces = options.ShowImplementedInterfaces;
}
public bool ShowImplementedInterfaces
{
get => _showImplementedInterfaces;
private set => RaiseAndSetIfChanged(ref _showImplementedInterfaces , value);
}
public void ToggleShowImplementedInterfaces(object parametr)
{
ShowImplementedInterfaces = !ShowImplementedInterfaces;
if (Content is TreePageViewModel viewModel)
{
viewModel.UpdatePropertiesView();
}
} }
public bool ShowDettailsPropertyType public bool ShowDettailsPropertyType

6
src/Avalonia.Diagnostics/Diagnostics/ViewModels/TreePageViewModel.cs

@ -39,6 +39,7 @@ namespace Avalonia.Diagnostics.ViewModels
Details = value != null ? Details = value != null ?
new ControlDetailsViewModel(this, value.Visual) : new ControlDetailsViewModel(this, value.Visual) :
null; null;
Details?.UpdatePropertiesView(MainView.ShowImplementedInterfaces);
Details?.UpdateStyleFilters(); Details?.UpdateStyleFilters();
} }
} }
@ -135,5 +136,10 @@ namespace Avalonia.Diagnostics.ViewModels
return null; return null;
} }
internal void UpdatePropertiesView()
{
Details?.UpdatePropertiesView(MainView?.ShowImplementedInterfaces ?? true);
}
} }
} }

13
src/Avalonia.Diagnostics/Diagnostics/Views/MainView.xaml

@ -45,7 +45,14 @@
IsEnabled="False" /> IsEnabled="False" />
</MenuItem.Icon> </MenuItem.Icon>
</MenuItem> </MenuItem>
<MenuItem Header="_Details"> <MenuItem Header="Control _Details">
<MenuItem Header="Show Implemented Interfaces" Command="{Binding ToggleShowImplementedInterfaces}">
<MenuItem.Icon>
<CheckBox BorderThickness="0"
IsChecked="{Binding ShowImplementedInterfaces}"
IsEnabled="False" />
</MenuItem.Icon>
</MenuItem>
<MenuItem Header="Split Property Type" Command="{Binding ToggleShowDettailsPropertyType}"> <MenuItem Header="Split Property Type" Command="{Binding ToggleShowDettailsPropertyType}">
<MenuItem.Icon> <MenuItem.Icon>
<CheckBox BorderThickness="0" <CheckBox BorderThickness="0"
@ -53,8 +60,8 @@
IsEnabled="False"/> IsEnabled="False"/>
</MenuItem.Icon> </MenuItem.Icon>
</MenuItem> </MenuItem>
</MenuItem> </MenuItem>
</MenuItem> </MenuItem>
<MenuItem Header="_Options"> <MenuItem Header="_Options">
<MenuItem Header="Visualize margin/padding" Command="{Binding ToggleVisualizeMarginPadding}"> <MenuItem Header="Visualize margin/padding" Command="{Binding ToggleVisualizeMarginPadding}">

Loading…
Cancel
Save