ux: new style for ref's Visibility in Graph context menu item

Signed-off-by: leo <longshuang@msn.cn>
This commit is contained in:
leo 2025-06-03 12:34:49 +08:00
parent cd009bda6b
commit bf43dd828a
No known key found for this signature in database
5 changed files with 142 additions and 107 deletions

View file

@ -809,116 +809,17 @@ namespace SourceGit.ViewModels
return menu;
}
private Models.FilterMode GetFilterMode(string pattern)
{
foreach (var filter in _repo.Settings.HistoriesFilters)
{
if (filter.Pattern.Equals(pattern, StringComparison.Ordinal))
return filter.Mode;
}
return Models.FilterMode.None;
}
private void FillBranchVisibilityMenu(MenuItem submenu, Models.Branch branch)
{
var visibility = new MenuItem();
visibility.Icon = App.CreateMenuIcon("Icons.Eye");
visibility.Header = App.Text("Repository.FilterCommits");
var exclude = new MenuItem();
exclude.Icon = App.CreateMenuIcon("Icons.EyeClose");
exclude.Header = App.Text("Repository.FilterCommits.Exclude");
exclude.Click += (_, e) =>
{
_repo.SetBranchFilterMode(branch, Models.FilterMode.Excluded, false, true);
e.Handled = true;
};
var filterMode = GetFilterMode(branch.FullName);
if (filterMode == Models.FilterMode.None)
{
var include = new MenuItem();
include.Icon = App.CreateMenuIcon("Icons.Filter");
include.Header = App.Text("Repository.FilterCommits.Include");
include.Click += (_, e) =>
{
_repo.SetBranchFilterMode(branch, Models.FilterMode.Included, false, true);
e.Handled = true;
};
visibility.Items.Add(include);
visibility.Items.Add(exclude);
}
else
{
var unset = new MenuItem();
unset.Header = App.Text("Repository.FilterCommits.Default");
unset.Click += (_, e) =>
{
_repo.SetBranchFilterMode(branch, Models.FilterMode.None, false, true);
e.Handled = true;
};
visibility.Items.Add(exclude);
visibility.Items.Add(unset);
}
submenu.Items.Add(visibility);
submenu.Items.Add(new MenuItem() { Header = "-" });
}
private void FillTagVisibilityMenu(MenuItem submenu, Models.Tag tag)
{
var visibility = new MenuItem();
visibility.Icon = App.CreateMenuIcon("Icons.Eye");
visibility.Header = App.Text("Repository.FilterCommits");
var exclude = new MenuItem();
exclude.Icon = App.CreateMenuIcon("Icons.EyeClose");
exclude.Header = App.Text("Repository.FilterCommits.Exclude");
exclude.Click += (_, e) =>
{
_repo.SetTagFilterMode(tag, Models.FilterMode.Excluded);
e.Handled = true;
};
var filterMode = GetFilterMode(tag.Name);
if (filterMode == Models.FilterMode.None)
{
var include = new MenuItem();
include.Icon = App.CreateMenuIcon("Icons.Filter");
include.Header = App.Text("Repository.FilterCommits.Include");
include.Click += (_, e) =>
{
_repo.SetTagFilterMode(tag, Models.FilterMode.Included);
e.Handled = true;
};
visibility.Items.Add(include);
visibility.Items.Add(exclude);
}
else
{
var unset = new MenuItem();
unset.Header = App.Text("Repository.FilterCommits.Default");
unset.Click += (_, e) =>
{
_repo.SetTagFilterMode(tag, Models.FilterMode.None);
e.Handled = true;
};
visibility.Items.Add(exclude);
visibility.Items.Add(unset);
}
submenu.Items.Add(visibility);
submenu.Items.Add(new MenuItem() { Header = "-" });
}
private void FillCurrentBranchMenu(ContextMenu menu, Models.Branch current)
{
var submenu = new MenuItem();
submenu.Icon = App.CreateMenuIcon("Icons.Branch");
submenu.Header = current.Name;
FillBranchVisibilityMenu(submenu, current);
var visibility = new MenuItem();
visibility.Classes.Add("filter_mode_switcher");
visibility.Header = new FilterModeInGraph(_repo, current);
submenu.Items.Add(visibility);
submenu.Items.Add(new MenuItem() { Header = "-" });
if (!string.IsNullOrEmpty(current.Upstream))
{
@ -1015,7 +916,11 @@ namespace SourceGit.ViewModels
submenu.Icon = App.CreateMenuIcon("Icons.Branch");
submenu.Header = branch.Name;
FillBranchVisibilityMenu(submenu, branch);
var visibility = new MenuItem();
visibility.Classes.Add("filter_mode_switcher");
visibility.Header = new FilterModeInGraph(_repo, branch);
submenu.Items.Add(visibility);
submenu.Items.Add(new MenuItem() { Header = "-" });
if (!_repo.IsBare)
{
@ -1105,7 +1010,11 @@ namespace SourceGit.ViewModels
submenu.Icon = App.CreateMenuIcon("Icons.Branch");
submenu.Header = name;
FillBranchVisibilityMenu(submenu, branch);
var visibility = new MenuItem();
visibility.Classes.Add("filter_mode_switcher");
visibility.Header = new FilterModeInGraph(_repo, branch);
submenu.Items.Add(visibility);
submenu.Items.Add(new MenuItem() { Header = "-" });
var checkout = new MenuItem();
checkout.Header = App.Text("BranchCM.Checkout", name);
@ -1162,7 +1071,11 @@ namespace SourceGit.ViewModels
submenu.Icon = App.CreateMenuIcon("Icons.Tag");
submenu.MinWidth = 200;
FillTagVisibilityMenu(submenu, tag);
var visibility = new MenuItem();
visibility.Classes.Add("filter_mode_switcher");
visibility.Header = new FilterModeInGraph(_repo, tag);
submenu.Items.Add(visibility);
submenu.Items.Add(new MenuItem() { Header = "-" });
var push = new MenuItem();
push.Header = App.Text("TagCM.Push", tag.Name);