fix sln folders
This commit is contained in:
@@ -116,13 +116,12 @@ public partial class SolutionExplorerPanel : MarginContainer
|
|||||||
})).AddTo(this);
|
})).AddTo(this);
|
||||||
|
|
||||||
// Observe Solution Folders
|
// Observe Solution Folders
|
||||||
var foldersView = solution.SlnFolders
|
var foldersView = solution.SlnFolders.CreateView(y => new TreeItemContainer());
|
||||||
.WithInitialPopulation(s => CreateSlnFolderTreeItem(_tree, _rootItem, s))
|
foldersView.Unfiltered.ToList().ForEach(s => s.View.Value = CreateSlnFolderTreeItem(_tree, rootItem, s.Value));
|
||||||
.CreateView(y => new TreeItemContainer());
|
|
||||||
foldersView.ObserveChanged()
|
foldersView.ObserveChanged()
|
||||||
.SubscribeAwait(async (e, ct) => await (e.Action switch
|
.SubscribeAwait(async (e, ct) => await (e.Action switch
|
||||||
{
|
{
|
||||||
NotifyCollectionChangedAction.Add => this.InvokeAsync(() => CreateSlnFolderTreeItem(_tree, _rootItem, e)),
|
NotifyCollectionChangedAction.Add => this.InvokeAsync(() => e.NewItem.View.Value = CreateSlnFolderTreeItem(_tree, _rootItem, e.NewItem.Value)),
|
||||||
NotifyCollectionChangedAction.Remove => FreeTreeItem(e.OldItem.View.Value),
|
NotifyCollectionChangedAction.Remove => FreeTreeItem(e.OldItem.View.Value),
|
||||||
_ => Task.CompletedTask
|
_ => Task.CompletedTask
|
||||||
})).AddTo(this);
|
})).AddTo(this);
|
||||||
@@ -132,27 +131,26 @@ public partial class SolutionExplorerPanel : MarginContainer
|
|||||||
}
|
}
|
||||||
|
|
||||||
[RequiresGodotUiThread]
|
[RequiresGodotUiThread]
|
||||||
private void CreateSlnFolderTreeItem(Tree tree, TreeItem parent, ViewChangedEvent<SharpIdeSolutionFolder, TreeItemContainer> e)
|
private TreeItem CreateSlnFolderTreeItem(Tree tree, TreeItem parent, SharpIdeSolutionFolder slnFolder)
|
||||||
{
|
{
|
||||||
var folderItem = tree.CreateItem(parent);
|
var folderItem = tree.CreateItem(parent);
|
||||||
folderItem.SetText(0, e.NewItem.Value.Name);
|
folderItem.SetText(0, slnFolder.Name);
|
||||||
folderItem.SetIcon(0, SlnFolderIcon);
|
folderItem.SetIcon(0, SlnFolderIcon);
|
||||||
folderItem.SetMetadata(0, new RefCountedContainer<SharpIdeSolutionFolder>(e.NewItem.Value));
|
folderItem.SetMetadata(0, new RefCountedContainer<SharpIdeSolutionFolder>(slnFolder));
|
||||||
e.NewItem.View.Value = folderItem;
|
|
||||||
|
|
||||||
// Observe folder sub-collections
|
// Observe folder sub-collections
|
||||||
var subFoldersView = e.NewItem.Value.Folders
|
var subFoldersView = slnFolder.Folders.CreateView(y => new TreeItemContainer());
|
||||||
.WithInitialPopulation(s => CreateSlnFolderTreeItem(_tree, folderItem, s))
|
subFoldersView.Unfiltered.ToList().ForEach(s => s.View.Value = CreateSlnFolderTreeItem(_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(() => CreateSlnFolderTreeItem(_tree, folderItem, innerEvent)),
|
NotifyCollectionChangedAction.Add => this.InvokeAsync(() => innerEvent.NewItem.View.Value = CreateSlnFolderTreeItem(_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);
|
||||||
|
|
||||||
var projectsView = e.NewItem.Value.Projects.CreateView(y => new TreeItemContainer());
|
var projectsView = slnFolder.Projects.CreateView(y => new TreeItemContainer());
|
||||||
projectsView.Unfiltered.ToList().ForEach(s => s.View.Value = CreateProjectTreeItem(_tree, folderItem, s.Value));
|
projectsView.Unfiltered.ToList().ForEach(s => s.View.Value = CreateProjectTreeItem(_tree, folderItem, s.Value));
|
||||||
projectsView.ObserveChanged()
|
projectsView.ObserveChanged()
|
||||||
.SubscribeAwait(async (innerEvent, ct) => await (innerEvent.Action switch
|
.SubscribeAwait(async (innerEvent, ct) => await (innerEvent.Action switch
|
||||||
@@ -162,7 +160,7 @@ public partial class SolutionExplorerPanel : MarginContainer
|
|||||||
_ => Task.CompletedTask
|
_ => Task.CompletedTask
|
||||||
})).AddTo(this);
|
})).AddTo(this);
|
||||||
|
|
||||||
var filesView = e.NewItem.Value.Files
|
var filesView = slnFolder.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()
|
||||||
@@ -172,6 +170,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