forked from sourcegit-scm/sourcegit
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathFilterModeInGraph.cs
More file actions
62 lines (52 loc) · 1.86 KB
/
Copy pathFilterModeInGraph.cs
File metadata and controls
62 lines (52 loc) · 1.86 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
using System;
using CommunityToolkit.Mvvm.ComponentModel;
namespace SourceGit.ViewModels
{
public class FilterModeInGraph : ObservableObject
{
public bool IsFiltered
{
get => _mode == Models.FilterMode.Included;
set => SetFilterMode(value ? Models.FilterMode.Included : Models.FilterMode.None);
}
public bool IsExcluded
{
get => _mode == Models.FilterMode.Excluded;
set => SetFilterMode(value ? Models.FilterMode.Excluded : Models.FilterMode.None);
}
public FilterModeInGraph(Repository repo, object target)
{
_repo = repo;
_target = target;
if (_target is Models.Branch b)
_mode = GetFilterMode(b.FullName);
else if (_target is Models.Tag t)
_mode = GetFilterMode(t.Name);
}
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 SetFilterMode(Models.FilterMode mode)
{
if (_mode != mode)
{
_mode = mode;
if (_target is Models.Branch branch)
_repo.SetBranchFilterMode(branch, _mode, false, true);
else if (_target is Models.Tag tag)
_repo.SetTagFilterMode(tag, _mode);
OnPropertyChanged(nameof(IsFiltered));
OnPropertyChanged(nameof(IsExcluded));
}
}
private Repository _repo = null;
private object _target = null;
private Models.FilterMode _mode = Models.FilterMode.None;
}
}