code_review: PR #1532

- remove `MenuItemExtension`
- display `Tag` as hotkey tips when `InputGesture` is null
- remove `Avalonia.Input` reference in `ViewModels`
- rewrite `InteractiveRebase` view to avoid using `Tag` in menu item

Signed-off-by: leo <longshuang@msn.cn>
This commit is contained in:
leo
2025-07-07 12:44:31 +08:00
parent dd3c658a0d
commit b85f100d84
8 changed files with 86 additions and 124 deletions

View File

@@ -1,11 +1,10 @@
using System;
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Text;
using Avalonia.Controls;
using Avalonia.Input;
using Avalonia.Platform.Storage;
using CommunityToolkit.Mvvm.ComponentModel;
@@ -429,7 +428,7 @@ namespace SourceGit.ViewModels
var copyMultipleInfo = new MenuItem();
copyMultipleInfo.Header = App.Text("CommitCM.CopySHA") + " - " + App.Text("CommitCM.CopySubject");
copyMultipleInfo.Icon = App.CreateMenuIcon("Icons.Info");
copyMultipleInfo.InputGesture = new KeyGesture(Key.C, OperatingSystem.IsMacOS() ? KeyModifiers.Meta : KeyModifiers.Control);
copyMultipleInfo.Tag = OperatingSystem.IsMacOS() ? "⌘+C" : "Ctrl+C";
copyMultipleInfo.Click += async (_, e) =>
{
var builder = new StringBuilder();
@@ -726,7 +725,7 @@ namespace SourceGit.ViewModels
var createBranch = new MenuItem();
createBranch.Icon = App.CreateMenuIcon("Icons.Branch.Add");
createBranch.Header = App.Text("CreateBranch");
createBranch.InputGesture = new KeyGesture(Key.B, OperatingSystem.IsMacOS() ? KeyModifiers.Meta : KeyModifiers.Control);
createBranch.Tag = OperatingSystem.IsMacOS() ? "⌘+B" : "Ctrl+B";
createBranch.Click += (_, e) =>
{
if (_repo.CanCreatePopup())
@@ -842,7 +841,7 @@ namespace SourceGit.ViewModels
var copyInfo = new MenuItem();
copyInfo.Header = App.Text("CommitCM.CopySHA") + " - " + App.Text("CommitCM.CopySubject");
copyInfo.Icon = App.CreateMenuIcon("Icons.Info");
copyInfo.InputGesture = new KeyGesture(Key.C, OperatingSystem.IsMacOS() ? KeyModifiers.Meta : KeyModifiers.Control);
copyInfo.Tag = OperatingSystem.IsMacOS() ? "⌘+C" : "Ctrl+C";
copyInfo.Click += async (_, e) =>
{
await App.CopyTextAsync($"{commit.SHA.AsSpan(0, 10)} - {commit.Subject}");

View File

@@ -3,7 +3,6 @@ using System.IO;
using Avalonia.Collections;
using Avalonia.Controls;
using Avalonia.Input;
using Avalonia.Threading;
using CommunityToolkit.Mvvm.ComponentModel;
@@ -468,7 +467,7 @@ namespace SourceGit.ViewModels
var menu = new ContextMenu();
var close = new MenuItem();
close.Header = App.Text("PageTabBar.Tab.Close");
close.InputGesture = KeyGesture.Parse(OperatingSystem.IsMacOS() ? "⌘+W" : "Ctrl+W");
close.Tag = OperatingSystem.IsMacOS() ? "⌘+W" : "Ctrl+W";
close.Click += (_, e) =>
{
CloseTab(page);

View File

@@ -1775,7 +1775,7 @@ namespace SourceGit.ViewModels
var dateOrder = new MenuItem();
dateOrder.Header = App.Text("Repository.HistoriesOrder.ByDate");
dateOrder.SetValue(Views.MenuItemExtension.CommandProperty, "--date-order");
dateOrder.Tag = "--date-order";
if (!_settings.EnableTopoOrderInHistories)
dateOrder.Icon = App.CreateMenuIcon("Icons.Check");
dateOrder.Click += (_, ev) =>
@@ -1791,7 +1791,7 @@ namespace SourceGit.ViewModels
var topoOrder = new MenuItem();
topoOrder.Header = App.Text("Repository.HistoriesOrder.Topo");
topoOrder.SetValue(Views.MenuItemExtension.CommandProperty, "--top-order");
topoOrder.Tag = "--topo-order";
if (_settings.EnableTopoOrderInHistories)
topoOrder.Icon = App.CreateMenuIcon("Icons.Check");
topoOrder.Click += (_, ev) =>

View File

@@ -4,7 +4,6 @@ using System.IO;
using System.Threading.Tasks;
using Avalonia.Controls;
using Avalonia.Input;
using Avalonia.Platform.Storage;
using Avalonia.Threading;
@@ -677,7 +676,7 @@ namespace SourceGit.ViewModels
var stage = new MenuItem();
stage.Header = App.Text("FileCM.Stage");
stage.Icon = App.CreateMenuIcon("Icons.File.Add");
stage.InputGesture = new KeyGesture(Key.Enter);
stage.Tag = "Enter/Space";
stage.Click += (_, e) =>
{
StageChanges(_selectedUnstaged, null);
@@ -687,7 +686,7 @@ namespace SourceGit.ViewModels
var discard = new MenuItem();
discard.Header = App.Text("FileCM.Discard");
discard.Icon = App.CreateMenuIcon("Icons.Undo");
discard.InputGesture = new KeyGesture(Key.Delete);
discard.Tag = "Back/Delete";
discard.Click += (_, e) =>
{
Discard(_selectedUnstaged);
@@ -1082,7 +1081,7 @@ namespace SourceGit.ViewModels
var stage = new MenuItem();
stage.Header = App.Text("FileCM.StageMulti", _selectedUnstaged.Count);
stage.Icon = App.CreateMenuIcon("Icons.File.Add");
stage.InputGesture = new KeyGesture(Key.Enter);
stage.Tag = "Enter/Space";
stage.Click += (_, e) =>
{
StageChanges(_selectedUnstaged, null);
@@ -1092,7 +1091,7 @@ namespace SourceGit.ViewModels
var discard = new MenuItem();
discard.Header = App.Text("FileCM.DiscardMulti", _selectedUnstaged.Count);
discard.Icon = App.CreateMenuIcon("Icons.Undo");
discard.InputGesture = new KeyGesture(Key.Delete);
discard.Tag = "Back/Delete";
discard.Click += (_, e) =>
{
Discard(_selectedUnstaged);
@@ -1268,7 +1267,7 @@ namespace SourceGit.ViewModels
var unstage = new MenuItem();
unstage.Header = App.Text("FileCM.Unstage");
unstage.Icon = App.CreateMenuIcon("Icons.File.Remove");
unstage.InputGesture = new KeyGesture(Key.Enter);
unstage.Tag = "Enter/Space";
unstage.Click += (_, e) =>
{
UnstageChanges(_selectedStaged, null);
@@ -1472,7 +1471,7 @@ namespace SourceGit.ViewModels
var unstage = new MenuItem();
unstage.Header = App.Text("FileCM.UnstageMulti", _selectedStaged.Count);
unstage.Icon = App.CreateMenuIcon("Icons.File.Remove");
unstage.InputGesture = new KeyGesture(Key.Enter);
unstage.Tag = "Enter/Space";
unstage.Click += (_, e) =>
{
UnstageChanges(_selectedStaged, null);