Skip to content

Commit bf43dd8

Browse files
committed
ux: new style for ref's Visibility in Graph context menu item
Signed-off-by: leo <[email protected]>
1 parent cd009bd commit bf43dd8

File tree

5 files changed

+142
-107
lines changed

5 files changed

+142
-107
lines changed

src/Resources/Styles.axaml

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -843,6 +843,10 @@
843843
<DataTemplate DataType="x:String">
844844
<v:NameHighlightedTextBlock Text="{Binding}" VerticalAlignment="Center"/>
845845
</DataTemplate>
846+
847+
<DataTemplate DataType="vm:FilterModeInGraph">
848+
<v:FilterModeInGraph/>
849+
</DataTemplate>
846850
</ContentPresenter.DataTemplates>
847851
</ContentPresenter>
848852

@@ -949,6 +953,19 @@
949953
</Style>
950954
</Style>
951955

956+
<Style Selector="MenuItem.filter_mode_switcher">
957+
<Setter Property="Height" Value="48"/>
958+
959+
<Style Selector="^:selected">
960+
<Style Selector="^ /template/ Border#PART_LayoutRoot">
961+
<Setter Property="Background" Value="Transparent" />
962+
</Style>
963+
<Style Selector="^ /template/ ContentPresenter#PART_HeaderPresenter">
964+
<Setter Property="Foreground" Value="Transparent" />
965+
</Style>
966+
</Style>
967+
</Style>
968+
952969
<Style Selector="ComboBox">
953970
<Style.Resources>
954971
<Thickness x:Key="ComboBoxDropdownBorderPadding">4,0</Thickness>
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
using System;
2+
using CommunityToolkit.Mvvm.ComponentModel;
3+
4+
namespace SourceGit.ViewModels
5+
{
6+
public class FilterModeInGraph : ObservableObject
7+
{
8+
public bool IsFiltered
9+
{
10+
get => _mode == Models.FilterMode.Included;
11+
set => SetFilterMode(value ? Models.FilterMode.Included : Models.FilterMode.None);
12+
}
13+
14+
public bool IsExcluded
15+
{
16+
get => _mode == Models.FilterMode.Excluded;
17+
set => SetFilterMode(value ? Models.FilterMode.Excluded : Models.FilterMode.None);
18+
}
19+
20+
public FilterModeInGraph(Repository repo, object target)
21+
{
22+
_repo = repo;
23+
_target = target;
24+
25+
if (_target is Models.Branch b)
26+
_mode = GetFilterMode(b.FullName);
27+
else if (_target is Models.Tag t)
28+
_mode = GetFilterMode(t.Name);
29+
}
30+
31+
private Models.FilterMode GetFilterMode(string pattern)
32+
{
33+
foreach (var filter in _repo.Settings.HistoriesFilters)
34+
{
35+
if (filter.Pattern.Equals(pattern, StringComparison.Ordinal))
36+
return filter.Mode;
37+
}
38+
39+
return Models.FilterMode.None;
40+
}
41+
42+
private void SetFilterMode(Models.FilterMode mode)
43+
{
44+
if (_mode != mode)
45+
{
46+
_mode = mode;
47+
48+
if (_target is Models.Branch branch)
49+
_repo.SetBranchFilterMode(branch, _mode, false, true);
50+
else if (_target is Models.Tag tag)
51+
_repo.SetTagFilterMode(tag, _mode);
52+
53+
OnPropertyChanged(nameof(IsFiltered));
54+
OnPropertyChanged(nameof(IsExcluded));
55+
}
56+
}
57+
58+
private Repository _repo = null;
59+
private object _target = null;
60+
private Models.FilterMode _mode = Models.FilterMode.None;
61+
}
62+
}

src/ViewModels/Histories.cs

Lines changed: 20 additions & 107 deletions
Original file line numberDiff line numberDiff line change
@@ -809,116 +809,17 @@ public ContextMenu MakeContextMenu(ListBox list)
809809
return menu;
810810
}
811811

812-
private Models.FilterMode GetFilterMode(string pattern)
813-
{
814-
foreach (var filter in _repo.Settings.HistoriesFilters)
815-
{
816-
if (filter.Pattern.Equals(pattern, StringComparison.Ordinal))
817-
return filter.Mode;
818-
}
819-
820-
return Models.FilterMode.None;
821-
}
822-
823-
private void FillBranchVisibilityMenu(MenuItem submenu, Models.Branch branch)
824-
{
825-
var visibility = new MenuItem();
826-
visibility.Icon = App.CreateMenuIcon("Icons.Eye");
827-
visibility.Header = App.Text("Repository.FilterCommits");
828-
829-
var exclude = new MenuItem();
830-
exclude.Icon = App.CreateMenuIcon("Icons.EyeClose");
831-
exclude.Header = App.Text("Repository.FilterCommits.Exclude");
832-
exclude.Click += (_, e) =>
833-
{
834-
_repo.SetBranchFilterMode(branch, Models.FilterMode.Excluded, false, true);
835-
e.Handled = true;
836-
};
837-
838-
var filterMode = GetFilterMode(branch.FullName);
839-
if (filterMode == Models.FilterMode.None)
840-
{
841-
var include = new MenuItem();
842-
include.Icon = App.CreateMenuIcon("Icons.Filter");
843-
include.Header = App.Text("Repository.FilterCommits.Include");
844-
include.Click += (_, e) =>
845-
{
846-
_repo.SetBranchFilterMode(branch, Models.FilterMode.Included, false, true);
847-
e.Handled = true;
848-
};
849-
visibility.Items.Add(include);
850-
visibility.Items.Add(exclude);
851-
}
852-
else
853-
{
854-
var unset = new MenuItem();
855-
unset.Header = App.Text("Repository.FilterCommits.Default");
856-
unset.Click += (_, e) =>
857-
{
858-
_repo.SetBranchFilterMode(branch, Models.FilterMode.None, false, true);
859-
e.Handled = true;
860-
};
861-
visibility.Items.Add(exclude);
862-
visibility.Items.Add(unset);
863-
}
864-
865-
submenu.Items.Add(visibility);
866-
submenu.Items.Add(new MenuItem() { Header = "-" });
867-
}
868-
869-
private void FillTagVisibilityMenu(MenuItem submenu, Models.Tag tag)
870-
{
871-
var visibility = new MenuItem();
872-
visibility.Icon = App.CreateMenuIcon("Icons.Eye");
873-
visibility.Header = App.Text("Repository.FilterCommits");
874-
875-
var exclude = new MenuItem();
876-
exclude.Icon = App.CreateMenuIcon("Icons.EyeClose");
877-
exclude.Header = App.Text("Repository.FilterCommits.Exclude");
878-
exclude.Click += (_, e) =>
879-
{
880-
_repo.SetTagFilterMode(tag, Models.FilterMode.Excluded);
881-
e.Handled = true;
882-
};
883-
884-
var filterMode = GetFilterMode(tag.Name);
885-
if (filterMode == Models.FilterMode.None)
886-
{
887-
var include = new MenuItem();
888-
include.Icon = App.CreateMenuIcon("Icons.Filter");
889-
include.Header = App.Text("Repository.FilterCommits.Include");
890-
include.Click += (_, e) =>
891-
{
892-
_repo.SetTagFilterMode(tag, Models.FilterMode.Included);
893-
e.Handled = true;
894-
};
895-
visibility.Items.Add(include);
896-
visibility.Items.Add(exclude);
897-
}
898-
else
899-
{
900-
var unset = new MenuItem();
901-
unset.Header = App.Text("Repository.FilterCommits.Default");
902-
unset.Click += (_, e) =>
903-
{
904-
_repo.SetTagFilterMode(tag, Models.FilterMode.None);
905-
e.Handled = true;
906-
};
907-
visibility.Items.Add(exclude);
908-
visibility.Items.Add(unset);
909-
}
910-
911-
submenu.Items.Add(visibility);
912-
submenu.Items.Add(new MenuItem() { Header = "-" });
913-
}
914-
915812
private void FillCurrentBranchMenu(ContextMenu menu, Models.Branch current)
916813
{
917814
var submenu = new MenuItem();
918815
submenu.Icon = App.CreateMenuIcon("Icons.Branch");
919816
submenu.Header = current.Name;
920817

921-
FillBranchVisibilityMenu(submenu, current);
818+
var visibility = new MenuItem();
819+
visibility.Classes.Add("filter_mode_switcher");
820+
visibility.Header = new FilterModeInGraph(_repo, current);
821+
submenu.Items.Add(visibility);
822+
submenu.Items.Add(new MenuItem() { Header = "-" });
922823

923824
if (!string.IsNullOrEmpty(current.Upstream))
924825
{
@@ -1015,7 +916,11 @@ private void FillOtherLocalBranchMenu(ContextMenu menu, Models.Branch branch, Mo
1015916
submenu.Icon = App.CreateMenuIcon("Icons.Branch");
1016917
submenu.Header = branch.Name;
1017918

1018-
FillBranchVisibilityMenu(submenu, branch);
919+
var visibility = new MenuItem();
920+
visibility.Classes.Add("filter_mode_switcher");
921+
visibility.Header = new FilterModeInGraph(_repo, branch);
922+
submenu.Items.Add(visibility);
923+
submenu.Items.Add(new MenuItem() { Header = "-" });
1019924

1020925
if (!_repo.IsBare)
1021926
{
@@ -1105,7 +1010,11 @@ private void FillRemoteBranchMenu(ContextMenu menu, Models.Branch branch, Models
11051010
submenu.Icon = App.CreateMenuIcon("Icons.Branch");
11061011
submenu.Header = name;
11071012

1108-
FillBranchVisibilityMenu(submenu, branch);
1013+
var visibility = new MenuItem();
1014+
visibility.Classes.Add("filter_mode_switcher");
1015+
visibility.Header = new FilterModeInGraph(_repo, branch);
1016+
submenu.Items.Add(visibility);
1017+
submenu.Items.Add(new MenuItem() { Header = "-" });
11091018

11101019
var checkout = new MenuItem();
11111020
checkout.Header = App.Text("BranchCM.Checkout", name);
@@ -1162,7 +1071,11 @@ private void FillTagMenu(ContextMenu menu, Models.Tag tag, Models.Branch current
11621071
submenu.Icon = App.CreateMenuIcon("Icons.Tag");
11631072
submenu.MinWidth = 200;
11641073

1165-
FillTagVisibilityMenu(submenu, tag);
1074+
var visibility = new MenuItem();
1075+
visibility.Classes.Add("filter_mode_switcher");
1076+
visibility.Header = new FilterModeInGraph(_repo, tag);
1077+
submenu.Items.Add(visibility);
1078+
submenu.Items.Add(new MenuItem() { Header = "-" });
11661079

11671080
var push = new MenuItem();
11681081
push.Header = App.Text("TagCM.Push", tag.Name);

src/Views/FilterModeInGraph.axaml

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
<UserControl xmlns="https://github.com/avaloniaui"
2+
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
3+
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
4+
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
5+
xmlns:vm="using:SourceGit.ViewModels"
6+
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
7+
x:Class="SourceGit.Views.FilterModeInGraph"
8+
x:DataType="vm:FilterModeInGraph">
9+
<Grid RowDefinitions="22,26">
10+
<TextBlock Grid.Row="0"
11+
Text="{DynamicResource Text.Repository.FilterCommits}"
12+
Foreground="{DynamicResource Brush.FG2}"/>
13+
14+
<StackPanel Grid.Row="1" Orientation="Horizontal">
15+
<ToggleButton Classes="line_path"
16+
Width="13" Height="26"
17+
Background="Transparent"
18+
IsChecked="{Binding IsFiltered, Mode=TwoWay}">
19+
<Path Width="13" Height="13" Data="{StaticResource Icons.Filter}"/>
20+
</ToggleButton>
21+
22+
<ToggleButton Classes="line_path"
23+
Width="13" Height="26"
24+
Margin="10,0,0,0"
25+
Background="Transparent"
26+
IsChecked="{Binding IsExcluded, Mode=TwoWay}">
27+
<Path Width="13" Height="13" Data="{StaticResource Icons.EyeClose}"/>
28+
</ToggleButton>
29+
</StackPanel>
30+
</Grid>
31+
</UserControl>
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
using Avalonia.Controls;
2+
3+
namespace SourceGit.Views
4+
{
5+
public partial class FilterModeInGraph : UserControl
6+
{
7+
public FilterModeInGraph()
8+
{
9+
InitializeComponent();
10+
}
11+
}
12+
}

0 commit comments

Comments
 (0)