From 5149e4e77f08c832adde5500e7a4750b36f9154f Mon Sep 17 00:00:00 2001 From: tom-englert Date: Fri, 4 Oct 2024 17:28:12 +0200 Subject: [PATCH] Optimize selection handling --- Directory.Packages.props | 8 +- ILSpy/Analyzers/AnalyzerTreeView.xaml | 3 +- ILSpy/Analyzers/AnalyzerTreeViewModel.cs | 24 +++--- ILSpy/AssemblyTree/AssemblyListPane.xaml | 3 +- ILSpy/AssemblyTree/AssemblyTreeModel.cs | 93 +++++++++++---------- ILSpy/Commands/DecompileInNewViewCommand.cs | 27 ++++-- ILSpy/Controls/TreeView/SharpTreeView.cs | 2 + ILSpy/Docking/DockWorkspace.cs | 12 ++- ILSpy/MainWindow.xaml.cs | 5 +- 9 files changed, 106 insertions(+), 71 deletions(-) diff --git a/Directory.Packages.props b/Directory.Packages.props index f2fd119b5..bcedfd1c1 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -45,12 +45,12 @@ - - - + + + - + \ No newline at end of file diff --git a/ILSpy/Analyzers/AnalyzerTreeView.xaml b/ILSpy/Analyzers/AnalyzerTreeView.xaml index 28bba030c..d23119f12 100644 --- a/ILSpy/Analyzers/AnalyzerTreeView.xaml +++ b/ILSpy/Analyzers/AnalyzerTreeView.xaml @@ -12,8 +12,7 @@ ShowRoot="False" BorderThickness="0" Root="{Binding Root}" - toms:MultiSelectorExtensions.SelectionBinding="{Binding SelectedItems}" - SelectedItem="{Binding SelectedItem, Mode=TwoWay}" + toms:MultiSelectorExtensions.SelectionBinding="{Binding SelectedItems, Mode=TwoWay}" SelectionChanged="AnalyzerTreeView_OnSelectionChanged"> diff --git a/ILSpy/Analyzers/AnalyzerTreeViewModel.cs b/ILSpy/Analyzers/AnalyzerTreeViewModel.cs index 7a746c088..5c666d38f 100644 --- a/ILSpy/Analyzers/AnalyzerTreeViewModel.cs +++ b/ILSpy/Analyzers/AnalyzerTreeViewModel.cs @@ -17,8 +17,6 @@ // DEALINGS IN THE SOFTWARE. using System; -using System.Collections.Generic; -using System.Collections.ObjectModel; using System.ComponentModel.Composition; using System.Linq; using System.Windows; @@ -38,8 +36,6 @@ namespace ICSharpCode.ILSpy.Analyzers [Export] public class AnalyzerTreeViewModel : ToolPaneModel { - private AnalyzerTreeNode selectedItem; - public const string PaneContentId = "analyzerPane"; public AnalyzerTreeViewModel() @@ -52,14 +48,20 @@ namespace ICSharpCode.ILSpy.Analyzers public AnalyzerRootNode Root { get; } = new(); - public AnalyzerTreeNode SelectedItem { - get => selectedItem; - set => SetProperty(ref selectedItem, value); - } - public ICommand AnalyzeCommand => new DelegateCommand(AnalyzeSelected); - public ObservableCollection SelectedItems { get; } = []; + private AnalyzerTreeNode[] selectedItems = []; + + public AnalyzerTreeNode[] SelectedItems { + get => selectedItems ?? []; + set { + if (SelectedItems.SequenceEqual(value)) + return; + + selectedItems = value; + OnPropertyChanged(); + } + } private void AnalyzeSelected() { @@ -87,7 +89,7 @@ namespace ICSharpCode.ILSpy.Analyzers } target.IsExpanded = true; - this.SelectedItem = target; + this.SelectedItems = [target]; } public void Analyze(IEntity entity) diff --git a/ILSpy/AssemblyTree/AssemblyListPane.xaml b/ILSpy/AssemblyTree/AssemblyListPane.xaml index 7222fdabf..49ea9a781 100644 --- a/ILSpy/AssemblyTree/AssemblyListPane.xaml +++ b/ILSpy/AssemblyTree/AssemblyListPane.xaml @@ -15,8 +15,7 @@ AllowDrop="True" BorderThickness="0" Visibility="Visible" Root="{Binding Root}" - SelectedItem="{Binding SelectedItem, Mode=TwoWay}" - toms:MultiSelectorExtensions.SelectionBinding="{Binding SelectedItems}"> + toms:MultiSelectorExtensions.SelectionBinding="{Binding SelectedItems, Mode=TwoWay}">