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>
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>
/// Allow to customizze SreenshotHandler
/// </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 string? _selectedEntityName;
private string? _selectedEntityType;
private bool _showImplementedInterfaces;
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()))
{
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;
SelectedEntityType = o.ToString();
var properties = GetAvaloniaProperties(o)
.Concat(GetClrProperties(o))
.Concat(GetClrProperties(o, _showImplementedInterfaces))
.OrderBy(x => x, PropertyComparer.Instance)
.ThenBy(x => x.Name)
.ToList();
@ -475,5 +479,12 @@ namespace Avalonia.Diagnostics.ViewModels
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 IScreenshotHandler? _screenshotHandler;
private bool _showPropertyType;
private bool _showImplementedInterfaces;
public MainViewModel(AvaloniaObject root)
{
@ -323,6 +324,22 @@ namespace Avalonia.Diagnostics.ViewModels
{
_screenshotHandler = options.ScreenshotHandler;
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

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

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

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

@ -45,7 +45,14 @@
IsEnabled="False" />
</MenuItem.Icon>
</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.Icon>
<CheckBox BorderThickness="0"
@ -53,8 +60,8 @@
IsEnabled="False"/>
</MenuItem.Icon>
</MenuItem>
</MenuItem>
</MenuItem>
</MenuItem>
</MenuItem>
<MenuItem Header="_Options">
<MenuItem Header="Visualize margin/padding" Command="{Binding ToggleVisualizeMarginPadding}">

Loading…
Cancel
Save