code_style: move dynamic context menu creation to view models

Signed-off-by: leo <longshuang@msn.cn>
This commit is contained in:
leo 2025-03-20 09:38:02 +08:00
parent 673b335a2a
commit a5bdcab341
No known key found for this signature in database
2 changed files with 144 additions and 140 deletions

View file

@ -118,20 +118,6 @@ namespace SourceGit.ViewModels
} }
} }
public bool EnableTopoOrderInHistories
{
get => _settings.EnableTopoOrderInHistories;
set
{
if (value != _settings.EnableTopoOrderInHistories)
{
_settings.EnableTopoOrderInHistories = value;
OnPropertyChanged();
Task.Run(RefreshCommits);
}
}
}
public bool OnlyHighlightCurrentBranchInHistories public bool OnlyHighlightCurrentBranchInHistories
{ {
get => _settings.OnlyHighlighCurrentBranchInHistories; get => _settings.OnlyHighlighCurrentBranchInHistories;
@ -145,20 +131,6 @@ namespace SourceGit.ViewModels
} }
} }
public Models.TagSortMode TagSortMode
{
get => _settings.TagSortMode;
set
{
if (value != _settings.TagSortMode)
{
_settings.TagSortMode = value;
OnPropertyChanged();
VisibleTags = BuildVisibleTags();
}
}
}
public string Filter public string Filter
{ {
get => _filter; get => _filter;
@ -1470,6 +1442,97 @@ namespace SourceGit.ViewModels
return menu; return menu;
} }
public ContextMenu CreateContextMenuForHistoriesPage()
{
var layout = new MenuItem();
layout.Header = App.Text("Repository.HistoriesLayout");
layout.IsEnabled = false;
var isHorizontal = Preferences.Instance.UseTwoColumnsLayoutInHistories;
var horizontal = new MenuItem();
horizontal.Header = App.Text("Repository.HistoriesLayout.Horizontal");
if (isHorizontal)
horizontal.Icon = App.CreateMenuIcon("Icons.Check");
horizontal.Click += (_, ev) =>
{
Preferences.Instance.UseTwoColumnsLayoutInHistories = true;
ev.Handled = true;
};
var vertical = new MenuItem();
vertical.Header = App.Text("Repository.HistoriesLayout.Vertical");
if (!isHorizontal)
vertical.Icon = App.CreateMenuIcon("Icons.Check");
vertical.Click += (_, ev) =>
{
Preferences.Instance.UseTwoColumnsLayoutInHistories = false;
ev.Handled = true;
};
var order = new MenuItem();
order.Header = App.Text("Repository.HistoriesOrder");
order.IsEnabled = false;
var dateOrder = new MenuItem();
dateOrder.Header = App.Text("Repository.HistoriesOrder.ByDate");
dateOrder.SetValue(Views.MenuItemExtension.CommandProperty, "--date-order");
if (!_settings.EnableTopoOrderInHistories)
dateOrder.Icon = App.CreateMenuIcon("Icons.Check");
dateOrder.Click += (_, ev) =>
{
if (_settings.EnableTopoOrderInHistories)
{
_settings.EnableTopoOrderInHistories = false;
Task.Run(RefreshCommits);
}
ev.Handled = true;
};
var topoOrder = new MenuItem();
topoOrder.Header = App.Text("Repository.HistoriesOrder.Topo");
topoOrder.SetValue(Views.MenuItemExtension.CommandProperty, "--top-order");
if (_settings.EnableTopoOrderInHistories)
topoOrder.Icon = App.CreateMenuIcon("Icons.Check");
topoOrder.Click += (_, ev) =>
{
if (!_settings.EnableTopoOrderInHistories)
{
_settings.EnableTopoOrderInHistories = true;
Task.Run(RefreshCommits);
}
ev.Handled = true;
};
var others = new MenuItem();
others.Header = App.Text("Repository.HistoriesOptions");
others.IsEnabled = false;
var showTagsInGraph = new MenuItem();
showTagsInGraph.Header = App.Text("Repository.HistoriesOptions.ShowTagsInGraph");
if (Preferences.Instance.ShowTagsInGraph)
showTagsInGraph.Icon = App.CreateMenuIcon("Icons.Check");
showTagsInGraph.Click += (_, ev) =>
{
Preferences.Instance.ShowTagsInGraph = !Preferences.Instance.ShowTagsInGraph;
ev.Handled = true;
};
var menu = new ContextMenu();
menu.Items.Add(layout);
menu.Items.Add(horizontal);
menu.Items.Add(vertical);
menu.Items.Add(new MenuItem() { Header = "-" });
menu.Items.Add(order);
menu.Items.Add(dateOrder);
menu.Items.Add(topoOrder);
menu.Items.Add(new MenuItem() { Header = "-" });
menu.Items.Add(others);
menu.Items.Add(showTagsInGraph);
return menu;
}
public ContextMenu CreateContextMenuForLocalBranch(Models.Branch branch) public ContextMenu CreateContextMenuForLocalBranch(Models.Branch branch)
{ {
var menu = new ContextMenu(); var menu = new ContextMenu();
@ -2065,6 +2128,55 @@ namespace SourceGit.ViewModels
return menu; return menu;
} }
public ContextMenu CreateContextMenuForTagSortMode()
{
var mode = _settings.TagSortMode;
var changeMode = new Action<Models.TagSortMode>((m) =>
{
if (_settings.TagSortMode != m)
{
_settings.TagSortMode = m;
VisibleTags = BuildVisibleTags();
}
});
var byCreatorDate = new MenuItem();
byCreatorDate.Header = App.Text("Repository.Tags.OrderByCreatorDate");
if (mode == Models.TagSortMode.CreatorDate)
byCreatorDate.Icon = App.CreateMenuIcon("Icons.Check");
byCreatorDate.Click += (_, ev) =>
{
changeMode(Models.TagSortMode.CreatorDate);
ev.Handled = true;
};
var byNameAsc = new MenuItem();
byNameAsc.Header = App.Text("Repository.Tags.OrderByNameAsc");
if (mode == Models.TagSortMode.NameInAscending)
byNameAsc.Icon = App.CreateMenuIcon("Icons.Check");
byNameAsc.Click += (_, ev) =>
{
changeMode(Models.TagSortMode.NameInAscending);
ev.Handled = true;
};
var byNameDes = new MenuItem();
byNameDes.Header = App.Text("Repository.Tags.OrderByNameDes");
if (mode == Models.TagSortMode.NameInDescending)
byNameDes.Icon = App.CreateMenuIcon("Icons.Check");
byNameDes.Click += (_, ev) =>
{
changeMode(Models.TagSortMode.NameInDescending);
ev.Handled = true;
};
var menu = new ContextMenu();
menu.Items.Add(byCreatorDate);
menu.Items.Add(byNameAsc);
menu.Items.Add(byNameDes);
return menu;
}
public ContextMenu CreateContextMenuForSubmodule(string submodule) public ContextMenu CreateContextMenuForSubmodule(string submodule)
{ {
var open = new MenuItem(); var open = new MenuItem();

View file

@ -396,83 +396,8 @@ namespace SourceGit.Views
{ {
if (sender is Button button && DataContext is ViewModels.Repository repo) if (sender is Button button && DataContext is ViewModels.Repository repo)
{ {
var layout = new MenuItem(); var menu = repo.CreateContextMenuForHistoriesPage();
layout.Header = App.Text("Repository.HistoriesLayout"); menu?.Open(button);
layout.IsEnabled = false;
var isHorizontal = ViewModels.Preferences.Instance.UseTwoColumnsLayoutInHistories;
var horizontal = new MenuItem();
horizontal.Header = App.Text("Repository.HistoriesLayout.Horizontal");
if (isHorizontal)
horizontal.Icon = App.CreateMenuIcon("Icons.Check");
horizontal.Click += (_, ev) =>
{
ViewModels.Preferences.Instance.UseTwoColumnsLayoutInHistories = true;
ev.Handled = true;
};
var vertical = new MenuItem();
vertical.Header = App.Text("Repository.HistoriesLayout.Vertical");
if (!isHorizontal)
vertical.Icon = App.CreateMenuIcon("Icons.Check");
vertical.Click += (_, ev) =>
{
ViewModels.Preferences.Instance.UseTwoColumnsLayoutInHistories = false;
ev.Handled = true;
};
var order = new MenuItem();
order.Header = App.Text("Repository.HistoriesOrder");
order.IsEnabled = false;
var dateOrder = new MenuItem();
dateOrder.Header = App.Text("Repository.HistoriesOrder.ByDate");
dateOrder.SetValue(MenuItemExtension.CommandProperty, "--date-order");
if (!repo.EnableTopoOrderInHistories)
dateOrder.Icon = App.CreateMenuIcon("Icons.Check");
dateOrder.Click += (_, ev) =>
{
repo.EnableTopoOrderInHistories = false;
ev.Handled = true;
};
var topoOrder = new MenuItem();
topoOrder.Header = App.Text("Repository.HistoriesOrder.Topo");
topoOrder.SetValue(MenuItemExtension.CommandProperty, "--top-order");
if (repo.EnableTopoOrderInHistories)
topoOrder.Icon = App.CreateMenuIcon("Icons.Check");
topoOrder.Click += (_, ev) =>
{
repo.EnableTopoOrderInHistories = true;
ev.Handled = true;
};
var others = new MenuItem();
others.Header = App.Text("Repository.HistoriesOptions");
others.IsEnabled = false;
var showTagsInGraph = new MenuItem();
showTagsInGraph.Header = App.Text("Repository.HistoriesOptions.ShowTagsInGraph");
if (ViewModels.Preferences.Instance.ShowTagsInGraph)
showTagsInGraph.Icon = App.CreateMenuIcon("Icons.Check");
showTagsInGraph.Click += (_, ev) =>
{
ViewModels.Preferences.Instance.ShowTagsInGraph = !ViewModels.Preferences.Instance.ShowTagsInGraph;
ev.Handled = true;
};
var menu = new ContextMenu();
menu.Items.Add(layout);
menu.Items.Add(horizontal);
menu.Items.Add(vertical);
menu.Items.Add(new MenuItem() { Header = "-" });
menu.Items.Add(order);
menu.Items.Add(dateOrder);
menu.Items.Add(topoOrder);
menu.Items.Add(new MenuItem() { Header = "-" });
menu.Items.Add(others);
menu.Items.Add(showTagsInGraph);
menu.Open(button);
} }
e.Handled = true; e.Handled = true;
@ -482,41 +407,8 @@ namespace SourceGit.Views
{ {
if (sender is Button button && DataContext is ViewModels.Repository repo) if (sender is Button button && DataContext is ViewModels.Repository repo)
{ {
var byCreatorDate = new MenuItem(); var menu = repo.CreateContextMenuForTagSortMode();
byCreatorDate.Header = App.Text("Repository.Tags.OrderByCreatorDate"); menu?.Open(button);
if (repo.TagSortMode == Models.TagSortMode.CreatorDate)
byCreatorDate.Icon = App.CreateMenuIcon("Icons.Check");
byCreatorDate.Click += (_, ev) =>
{
repo.TagSortMode = Models.TagSortMode.CreatorDate;
ev.Handled = true;
};
var byNameAsc = new MenuItem();
byNameAsc.Header = App.Text("Repository.Tags.OrderByNameAsc");
if (repo.TagSortMode == Models.TagSortMode.NameInAscending)
byNameAsc.Icon = App.CreateMenuIcon("Icons.Check");
byNameAsc.Click += (_, ev) =>
{
repo.TagSortMode = Models.TagSortMode.NameInAscending;
ev.Handled = true;
};
var byNameDes = new MenuItem();
byNameDes.Header = App.Text("Repository.Tags.OrderByNameDes");
if (repo.TagSortMode == Models.TagSortMode.NameInDescending)
byNameDes.Icon = App.CreateMenuIcon("Icons.Check");
byNameDes.Click += (_, ev) =>
{
repo.TagSortMode = Models.TagSortMode.NameInDescending;
ev.Handled = true;
};
var menu = new ContextMenu();
menu.Items.Add(byCreatorDate);
menu.Items.Add(byNameAsc);
menu.Items.Add(byNameDes);
menu.Open(button);
} }
e.Handled = true; e.Handled = true;