handle generic treeitem metadata better
This commit is contained in:
@@ -33,7 +33,7 @@ public partial class SolutionExplorerPanel : MarginContainer
|
|||||||
{
|
{
|
||||||
var selected = _tree.GetSelected();
|
var selected = _tree.GetSelected();
|
||||||
if (selected is null) return;
|
if (selected is null) return;
|
||||||
var sharpIdeFileContainer = selected.GetMetadata(0).As<RefCountedContainer<SharpIdeFile>?>();
|
var sharpIdeFileContainer = selected.GetTypedMetadata<RefCountedContainer<SharpIdeFile>?>(0);
|
||||||
if (sharpIdeFileContainer is null) return;
|
if (sharpIdeFileContainer is null) return;
|
||||||
var sharpIdeFile = sharpIdeFileContainer.Item;
|
var sharpIdeFile = sharpIdeFileContainer.Item;
|
||||||
Guard.Against.Null(sharpIdeFile, nameof(sharpIdeFile));
|
Guard.Against.Null(sharpIdeFile, nameof(sharpIdeFile));
|
||||||
@@ -97,8 +97,7 @@ public partial class SolutionExplorerPanel : MarginContainer
|
|||||||
|
|
||||||
private static TreeItem? FindItemRecursive(TreeItem item, SharpIdeFile file)
|
private static TreeItem? FindItemRecursive(TreeItem item, SharpIdeFile file)
|
||||||
{
|
{
|
||||||
var metadata = item.GetMetadata(0);
|
if (item.GetTypedMetadata<RefCountedContainer<SharpIdeFile>?>(0)?.Item == file)
|
||||||
if (metadata.As<RefCountedContainer<SharpIdeFile>?>()?.Item == file)
|
|
||||||
return item;
|
return item;
|
||||||
|
|
||||||
var child = item.GetFirstChild();
|
var child = item.GetFirstChild();
|
||||||
@@ -142,6 +141,8 @@ public partial class SolutionExplorerPanel : MarginContainer
|
|||||||
var folderItem = _tree.CreateItem(parent);
|
var folderItem = _tree.CreateItem(parent);
|
||||||
folderItem.SetText(0, folder.Name);
|
folderItem.SetText(0, folder.Name);
|
||||||
folderItem.SetIcon(0, SlnFolderIcon);
|
folderItem.SetIcon(0, SlnFolderIcon);
|
||||||
|
var container = new RefCountedContainer<SharpIdeSolutionFolder>(folder);
|
||||||
|
folderItem.SetMetadata(0, container);
|
||||||
|
|
||||||
foreach (var project in folder.Projects)
|
foreach (var project in folder.Projects)
|
||||||
{
|
{
|
||||||
@@ -164,6 +165,8 @@ public partial class SolutionExplorerPanel : MarginContainer
|
|||||||
var projectItem = _tree.CreateItem(parent);
|
var projectItem = _tree.CreateItem(parent);
|
||||||
projectItem.SetText(0, project.Name);
|
projectItem.SetText(0, project.Name);
|
||||||
projectItem.SetIcon(0, CsprojIcon);
|
projectItem.SetIcon(0, CsprojIcon);
|
||||||
|
var container = new RefCountedContainer<SharpIdeProjectModel>(project);
|
||||||
|
projectItem.SetMetadata(0, container);
|
||||||
|
|
||||||
foreach (var sharpIdeFolder in project.Folders)
|
foreach (var sharpIdeFolder in project.Folders)
|
||||||
{
|
{
|
||||||
@@ -181,6 +184,8 @@ public partial class SolutionExplorerPanel : MarginContainer
|
|||||||
var folderItem = _tree.CreateItem(projectItem);
|
var folderItem = _tree.CreateItem(projectItem);
|
||||||
folderItem.SetText(0, sharpIdeFolder.Name);
|
folderItem.SetText(0, sharpIdeFolder.Name);
|
||||||
folderItem.SetIcon(0, FolderIcon);
|
folderItem.SetIcon(0, FolderIcon);
|
||||||
|
var container = new RefCountedContainer<SharpIdeFolder>(sharpIdeFolder);
|
||||||
|
folderItem.SetMetadata(0, container);
|
||||||
|
|
||||||
foreach (var subFolder in sharpIdeFolder.Folders)
|
foreach (var subFolder in sharpIdeFolder.Folders)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -34,6 +34,19 @@ public static class ControlExtensions
|
|||||||
|
|
||||||
public static class NodeExtensions
|
public static class NodeExtensions
|
||||||
{
|
{
|
||||||
|
extension(TreeItem treeItem)
|
||||||
|
{
|
||||||
|
public T? GetTypedMetadata<T>(int column) where T : RefCounted?
|
||||||
|
{
|
||||||
|
var metadata = treeItem.GetMetadata(column);
|
||||||
|
var refCountedMetadata = metadata.As<RefCounted?>();
|
||||||
|
if (refCountedMetadata is T correctTypeContainer)
|
||||||
|
{
|
||||||
|
return correctTypeContainer;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
extension(Node node)
|
extension(Node node)
|
||||||
{
|
{
|
||||||
public void QueueFreeChildren()
|
public void QueueFreeChildren()
|
||||||
|
|||||||
Reference in New Issue
Block a user