|
|
|
@ -5,8 +5,8 @@ using System; |
|
|
|
using System.Collections.Specialized; |
|
|
|
using System.Reactive; |
|
|
|
using System.Reactive.Linq; |
|
|
|
using Avalonia.Controls; |
|
|
|
using Avalonia.Styling; |
|
|
|
using Avalonia.VisualTree; |
|
|
|
using ReactiveUI; |
|
|
|
|
|
|
|
namespace Avalonia.Diagnostics.ViewModels |
|
|
|
@ -16,32 +16,35 @@ namespace Avalonia.Diagnostics.ViewModels |
|
|
|
private string _classes; |
|
|
|
private bool _isExpanded; |
|
|
|
|
|
|
|
public TreeNode(Control control, TreeNode parent) |
|
|
|
public TreeNode(IVisual visual, TreeNode parent) |
|
|
|
{ |
|
|
|
Control = control; |
|
|
|
Parent = parent; |
|
|
|
Type = control.GetType().Name; |
|
|
|
Type = visual.GetType().Name; |
|
|
|
Visual = visual; |
|
|
|
|
|
|
|
var classesChanged = Observable.FromEventPattern< |
|
|
|
NotifyCollectionChangedEventHandler, |
|
|
|
NotifyCollectionChangedEventArgs>( |
|
|
|
x => control.Classes.CollectionChanged += x, |
|
|
|
x => control.Classes.CollectionChanged -= x) |
|
|
|
.TakeUntil(((IStyleable)control).StyleDetach); |
|
|
|
if (visual is IStyleable styleable) |
|
|
|
{ |
|
|
|
var classesChanged = Observable.FromEventPattern< |
|
|
|
NotifyCollectionChangedEventHandler, |
|
|
|
NotifyCollectionChangedEventArgs>( |
|
|
|
x => styleable.Classes.CollectionChanged += x, |
|
|
|
x => styleable.Classes.CollectionChanged -= x) |
|
|
|
.TakeUntil(((IStyleable)styleable).StyleDetach); |
|
|
|
|
|
|
|
classesChanged.Select(_ => Unit.Default) |
|
|
|
.StartWith(Unit.Default) |
|
|
|
.Subscribe(_ => |
|
|
|
{ |
|
|
|
if (control.Classes.Count > 0) |
|
|
|
classesChanged.Select(_ => Unit.Default) |
|
|
|
.StartWith(Unit.Default) |
|
|
|
.Subscribe(_ => |
|
|
|
{ |
|
|
|
Classes = "(" + string.Join(" ", control.Classes) + ")"; |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
Classes = string.Empty; |
|
|
|
} |
|
|
|
}); |
|
|
|
if (styleable.Classes.Count > 0) |
|
|
|
{ |
|
|
|
Classes = "(" + string.Join(" ", styleable.Classes) + ")"; |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
Classes = string.Empty; |
|
|
|
} |
|
|
|
}); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
public IReadOnlyReactiveList<TreeNode> Children |
|
|
|
@ -56,7 +59,7 @@ namespace Avalonia.Diagnostics.ViewModels |
|
|
|
private set { this.RaiseAndSetIfChanged(ref _classes, value); } |
|
|
|
} |
|
|
|
|
|
|
|
public Control Control |
|
|
|
public IVisual Visual |
|
|
|
{ |
|
|
|
get; |
|
|
|
} |
|
|
|
|