fix files
This commit is contained in:
@@ -8,16 +8,3 @@ public class TreeItemContainer
|
|||||||
{
|
{
|
||||||
public TreeItem? Value { get; set; }
|
public TreeItem? Value { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class ObservableTreeExtensions
|
|
||||||
{
|
|
||||||
public static ObservableHashSet<T> WithInitialPopulation<T>(this ObservableHashSet<T> hashSet, Action<ViewChangedEvent<T, TreeItemContainer>> func) where T : class
|
|
||||||
{
|
|
||||||
foreach (var existing in hashSet)
|
|
||||||
{
|
|
||||||
var viewChangedEvent = new ViewChangedEvent<T, TreeItemContainer>(NotifyCollectionChangedAction.Add, (existing, new TreeItemContainer()), (null!, null!), -1, -1, new SortOperation<T>());
|
|
||||||
func(viewChangedEvent);
|
|
||||||
}
|
|
||||||
return hashSet;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -160,13 +160,12 @@ public partial class SolutionExplorerPanel : MarginContainer
|
|||||||
_ => Task.CompletedTask
|
_ => Task.CompletedTask
|
||||||
})).AddTo(this);
|
})).AddTo(this);
|
||||||
|
|
||||||
var filesView = slnFolder.Files
|
var filesView = slnFolder.Files.CreateView(y => new TreeItemContainer());
|
||||||
.WithInitialPopulation(s => CreateFileTreeItem(_tree, folderItem, s))
|
filesView.Unfiltered.ToList().ForEach(s => s.View.Value = CreateFileTreeItem(_tree, folderItem, s.Value));
|
||||||
.CreateView(y => new TreeItemContainer());
|
|
||||||
filesView.ObserveChanged()
|
filesView.ObserveChanged()
|
||||||
.SubscribeAwait(async (innerEvent, ct) => await (innerEvent.Action switch
|
.SubscribeAwait(async (innerEvent, ct) => await (innerEvent.Action switch
|
||||||
{
|
{
|
||||||
NotifyCollectionChangedAction.Add => this.InvokeAsync(() => CreateFileTreeItem(_tree, folderItem, innerEvent)),
|
NotifyCollectionChangedAction.Add => this.InvokeAsync(() => innerEvent.NewItem.View.Value = CreateFileTreeItem(_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);
|
||||||
@@ -194,13 +193,12 @@ public partial class SolutionExplorerPanel : MarginContainer
|
|||||||
})).AddTo(this);
|
})).AddTo(this);
|
||||||
|
|
||||||
// Observe project files
|
// Observe project files
|
||||||
var filesView = projectModel.Files
|
var filesView = projectModel.Files.CreateView(y => new TreeItemContainer());
|
||||||
.WithInitialPopulation(s => CreateFileTreeItem(_tree, projectItem, s))
|
filesView.Unfiltered.ToList().ForEach(s => s.View.Value = CreateFileTreeItem(_tree, projectItem, s.Value));
|
||||||
.CreateView(y => new TreeItemContainer());
|
|
||||||
filesView.ObserveChanged()
|
filesView.ObserveChanged()
|
||||||
.SubscribeAwait(async (innerEvent, ct) => await (innerEvent.Action switch
|
.SubscribeAwait(async (innerEvent, ct) => await (innerEvent.Action switch
|
||||||
{
|
{
|
||||||
NotifyCollectionChangedAction.Add => this.InvokeAsync(() => CreateFileTreeItem(_tree, projectItem, innerEvent)),
|
NotifyCollectionChangedAction.Add => this.InvokeAsync(() => innerEvent.NewItem.View.Value = CreateFileTreeItem(_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);
|
||||||
@@ -228,13 +226,12 @@ public partial class SolutionExplorerPanel : MarginContainer
|
|||||||
})).AddTo(this);
|
})).AddTo(this);
|
||||||
|
|
||||||
// Observe files
|
// Observe files
|
||||||
var filesView = sharpIdeFolder.Files
|
var filesView = sharpIdeFolder.Files.CreateView(y => new TreeItemContainer());
|
||||||
.WithInitialPopulation(s => CreateFileTreeItem(_tree, folderItem, s))
|
filesView.Unfiltered.ToList().ForEach(s => s.View.Value = CreateFileTreeItem(_tree, folderItem, s.Value));
|
||||||
.CreateView(y => new TreeItemContainer());
|
|
||||||
filesView.ObserveChanged()
|
filesView.ObserveChanged()
|
||||||
.SubscribeAwait(async (innerEvent, ct) => await (innerEvent.Action switch
|
.SubscribeAwait(async (innerEvent, ct) => await (innerEvent.Action switch
|
||||||
{
|
{
|
||||||
NotifyCollectionChangedAction.Add => this.InvokeAsync(() => CreateFileTreeItem(_tree, folderItem, innerEvent)),
|
NotifyCollectionChangedAction.Add => this.InvokeAsync(() => innerEvent.NewItem.View.Value = CreateFileTreeItem(_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);
|
||||||
@@ -242,13 +239,13 @@ public partial class SolutionExplorerPanel : MarginContainer
|
|||||||
}
|
}
|
||||||
|
|
||||||
[RequiresGodotUiThread]
|
[RequiresGodotUiThread]
|
||||||
private void CreateFileTreeItem(Tree tree, TreeItem parent, ViewChangedEvent<SharpIdeFile, TreeItemContainer> e)
|
private TreeItem CreateFileTreeItem(Tree tree, TreeItem parent, SharpIdeFile sharpIdeFile)
|
||||||
{
|
{
|
||||||
var fileItem = tree.CreateItem(parent);
|
var fileItem = tree.CreateItem(parent);
|
||||||
fileItem.SetText(0, e.NewItem.Value.Name);
|
fileItem.SetText(0, sharpIdeFile.Name);
|
||||||
fileItem.SetIcon(0, CsharpFileIcon);
|
fileItem.SetIcon(0, CsharpFileIcon);
|
||||||
fileItem.SetMetadata(0, new RefCountedContainer<SharpIdeFile>(e.NewItem.Value));
|
fileItem.SetMetadata(0, new RefCountedContainer<SharpIdeFile>(sharpIdeFile));
|
||||||
e.NewItem.View.Value = fileItem;
|
return fileItem;
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task FreeTreeItem(TreeItem? item)
|
private async Task FreeTreeItem(TreeItem? item)
|
||||||
|
|||||||
Reference in New Issue
Block a user