From f7e939cda91fca34a77daaae92e1596336a3e5f1 Mon Sep 17 00:00:00 2001 From: baldurk Date: Sun, 13 Nov 2016 13:50:40 +0100 Subject: [PATCH] Sort node selection from treelistview before iterating on copy-paste. --- renderdocui/Controls/TreeListView/TreeListNode.cs | 4 ++-- renderdocui/Controls/TreeListView/TreeListView.cs | 5 +++++ renderdocui/Windows/APIInspector.cs | 2 ++ renderdocui/Windows/Dialogs/ConstantBufferPreviewer.cs | 2 ++ .../Windows/PipelineState/D3D11PipelineStateViewer.cs | 4 +++- .../Windows/PipelineState/D3D12PipelineStateViewer.cs | 4 +++- renderdocui/Windows/PipelineState/GLPipelineStateViewer.cs | 4 +++- .../Windows/PipelineState/VulkanPipelineStateViewer.cs | 4 +++- 8 files changed, 23 insertions(+), 6 deletions(-) diff --git a/renderdocui/Controls/TreeListView/TreeListNode.cs b/renderdocui/Controls/TreeListView/TreeListNode.cs index 7588d1727..79db3d61f 100644 --- a/renderdocui/Controls/TreeListView/TreeListNode.cs +++ b/renderdocui/Controls/TreeListView/TreeListNode.cs @@ -1100,12 +1100,12 @@ namespace TreelistView return m_nodesMap.ContainsKey(node); } - public IList GetSortedNodes() + public void Sort() { SortedList list = new SortedList(); foreach (Node node in m_nodes) list.Add(node.GetId(), node); - return list.Values; + m_nodes = new List(list.Values); } } diff --git a/renderdocui/Controls/TreeListView/TreeListView.cs b/renderdocui/Controls/TreeListView/TreeListView.cs index 6cf2aa819..6b5a982a6 100644 --- a/renderdocui/Controls/TreeListView/TreeListView.cs +++ b/renderdocui/Controls/TreeListView/TreeListView.cs @@ -378,6 +378,11 @@ namespace TreelistView get { return m_nodesSelection; } } + public void SortNodesSelection() + { + m_nodesSelection.Sort(); + } + [Browsable(false)] public Node SelectedNode { diff --git a/renderdocui/Windows/APIInspector.cs b/renderdocui/Windows/APIInspector.cs index 2b17bc912..f1d178286 100644 --- a/renderdocui/Windows/APIInspector.cs +++ b/renderdocui/Windows/APIInspector.cs @@ -275,6 +275,8 @@ namespace renderdocui.Windows if (e.KeyCode == Keys.C && e.Control) { + apiEvents.SortNodesSelection(); + string text = ""; foreach (var n in apiEvents.NodesSelection) { diff --git a/renderdocui/Windows/Dialogs/ConstantBufferPreviewer.cs b/renderdocui/Windows/Dialogs/ConstantBufferPreviewer.cs index b3a8cca1a..1d608a596 100644 --- a/renderdocui/Windows/Dialogs/ConstantBufferPreviewer.cs +++ b/renderdocui/Windows/Dialogs/ConstantBufferPreviewer.cs @@ -325,6 +325,8 @@ namespace renderdocui.Controls { int[] width = new int[] { 0, 0, 0 }; + variables.SortNodesSelection(); + foreach (var n in variables.NodesSelection) { width[0] = Math.Max(width[0], n[0].ToString().Length); diff --git a/renderdocui/Windows/PipelineState/D3D11PipelineStateViewer.cs b/renderdocui/Windows/PipelineState/D3D11PipelineStateViewer.cs index b1f409691..634f6d38d 100644 --- a/renderdocui/Windows/PipelineState/D3D11PipelineStateViewer.cs +++ b/renderdocui/Windows/PipelineState/D3D11PipelineStateViewer.cs @@ -2134,7 +2134,9 @@ namespace renderdocui.Windows.PipelineState } else if (sender is TreelistView.TreeListView) { - TreelistView.NodesSelection sel = ((TreelistView.TreeListView)sender).NodesSelection; + TreelistView.TreeListView view = (TreelistView.TreeListView)sender; + view.SortNodesSelection(); + TreelistView.NodesSelection sel = view.NodesSelection; if (sel.Count > 0) { diff --git a/renderdocui/Windows/PipelineState/D3D12PipelineStateViewer.cs b/renderdocui/Windows/PipelineState/D3D12PipelineStateViewer.cs index 6412d3651..a06e52285 100644 --- a/renderdocui/Windows/PipelineState/D3D12PipelineStateViewer.cs +++ b/renderdocui/Windows/PipelineState/D3D12PipelineStateViewer.cs @@ -1802,7 +1802,9 @@ namespace renderdocui.Windows.PipelineState } else if (sender is TreelistView.TreeListView) { - TreelistView.NodesSelection sel = ((TreelistView.TreeListView)sender).NodesSelection; + TreelistView.TreeListView view = (TreelistView.TreeListView)sender; + view.SortNodesSelection(); + TreelistView.NodesSelection sel = view.NodesSelection; if (sel.Count > 0) { diff --git a/renderdocui/Windows/PipelineState/GLPipelineStateViewer.cs b/renderdocui/Windows/PipelineState/GLPipelineStateViewer.cs index 63ab139f2..354b9d4a8 100644 --- a/renderdocui/Windows/PipelineState/GLPipelineStateViewer.cs +++ b/renderdocui/Windows/PipelineState/GLPipelineStateViewer.cs @@ -1776,7 +1776,9 @@ namespace renderdocui.Windows.PipelineState } else if (sender is TreelistView.TreeListView) { - TreelistView.NodesSelection sel = ((TreelistView.TreeListView)sender).NodesSelection; + TreelistView.TreeListView view = (TreelistView.TreeListView)sender; + view.SortNodesSelection(); + TreelistView.NodesSelection sel = view.NodesSelection; if (sel.Count > 0) { diff --git a/renderdocui/Windows/PipelineState/VulkanPipelineStateViewer.cs b/renderdocui/Windows/PipelineState/VulkanPipelineStateViewer.cs index 402a9f35c..a4a7a25ff 100644 --- a/renderdocui/Windows/PipelineState/VulkanPipelineStateViewer.cs +++ b/renderdocui/Windows/PipelineState/VulkanPipelineStateViewer.cs @@ -2011,7 +2011,9 @@ namespace renderdocui.Windows.PipelineState } else if (sender is TreelistView.TreeListView) { - TreelistView.NodesSelection sel = ((TreelistView.TreeListView)sender).NodesSelection; + TreelistView.TreeListView view = (TreelistView.TreeListView)sender; + view.SortNodesSelection(); + TreelistView.NodesSelection sel = view.NodesSelection; if (sel.Count > 0) {