move folders v1
This commit is contained in:
@@ -107,7 +107,7 @@ public class SharpIdeSolutionModificationService(FileChangedService fileChangedS
|
|||||||
var parentFolderOrProject = (IFolderOrProject)folder.Parent;
|
var parentFolderOrProject = (IFolderOrProject)folder.Parent;
|
||||||
var currentPosition = parentFolderOrProject.Folders.IndexOf(folder);
|
var currentPosition = parentFolderOrProject.Folders.IndexOf(folder);
|
||||||
var insertionPosition = GetMovePosition(parentFolderOrProject, folder);
|
var insertionPosition = GetMovePosition(parentFolderOrProject, folder);
|
||||||
if (currentPosition != insertionPosition) parentFolderOrProject.Files.Move(currentPosition, insertionPosition);
|
if (currentPosition != insertionPosition) parentFolderOrProject.Folders.Move(currentPosition, insertionPosition);
|
||||||
|
|
||||||
var stack = new Stack<SharpIdeFolder>();
|
var stack = new Stack<SharpIdeFolder>();
|
||||||
stack.Push(folder);
|
stack.Push(folder);
|
||||||
|
|||||||
@@ -226,6 +226,7 @@ public partial class SolutionExplorerPanel : MarginContainer
|
|||||||
.SubscribeAwait(async (innerEvent, ct) => await (innerEvent.Action switch
|
.SubscribeAwait(async (innerEvent, ct) => await (innerEvent.Action switch
|
||||||
{
|
{
|
||||||
NotifyCollectionChangedAction.Add => this.InvokeAsync(() => innerEvent.NewItem.View.Value = CreateFolderTreeItem(_tree, projectItem, innerEvent.NewItem.Value, innerEvent.NewStartingIndex)),
|
NotifyCollectionChangedAction.Add => this.InvokeAsync(() => innerEvent.NewItem.View.Value = CreateFolderTreeItem(_tree, projectItem, innerEvent.NewItem.Value, innerEvent.NewStartingIndex)),
|
||||||
|
NotifyCollectionChangedAction.Move => MoveTreeItem(_tree, innerEvent.NewItem.View, innerEvent.NewItem.Value, innerEvent.OldStartingIndex, innerEvent.NewStartingIndex),
|
||||||
NotifyCollectionChangedAction.Remove => FreeTreeItem(innerEvent.OldItem.View.Value),
|
NotifyCollectionChangedAction.Remove => FreeTreeItem(innerEvent.OldItem.View.Value),
|
||||||
_ => Task.CompletedTask
|
_ => Task.CompletedTask
|
||||||
})).AddTo(this);
|
})).AddTo(this);
|
||||||
@@ -237,6 +238,7 @@ public partial class SolutionExplorerPanel : MarginContainer
|
|||||||
.SubscribeAwait(async (innerEvent, ct) => await (innerEvent.Action switch
|
.SubscribeAwait(async (innerEvent, ct) => await (innerEvent.Action switch
|
||||||
{
|
{
|
||||||
NotifyCollectionChangedAction.Add => this.InvokeAsync(() => innerEvent.NewItem.View.Value = CreateFileTreeItem(_tree, projectItem, innerEvent.NewItem.Value, innerEvent.NewStartingIndex)),
|
NotifyCollectionChangedAction.Add => this.InvokeAsync(() => innerEvent.NewItem.View.Value = CreateFileTreeItem(_tree, projectItem, innerEvent.NewItem.Value, innerEvent.NewStartingIndex)),
|
||||||
|
NotifyCollectionChangedAction.Move => MoveTreeItem(_tree, innerEvent.NewItem.View, innerEvent.NewItem.Value, innerEvent.OldStartingIndex, innerEvent.NewStartingIndex),
|
||||||
NotifyCollectionChangedAction.Remove => FreeTreeItem(innerEvent.OldItem.View.Value),
|
NotifyCollectionChangedAction.Remove => FreeTreeItem(innerEvent.OldItem.View.Value),
|
||||||
_ => Task.CompletedTask
|
_ => Task.CompletedTask
|
||||||
})).AddTo(this);
|
})).AddTo(this);
|
||||||
@@ -265,6 +267,7 @@ public partial class SolutionExplorerPanel : MarginContainer
|
|||||||
.SubscribeAwait(async (innerEvent, ct) => await (innerEvent.Action switch
|
.SubscribeAwait(async (innerEvent, ct) => await (innerEvent.Action switch
|
||||||
{
|
{
|
||||||
NotifyCollectionChangedAction.Add => this.InvokeAsync(() => innerEvent.NewItem.View.Value = CreateFolderTreeItem(_tree, folderItem, innerEvent.NewItem.Value, innerEvent.NewStartingIndex)),
|
NotifyCollectionChangedAction.Add => this.InvokeAsync(() => innerEvent.NewItem.View.Value = CreateFolderTreeItem(_tree, folderItem, innerEvent.NewItem.Value, innerEvent.NewStartingIndex)),
|
||||||
|
NotifyCollectionChangedAction.Move => MoveTreeItem(_tree, innerEvent.NewItem.View, innerEvent.NewItem.Value, innerEvent.OldStartingIndex, innerEvent.NewStartingIndex),
|
||||||
NotifyCollectionChangedAction.Remove => FreeTreeItem(innerEvent.OldItem.View.Value),
|
NotifyCollectionChangedAction.Remove => FreeTreeItem(innerEvent.OldItem.View.Value),
|
||||||
_ => Task.CompletedTask
|
_ => Task.CompletedTask
|
||||||
})).AddTo(this);
|
})).AddTo(this);
|
||||||
@@ -310,14 +313,19 @@ public partial class SolutionExplorerPanel : MarginContainer
|
|||||||
return fileItem;
|
return fileItem;
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task MoveTreeItem(Tree tree, TreeItemContainer treeItemContainer, SharpIdeFile sharpIdeFile, int oldStartingIndex, int newStartingIndex)
|
private async Task MoveTreeItem(Tree tree, TreeItemContainer treeItemContainer, IFileOrFolder fileOrFolder, int oldStartingIndex, int newStartingIndex)
|
||||||
{
|
{
|
||||||
if (oldStartingIndex == newStartingIndex) throw new InvalidOperationException("Old and new starting indexes are the same");
|
if (oldStartingIndex == newStartingIndex) throw new InvalidOperationException("Old and new starting indexes are the same");
|
||||||
var treeItem = treeItemContainer.Value!;
|
var treeItem = treeItemContainer.Value!;
|
||||||
var sharpIdeParent = sharpIdeFile.Parent as IFolderOrProject;
|
var isFile = fileOrFolder is SharpIdeFile;
|
||||||
|
if (isFile)
|
||||||
|
{
|
||||||
|
var sharpIdeParent = fileOrFolder.Parent as IFolderOrProject;
|
||||||
Guard.Against.Null(sharpIdeParent, nameof(sharpIdeParent));
|
Guard.Against.Null(sharpIdeParent, nameof(sharpIdeParent));
|
||||||
var folderCount = sharpIdeParent.Folders.Count;
|
var folderCount = sharpIdeParent.Folders.Count;
|
||||||
newStartingIndex += folderCount;
|
newStartingIndex += folderCount;
|
||||||
|
}
|
||||||
|
|
||||||
var treeParent = treeItem.GetParent()!;
|
var treeParent = treeItem.GetParent()!;
|
||||||
await this.InvokeAsync(() =>
|
await this.InvokeAsync(() =>
|
||||||
{
|
{
|
||||||
@@ -327,7 +335,7 @@ public partial class SolutionExplorerPanel : MarginContainer
|
|||||||
newItem.SetText(0, treeItem.GetText(0));
|
newItem.SetText(0, treeItem.GetText(0));
|
||||||
newItem.SetIcon(0, treeItem.GetIcon(0));
|
newItem.SetIcon(0, treeItem.GetIcon(0));
|
||||||
newItem.SetMetadata(0, treeItem.GetMetadata(0));
|
newItem.SetMetadata(0, treeItem.GetMetadata(0));
|
||||||
newItem.SetCustomColor(0, treeItem.GetCustomColor(0));
|
if (isFile) newItem.SetCustomColor(0, treeItem.GetCustomColor(0));
|
||||||
treeItemContainer.Value = newItem;
|
treeItemContainer.Value = newItem;
|
||||||
treeItem.Free();
|
treeItem.Free();
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user