enhance: disable some MenuItems if repository that linked by node has been auto-removed from Preference (#90).

This commit is contained in:
leo 2024-04-28 13:51:44 +08:00
parent 9b5e8429b9
commit 32e685622b
3 changed files with 81 additions and 34 deletions

View file

@ -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))