|
@@ -1,6 +1,7 @@
|
|
using InABox.Configuration;
|
|
using InABox.Configuration;
|
|
using InABox.Core;
|
|
using InABox.Core;
|
|
using InABox.WPF;
|
|
using InABox.WPF;
|
|
|
|
+using System;
|
|
using System.Collections.Generic;
|
|
using System.Collections.Generic;
|
|
using System.Drawing;
|
|
using System.Drawing;
|
|
using System.Linq;
|
|
using System.Linq;
|
|
@@ -25,14 +26,40 @@ public class DynamicGridSelectedFilterSettings
|
|
MultipleFilters = false;
|
|
MultipleFilters = false;
|
|
}
|
|
}
|
|
|
|
|
|
- public DynamicGridSelectedFilterSettings(List<CoreFilterDefinition> selectedFilters, bool multipleFilters, string? temporaryFilter)
|
|
|
|
|
|
+ public DynamicGridSelectedFilterSettings(List<ICoreFilterDefinition> selectedFilters, bool multipleFilters, string? temporaryFilter)
|
|
{
|
|
{
|
|
- SelectedFilters = selectedFilters;
|
|
|
|
|
|
+ SelectedFilters = selectedFilters.Select(x =>
|
|
|
|
+ {
|
|
|
|
+ if(x is CoreFilterDefinition def)
|
|
|
|
+ {
|
|
|
|
+ return def;
|
|
|
|
+ }
|
|
|
|
+ else
|
|
|
|
+ {
|
|
|
|
+ return new CoreFilterDefinition
|
|
|
|
+ {
|
|
|
|
+ Name = x.Name,
|
|
|
|
+ Filter = ""
|
|
|
|
+ };
|
|
|
|
+ }
|
|
|
|
+ }).ToList();
|
|
MultipleFilters = multipleFilters || selectedFilters.Count > 1;
|
|
MultipleFilters = multipleFilters || selectedFilters.Count > 1;
|
|
TemporaryFilter = temporaryFilter;
|
|
TemporaryFilter = temporaryFilter;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+public class DynamicGridFilterComponentBuiltInFilter<T>(string name, Func<Filter<T>> getFilter) : ICoreFilterDefinition
|
|
|
|
+{
|
|
|
|
+ public string Name { get; set; } = name;
|
|
|
|
+
|
|
|
|
+ public Func<Filter<T>> GetFilter { get; set; } = getFilter;
|
|
|
|
+
|
|
|
|
+ public Filter<T1>? AsFilter<T1>()
|
|
|
|
+ {
|
|
|
|
+ return GetFilter() as Filter<T1>;
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
public abstract class DynamicGridFilterComponent<T>
|
|
public abstract class DynamicGridFilterComponent<T>
|
|
{
|
|
{
|
|
#region Private Fields
|
|
#region Private Fields
|
|
@@ -43,9 +70,9 @@ public abstract class DynamicGridFilterComponent<T>
|
|
|
|
|
|
public Filter<T>? Filter { get; }
|
|
public Filter<T>? Filter { get; }
|
|
|
|
|
|
- public CoreFilterDefinition Definition { get; set; }
|
|
|
|
|
|
+ public ICoreFilterDefinition Definition { get; set; }
|
|
|
|
|
|
- public FilterItem(string name, Filter<T>? filter, CoreFilterDefinition definition)
|
|
|
|
|
|
+ public FilterItem(string name, Filter<T>? filter, ICoreFilterDefinition definition)
|
|
{
|
|
{
|
|
Name = name;
|
|
Name = name;
|
|
Filter = filter;
|
|
Filter = filter;
|
|
@@ -63,14 +90,13 @@ public abstract class DynamicGridFilterComponent<T>
|
|
|
|
|
|
#region Public Properties
|
|
#region Public Properties
|
|
|
|
|
|
-
|
|
|
|
public IConfiguration<CoreFilterDefinitions> GlobalConfiguration { get; set; }
|
|
public IConfiguration<CoreFilterDefinitions> GlobalConfiguration { get; set; }
|
|
|
|
|
|
public IConfiguration<CoreFilterDefinitions> UserConfiguration { get; set; }
|
|
public IConfiguration<CoreFilterDefinitions> UserConfiguration { get; set; }
|
|
|
|
|
|
|
|
+ public List<DynamicGridFilterComponentBuiltInFilter<T>> BuiltInFilters { get; set; } = new();
|
|
|
|
|
|
private bool _multipleFilters = false;
|
|
private bool _multipleFilters = false;
|
|
-
|
|
|
|
private bool MultipleFilters
|
|
private bool MultipleFilters
|
|
{
|
|
{
|
|
get => _multipleFilters;
|
|
get => _multipleFilters;
|
|
@@ -156,7 +182,7 @@ public abstract class DynamicGridFilterComponent<T>
|
|
var globalFilters = Security.IsAllowed<CanEditGlobalFilters>() ? GlobalConfiguration.Load() : new CoreFilterDefinitions();
|
|
var globalFilters = Security.IsAllowed<CanEditGlobalFilters>() ? GlobalConfiguration.Load() : new CoreFilterDefinitions();
|
|
var userFilters = UserConfiguration.Load();
|
|
var userFilters = UserConfiguration.Load();
|
|
var filters = new CoreFilterDefinitions(globalFilters.Count + userFilters.Count);
|
|
var filters = new CoreFilterDefinitions(globalFilters.Count + userFilters.Count);
|
|
- foreach (var filter in globalFilters.Concat(userFilters))
|
|
|
|
|
|
+ foreach (var filter in BuiltInFilters.Concat<ICoreFilterDefinition>(globalFilters).Concat(userFilters))
|
|
{
|
|
{
|
|
var item = menu.AddCheckItem(filter.Name, filter, Filter_Toggle);
|
|
var item = menu.AddCheckItem(filter.Name, filter, Filter_Toggle);
|
|
item.StaysOpenOnClick = true;
|
|
item.StaysOpenOnClick = true;
|
|
@@ -164,7 +190,10 @@ public abstract class DynamicGridFilterComponent<T>
|
|
{
|
|
{
|
|
item.IsChecked = true;
|
|
item.IsChecked = true;
|
|
}
|
|
}
|
|
- filters.Add(filter);
|
|
|
|
|
|
+ if(filter is CoreFilterDefinition coreFilter)
|
|
|
|
+ {
|
|
|
|
+ filters.Add(coreFilter);
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
if (Security.IsAllowed<CanCustomiseFilters>())
|
|
if (Security.IsAllowed<CanCustomiseFilters>())
|
|
@@ -238,7 +267,7 @@ public abstract class DynamicGridFilterComponent<T>
|
|
SaveSettings();
|
|
SaveSettings();
|
|
}
|
|
}
|
|
|
|
|
|
- private void Filter_Toggle(CoreFilterDefinition tag, bool isChecked)
|
|
|
|
|
|
+ private void Filter_Toggle(ICoreFilterDefinition tag, bool isChecked)
|
|
{
|
|
{
|
|
if (MultipleFilters)
|
|
if (MultipleFilters)
|
|
{
|
|
{
|
|
@@ -273,7 +302,7 @@ public abstract class DynamicGridFilterComponent<T>
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
- public void DeselectFilter(CoreFilterDefinition filter, bool refresh)
|
|
|
|
|
|
+ public void DeselectFilter(ICoreFilterDefinition filter, bool refresh)
|
|
{
|
|
{
|
|
var removed = SelectedFilters.RemoveAll(x => x.Name.Equals(filter.Name));
|
|
var removed = SelectedFilters.RemoveAll(x => x.Name.Equals(filter.Name));
|
|
if (removed > 0)
|
|
if (removed > 0)
|
|
@@ -289,7 +318,7 @@ public abstract class DynamicGridFilterComponent<T>
|
|
/// <param name="filter"></param>
|
|
/// <param name="filter"></param>
|
|
/// <param name="additional"></param>
|
|
/// <param name="additional"></param>
|
|
/// <param name="refresh"></param>
|
|
/// <param name="refresh"></param>
|
|
- public void SelectFilter(CoreFilterDefinition? filter, bool additional, bool refresh)
|
|
|
|
|
|
+ public void SelectFilter(ICoreFilterDefinition? filter, bool additional, bool refresh)
|
|
{
|
|
{
|
|
var originalCount = SelectedFilters.Count;
|
|
var originalCount = SelectedFilters.Count;
|
|
var alreadyHas = filter is null || SelectedFilters.Any(x => x.Name.Equals(filter.Name));
|
|
var alreadyHas = filter is null || SelectedFilters.Any(x => x.Name.Equals(filter.Name));
|
|
@@ -310,12 +339,20 @@ public abstract class DynamicGridFilterComponent<T>
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
- public void SelectFilters(IEnumerable<CoreFilterDefinition> filters, bool refresh)
|
|
|
|
|
|
+ public void SelectFilters(IEnumerable<ICoreFilterDefinition> filters, bool refresh)
|
|
{
|
|
{
|
|
SelectedFilters.Clear();
|
|
SelectedFilters.Clear();
|
|
foreach (var filter in filters)
|
|
foreach (var filter in filters)
|
|
{
|
|
{
|
|
- SelectedFilters.Add(new(filter.Name, filter.AsFilter<T>(), filter));
|
|
|
|
|
|
+ var builtIn = BuiltInFilters.FirstOrDefault(x => x.Name == filter.Name);
|
|
|
|
+ if(builtIn is not null)
|
|
|
|
+ {
|
|
|
|
+ SelectedFilters.Add(new(filter.Name, builtIn.AsFilter<T>(), builtIn));
|
|
|
|
+ }
|
|
|
|
+ else
|
|
|
|
+ {
|
|
|
|
+ SelectedFilters.Add(new(filter.Name, filter.AsFilter<T>(), filter));
|
|
|
|
+ }
|
|
}
|
|
}
|
|
if (NumberOfFilters > 1 && !MultipleFilters)
|
|
if (NumberOfFilters > 1 && !MultipleFilters)
|
|
{
|
|
{
|