From 67490f8a44046800b13a9bffe77e8e1ba2190fd7 Mon Sep 17 00:00:00 2001 From: Matt Parker <61717342+MattParkerDev@users.noreply.github.com> Date: Mon, 20 Oct 2025 18:06:25 +1000 Subject: [PATCH] fix sln explorer folder init --- .../Dialogs/NewDirectoryDialog.tscn | 1 + .../SolutionExplorer/SolutionExplorerPanel.cs | 28 +++++++++---------- 2 files changed, 15 insertions(+), 14 deletions(-) diff --git a/src/SharpIDE.Godot/Features/SolutionExplorer/ContextMenus/Dialogs/NewDirectoryDialog.tscn b/src/SharpIDE.Godot/Features/SolutionExplorer/ContextMenus/Dialogs/NewDirectoryDialog.tscn index d4829c8..ca47400 100644 --- a/src/SharpIDE.Godot/Features/SolutionExplorer/ContextMenus/Dialogs/NewDirectoryDialog.tscn +++ b/src/SharpIDE.Godot/Features/SolutionExplorer/ContextMenus/Dialogs/NewDirectoryDialog.tscn @@ -5,6 +5,7 @@ [node name="NewDirectoryDialog" type="ConfirmationDialog"] oversampling_override = 1.0 title = "Create: Directory" +position = Vector2i(0, 36) size = Vector2i(405, 115) visible = true script = ExtResource("1_4utum") diff --git a/src/SharpIDE.Godot/Features/SolutionExplorer/SolutionExplorerPanel.cs b/src/SharpIDE.Godot/Features/SolutionExplorer/SolutionExplorerPanel.cs index 4745d95..74cc4f7 100644 --- a/src/SharpIDE.Godot/Features/SolutionExplorer/SolutionExplorerPanel.cs +++ b/src/SharpIDE.Godot/Features/SolutionExplorer/SolutionExplorerPanel.cs @@ -185,13 +185,13 @@ public partial class SolutionExplorerPanel : MarginContainer e.NewItem.View.Value = projectItem; // Observe project folders - var foldersView = e.NewItem.Value.Folders - .WithInitialPopulation(s => CreateFolderTreeItem(_tree, projectItem, s)) - .CreateView(y => new TreeItemContainer()); + var foldersView = e.NewItem.Value.Folders.CreateView(y => new TreeItemContainer()); + foldersView.Unfiltered.ToList().ForEach(s => s.View.Value = CreateFolderTreeItem(_tree, projectItem, s.Value)); + foldersView.ObserveChanged() .SubscribeAwait(async (innerEvent, ct) => await (innerEvent.Action switch { - NotifyCollectionChangedAction.Add => this.InvokeAsync(() => CreateFolderTreeItem(_tree, projectItem, innerEvent)), + NotifyCollectionChangedAction.Add => this.InvokeAsync(() => innerEvent.NewItem.View.Value = CreateFolderTreeItem(_tree, projectItem, innerEvent.NewItem.Value)), NotifyCollectionChangedAction.Remove => FreeTreeItem(innerEvent.OldItem.View.Value), _ => Task.CompletedTask })).AddTo(this); @@ -210,28 +210,27 @@ public partial class SolutionExplorerPanel : MarginContainer } [RequiresGodotUiThread] - private void CreateFolderTreeItem(Tree tree, TreeItem parent, ViewChangedEvent e) + private TreeItem CreateFolderTreeItem(Tree tree, TreeItem parent, SharpIdeFolder sharpIdeFolder) { var folderItem = tree.CreateItem(parent); - folderItem.SetText(0, e.NewItem.Value.Name); + folderItem.SetText(0, sharpIdeFolder.Name); folderItem.SetIcon(0, FolderIcon); - folderItem.SetMetadata(0, new RefCountedContainer(e.NewItem.Value)); - e.NewItem.View.Value = folderItem; - + folderItem.SetMetadata(0, new RefCountedContainer(sharpIdeFolder)); + // Observe subfolders - var subFoldersView = e.NewItem.Value.Folders - .WithInitialPopulation(s => CreateFolderTreeItem(_tree, folderItem, s)) - .CreateView(y => new TreeItemContainer()); + var subFoldersView = sharpIdeFolder.Folders.CreateView(y => new TreeItemContainer()); + subFoldersView.Unfiltered.ToList().ForEach(s => s.View.Value = CreateFolderTreeItem(_tree, folderItem, s.Value)); + subFoldersView.ObserveChanged() .SubscribeAwait(async (innerEvent, ct) => await (innerEvent.Action switch { - NotifyCollectionChangedAction.Add => this.InvokeAsync(() => CreateFolderTreeItem(_tree, folderItem, innerEvent)), + NotifyCollectionChangedAction.Add => this.InvokeAsync(() => innerEvent.NewItem.View.Value = CreateFolderTreeItem(_tree, folderItem, innerEvent.NewItem.Value)), NotifyCollectionChangedAction.Remove => FreeTreeItem(innerEvent.OldItem.View.Value), _ => Task.CompletedTask })).AddTo(this); // Observe files - var filesView = e.NewItem.Value.Files + var filesView = sharpIdeFolder.Files .WithInitialPopulation(s => CreateFileTreeItem(_tree, folderItem, s)) .CreateView(y => new TreeItemContainer()); filesView.ObserveChanged() @@ -241,6 +240,7 @@ public partial class SolutionExplorerPanel : MarginContainer NotifyCollectionChangedAction.Remove => FreeTreeItem(innerEvent.OldItem.View.Value), _ => Task.CompletedTask })).AddTo(this); + return folderItem; } [RequiresGodotUiThread]