fix sln explorer folder init
This commit is contained in:
@@ -5,6 +5,7 @@
|
|||||||
[node name="NewDirectoryDialog" type="ConfirmationDialog"]
|
[node name="NewDirectoryDialog" type="ConfirmationDialog"]
|
||||||
oversampling_override = 1.0
|
oversampling_override = 1.0
|
||||||
title = "Create: Directory"
|
title = "Create: Directory"
|
||||||
|
position = Vector2i(0, 36)
|
||||||
size = Vector2i(405, 115)
|
size = Vector2i(405, 115)
|
||||||
visible = true
|
visible = true
|
||||||
script = ExtResource("1_4utum")
|
script = ExtResource("1_4utum")
|
||||||
|
|||||||
@@ -185,13 +185,13 @@ public partial class SolutionExplorerPanel : MarginContainer
|
|||||||
e.NewItem.View.Value = projectItem;
|
e.NewItem.View.Value = projectItem;
|
||||||
|
|
||||||
// Observe project folders
|
// Observe project folders
|
||||||
var foldersView = e.NewItem.Value.Folders
|
var foldersView = e.NewItem.Value.Folders.CreateView(y => new TreeItemContainer());
|
||||||
.WithInitialPopulation(s => CreateFolderTreeItem(_tree, projectItem, s))
|
foldersView.Unfiltered.ToList().ForEach(s => s.View.Value = CreateFolderTreeItem(_tree, projectItem, s.Value));
|
||||||
.CreateView(y => new TreeItemContainer());
|
|
||||||
foldersView.ObserveChanged()
|
foldersView.ObserveChanged()
|
||||||
.SubscribeAwait(async (innerEvent, ct) => await (innerEvent.Action switch
|
.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),
|
NotifyCollectionChangedAction.Remove => FreeTreeItem(innerEvent.OldItem.View.Value),
|
||||||
_ => Task.CompletedTask
|
_ => Task.CompletedTask
|
||||||
})).AddTo(this);
|
})).AddTo(this);
|
||||||
@@ -210,28 +210,27 @@ public partial class SolutionExplorerPanel : MarginContainer
|
|||||||
}
|
}
|
||||||
|
|
||||||
[RequiresGodotUiThread]
|
[RequiresGodotUiThread]
|
||||||
private void CreateFolderTreeItem(Tree tree, TreeItem parent, ViewChangedEvent<SharpIdeFolder, TreeItemContainer> e)
|
private TreeItem CreateFolderTreeItem(Tree tree, TreeItem parent, SharpIdeFolder sharpIdeFolder)
|
||||||
{
|
{
|
||||||
var folderItem = tree.CreateItem(parent);
|
var folderItem = tree.CreateItem(parent);
|
||||||
folderItem.SetText(0, e.NewItem.Value.Name);
|
folderItem.SetText(0, sharpIdeFolder.Name);
|
||||||
folderItem.SetIcon(0, FolderIcon);
|
folderItem.SetIcon(0, FolderIcon);
|
||||||
folderItem.SetMetadata(0, new RefCountedContainer<SharpIdeFolder>(e.NewItem.Value));
|
folderItem.SetMetadata(0, new RefCountedContainer<SharpIdeFolder>(sharpIdeFolder));
|
||||||
e.NewItem.View.Value = folderItem;
|
|
||||||
|
|
||||||
// Observe subfolders
|
// Observe subfolders
|
||||||
var subFoldersView = e.NewItem.Value.Folders
|
var subFoldersView = sharpIdeFolder.Folders.CreateView(y => new TreeItemContainer());
|
||||||
.WithInitialPopulation(s => CreateFolderTreeItem(_tree, folderItem, s))
|
subFoldersView.Unfiltered.ToList().ForEach(s => s.View.Value = CreateFolderTreeItem(_tree, folderItem, s.Value));
|
||||||
.CreateView(y => new TreeItemContainer());
|
|
||||||
subFoldersView.ObserveChanged()
|
subFoldersView.ObserveChanged()
|
||||||
.SubscribeAwait(async (innerEvent, ct) => await (innerEvent.Action switch
|
.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),
|
NotifyCollectionChangedAction.Remove => FreeTreeItem(innerEvent.OldItem.View.Value),
|
||||||
_ => Task.CompletedTask
|
_ => Task.CompletedTask
|
||||||
})).AddTo(this);
|
})).AddTo(this);
|
||||||
|
|
||||||
// Observe files
|
// Observe files
|
||||||
var filesView = e.NewItem.Value.Files
|
var filesView = sharpIdeFolder.Files
|
||||||
.WithInitialPopulation(s => CreateFileTreeItem(_tree, folderItem, s))
|
.WithInitialPopulation(s => CreateFileTreeItem(_tree, folderItem, s))
|
||||||
.CreateView(y => new TreeItemContainer());
|
.CreateView(y => new TreeItemContainer());
|
||||||
filesView.ObserveChanged()
|
filesView.ObserveChanged()
|
||||||
@@ -241,6 +240,7 @@ public partial class SolutionExplorerPanel : MarginContainer
|
|||||||
NotifyCollectionChangedAction.Remove => FreeTreeItem(innerEvent.OldItem.View.Value),
|
NotifyCollectionChangedAction.Remove => FreeTreeItem(innerEvent.OldItem.View.Value),
|
||||||
_ => Task.CompletedTask
|
_ => Task.CompletedTask
|
||||||
})).AddTo(this);
|
})).AddTo(this);
|
||||||
|
return folderItem;
|
||||||
}
|
}
|
||||||
|
|
||||||
[RequiresGodotUiThread]
|
[RequiresGodotUiThread]
|
||||||
|
|||||||
Reference in New Issue
Block a user