|
@@ -13,6 +13,8 @@ namespace InABox.DynamicGrid;
|
|
|
|
|
|
public class DynamicGridSelectedFilterSettings
|
|
|
{
|
|
|
+ public string? TemporaryFilter { get; set; }
|
|
|
+
|
|
|
public List<CoreFilterDefinition> SelectedFilters { get; set; }
|
|
|
|
|
|
public bool MultipleFilters { get; set; }
|
|
@@ -23,10 +25,11 @@ public class DynamicGridSelectedFilterSettings
|
|
|
MultipleFilters = false;
|
|
|
}
|
|
|
|
|
|
- public DynamicGridSelectedFilterSettings(List<CoreFilterDefinition> selectedFilters, bool multipleFilters)
|
|
|
+ public DynamicGridSelectedFilterSettings(List<CoreFilterDefinition> selectedFilters, bool multipleFilters, string? temporaryFilter)
|
|
|
{
|
|
|
SelectedFilters = selectedFilters;
|
|
|
MultipleFilters = multipleFilters || selectedFilters.Count > 1;
|
|
|
+ TemporaryFilter = temporaryFilter;
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -98,6 +101,8 @@ public class DynamicGridFilterButtonComponent<T>
|
|
|
|
|
|
private List<FilterItem> SelectedFilters = new();
|
|
|
|
|
|
+ private Filter<T>? TemporaryFilter = null;
|
|
|
+
|
|
|
private IDynamicGrid Grid;
|
|
|
|
|
|
private IConfiguration<CoreFilterDefinitions> GlobalConfiguration;
|
|
@@ -127,6 +132,7 @@ public class DynamicGridFilterButtonComponent<T>
|
|
|
public void SetSettings(DynamicGridSelectedFilterSettings settings, bool refresh)
|
|
|
{
|
|
|
_multipleFilters = settings.MultipleFilters;
|
|
|
+ TemporaryFilter = Serialization.Deserialize<Filter<T>>(settings.TemporaryFilter);
|
|
|
SelectFilters(settings.SelectedFilters, refresh);
|
|
|
}
|
|
|
|
|
@@ -137,6 +143,16 @@ public class DynamicGridFilterButtonComponent<T>
|
|
|
private void RebuildMenu(ContextMenu menu)
|
|
|
{
|
|
|
menu.Items.Clear();
|
|
|
+
|
|
|
+ if (TemporaryFilter is null)
|
|
|
+ {
|
|
|
+ menu.AddCheckItem("Filter...", TemporaryFilter_Click, isChecked: false);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ menu.AddCheckItem("<Custom Filter>", TemporaryFilter_Click, isChecked: true);
|
|
|
+ }
|
|
|
+
|
|
|
menu.AddItem("Clear Filters", null, ClearFilter_Click);
|
|
|
var multipleFilters = menu.AddCheckItem("Use Multiple Filters", MultipleFilters_Click, MultipleFilters);
|
|
|
multipleFilters.StaysOpenOnClick = true;
|
|
@@ -180,6 +196,21 @@ public class DynamicGridFilterButtonComponent<T>
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ private void TemporaryFilter_Click(bool isChecked)
|
|
|
+ {
|
|
|
+ var window = new FilterEditorWindow();
|
|
|
+ window.SetFilter(TemporaryFilter ?? new Filter<T>());
|
|
|
+ if (window.ShowDialog() == true)
|
|
|
+ {
|
|
|
+ TemporaryFilter = window.GetFilter<T>();
|
|
|
+ if(TemporaryFilter is not null && !MultipleFilters)
|
|
|
+ {
|
|
|
+ SelectedFilters.Clear();
|
|
|
+ }
|
|
|
+ UpdateFilters(true);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
private bool DoFilter(Button button, CoreRow[] rows)
|
|
|
{
|
|
|
Menu = new ContextMenu();
|
|
@@ -242,9 +273,10 @@ public class DynamicGridFilterButtonComponent<T>
|
|
|
|
|
|
public void ClearFilters(bool refresh)
|
|
|
{
|
|
|
- if (SelectedFilters.Count > 0)
|
|
|
+ if (SelectedFilters.Count > 0 || TemporaryFilter is not null)
|
|
|
{
|
|
|
SelectedFilters.Clear();
|
|
|
+ TemporaryFilter = null;
|
|
|
UpdateFilters(refresh);
|
|
|
}
|
|
|
}
|
|
@@ -273,6 +305,7 @@ public class DynamicGridFilterButtonComponent<T>
|
|
|
if (!additional)
|
|
|
{
|
|
|
SelectedFilters.Clear();
|
|
|
+ TemporaryFilter = null;
|
|
|
}
|
|
|
if (filter is not null && !SelectedFilters.Any(x => x.Name.Equals(filter.Name)))
|
|
|
{
|
|
@@ -314,7 +347,14 @@ public class DynamicGridFilterButtonComponent<T>
|
|
|
var image = SelectedFilters.Count > 0
|
|
|
? Wpf.Resources.filter_set
|
|
|
: Wpf.Resources.filter;
|
|
|
- var text = string.Join(", ", SelectedFilters.Select(x => x.Name));
|
|
|
+
|
|
|
+ var filterNames = SelectedFilters.Select(x => x.Name);
|
|
|
+ if(TemporaryFilter is not null)
|
|
|
+ {
|
|
|
+ filterNames = CoreUtils.One("Custom").Concat(filterNames);
|
|
|
+ }
|
|
|
+
|
|
|
+ var text = string.Join(", ", filterNames);
|
|
|
if (!ButtonText.IsNullOrWhiteSpace())
|
|
|
{
|
|
|
if (text.IsNullOrWhiteSpace())
|
|
@@ -331,13 +371,17 @@ public class DynamicGridFilterButtonComponent<T>
|
|
|
|
|
|
private void SaveSettings()
|
|
|
{
|
|
|
- OnFiltersSelected?.Invoke(new DynamicGridSelectedFilterSettings(SelectedFilters.Select(x => x.Definition).ToList(), MultipleFilters));
|
|
|
+ OnFiltersSelected?.Invoke(new DynamicGridSelectedFilterSettings(
|
|
|
+ SelectedFilters.Select(x => x.Definition).ToList(),
|
|
|
+ MultipleFilters,
|
|
|
+ TemporaryFilter is not null ? Serialization.Serialize(TemporaryFilter) : null));
|
|
|
}
|
|
|
|
|
|
public Filter<T>? GetFilter()
|
|
|
{
|
|
|
var filters = new Filters<T>();
|
|
|
filters.AddRange(SelectedFilters.Select(x => x.Filter));
|
|
|
+ filters.Add(TemporaryFilter);
|
|
|
return filters.Combine();
|
|
|
}
|
|
|
}
|