From c3480fb84033fd179d86e1dfe85b924877562658 Mon Sep 17 00:00:00 2001 From: Dariusz Komosinski Date: Thu, 7 Mar 2019 11:49:22 +0100 Subject: [PATCH] Remove TreeViewHelper and shorten the code so the extra struct is not needed. --- src/Avalonia.Controls/TreeView.cs | 50 +++++++++++++- src/Avalonia.Controls/TreeViewHelper.cs | 90 ------------------------- 2 files changed, 49 insertions(+), 91 deletions(-) delete mode 100644 src/Avalonia.Controls/TreeViewHelper.cs diff --git a/src/Avalonia.Controls/TreeView.cs b/src/Avalonia.Controls/TreeView.cs index 19e09b4339..db8de49494 100644 --- a/src/Avalonia.Controls/TreeView.cs +++ b/src/Avalonia.Controls/TreeView.cs @@ -554,6 +554,54 @@ namespace Avalonia.Controls } } + /// + /// Find which node is first in hierarchy. + /// + /// Search root. + /// Nodes to find. + /// Node to find. + /// Found first node. + private static TreeViewItem FindFirstNode(TreeView treeView, TreeViewItem nodeA, TreeViewItem nodeB) + { + return FindInContainers(treeView.ItemContainerGenerator, nodeA, nodeB); + } + + private static TreeViewItem FindInContainers(ITreeItemContainerGenerator containerGenerator, + TreeViewItem nodeA, + TreeViewItem nodeB) + { + IEnumerable containers = containerGenerator.Containers; + + foreach (ItemContainerInfo container in containers) + { + TreeViewItem node = FindFirstNode(container.ContainerControl as TreeViewItem, nodeA, nodeB); + + if (node != null) + { + return node; + } + } + + return null; + } + + private static TreeViewItem FindFirstNode(TreeViewItem node, TreeViewItem nodeA, TreeViewItem nodeB) + { + if (node == null) + { + return null; + } + + TreeViewItem match = node == nodeA ? nodeA : node == nodeB ? nodeB : null; + + if (match != null) + { + return match; + } + + return FindInContainers(node.ItemContainerGenerator, nodeA, nodeB); + } + /// /// Returns all items that belong to containers between and . /// The range is inclusive. @@ -569,7 +617,7 @@ namespace Avalonia.Controls return items; } - TreeViewItem firstItem = TreeViewHelper.FindFirstNode(this, new TreeViewHelper.SearchInfo(from, to)); + TreeViewItem firstItem = FindFirstNode(this, from, to); if (firstItem == null) { diff --git a/src/Avalonia.Controls/TreeViewHelper.cs b/src/Avalonia.Controls/TreeViewHelper.cs deleted file mode 100644 index b2d43185cb..0000000000 --- a/src/Avalonia.Controls/TreeViewHelper.cs +++ /dev/null @@ -1,90 +0,0 @@ -// Copyright (c) The Avalonia Project. All rights reserved. -// Licensed under the MIT license. See licence.md file in the project root for full license information. - -using System.Collections.Generic; -using Avalonia.Controls.Generators; - -namespace Avalonia.Controls -{ - /// - /// Helper for related operations. - /// - internal static class TreeViewHelper - { - /// - /// Find which node from search info is first in hierarchy. - /// - /// Search root. - /// Nodes to search for. - /// Found first node. - public static TreeViewItem FindFirstNode(TreeView treeView, in SearchInfo searchInfo) - { - return FindInContainers(treeView.ItemContainerGenerator, in searchInfo); - } - - private static TreeViewItem FindInContainers(ITreeItemContainerGenerator containerGenerator, - in SearchInfo searchInfo) - { - IEnumerable containers = containerGenerator.Containers; - - foreach (ItemContainerInfo container in containers) - { - TreeViewItem node = FindFirstNode(container.ContainerControl as TreeViewItem, in searchInfo); - - if (node != null) - { - return node; - } - } - - return null; - } - - private static TreeViewItem FindFirstNode(TreeViewItem node, in SearchInfo searchInfo) - { - if (node == null) - { - return null; - } - - TreeViewItem match = searchInfo.GetMatch(node); - - if (match != null) - { - return match; - } - - return FindInContainers(node.ItemContainerGenerator, in searchInfo); - } - - /// - /// Node search info. - /// - public readonly struct SearchInfo - { - public readonly TreeViewItem Search1; - public readonly TreeViewItem Search2; - - public SearchInfo(TreeViewItem search1, TreeViewItem search2) - { - Search1 = search1; - Search2 = search2; - } - - public TreeViewItem GetMatch(TreeViewItem candidate) - { - if (candidate == Search1) - { - return Search1; - } - - if (candidate == Search2) - { - return Search2; - } - - return null; - } - } - } -}