diff --git a/SabreTools.Filtering/DatItemFilter.cs b/SabreTools.Filtering/DatItemFilter.cs
deleted file mode 100644
index 70eee361..00000000
--- a/SabreTools.Filtering/DatItemFilter.cs
+++ /dev/null
@@ -1,2042 +0,0 @@
-using System.Collections.Generic;
-using SabreTools.Core;
-using SabreTools.Core.Tools;
-using SabreTools.DatItems;
-using SabreTools.DatItems.Formats;
-using SabreTools.Logging;
-
-namespace SabreTools.Filtering
-{
- ///
- /// Represents the filtering operations that need to be performed on a set of items, usually a DAT
- ///
- public class DatItemFilter : Filter
- {
- #region Fields
-
- #region Filters
-
- public FilterItem AltName { get; private set; } = new FilterItem();
- public FilterItem AltTitle { get; private set; } = new FilterItem();
- public FilterItem Analog_Mask { get; private set; } = new FilterItem();
- public FilterItem ArchiveDotOrgFormat { get; private set; } = new FilterItem();
- public FilterItem ArchiveDotOrgSource { get; private set; } = new FilterItem();
- public FilterItem AreaEndianness { get; private set; } = new FilterItem() { Positive = Endianness.NULL, Negative = Endianness.NULL };
- public FilterItem AreaName { get; private set; } = new FilterItem();
- public FilterItem AreaSize { get; private set; } = new FilterItem() { Positive = null, Negative = null, Neutral = null };
- public FilterItem AreaWidth { get; private set; } = new FilterItem() { Positive = null, Negative = null, Neutral = null };
- public FilterItem Bios { get; private set; } = new FilterItem();
- public FilterItem Boot { get; private set; } = new FilterItem();
- public FilterItem Categories { get; private set; } = new FilterItem();
- public FilterItem Channels { get; private set; } = new FilterItem() { Positive = null, Negative = null, Neutral = null };
- public FilterItem ChipType { get; private set; } = new FilterItem() { Positive = Core.ChipType.NULL, Negative = Core.ChipType.NULL };
- public FilterItem Clock { get; private set; } = new FilterItem() { Positive = null, Negative = null, Neutral = null };
- public FilterItem Clone { get; private set; } = new FilterItem();
- public FilterItem CocktailStatus { get; private set; } = new FilterItem() { Positive = Core.SupportStatus.NULL, Negative = Core.SupportStatus.NULL };
- public FilterItem Coins { get; private set; } = new FilterItem() { Positive = null, Negative = null, Neutral = null };
- public FilterItem Complete { get; private set; } = new FilterItem();
- public FilterItem Condition_Mask { get; private set; } = new FilterItem();
- public FilterItem Condition_Relation { get; private set; } = new FilterItem() { Positive = Core.Relation.NULL, Negative = Core.Relation.NULL };
- public FilterItem Condition_Tag { get; private set; } = new FilterItem();
- public FilterItem Condition_Value { get; private set; } = new FilterItem();
- public FilterItem Content { get; private set; } = new FilterItem();
- public FilterItem Control_Buttons { get; private set; } = new FilterItem() { Positive = null, Negative = null, Neutral = null };
- public FilterItem Control_KeyDelta { get; private set; } = new FilterItem() { Positive = null, Negative = null, Neutral = null };
- public FilterItem Control_Maximum { get; private set; } = new FilterItem() { Positive = null, Negative = null, Neutral = null };
- public FilterItem Control_Minimum { get; private set; } = new FilterItem() { Positive = null, Negative = null, Neutral = null };
- public FilterItem Control_Player { get; private set; } = new FilterItem() { Positive = null, Negative = null, Neutral = null };
- public FilterItem Control_ReqButtons { get; private set; } = new FilterItem() { Positive = null, Negative = null, Neutral = null };
- public FilterItem Control_Reverse { get; private set; } = new FilterItem() { Neutral = null };
- public FilterItem Control_Sensitivity { get; private set; } = new FilterItem() { Positive = null, Negative = null, Neutral = null };
- public FilterItem Control_Type { get; private set; } = new FilterItem() { Positive = ControlType.NULL, Negative = ControlType.NULL };
- public FilterItem Control_Ways { get; private set; } = new FilterItem();
- public FilterItem Control_Ways2 { get; private set; } = new FilterItem();
- public FilterItem Control_Ways3 { get; private set; } = new FilterItem();
- public FilterItem CRC { get; private set; } = new FilterItem();
- public FilterItem Date { get; private set; } = new FilterItem();
- public FilterItem Default { get; private set; } = new FilterItem() { Neutral = null };
- public FilterItem Description { get; private set; } = new FilterItem();
- public FilterItem DeviceType { get; private set; } = new FilterItem() { Positive = Core.DeviceType.NULL, Negative = Core.DeviceType.NULL };
- public FilterItem DevStatus { get; private set; } = new FilterItem();
- public FilterItem DisplayType { get; private set; } = new FilterItem() { Positive = Core.DisplayType.NULL, Negative = Core.DisplayType.NULL };
- public FilterItem EmulationStatus { get; private set; } = new FilterItem() { Positive = Core.SupportStatus.NULL, Negative = Core.SupportStatus.NULL };
- public FilterItem Extension_Name { get; private set; } = new FilterItem();
- public FilterItem FeatureOverall { get; private set; } = new FilterItem() { Positive = Core.FeatureStatus.NULL, Negative = Core.FeatureStatus.NULL };
- public FilterItem FeatureStatus { get; private set; } = new FilterItem() { Positive = Core.FeatureStatus.NULL, Negative = Core.FeatureStatus.NULL };
- public FilterItem FeatureType { get; private set; } = new FilterItem() { Positive = Core.FeatureType.NULL, Negative = Core.FeatureType.NULL };
- public FilterItem Filter { get; private set; } = new FilterItem();
- public FilterItem FixedImage { get; private set; } = new FilterItem();
- public FilterItem FlipX { get; private set; } = new FilterItem() { Neutral = null };
- public FilterItem HBEnd { get; private set; } = new FilterItem() { Positive = null, Negative = null, Neutral = null };
- public FilterItem HBStart { get; private set; } = new FilterItem() { Positive = null, Negative = null, Neutral = null };
- public FilterItem Height { get; private set; } = new FilterItem() { Positive = null, Negative = null, Neutral = null };
- public FilterItem HTotal { get; private set; } = new FilterItem() { Positive = null, Negative = null, Neutral = null };
- public FilterItem Incomplete { get; private set; } = new FilterItem() { Neutral = null };
- public FilterItem Index { get; private set; } = new FilterItem();
- public FilterItem Instance_BriefName { get; private set; } = new FilterItem();
- public FilterItem Instance_Name { get; private set; } = new FilterItem();
- public FilterItem Interface { get; private set; } = new FilterItem();
- public FilterItem Inverted { get; private set; } = new FilterItem();
- public FilterItem Language { get; private set; } = new FilterItem();
- public FilterItem Languages { get; private set; } = new FilterItem();
- public FilterItem LoadFlag { get; private set; } = new FilterItem() { Positive = Core.LoadFlag.NULL, Negative = Core.LoadFlag.NULL };
- public FilterItem Location_Inverted { get; private set; } = new FilterItem() { Neutral = null };
- public FilterItem Location_Name { get; private set; } = new FilterItem();
- public FilterItem Location_Number { get; private set; } = new FilterItem() { Positive = null, Negative = null, Neutral = null };
- public FilterItem Mandatory { get; private set; } = new FilterItem() { Positive = null, Negative = null, Neutral = null };
- public FilterItem Mask { get; private set; } = new FilterItem();
- public FilterItem MD5 { get; private set; } = new FilterItem();
- public FilterItem Merge { get; private set; } = new FilterItem();
- public FilterItem MIA { get; private set; } = new FilterItem();
- public FilterItem Name { get; private set; } = new FilterItem();
- public FilterItem NoSoundHardware { get; private set; } = new FilterItem() { Neutral = null };
- public FilterItem Number { get; private set; } = new FilterItem();
- public FilterItem Offset { get; private set; } = new FilterItem();
- public FilterItem OpenMSXSubType { get; private set; } = new FilterItem() { Positive = Core.OpenMSXSubType.NULL, Negative = Core.OpenMSXSubType.NULL };
- public FilterItem OpenMSXType { get; private set; } = new FilterItem();
- public FilterItem Optional { get; private set; } = new FilterItem() { Neutral = null };
- public FilterItem Original { get; private set; } = new FilterItem();
- public FilterItem OriginalFilename { get; private set; } = new FilterItem();
- public FilterItem Part_Feature_Name { get; private set; } = new FilterItem();
- public FilterItem Part_Feature_Value { get; private set; } = new FilterItem();
- public FilterItem Part_Interface { get; private set; } = new FilterItem();
- public FilterItem Part_Name { get; private set; } = new FilterItem();
- public FilterItem PixClock { get; private set; } = new FilterItem() { Positive = null, Negative = null, Neutral = null };
- public FilterItem Physical { get; private set; } = new FilterItem();
- public FilterItem Players { get; private set; } = new FilterItem() { Positive = null, Negative = null, Neutral = null };
- public FilterItem Refresh { get; private set; } = new FilterItem() { Positive = null, Negative = null, Neutral = null };
- public FilterItem Region { get; private set; } = new FilterItem();
- public FilterItem RegParent { get; private set; } = new FilterItem();
- public FilterItem Relation { get; private set; } = new FilterItem() { Positive = Core.Relation.NULL, Negative = Core.Relation.NULL };
- public FilterItem Remark { get; private set; } = new FilterItem();
- public FilterItem RequiresArtwork { get; private set; } = new FilterItem() { Neutral = null };
- public FilterItem Rotate { get; private set; } = new FilterItem() { Positive = null, Negative = null, Neutral = null };
- public FilterItem Rotation { get; private set; } = new FilterItem();
- public FilterItem SaveStateStatus { get; private set; } = new FilterItem() { Positive = Supported.NULL, Negative = Supported.NULL };
- public FilterItem Service { get; private set; } = new FilterItem() { Neutral = null };
- public FilterItem Setting_Default { get; private set; } = new FilterItem() { Neutral = null };
- public FilterItem Setting_Name { get; private set; } = new FilterItem();
- public FilterItem Setting_Value { get; private set; } = new FilterItem();
- public FilterItem SHA1 { get; private set; } = new FilterItem();
- public FilterItem SHA256 { get; private set; } = new FilterItem();
- public FilterItem SHA384 { get; private set; } = new FilterItem();
- public FilterItem SHA512 { get; private set; } = new FilterItem();
- public FilterItem Size { get; private set; } = new FilterItem() { Positive = null, Negative = null, Neutral = null };
- public FilterItem SlotOption_Default { get; private set; } = new FilterItem() { Neutral = null };
- public FilterItem SlotOption_DeviceName { get; private set; } = new FilterItem();
- public FilterItem SlotOption_Name { get; private set; } = new FilterItem();
- public FilterItem SoftwareListStatus { get; private set; } = new FilterItem() { Positive = Core.SoftwareListStatus.None, Negative = Core.SoftwareListStatus.None };
- public FilterItem SpamSum { get; private set; } = new FilterItem();
- public FilterItem Status { get; private set; } = new FilterItem() { Positive = ItemStatus.NULL, Negative = ItemStatus.NULL };
- public FilterItem Summation { get; private set; } = new FilterItem();
- public FilterItem SupportStatus { get; private set; } = new FilterItem() { Positive = Core.SupportStatus.NULL, Negative = Core.SupportStatus.NULL };
- public FilterItem Tag { get; private set; } = new FilterItem();
- public FilterItem Tilt { get; private set; } = new FilterItem() { Neutral = null };
- public FilterItem Type { get; private set; } = new FilterItem();
- public FilterItem Unofficial { get; private set; } = new FilterItem() { Neutral = null };
- public FilterItem Value { get; private set; } = new FilterItem();
- public FilterItem VBEnd { get; private set; } = new FilterItem() { Positive = null, Negative = null, Neutral = null };
- public FilterItem VBStart { get; private set; } = new FilterItem() { Positive = null, Negative = null, Neutral = null };
- public FilterItem VTotal { get; private set; } = new FilterItem() { Positive = null, Negative = null, Neutral = null };
- public FilterItem Width { get; private set; } = new FilterItem() { Positive = null, Negative = null, Neutral = null };
- public FilterItem Writable { get; private set; } = new FilterItem() { Neutral = null };
-
- #endregion
-
- ///
- /// Determines if any filters have been set
- ///
- public bool HasFilters { get; set; } = false;
-
- #endregion // Fields
-
- #region Constructors
-
- ///
- /// Constructor
- ///
- public DatItemFilter()
- {
- logger = new Logger(this);
- }
-
- #endregion
-
- #region Population
-
- ///
- /// Set multiple filters from key
- ///
- /// Key for the filter to be set
- /// List of values for the filter
- /// True if negative filter, false otherwise
- public void SetFilter(DatItemField key, List values, bool negate)
- {
- foreach (string value in values)
- {
- SetFilter(key, value, negate);
- }
- }
-
- ///
- /// Set a single filter from key
- ///
- /// Key for the filter to be set
- /// Value of the filter
- /// True if negative filter, false otherwise
- public void SetFilter(DatItemField key, string? value, bool negate)
- {
- switch (key)
- {
- case DatItemField.AltName:
- SetStringFilter(AltName, value, negate);
- break;
-
- case DatItemField.AltTitle:
- SetStringFilter(AltTitle, value, negate);
- break;
-
- case DatItemField.Analog_Mask:
- SetStringFilter(Analog_Mask, value, negate);
- break;
-
- case DatItemField.ArchiveDotOrgFormat:
- SetStringFilter(ArchiveDotOrgFormat, value, negate);
- break;
-
- case DatItemField.ArchiveDotOrgSource:
- SetStringFilter(ArchiveDotOrgSource, value, negate);
- break;
-
- case DatItemField.AreaEndianness:
- if (negate)
- AreaEndianness.Negative |= value.AsEnumValue();
- else
- AreaEndianness.Positive |= value.AsEnumValue();
- break;
-
- case DatItemField.AreaName:
- SetStringFilter(AreaName, value, negate);
- break;
-
- case DatItemField.AreaSize:
- SetLongFilter(AreaSize, value, negate);
- break;
-
- case DatItemField.AreaWidth:
- SetLongFilter(AreaWidth, value, negate);
- break;
-
- case DatItemField.Bios:
- SetStringFilter(Bios, value, negate);
- break;
-
- case DatItemField.Boot:
- SetStringFilter(Boot, value, negate);
- break;
-
- case DatItemField.Categories:
- SetStringFilter(Categories, value, negate);
- break;
-
- case DatItemField.Channels:
- SetLongFilter(Channels, value, negate);
- break;
-
- case DatItemField.ChipType:
- if (negate)
- ChipType.Negative |= value.AsEnumValue();
- else
- ChipType.Positive |= value.AsEnumValue();
- break;
-
- case DatItemField.Clock:
- SetLongFilter(Clock, value, negate);
- break;
-
- case DatItemField.Clone:
- SetStringFilter(Clone, value, negate);
- break;
-
- case DatItemField.CocktailStatus:
- if (negate)
- CocktailStatus.Negative |= value.AsEnumValue();
- else
- CocktailStatus.Positive |= value.AsEnumValue