refactor
This commit is contained in:
@@ -0,0 +1,60 @@
|
|||||||
|
using Godot;
|
||||||
|
using SharpIDE.Application.Features.SolutionDiscovery;
|
||||||
|
using SharpIDE.Application.Features.SolutionDiscovery.VsPersistence;
|
||||||
|
using SharpIDE.Godot.Features.Problems;
|
||||||
|
|
||||||
|
namespace SharpIDE.Godot.Features.SolutionExplorer;
|
||||||
|
|
||||||
|
public partial class SolutionExplorerPanel
|
||||||
|
{
|
||||||
|
private void CopySelectedNodeToSlnExplorerClipboard()
|
||||||
|
{
|
||||||
|
var selected = _tree.GetSelected();
|
||||||
|
if (selected is null) return;
|
||||||
|
var genericMetadata = selected.GetMetadata(0).As<RefCounted?>();
|
||||||
|
if (genericMetadata is RefCountedContainer<SharpIdeFile> fileContainer)
|
||||||
|
{
|
||||||
|
_itemOnClipboard = (fileContainer.Item, ClipboardOperation.Copy);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void CutSelectedNodeToSlnExplorerClipboard()
|
||||||
|
{
|
||||||
|
var selected = _tree.GetSelected();
|
||||||
|
if (selected is null) return;
|
||||||
|
var genericMetadata = selected.GetMetadata(0).As<RefCounted?>();
|
||||||
|
if (genericMetadata is RefCountedContainer<SharpIdeFile> fileContainer)
|
||||||
|
{
|
||||||
|
_itemOnClipboard = (fileContainer.Item, ClipboardOperation.Cut);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ClearSlnExplorerClipboard()
|
||||||
|
{
|
||||||
|
_itemOnClipboard = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void CopyNodeFromClipboardToSelectedNode()
|
||||||
|
{
|
||||||
|
var selected = _tree.GetSelected();
|
||||||
|
if (selected is null || _itemOnClipboard is null) return;
|
||||||
|
var genericMetadata = selected.GetMetadata(0).As<RefCounted?>();
|
||||||
|
IFolderOrProject? folderOrProject = genericMetadata switch
|
||||||
|
{
|
||||||
|
RefCountedContainer<SharpIdeFolder> f => f.Item,
|
||||||
|
RefCountedContainer<SharpIdeProjectModel> p => p.Item,
|
||||||
|
_ => null
|
||||||
|
};
|
||||||
|
if (folderOrProject is null) return;
|
||||||
|
|
||||||
|
var (fileToPaste, operation) = _itemOnClipboard.Value;
|
||||||
|
_itemOnClipboard = null;
|
||||||
|
_ = Task.GodotRun(async () =>
|
||||||
|
{
|
||||||
|
if (operation is ClipboardOperation.Copy)
|
||||||
|
{
|
||||||
|
await _ideFileOperationsService.CopyFile(folderOrProject, fileToPaste.Path, fileToPaste.Name);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
uid://3vyxuek1gy86
|
||||||
@@ -41,49 +41,17 @@ public partial class SolutionExplorerPanel : MarginContainer
|
|||||||
// Copy
|
// Copy
|
||||||
if (@event is InputEventKey { Pressed: true, Keycode: Key.C, CtrlPressed: true })
|
if (@event is InputEventKey { Pressed: true, Keycode: Key.C, CtrlPressed: true })
|
||||||
{
|
{
|
||||||
var selected = _tree.GetSelected();
|
CopySelectedNodeToSlnExplorerClipboard();
|
||||||
if (selected is null) return;
|
|
||||||
var genericMetadata = selected.GetMetadata(0).As<RefCounted?>();
|
|
||||||
if (genericMetadata is RefCountedContainer<SharpIdeFile> fileContainer)
|
|
||||||
{
|
|
||||||
_itemOnClipboard = (fileContainer.Item, ClipboardOperation.Copy);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
// Cut
|
// Cut
|
||||||
else if (@event is InputEventKey { Pressed: true, Keycode: Key.X, CtrlPressed: true })
|
else if (@event is InputEventKey { Pressed: true, Keycode: Key.X, CtrlPressed: true })
|
||||||
{
|
{
|
||||||
var selected = _tree.GetSelected();
|
CutSelectedNodeToSlnExplorerClipboard();
|
||||||
if (selected is null) return;
|
|
||||||
var genericMetadata = selected.GetMetadata(0).As<RefCounted?>();
|
|
||||||
if (genericMetadata is RefCountedContainer<SharpIdeFile> fileContainer)
|
|
||||||
{
|
|
||||||
_itemOnClipboard = (fileContainer.Item, ClipboardOperation.Cut);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
// Paste
|
// Paste
|
||||||
else if (@event is InputEventKey { Pressed: true, Keycode: Key.V, CtrlPressed: true })
|
else if (@event is InputEventKey { Pressed: true, Keycode: Key.V, CtrlPressed: true })
|
||||||
{
|
{
|
||||||
var selected = _tree.GetSelected();
|
CopyNodeFromClipboardToSelectedNode();
|
||||||
if (selected is null || _itemOnClipboard is null) return;
|
|
||||||
var genericMetadata = selected.GetMetadata(0).As<RefCounted?>();
|
|
||||||
IFolderOrProject? folderOrProject = genericMetadata switch
|
|
||||||
{
|
|
||||||
RefCountedContainer<SharpIdeFolder> f => f.Item,
|
|
||||||
RefCountedContainer<SharpIdeProjectModel> p => p.Item,
|
|
||||||
_ => null
|
|
||||||
};
|
|
||||||
if (folderOrProject is null) return;
|
|
||||||
|
|
||||||
var (fileToPaste, operation) = _itemOnClipboard.Value;
|
|
||||||
_itemOnClipboard = null;
|
|
||||||
_ = Task.GodotRun(async () =>
|
|
||||||
{
|
|
||||||
if (operation is ClipboardOperation.Copy)
|
|
||||||
{
|
|
||||||
await _ideFileOperationsService.CopyFile(folderOrProject, fileToPaste.Path, fileToPaste.Name);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user