mirror of
https://github.com/sourcegit-scm/sourcegit
synced 2025-06-15 15:44:59 +00:00
62 lines
1.9 KiB
C#
62 lines
1.9 KiB
C#
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;
|
|
}
|
|
}
|