Skip to content

Commit a5bdcab

Browse files
committed
code_style: move dynamic context menu creation to view models
Signed-off-by: leo <[email protected]>
1 parent 673b335 commit a5bdcab

File tree

2 files changed

+144
-140
lines changed

2 files changed

+144
-140
lines changed

src/ViewModels/Repository.cs

Lines changed: 140 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -118,20 +118,6 @@ public bool EnableFirstParentInHistories
118118
}
119119
}
120120

121-
public bool EnableTopoOrderInHistories
122-
{
123-
get => _settings.EnableTopoOrderInHistories;
124-
set
125-
{
126-
if (value != _settings.EnableTopoOrderInHistories)
127-
{
128-
_settings.EnableTopoOrderInHistories = value;
129-
OnPropertyChanged();
130-
Task.Run(RefreshCommits);
131-
}
132-
}
133-
}
134-
135121
public bool OnlyHighlightCurrentBranchInHistories
136122
{
137123
get => _settings.OnlyHighlighCurrentBranchInHistories;
@@ -145,20 +131,6 @@ public bool OnlyHighlightCurrentBranchInHistories
145131
}
146132
}
147133

148-
public Models.TagSortMode TagSortMode
149-
{
150-
get => _settings.TagSortMode;
151-
set
152-
{
153-
if (value != _settings.TagSortMode)
154-
{
155-
_settings.TagSortMode = value;
156-
OnPropertyChanged();
157-
VisibleTags = BuildVisibleTags();
158-
}
159-
}
160-
}
161-
162134
public string Filter
163135
{
164136
get => _filter;
@@ -1470,6 +1442,97 @@ public ContextMenu CreateContextMenuForCustomAction()
14701442
return menu;
14711443
}
14721444

1445+
public ContextMenu CreateContextMenuForHistoriesPage()
1446+
{
1447+
var layout = new MenuItem();
1448+
layout.Header = App.Text("Repository.HistoriesLayout");
1449+
layout.IsEnabled = false;
1450+
1451+
var isHorizontal = Preferences.Instance.UseTwoColumnsLayoutInHistories;
1452+
var horizontal = new MenuItem();
1453+
horizontal.Header = App.Text("Repository.HistoriesLayout.Horizontal");
1454+
if (isHorizontal)
1455+
horizontal.Icon = App.CreateMenuIcon("Icons.Check");
1456+
horizontal.Click += (_, ev) =>
1457+
{
1458+
Preferences.Instance.UseTwoColumnsLayoutInHistories = true;
1459+
ev.Handled = true;
1460+
};
1461+
1462+
var vertical = new MenuItem();
1463+
vertical.Header = App.Text("Repository.HistoriesLayout.Vertical");
1464+
if (!isHorizontal)
1465+
vertical.Icon = App.CreateMenuIcon("Icons.Check");
1466+
vertical.Click += (_, ev) =>
1467+
{
1468+
Preferences.Instance.UseTwoColumnsLayoutInHistories = false;
1469+
ev.Handled = true;
1470+
};
1471+
1472+
var order = new MenuItem();
1473+
order.Header = App.Text("Repository.HistoriesOrder");
1474+
order.IsEnabled = false;
1475+
1476+
var dateOrder = new MenuItem();
1477+
dateOrder.Header = App.Text("Repository.HistoriesOrder.ByDate");
1478+
dateOrder.SetValue(Views.MenuItemExtension.CommandProperty, "--date-order");
1479+
if (!_settings.EnableTopoOrderInHistories)
1480+
dateOrder.Icon = App.CreateMenuIcon("Icons.Check");
1481+
dateOrder.Click += (_, ev) =>
1482+
{
1483+
if (_settings.EnableTopoOrderInHistories)
1484+
{
1485+
_settings.EnableTopoOrderInHistories = false;
1486+
Task.Run(RefreshCommits);
1487+
}
1488+
1489+
ev.Handled = true;
1490+
};
1491+
1492+
var topoOrder = new MenuItem();
1493+
topoOrder.Header = App.Text("Repository.HistoriesOrder.Topo");
1494+
topoOrder.SetValue(Views.MenuItemExtension.CommandProperty, "--top-order");
1495+
if (_settings.EnableTopoOrderInHistories)
1496+
topoOrder.Icon = App.CreateMenuIcon("Icons.Check");
1497+
topoOrder.Click += (_, ev) =>
1498+
{
1499+
if (!_settings.EnableTopoOrderInHistories)
1500+
{
1501+
_settings.EnableTopoOrderInHistories = true;
1502+
Task.Run(RefreshCommits);
1503+
}
1504+
1505+
ev.Handled = true;
1506+
};
1507+
1508+
var others = new MenuItem();
1509+
others.Header = App.Text("Repository.HistoriesOptions");
1510+
others.IsEnabled = false;
1511+
1512+
var showTagsInGraph = new MenuItem();
1513+
showTagsInGraph.Header = App.Text("Repository.HistoriesOptions.ShowTagsInGraph");
1514+
if (Preferences.Instance.ShowTagsInGraph)
1515+
showTagsInGraph.Icon = App.CreateMenuIcon("Icons.Check");
1516+
showTagsInGraph.Click += (_, ev) =>
1517+
{
1518+
Preferences.Instance.ShowTagsInGraph = !Preferences.Instance.ShowTagsInGraph;
1519+
ev.Handled = true;
1520+
};
1521+
1522+
var menu = new ContextMenu();
1523+
menu.Items.Add(layout);
1524+
menu.Items.Add(horizontal);
1525+
menu.Items.Add(vertical);
1526+
menu.Items.Add(new MenuItem() { Header = "-" });
1527+
menu.Items.Add(order);
1528+
menu.Items.Add(dateOrder);
1529+
menu.Items.Add(topoOrder);
1530+
menu.Items.Add(new MenuItem() { Header = "-" });
1531+
menu.Items.Add(others);
1532+
menu.Items.Add(showTagsInGraph);
1533+
return menu;
1534+
}
1535+
14731536
public ContextMenu CreateContextMenuForLocalBranch(Models.Branch branch)
14741537
{
14751538
var menu = new ContextMenu();
@@ -2065,6 +2128,55 @@ public ContextMenu CreateContextMenuForTag(Models.Tag tag)
20652128
return menu;
20662129
}
20672130

2131+
public ContextMenu CreateContextMenuForTagSortMode()
2132+
{
2133+
var mode = _settings.TagSortMode;
2134+
var changeMode = new Action<Models.TagSortMode>((m) =>
2135+
{
2136+
if (_settings.TagSortMode != m)
2137+
{
2138+
_settings.TagSortMode = m;
2139+
VisibleTags = BuildVisibleTags();
2140+
}
2141+
});
2142+
2143+
var byCreatorDate = new MenuItem();
2144+
byCreatorDate.Header = App.Text("Repository.Tags.OrderByCreatorDate");
2145+
if (mode == Models.TagSortMode.CreatorDate)
2146+
byCreatorDate.Icon = App.CreateMenuIcon("Icons.Check");
2147+
byCreatorDate.Click += (_, ev) =>
2148+
{
2149+
changeMode(Models.TagSortMode.CreatorDate);
2150+
ev.Handled = true;
2151+
};
2152+
2153+
var byNameAsc = new MenuItem();
2154+
byNameAsc.Header = App.Text("Repository.Tags.OrderByNameAsc");
2155+
if (mode == Models.TagSortMode.NameInAscending)
2156+
byNameAsc.Icon = App.CreateMenuIcon("Icons.Check");
2157+
byNameAsc.Click += (_, ev) =>
2158+
{
2159+
changeMode(Models.TagSortMode.NameInAscending);
2160+
ev.Handled = true;
2161+
};
2162+
2163+
var byNameDes = new MenuItem();
2164+
byNameDes.Header = App.Text("Repository.Tags.OrderByNameDes");
2165+
if (mode == Models.TagSortMode.NameInDescending)
2166+
byNameDes.Icon = App.CreateMenuIcon("Icons.Check");
2167+
byNameDes.Click += (_, ev) =>
2168+
{
2169+
changeMode(Models.TagSortMode.NameInDescending);
2170+
ev.Handled = true;
2171+
};
2172+
2173+
var menu = new ContextMenu();
2174+
menu.Items.Add(byCreatorDate);
2175+
menu.Items.Add(byNameAsc);
2176+
menu.Items.Add(byNameDes);
2177+
return menu;
2178+
}
2179+
20682180
public ContextMenu CreateContextMenuForSubmodule(string submodule)
20692181
{
20702182
var open = new MenuItem();

src/Views/Repository.axaml.cs

Lines changed: 4 additions & 112 deletions
Original file line numberDiff line numberDiff line change
@@ -396,83 +396,8 @@ private void OnOpenAdvancedHistoriesOption(object sender, RoutedEventArgs e)
396396
{
397397
if (sender is Button button && DataContext is ViewModels.Repository repo)
398398
{
399-
var layout = new MenuItem();
400-
layout.Header = App.Text("Repository.HistoriesLayout");
401-
layout.IsEnabled = false;
402-
403-
var isHorizontal = ViewModels.Preferences.Instance.UseTwoColumnsLayoutInHistories;
404-
var horizontal = new MenuItem();
405-
horizontal.Header = App.Text("Repository.HistoriesLayout.Horizontal");
406-
if (isHorizontal)
407-
horizontal.Icon = App.CreateMenuIcon("Icons.Check");
408-
horizontal.Click += (_, ev) =>
409-
{
410-
ViewModels.Preferences.Instance.UseTwoColumnsLayoutInHistories = true;
411-
ev.Handled = true;
412-
};
413-
414-
var vertical = new MenuItem();
415-
vertical.Header = App.Text("Repository.HistoriesLayout.Vertical");
416-
if (!isHorizontal)
417-
vertical.Icon = App.CreateMenuIcon("Icons.Check");
418-
vertical.Click += (_, ev) =>
419-
{
420-
ViewModels.Preferences.Instance.UseTwoColumnsLayoutInHistories = false;
421-
ev.Handled = true;
422-
};
423-
424-
var order = new MenuItem();
425-
order.Header = App.Text("Repository.HistoriesOrder");
426-
order.IsEnabled = false;
427-
428-
var dateOrder = new MenuItem();
429-
dateOrder.Header = App.Text("Repository.HistoriesOrder.ByDate");
430-
dateOrder.SetValue(MenuItemExtension.CommandProperty, "--date-order");
431-
if (!repo.EnableTopoOrderInHistories)
432-
dateOrder.Icon = App.CreateMenuIcon("Icons.Check");
433-
dateOrder.Click += (_, ev) =>
434-
{
435-
repo.EnableTopoOrderInHistories = false;
436-
ev.Handled = true;
437-
};
438-
439-
var topoOrder = new MenuItem();
440-
topoOrder.Header = App.Text("Repository.HistoriesOrder.Topo");
441-
topoOrder.SetValue(MenuItemExtension.CommandProperty, "--top-order");
442-
if (repo.EnableTopoOrderInHistories)
443-
topoOrder.Icon = App.CreateMenuIcon("Icons.Check");
444-
topoOrder.Click += (_, ev) =>
445-
{
446-
repo.EnableTopoOrderInHistories = true;
447-
ev.Handled = true;
448-
};
449-
450-
var others = new MenuItem();
451-
others.Header = App.Text("Repository.HistoriesOptions");
452-
others.IsEnabled = false;
453-
454-
var showTagsInGraph = new MenuItem();
455-
showTagsInGraph.Header = App.Text("Repository.HistoriesOptions.ShowTagsInGraph");
456-
if (ViewModels.Preferences.Instance.ShowTagsInGraph)
457-
showTagsInGraph.Icon = App.CreateMenuIcon("Icons.Check");
458-
showTagsInGraph.Click += (_, ev) =>
459-
{
460-
ViewModels.Preferences.Instance.ShowTagsInGraph = !ViewModels.Preferences.Instance.ShowTagsInGraph;
461-
ev.Handled = true;
462-
};
463-
464-
var menu = new ContextMenu();
465-
menu.Items.Add(layout);
466-
menu.Items.Add(horizontal);
467-
menu.Items.Add(vertical);
468-
menu.Items.Add(new MenuItem() { Header = "-" });
469-
menu.Items.Add(order);
470-
menu.Items.Add(dateOrder);
471-
menu.Items.Add(topoOrder);
472-
menu.Items.Add(new MenuItem() { Header = "-" });
473-
menu.Items.Add(others);
474-
menu.Items.Add(showTagsInGraph);
475-
menu.Open(button);
399+
var menu = repo.CreateContextMenuForHistoriesPage();
400+
menu?.Open(button);
476401
}
477402

478403
e.Handled = true;
@@ -482,41 +407,8 @@ private void OnOpenSortTagMenu(object sender, RoutedEventArgs e)
482407
{
483408
if (sender is Button button && DataContext is ViewModels.Repository repo)
484409
{
485-
var byCreatorDate = new MenuItem();
486-
byCreatorDate.Header = App.Text("Repository.Tags.OrderByCreatorDate");
487-
if (repo.TagSortMode == Models.TagSortMode.CreatorDate)
488-
byCreatorDate.Icon = App.CreateMenuIcon("Icons.Check");
489-
byCreatorDate.Click += (_, ev) =>
490-
{
491-
repo.TagSortMode = Models.TagSortMode.CreatorDate;
492-
ev.Handled = true;
493-
};
494-
495-
var byNameAsc = new MenuItem();
496-
byNameAsc.Header = App.Text("Repository.Tags.OrderByNameAsc");
497-
if (repo.TagSortMode == Models.TagSortMode.NameInAscending)
498-
byNameAsc.Icon = App.CreateMenuIcon("Icons.Check");
499-
byNameAsc.Click += (_, ev) =>
500-
{
501-
repo.TagSortMode = Models.TagSortMode.NameInAscending;
502-
ev.Handled = true;
503-
};
504-
505-
var byNameDes = new MenuItem();
506-
byNameDes.Header = App.Text("Repository.Tags.OrderByNameDes");
507-
if (repo.TagSortMode == Models.TagSortMode.NameInDescending)
508-
byNameDes.Icon = App.CreateMenuIcon("Icons.Check");
509-
byNameDes.Click += (_, ev) =>
510-
{
511-
repo.TagSortMode = Models.TagSortMode.NameInDescending;
512-
ev.Handled = true;
513-
};
514-
515-
var menu = new ContextMenu();
516-
menu.Items.Add(byCreatorDate);
517-
menu.Items.Add(byNameAsc);
518-
menu.Items.Add(byNameDes);
519-
menu.Open(button);
410+
var menu = repo.CreateContextMenuForTagSortMode();
411+
menu?.Open(button);
520412
}
521413

522414
e.Handled = true;

0 commit comments

Comments
 (0)