2 changed files with 49 additions and 91 deletions
@ -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 |
|||
{ |
|||
/// <summary>
|
|||
/// Helper for <see cref="TreeView"/> related operations.
|
|||
/// </summary>
|
|||
internal static class TreeViewHelper |
|||
{ |
|||
/// <summary>
|
|||
/// Find which node from search info is first in hierarchy.
|
|||
/// </summary>
|
|||
/// <param name="treeView">Search root.</param>
|
|||
/// <param name="searchInfo">Nodes to search for.</param>
|
|||
/// <returns>Found first node.</returns>
|
|||
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<ItemContainerInfo> 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); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// Node search info.
|
|||
/// </summary>
|
|||
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; |
|||
} |
|||
} |
|||
} |
|||
} |
|||
Loading…
Reference in new issue