diff --git a/src/ViewModels/Welcome.cs b/src/ViewModels/Welcome.cs index 75d7368b..a6fa1a8a 100644 --- a/src/ViewModels/Welcome.cs +++ b/src/ViewModels/Welcome.cs @@ -1,6 +1,7 @@ using System; using Avalonia.Collections; +using Avalonia.Controls; using CommunityToolkit.Mvvm.ComponentModel; @@ -79,7 +80,7 @@ namespace SourceGit.ViewModels SearchFilter = string.Empty; } - public void AddFolder() + public void AddRootNode() { if (PopupHost.CanCreatePopup()) PopupHost.ShowPopup(new CreateGroup(null)); @@ -90,6 +91,72 @@ namespace SourceGit.ViewModels Preference.MoveNode(from, to); } + public ContextMenu CreateContextMenu(RepositoryNode node) + { + var menu = new ContextMenu(); + var hasRepo = Preference.FindRepository(node.Id) != null; + + var edit = new MenuItem(); + edit.Header = App.Text("Welcome.Edit"); + edit.Icon = App.CreateMenuIcon("Icons.Edit"); + edit.IsEnabled = !node.IsRepository || hasRepo; + edit.Click += (_, e) => + { + node.Edit(); + e.Handled = true; + }; + menu.Items.Add(edit); + + if (node.IsRepository) + { + var explore = new MenuItem(); + explore.Header = App.Text("Repository.Explore"); + explore.Icon = App.CreateMenuIcon("Icons.Folder.Open"); + explore.IsEnabled = hasRepo; + explore.Click += (_, e) => + { + node.OpenInFileManager(); + e.Handled = true; + }; + menu.Items.Add(explore); + + var terminal = new MenuItem(); + terminal.Header = App.Text("Repository.Terminal"); + terminal.Icon = App.CreateMenuIcon("Icons.Terminal"); + terminal.IsEnabled = hasRepo; + terminal.Click += (_, e) => + { + node.OpenTerminal(); + e.Handled = true; + }; + menu.Items.Add(terminal); + } + else + { + var addSubFolder = new MenuItem(); + addSubFolder.Header = App.Text("Welcome.AddSubFolder"); + addSubFolder.Icon = App.CreateMenuIcon("Icons.Folder.Add"); + addSubFolder.Click += (_, e) => + { + node.AddSubFolder(); + e.Handled = true; + }; + menu.Items.Add(addSubFolder); + } + + var delete = new MenuItem(); + delete.Header = App.Text("Welcome.Delete"); + delete.Icon = App.CreateMenuIcon("Icons.Clear"); + delete.Click += (_, e) => + { + node.Delete(); + e.Handled = true; + }; + menu.Items.Add(delete); + + return menu; + } + private void Referesh() { if (string.IsNullOrWhiteSpace(_searchFilter)) diff --git a/src/Views/Welcome.axaml b/src/Views/Welcome.axaml index 3514dcb5..96e6bb14 100644 --- a/src/Views/Welcome.axaml +++ b/src/Views/Welcome.axaml @@ -57,7 +57,7 @@ LostFocus="OnTreeViewLostFocus"> - + @@ -70,37 +70,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -109,11 +78,12 @@