|
@@ -3,6 +3,7 @@ using InABox.Core;
|
|
|
using InABox.WPF;
|
|
|
using System;
|
|
|
using System.Collections.Generic;
|
|
|
+using System.Drawing;
|
|
|
using System.Linq;
|
|
|
using System.Text;
|
|
|
using System.Threading.Tasks;
|
|
@@ -33,11 +34,38 @@ public class DynamicGridSelectedFilterSettings
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-public class DynamicGridFilterButtonComponent<T>
|
|
|
- where T : BaseObject, new()
|
|
|
+public abstract class DynamicGridFilterComponent<T>
|
|
|
{
|
|
|
+ #region Private Fields
|
|
|
+
|
|
|
+ private class FilterItem
|
|
|
+ {
|
|
|
+ public string Name { get; set; }
|
|
|
+
|
|
|
+ public Filter<T>? Filter { get; }
|
|
|
+
|
|
|
+ public CoreFilterDefinition Definition { get; set; }
|
|
|
+
|
|
|
+ public FilterItem(string name, Filter<T>? filter, CoreFilterDefinition definition)
|
|
|
+ {
|
|
|
+ Name = name;
|
|
|
+ Filter = filter;
|
|
|
+ Definition = definition;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private List<FilterItem> SelectedFilters = new();
|
|
|
+
|
|
|
+ private Filter<T>? TemporaryFilter = null;
|
|
|
|
|
|
- private Button FilterBtn = null!; // Late-initialised
|
|
|
+ private IConfiguration<CoreFilterDefinitions> GlobalConfiguration;
|
|
|
+ private IConfiguration<CoreFilterDefinitions> UserConfiguration;
|
|
|
+
|
|
|
+ private int NumberOfFilters => SelectedFilters.Count + (TemporaryFilter is null ? 0 : 1);
|
|
|
+
|
|
|
+ #endregion
|
|
|
+
|
|
|
+ #region Public Properties
|
|
|
|
|
|
private bool _multipleFilters = false;
|
|
|
|
|
@@ -49,7 +77,7 @@ public class DynamicGridFilterButtonComponent<T>
|
|
|
if (_multipleFilters != value)
|
|
|
{
|
|
|
_multipleFilters = value;
|
|
|
- if (!_multipleFilters && SelectedFilters.Count > 1)
|
|
|
+ if (!_multipleFilters && NumberOfFilters > 1)
|
|
|
{
|
|
|
ClearFilters(true);
|
|
|
}
|
|
@@ -57,18 +85,6 @@ public class DynamicGridFilterButtonComponent<T>
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- private bool _showFilterList;
|
|
|
- public bool ShowFilterList
|
|
|
- {
|
|
|
- get => _showFilterList;
|
|
|
- set
|
|
|
- {
|
|
|
- _showFilterList = value;
|
|
|
- if (FilterBtn != null)
|
|
|
- FilterBtn.Visibility = value ? Visibility.Visible : Visibility.Collapsed;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
private string? _buttonText;
|
|
|
public string? ButtonText
|
|
|
{
|
|
@@ -83,30 +99,9 @@ public class DynamicGridFilterButtonComponent<T>
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- private class FilterItem
|
|
|
- {
|
|
|
- public string Name { get; set; }
|
|
|
-
|
|
|
- public Filter<T>? Filter { get; }
|
|
|
-
|
|
|
- public CoreFilterDefinition Definition { get; set; }
|
|
|
-
|
|
|
- public FilterItem(string name, Filter<T>? filter, CoreFilterDefinition definition)
|
|
|
- {
|
|
|
- Name = name;
|
|
|
- Filter = filter;
|
|
|
- Definition = definition;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- private List<FilterItem> SelectedFilters = new();
|
|
|
-
|
|
|
- private Filter<T>? TemporaryFilter = null;
|
|
|
-
|
|
|
- private IDynamicGrid Grid;
|
|
|
+ #endregion
|
|
|
|
|
|
- private IConfiguration<CoreFilterDefinitions> GlobalConfiguration;
|
|
|
- private IConfiguration<CoreFilterDefinitions> UserConfiguration;
|
|
|
+ #region Events
|
|
|
|
|
|
public delegate void FilterSelectedHandler(DynamicGridSelectedFilterSettings filters);
|
|
|
|
|
@@ -116,17 +111,14 @@ public class DynamicGridFilterButtonComponent<T>
|
|
|
|
|
|
public event FilterRefreshHandler? OnFilterRefresh;
|
|
|
|
|
|
- public DynamicGridFilterButtonComponent(IDynamicGrid grid,
|
|
|
+ #endregion
|
|
|
+
|
|
|
+ public DynamicGridFilterComponent(
|
|
|
IConfiguration<CoreFilterDefinitions> globalConfiguration,
|
|
|
IConfiguration<CoreFilterDefinitions> userConfiguration)
|
|
|
{
|
|
|
- Grid = grid;
|
|
|
GlobalConfiguration = globalConfiguration;
|
|
|
UserConfiguration = userConfiguration;
|
|
|
-
|
|
|
- FilterBtn = Grid.AddButton("", Wpf.Resources.filter.AsBitmapImage(), DoFilter);
|
|
|
- FilterBtn.Margin = new Thickness(0, 2, 7, 0);
|
|
|
- FilterBtn.Padding = new Thickness(0);
|
|
|
}
|
|
|
|
|
|
public void SetSettings(DynamicGridSelectedFilterSettings settings, bool refresh)
|
|
@@ -203,7 +195,7 @@ public class DynamicGridFilterButtonComponent<T>
|
|
|
if (window.ShowDialog() == true)
|
|
|
{
|
|
|
TemporaryFilter = window.GetFilter<T>();
|
|
|
- if(TemporaryFilter is not null && !MultipleFilters)
|
|
|
+ if (TemporaryFilter is not null && !MultipleFilters)
|
|
|
{
|
|
|
SelectedFilters.Clear();
|
|
|
}
|
|
@@ -211,7 +203,7 @@ public class DynamicGridFilterButtonComponent<T>
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- private bool DoFilter(Button button, CoreRow[] rows)
|
|
|
+ protected void DoFilter()
|
|
|
{
|
|
|
Menu = new ContextMenu();
|
|
|
|
|
@@ -219,8 +211,6 @@ public class DynamicGridFilterButtonComponent<T>
|
|
|
|
|
|
Menu.IsOpen = true;
|
|
|
Menu.Closed += Menu_Closed;
|
|
|
-
|
|
|
- return false;
|
|
|
}
|
|
|
|
|
|
private void Menu_Closed(object sender, RoutedEventArgs e)
|
|
@@ -273,7 +263,7 @@ public class DynamicGridFilterButtonComponent<T>
|
|
|
|
|
|
public void ClearFilters(bool refresh)
|
|
|
{
|
|
|
- if (SelectedFilters.Count > 0 || TemporaryFilter is not null)
|
|
|
+ if (NumberOfFilters > 0)
|
|
|
{
|
|
|
SelectedFilters.Clear();
|
|
|
TemporaryFilter = null;
|
|
@@ -325,7 +315,7 @@ public class DynamicGridFilterButtonComponent<T>
|
|
|
{
|
|
|
SelectedFilters.Add(new(filter.Name, filter.AsFilter<T>(), filter));
|
|
|
}
|
|
|
- if (SelectedFilters.Count > 1 && !MultipleFilters)
|
|
|
+ if (NumberOfFilters > 1 && !MultipleFilters)
|
|
|
{
|
|
|
MultipleFilters = true;
|
|
|
}
|
|
@@ -342,14 +332,16 @@ public class DynamicGridFilterButtonComponent<T>
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ protected abstract void UpdateButtonText(Bitmap image, string text);
|
|
|
+
|
|
|
private void UpdateButton()
|
|
|
{
|
|
|
- var image = SelectedFilters.Count > 0
|
|
|
+ var image = NumberOfFilters > 0
|
|
|
? Wpf.Resources.filter_set
|
|
|
: Wpf.Resources.filter;
|
|
|
|
|
|
var filterNames = SelectedFilters.Select(x => x.Name);
|
|
|
- if(TemporaryFilter is not null)
|
|
|
+ if (TemporaryFilter is not null)
|
|
|
{
|
|
|
filterNames = CoreUtils.One("Custom").Concat(filterNames);
|
|
|
}
|
|
@@ -366,7 +358,7 @@ public class DynamicGridFilterButtonComponent<T>
|
|
|
text = $"{ButtonText}: {text}";
|
|
|
}
|
|
|
}
|
|
|
- Grid.UpdateButton(FilterBtn, image.AsBitmapImage(), text);
|
|
|
+ UpdateButtonText(image, text);
|
|
|
}
|
|
|
|
|
|
private void SaveSettings()
|
|
@@ -384,4 +376,53 @@ public class DynamicGridFilterButtonComponent<T>
|
|
|
filters.Add(TemporaryFilter);
|
|
|
return filters.Combine();
|
|
|
}
|
|
|
+}
|
|
|
+
|
|
|
+public class DynamicGridFilterButtonComponent<T> : DynamicGridFilterComponent<T>
|
|
|
+ where T : BaseObject, new()
|
|
|
+{
|
|
|
+ private readonly IDynamicGrid Grid;
|
|
|
+
|
|
|
+ private Button FilterBtn = null!;
|
|
|
+
|
|
|
+
|
|
|
+ private bool _showFilterList;
|
|
|
+ public bool ShowFilterList
|
|
|
+ {
|
|
|
+ get => _showFilterList;
|
|
|
+ set
|
|
|
+ {
|
|
|
+ _showFilterList = value;
|
|
|
+ if (FilterBtn != null)
|
|
|
+ FilterBtn.Visibility = value ? Visibility.Visible : Visibility.Collapsed;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public DynamicGridFilterButtonComponent(
|
|
|
+ IDynamicGrid grid,
|
|
|
+ IConfiguration<CoreFilterDefinitions> globalConfiguration,
|
|
|
+ IConfiguration<CoreFilterDefinitions> userConfiguration) : base(globalConfiguration, userConfiguration)
|
|
|
+ {
|
|
|
+ Grid = grid;
|
|
|
+
|
|
|
+ CreateButton();
|
|
|
+ }
|
|
|
+
|
|
|
+ private void CreateButton()
|
|
|
+ {
|
|
|
+ FilterBtn = Grid.AddButton("", Wpf.Resources.filter.AsBitmapImage(), Click);
|
|
|
+ FilterBtn.Margin = new Thickness(0, 2, 7, 0);
|
|
|
+ FilterBtn.Padding = new Thickness(0);
|
|
|
+ }
|
|
|
+
|
|
|
+ private bool Click(Button _arg1, CoreRow[] _arg2)
|
|
|
+ {
|
|
|
+ DoFilter();
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ protected override void UpdateButtonText(Bitmap image, string text)
|
|
|
+ {
|
|
|
+ Grid.UpdateButton(FilterBtn, image.AsBitmapImage(), text);
|
|
|
+ }
|
|
|
}
|