Skip to content

Commit 1c568b4

Browse files
committed
sln explorer - SolutionContextMenu
1 parent 5ce6db6 commit 1c568b4

File tree

2 files changed

+48
-0
lines changed

2 files changed

+48
-0
lines changed
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
using Godot;
2+
using SharpIDE.Application.Features.SolutionDiscovery;
3+
4+
namespace SharpIDE.Godot.Features.SolutionExplorer;
5+
6+
file enum SolutionContextMenuOptions
7+
{
8+
Add = 1,
9+
ReloadSolution
10+
}
11+
12+
file enum SolutionAddSubmenuOptions
13+
{
14+
SolutionFolder = 1
15+
}
16+
17+
public partial class SolutionExplorerPanel
18+
{
19+
private void OpenContextMenuSolution(SharpIdeSolutionModel solution, TreeItem solutionTreeItem)
20+
{
21+
var menu = new PopupMenu();
22+
AddChild(menu);
23+
24+
var createNewSubmenu = new PopupMenu();
25+
menu.AddSubmenuNodeItem("Add", createNewSubmenu, (int)SolutionContextMenuOptions.Add);
26+
menu.SetItemDisabled(menu.GetItemIndex((int)SolutionContextMenuOptions.Add), true);
27+
createNewSubmenu.AddItem("New Solution Folder", (int)SolutionAddSubmenuOptions.SolutionFolder);
28+
createNewSubmenu.IdPressed += id => OnSolutionAddSubmenuPressed(id, solution);
29+
30+
menu.PopupHide += () => menu.QueueFree();
31+
menu.IdPressed += id =>
32+
{
33+
var actionId = (SolutionContextMenuOptions)id;
34+
};
35+
36+
var globalMousePosition = GetGlobalMousePosition();
37+
menu.Position = new Vector2I((int)globalMousePosition.X, (int)globalMousePosition.Y);
38+
menu.Popup();
39+
}
40+
41+
private void OnSolutionAddSubmenuPressed(long id, SharpIdeSolutionModel solution)
42+
{
43+
var actionId = (SolutionAddSubmenuOptions)id;
44+
}
45+
}

src/SharpIDE.Godot/Features/SolutionExplorer/SolutionExplorerPanel.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,8 @@ private void TreeOnItemMouseSelected(Vector2 mousePosition, long mouseButtonInde
9494
case (MouseButtonMask.Right, SharpIdeFolder folder): OpenContextMenuFolder(folder, selected); break;
9595
case (MouseButtonMask.Left, SharpIdeSolutionFolder): break;
9696
case (MouseButtonMask.Right, SharpIdeSolutionFolder slnFolder): OpenContextMenuSlnFolder(slnFolder, selected); break;
97+
case (MouseButtonMask.Left, SharpIdeSolutionModel): break;
98+
case (MouseButtonMask.Right, SharpIdeSolutionModel solution): OpenContextMenuSolution(solution, selected); break;
9799
default: break;
98100
}
99101
}
@@ -162,6 +164,7 @@ public async Task BindToSolution(SharpIdeSolutionModel solution)
162164
var rootItem = _tree.CreateItem();
163165
rootItem.SetText(0, solution.Name);
164166
rootItem.SetIcon(0, SlnIcon);
167+
rootItem.SharpIdeNode = solution;
165168
_rootItem = rootItem;
166169

167170
var disposableBuilder = new DisposableBuilder();

0 commit comments

Comments
 (0)