From d5885da68343404e1c1e8fdfb2e24dc8c1b9c605 Mon Sep 17 00:00:00 2001 From: Gadfly Date: Mon, 24 Jun 2024 10:54:44 +0800 Subject: [PATCH] fix: show AddFolder menu in context menu of RepositoryNode --- src/ViewModels/Preference.cs | 7 +++++++ src/ViewModels/Welcome.cs | 22 +++++++++++++++++++--- 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/src/ViewModels/Preference.cs b/src/ViewModels/Preference.cs index 5a152f2d..2b769528 100644 --- a/src/ViewModels/Preference.cs +++ b/src/ViewModels/Preference.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.IO; +using System.Linq; using System.Text.Json; using System.Text.Json.Serialization; @@ -481,6 +482,12 @@ namespace SourceGit.ViewModels File.WriteAllText(_savePath, data); } + public static RepositoryNode FindParentNode(RepositoryNode node) + { + var container = FindNodeContainer(node, _instance._repositoryNodes); + return container == null ? null : _instance._repositoryNodes.FirstOrDefault(parentNode => parentNode.SubNodes == container); + } + private static RepositoryNode FindNodeRecursive(string id, AvaloniaList collection) { foreach (var node in collection) diff --git a/src/ViewModels/Welcome.cs b/src/ViewModels/Welcome.cs index 415c56ee..ee66a37d 100644 --- a/src/ViewModels/Welcome.cs +++ b/src/ViewModels/Welcome.cs @@ -23,7 +23,7 @@ namespace SourceGit.ViewModels set { if (SetProperty(ref _searchFilter, value)) - Referesh(); + Refresh(); } } @@ -122,6 +122,9 @@ namespace SourceGit.ViewModels e.Handled = true; }; menu.Items.Add(edit); + + var parentNode = Preference.FindParentNode(node); + var folderNode = !node.IsRepository ? node : (parentNode is { IsRepository: false } ? parentNode : null); if (node.IsRepository) { @@ -147,6 +150,19 @@ namespace SourceGit.ViewModels }; menu.Items.Add(terminal); } + + if (folderNode == null) + { + var addFolder = new MenuItem(); + addFolder.Header = App.Text("Welcome.AddRootFolder"); + addFolder.Icon = App.CreateMenuIcon("Icons.Folder.Add"); + addFolder.Click += (_, e) => + { + AddRootNode(); + e.Handled = true; + }; + menu.Items.Add(addFolder); + } else { var addSubFolder = new MenuItem(); @@ -154,7 +170,7 @@ namespace SourceGit.ViewModels addSubFolder.Icon = App.CreateMenuIcon("Icons.Folder.Add"); addSubFolder.Click += (_, e) => { - node.AddSubFolder(); + folderNode.AddSubFolder(); e.Handled = true; }; menu.Items.Add(addSubFolder); @@ -173,7 +189,7 @@ namespace SourceGit.ViewModels return menu; } - private void Referesh() + private void Refresh() { if (string.IsNullOrWhiteSpace(_searchFilter)) {