2016-10-26 21:02:01 -07:00
using System ;
2017-01-11 17:27:25 -08:00
using System.Collections.Generic ;
2020-08-20 14:36:36 -07:00
2019-01-08 17:40:28 -08:00
using SabreTools.Library.Data ;
using SabreTools.Library.DatItems ;
2020-07-15 09:41:59 -07:00
using SabreTools.Library.Tools ;
2016-10-26 21:02:01 -07:00
2020-07-30 22:51:33 -07:00
namespace SabreTools.Library.Filtering
2016-10-26 21:02:01 -07:00
{
2019-01-08 17:40:28 -08:00
/// <summary>
/// Represents the filtering operations that need to be performed on a set of items, usually a DAT
/// </summary>
2020-07-18 21:35:17 -07:00
/// TODO: Can clever use of Filtering allow for easier external splitting methods?
2020-08-24 22:25:47 -07:00
/// TODO: Field name for filter population needs to be overhauled
2019-01-11 13:44:29 -08:00
public class Filter
2019-01-08 17:40:28 -08:00
{
2020-08-20 14:36:36 -07:00
#region Fields
2019-01-08 17:40:28 -08:00
2020-07-15 09:41:59 -07:00
#region Machine Filters
2020-08-20 14:36:36 -07:00
#region Common
2020-08-25 14:11:00 -07:00
public FilterItem < string > Machine_Name { get ; private set ; } = new FilterItem < string > ( ) ;
public FilterItem < string > Machine_Comment { get ; private set ; } = new FilterItem < string > ( ) ;
public FilterItem < string > Machine_Description { get ; private set ; } = new FilterItem < string > ( ) ;
public FilterItem < string > Machine_Year { get ; private set ; } = new FilterItem < string > ( ) ;
public FilterItem < string > Machine_Manufacturer { get ; private set ; } = new FilterItem < string > ( ) ;
public FilterItem < string > Machine_Publisher { get ; private set ; } = new FilterItem < string > ( ) ;
public FilterItem < string > Machine_Category { get ; private set ; } = new FilterItem < string > ( ) ;
public FilterItem < string > Machine_RomOf { get ; private set ; } = new FilterItem < string > ( ) ;
public FilterItem < string > Machine_CloneOf { get ; private set ; } = new FilterItem < string > ( ) ;
public FilterItem < string > Machine_SampleOf { get ; private set ; } = new FilterItem < string > ( ) ;
2020-08-31 15:33:05 -07:00
public FilterItem < MachineType > Machine_Type { get ; private set ; } = new FilterItem < MachineType > ( ) { Positive = 0x0 , Negative = 0x0 } ;
2020-07-18 21:35:17 -07:00
2020-08-20 14:36:36 -07:00
#endregion
#region AttractMode
2020-08-25 14:11:00 -07:00
public FilterItem < string > Machine_Players { get ; private set ; } = new FilterItem < string > ( ) ;
public FilterItem < string > Machine_Rotation { get ; private set ; } = new FilterItem < string > ( ) ;
public FilterItem < string > Machine_Control { get ; private set ; } = new FilterItem < string > ( ) ;
public FilterItem < string > Machine_Status { get ; private set ; } = new FilterItem < string > ( ) ;
public FilterItem < string > Machine_DisplayCount { get ; private set ; } = new FilterItem < string > ( ) ;
public FilterItem < string > Machine_DisplayType { get ; private set ; } = new FilterItem < string > ( ) ;
public FilterItem < string > Machine_Buttons { get ; private set ; } = new FilterItem < string > ( ) ;
2020-08-20 14:36:36 -07:00
#endregion
#region ListXML
2020-08-25 14:11:00 -07:00
public FilterItem < string > Machine_SourceFile { get ; private set ; } = new FilterItem < string > ( ) ;
public FilterItem < Runnable > Machine_Runnable { get ; private set ; } = new FilterItem < Runnable > ( ) { Positive = Runnable . NULL , Negative = Runnable . NULL } ;
// Displays
public FilterItem < bool? > Machine_Displays { get ; private set ; } = new FilterItem < bool? > ( ) { Neutral = null } ;
public FilterItem < string > Machine_Display_Tag { get ; private set ; } = new FilterItem < string > ( ) ;
public FilterItem < string > Machine_Display_Type { get ; private set ; } = new FilterItem < string > ( ) ;
public FilterItem < string > Machine_Display_Rotate { get ; private set ; } = new FilterItem < string > ( ) ;
public FilterItem < bool? > Machine_Display_FlipX { get ; private set ; } = new FilterItem < bool? > ( ) { Neutral = null } ;
public FilterItem < string > Machine_Display_Width { get ; private set ; } = new FilterItem < string > ( ) ;
public FilterItem < string > Machine_Display_Height { get ; private set ; } = new FilterItem < string > ( ) ;
public FilterItem < string > Machine_Display_Refresh { get ; private set ; } = new FilterItem < string > ( ) ;
public FilterItem < string > Machine_Display_PixClock { get ; private set ; } = new FilterItem < string > ( ) ;
public FilterItem < string > Machine_Display_HTotal { get ; private set ; } = new FilterItem < string > ( ) ;
public FilterItem < string > Machine_Display_HBEnd { get ; private set ; } = new FilterItem < string > ( ) ;
public FilterItem < string > Machine_Display_HBStart { get ; private set ; } = new FilterItem < string > ( ) ;
public FilterItem < string > Machine_Display_VTotal { get ; private set ; } = new FilterItem < string > ( ) ;
public FilterItem < string > Machine_Display_VBEnd { get ; private set ; } = new FilterItem < string > ( ) ;
public FilterItem < string > Machine_Display_VBStart { get ; private set ; } = new FilterItem < string > ( ) ;
// Conditions
public FilterItem < bool? > Machine_Conditions { get ; private set ; } = new FilterItem < bool? > ( ) { Neutral = null } ;
public FilterItem < string > Machine_Condition_Tag { get ; private set ; } = new FilterItem < string > ( ) ;
public FilterItem < string > Machine_Condition_Mask { get ; private set ; } = new FilterItem < string > ( ) ;
public FilterItem < string > Machine_Condition_Relation { get ; private set ; } = new FilterItem < string > ( ) ;
public FilterItem < string > Machine_Condition_Value { get ; private set ; } = new FilterItem < string > ( ) ;
// Inputs
public FilterItem < bool? > Machine_Inputs { get ; private set ; } = new FilterItem < bool? > ( ) { Neutral = null } ;
public FilterItem < bool? > Machine_Input_Service { get ; private set ; } = new FilterItem < bool? > ( ) { Neutral = null } ;
public FilterItem < bool? > Machine_Input_Tilt { get ; private set ; } = new FilterItem < bool? > ( ) { Neutral = null } ;
public FilterItem < string > Machine_Input_Players { get ; private set ; } = new FilterItem < string > ( ) ;
public FilterItem < string > Machine_Input_Coins { get ; private set ; } = new FilterItem < string > ( ) ;
// Inputs.Controls
public FilterItem < bool? > Machine_Input_Controls { get ; private set ; } = new FilterItem < bool? > ( ) { Neutral = null } ;
public FilterItem < string > Machine_Input_Control_Type { get ; private set ; } = new FilterItem < string > ( ) ;
public FilterItem < string > Machine_Input_Control_Player { get ; private set ; } = new FilterItem < string > ( ) ;
public FilterItem < string > Machine_Input_Control_Buttons { get ; private set ; } = new FilterItem < string > ( ) ;
public FilterItem < string > Machine_Input_Control_RegButtons { get ; private set ; } = new FilterItem < string > ( ) ;
public FilterItem < string > Machine_Input_Control_Minimum { get ; private set ; } = new FilterItem < string > ( ) ;
public FilterItem < string > Machine_Input_Control_Maximum { get ; private set ; } = new FilterItem < string > ( ) ;
public FilterItem < string > Machine_Input_Control_Sensitivity { get ; private set ; } = new FilterItem < string > ( ) ;
public FilterItem < string > Machine_Input_Control_KeyDelta { get ; private set ; } = new FilterItem < string > ( ) ;
public FilterItem < bool? > Machine_Input_Control_Reverse { get ; private set ; } = new FilterItem < bool? > ( ) { Neutral = null } ;
public FilterItem < string > Machine_Input_Control_Ways { get ; private set ; } = new FilterItem < string > ( ) ;
public FilterItem < string > Machine_Input_Control_Ways2 { get ; private set ; } = new FilterItem < string > ( ) ;
public FilterItem < string > Machine_Input_Control_Ways3 { get ; private set ; } = new FilterItem < string > ( ) ;
// Ports
public FilterItem < bool? > Machine_Ports { get ; private set ; } = new FilterItem < bool? > ( ) { Neutral = null } ;
public FilterItem < string > Machine_Port_Tag { get ; private set ; } = new FilterItem < string > ( ) ;
// Ports.Analogs
public FilterItem < bool? > Machine_Port_Analogs { get ; private set ; } = new FilterItem < bool? > ( ) { Neutral = null } ;
public FilterItem < string > Machine_Port_Analog_Mask { get ; private set ; } = new FilterItem < string > ( ) ;
// Drivers
public FilterItem < bool? > Machine_Drivers { get ; private set ; } = new FilterItem < bool? > ( ) { Neutral = null } ;
public FilterItem < string > Machine_Driver_Status { get ; private set ; } = new FilterItem < string > ( ) ;
public FilterItem < string > Machine_Driver_Emulation { get ; private set ; } = new FilterItem < string > ( ) ;
public FilterItem < string > Machine_Driver_Cocktail { get ; private set ; } = new FilterItem < string > ( ) ;
public FilterItem < string > Machine_Driver_SaveState { get ; private set ; } = new FilterItem < string > ( ) ;
// Devices
public FilterItem < bool? > Machine_Devices { get ; private set ; } = new FilterItem < bool? > ( ) { Neutral = null } ;
public FilterItem < string > Machine_Device_Type { get ; private set ; } = new FilterItem < string > ( ) ;
public FilterItem < string > Machine_Device_Tag { get ; private set ; } = new FilterItem < string > ( ) ;
public FilterItem < string > Machine_Device_FixedImage { get ; private set ; } = new FilterItem < string > ( ) ;
public FilterItem < string > Machine_Device_Mandatory { get ; private set ; } = new FilterItem < string > ( ) ;
public FilterItem < string > Machine_Device_Interface { get ; private set ; } = new FilterItem < string > ( ) ;
// Devices.Instances
public FilterItem < bool? > Machine_Device_Instances { get ; private set ; } = new FilterItem < bool? > ( ) { Neutral = null } ;
public FilterItem < string > Machine_Device_Instance_Name { get ; private set ; } = new FilterItem < string > ( ) ;
public FilterItem < string > Machine_Device_Instance_BriefName { get ; private set ; } = new FilterItem < string > ( ) ;
// Devices.Extensions
public FilterItem < bool? > Machine_Device_Extensions { get ; private set ; } = new FilterItem < bool? > ( ) { Neutral = null } ;
public FilterItem < string > Machine_Device_Extension_Name { get ; private set ; } = new FilterItem < string > ( ) ;
2020-07-15 09:41:59 -07:00
#endregion
2020-08-20 14:36:36 -07:00
#region Logiqx
2020-08-25 14:11:00 -07:00
public FilterItem < string > Machine_Board { get ; private set ; } = new FilterItem < string > ( ) ;
public FilterItem < string > Machine_RebuildTo { get ; private set ; } = new FilterItem < string > ( ) ;
2020-08-20 14:36:36 -07:00
#endregion
2020-08-20 22:42:04 -07:00
#region Logiqx EmuArc
2020-08-25 14:11:00 -07:00
public FilterItem < string > Machine_TitleID { get ; private set ; } = new FilterItem < string > ( ) ;
public FilterItem < string > Machine_Developer { get ; private set ; } = new FilterItem < string > ( ) ;
public FilterItem < string > Machine_Genre { get ; private set ; } = new FilterItem < string > ( ) ;
public FilterItem < string > Machine_Subgenre { get ; private set ; } = new FilterItem < string > ( ) ;
public FilterItem < string > Machine_Ratings { get ; private set ; } = new FilterItem < string > ( ) ;
public FilterItem < string > Machine_Score { get ; private set ; } = new FilterItem < string > ( ) ;
public FilterItem < string > Machine_Enabled { get ; private set ; } = new FilterItem < string > ( ) ;
public FilterItem < bool? > Machine_CRC { get ; private set ; } = new FilterItem < bool? > ( ) { Neutral = null } ;
public FilterItem < string > Machine_RelatedTo { get ; private set ; } = new FilterItem < string > ( ) ;
2020-08-20 22:42:04 -07:00
#endregion
2020-08-21 17:27:11 -07:00
#region OpenMSX
2020-08-25 14:11:00 -07:00
public FilterItem < string > Machine_GenMSXID { get ; private set ; } = new FilterItem < string > ( ) ;
public FilterItem < string > Machine_System { get ; private set ; } = new FilterItem < string > ( ) ;
public FilterItem < string > Machine_Country { get ; private set ; } = new FilterItem < string > ( ) ;
2020-08-21 17:27:11 -07:00
#endregion
2020-08-20 14:36:36 -07:00
#region SoftwareList
2020-08-25 14:11:00 -07:00
public FilterItem < Supported > Machine_Supported { get ; private set ; } = new FilterItem < Supported > ( ) { Positive = Supported . NULL , Negative = Supported . NULL } ;
// Infos
public FilterItem < bool? > Machine_Infos { get ; private set ; } = new FilterItem < bool? > ( ) { Neutral = null } ;
public FilterItem < string > Machine_Info_Name { get ; private set ; } = new FilterItem < string > ( ) ;
public FilterItem < string > Machine_Info_Value { get ; private set ; } = new FilterItem < string > ( ) ;
2020-08-20 14:36:36 -07:00
2020-08-25 14:11:00 -07:00
// SharedFeatures
public FilterItem < bool? > Machine_SharedFeatures { get ; private set ; } = new FilterItem < bool? > ( ) { Neutral = null } ;
public FilterItem < string > Machine_SharedFeature_Name { get ; private set ; } = new FilterItem < string > ( ) ;
public FilterItem < string > Machine_SharedFeature_Value { get ; private set ; } = new FilterItem < string > ( ) ;
2020-08-21 13:03:38 -07:00
2020-08-20 14:36:36 -07:00
#endregion
#endregion // Machine Filters
2020-07-15 09:41:59 -07:00
#region DatItem Filters
2020-08-20 21:15:37 -07:00
#region Common
2020-08-25 14:24:34 -07:00
public FilterItem < string > DatItem_Name { get ; private set ; } = new FilterItem < string > ( ) ;
public FilterItem < string > DatItem_Type { get ; private set ; } = new FilterItem < string > ( ) ;
2020-07-18 21:35:17 -07:00
2020-08-20 21:15:37 -07:00
#endregion
#region AttractMode
2020-08-25 14:24:34 -07:00
public FilterItem < string > DatItem_AltName { get ; private set ; } = new FilterItem < string > ( ) ;
public FilterItem < string > DatItem_AltTitle { get ; private set ; } = new FilterItem < string > ( ) ;
2020-08-20 21:15:37 -07:00
#endregion
2020-08-21 23:48:35 -07:00
#region OpenMSX
2020-08-25 14:24:34 -07:00
public FilterItem < string > DatItem_Original { get ; private set ; } = new FilterItem < string > ( ) ;
public FilterItem < OpenMSXSubType > DatItem_OpenMSXSubType { get ; private set ; } = new FilterItem < OpenMSXSubType > ( ) { Positive = OpenMSXSubType . NULL , Negative = OpenMSXSubType . NULL } ;
public FilterItem < string > DatItem_OpenMSXType { get ; private set ; } = new FilterItem < string > ( ) ;
public FilterItem < string > DatItem_Remark { get ; private set ; } = new FilterItem < string > ( ) ;
public FilterItem < string > DatItem_Boot { get ; private set ; } = new FilterItem < string > ( ) ;
2020-08-21 23:48:35 -07:00
#endregion
2020-08-20 21:15:37 -07:00
#region SoftwareList
2020-07-18 21:35:17 -07:00
2020-08-25 14:24:34 -07:00
// Part
public FilterItem < bool? > DatItem_Part { get ; private set ; } = new FilterItem < bool? > ( ) { Neutral = null } ;
public FilterItem < string > DatItem_Part_Name { get ; private set ; } = new FilterItem < string > ( ) ;
public FilterItem < string > DatItem_Part_Interface { get ; private set ; } = new FilterItem < string > ( ) ;
2019-01-08 17:40:28 -08:00
2020-08-25 14:24:34 -07:00
// Feature
public FilterItem < bool? > DatItem_Features { get ; private set ; } = new FilterItem < bool? > ( ) { Neutral = null } ;
public FilterItem < string > DatItem_Feature_Name { get ; private set ; } = new FilterItem < string > ( ) ;
public FilterItem < string > DatItem_Feature_Value { get ; private set ; } = new FilterItem < string > ( ) ;
2020-08-21 13:31:22 -07:00
2020-08-25 14:24:34 -07:00
public FilterItem < string > DatItem_AreaName { get ; private set ; } = new FilterItem < string > ( ) ;
public FilterItem < long? > DatItem_AreaSize { get ; private set ; } = new FilterItem < long? > ( ) { Positive = null , Negative = null , Neutral = null } ;
public FilterItem < string > DatItem_AreaWidth { get ; private set ; } = new FilterItem < string > ( ) ;
public FilterItem < string > DatItem_AreaEndianness { get ; private set ; } = new FilterItem < string > ( ) ;
public FilterItem < string > DatItem_Value { get ; private set ; } = new FilterItem < string > ( ) ;
public FilterItem < string > DatItem_LoadFlag { get ; private set ; } = new FilterItem < string > ( ) ;
2020-08-21 14:20:17 -07:00
2020-08-20 21:15:37 -07:00
#endregion
2020-08-25 14:24:34 -07:00
#region Item - Specific
2019-01-08 17:40:28 -08:00
2020-08-31 23:01:51 -07:00
#region Actionable
2020-08-25 14:24:34 -07:00
// Rom
public FilterItem < string > DatItem_Bios { get ; private set ; } = new FilterItem < string > ( ) ;
public FilterItem < long > DatItem_Size { get ; private set ; } = new FilterItem < long > ( ) { Positive = - 1 , Negative = - 1 , Neutral = - 1 } ;
public FilterItem < string > DatItem_CRC { get ; private set ; } = new FilterItem < string > ( ) ;
2020-08-31 23:01:51 -07:00
public FilterItem < string > DatItem_MD5 { get ; private set ; } = new FilterItem < string > ( ) ;
2020-08-27 16:57:22 -07:00
#if NET_FRAMEWORK
public FilterItem < string > DatItem_RIPEMD160 { get ; private set ; } = new FilterItem < string > ( ) ;
#endif
2020-08-31 23:01:51 -07:00
public FilterItem < string > DatItem_SHA1 { get ; private set ; } = new FilterItem < string > ( ) ;
public FilterItem < string > DatItem_SHA256 { get ; private set ; } = new FilterItem < string > ( ) ;
2020-08-27 16:57:22 -07:00
public FilterItem < string > DatItem_SHA384 { get ; private set ; } = new FilterItem < string > ( ) ;
public FilterItem < string > DatItem_SHA512 { get ; private set ; } = new FilterItem < string > ( ) ;
2020-08-31 23:01:51 -07:00
public FilterItem < string > DatItem_Merge { get ; private set ; } = new FilterItem < string > ( ) ;
public FilterItem < string > DatItem_Region { get ; private set ; } = new FilterItem < string > ( ) ;
2020-08-25 14:24:34 -07:00
public FilterItem < string > DatItem_Offset { get ; private set ; } = new FilterItem < string > ( ) ;
2020-08-31 23:01:51 -07:00
public FilterItem < string > DatItem_Date { get ; private set ; } = new FilterItem < string > ( ) ;
public FilterItem < ItemStatus > DatItem_Status { get ; private set ; } = new FilterItem < ItemStatus > ( ) { Positive = ItemStatus . NULL , Negative = ItemStatus . NULL } ;
public FilterItem < bool? > DatItem_Optional { get ; private set ; } = new FilterItem < bool? > ( ) { Neutral = null } ;
2020-08-25 14:24:34 -07:00
public FilterItem < bool? > DatItem_Inverted { get ; private set ; } = new FilterItem < bool? > ( ) ;
2020-06-05 22:26:44 -07:00
2020-08-31 23:01:51 -07:00
// Disk
public FilterItem < string > DatItem_Index { get ; private set ; } = new FilterItem < string > ( ) ;
public FilterItem < bool? > DatItem_Writable { get ; private set ; } = new FilterItem < bool? > ( ) { Neutral = null } ;
2020-08-25 14:24:34 -07:00
#endregion
2020-07-28 17:00:19 -07:00
2020-08-31 23:01:51 -07:00
#region Auxiliary
2020-09-01 11:34:52 -07:00
// Adjuster
public FilterItem < bool? > DatItem_Conditions { get ; private set ; } = new FilterItem < bool? > ( ) { Neutral = null } ;
public FilterItem < string > DatItem_Condition_Tag { get ; private set ; } = new FilterItem < string > ( ) ;
public FilterItem < string > DatItem_Condition_Mask { get ; private set ; } = new FilterItem < string > ( ) ;
public FilterItem < string > DatItem_Condition_Relation { get ; private set ; } = new FilterItem < string > ( ) ;
public FilterItem < string > DatItem_Condition_Value { get ; private set ; } = new FilterItem < string > ( ) ;
2020-08-31 23:01:51 -07:00
// BiosSet
public FilterItem < string > DatItem_Description { get ; private set ; } = new FilterItem < string > ( ) ;
public FilterItem < bool? > DatItem_Default { get ; private set ; } = new FilterItem < bool? > ( ) { Neutral = null } ;
// Chip
public FilterItem < string > DatItem_Tag { get ; private set ; } = new FilterItem < string > ( ) ;
public FilterItem < string > DatItem_ChipType { get ; private set ; } = new FilterItem < string > ( ) ;
public FilterItem < string > DatItem_Clock { get ; private set ; } = new FilterItem < string > ( ) ;
2020-09-01 11:55:11 -07:00
// Configuration
public FilterItem < string > DatItem_Mask { get ; private set ; } = new FilterItem < string > ( ) ;
// Configuration.Locations
public FilterItem < bool? > DatItem_Locations { get ; private set ; } = new FilterItem < bool? > ( ) { Neutral = null } ;
public FilterItem < string > DatItem_Location_Name { get ; private set ; } = new FilterItem < string > ( ) ;
public FilterItem < string > DatItem_Location_Number { get ; private set ; } = new FilterItem < string > ( ) ;
public FilterItem < bool? > DatItem_Location_Inverted { get ; private set ; } = new FilterItem < bool? > ( ) { Neutral = null } ;
// Configuration.Settings
public FilterItem < bool? > DatItem_Settings { get ; private set ; } = new FilterItem < bool? > ( ) { Neutral = null } ;
public FilterItem < string > DatItem_Setting_Name { get ; private set ; } = new FilterItem < string > ( ) ;
public FilterItem < string > DatItem_Setting_Value { get ; private set ; } = new FilterItem < string > ( ) ;
public FilterItem < bool? > DatItem_Setting_Default { get ; private set ; } = new FilterItem < bool? > ( ) { Neutral = null } ;
2020-09-01 13:36:32 -07:00
// DipSwitch.Values
public FilterItem < bool? > DatItem_Values { get ; private set ; } = new FilterItem < bool? > ( ) { Neutral = null } ;
public FilterItem < string > DatItem_Value_Name { get ; private set ; } = new FilterItem < string > ( ) ;
public FilterItem < string > DatItem_Value_Value { get ; private set ; } = new FilterItem < string > ( ) ;
public FilterItem < bool? > DatItem_Value_Default { get ; private set ; } = new FilterItem < bool? > ( ) { Neutral = null } ;
2020-09-02 13:31:50 -07:00
// Feature
2020-09-02 14:04:02 -07:00
public FilterItem < FeatureType > DatItem_FeatureType { get ; private set ; } = new FilterItem < FeatureType > ( ) { Positive = FeatureType . NULL , Negative = FeatureType . NULL } ;
2020-09-02 13:31:50 -07:00
public FilterItem < string > DatItem_FeatureStatus { get ; private set ; } = new FilterItem < string > ( ) ;
public FilterItem < string > DatItem_FeatureOverall { get ; private set ; } = new FilterItem < string > ( ) ;
2020-09-01 11:34:52 -07:00
// Ram Option
public FilterItem < string > DatItem_Content { get ; private set ; } = new FilterItem < string > ( ) ;
2020-08-31 23:01:51 -07:00
// Release
public FilterItem < string > DatItem_Language { get ; private set ; } = new FilterItem < string > ( ) ;
2020-09-01 16:21:55 -07:00
// Slots.SlotOptions
public FilterItem < bool? > DatItem_SlotOptions { get ; private set ; } = new FilterItem < bool? > ( ) { Neutral = null } ;
public FilterItem < string > DatItem_SlotOption_Name { get ; private set ; } = new FilterItem < string > ( ) ;
public FilterItem < string > DatItem_SlotOption_DeviceName { get ; private set ; } = new FilterItem < string > ( ) ;
public FilterItem < bool? > DatItem_SlotOption_Default { get ; private set ; } = new FilterItem < bool? > ( ) { Neutral = null } ;
2020-08-31 23:26:07 -07:00
// Software List
public FilterItem < SoftwareListStatus > DatItem_SoftwareListStatus { get ; private set ; } = new FilterItem < SoftwareListStatus > ( ) { Positive = SoftwareListStatus . NULL , Negative = SoftwareListStatus . NULL } ;
public FilterItem < string > DatItem_Filter { get ; private set ; } = new FilterItem < string > ( ) ;
2020-09-02 12:51:21 -07:00
// Sound
public FilterItem < string > DatItem_Channels { get ; private set ; } = new FilterItem < string > ( ) ;
2020-08-31 23:01:51 -07:00
#endregion
#endregion // Item-Specific
2020-08-20 21:15:37 -07:00
#endregion // DatItem Filters
2020-07-15 09:41:59 -07:00
2020-08-28 13:33:05 -07:00
#region Additional Flags
2020-07-18 21:35:17 -07:00
/// <summary>
/// Include romof and cloneof when filtering machine names
/// </summary>
public bool IncludeOfInGame { get ; set ; }
2019-01-11 13:43:59 -08:00
2020-07-15 09:41:59 -07:00
#endregion
2020-08-20 14:36:36 -07:00
#endregion // Fields
2019-01-08 17:40:28 -08:00
#region Instance methods
2020-07-18 21:35:17 -07:00
#region Filter Population
/// <summary>
/// Populate the filters object using a set of key:value filters
/// </summary>
/// <param name="filters">List of key:value where ~key/!key is negated</param>
public void PopulateFromList ( List < string > filters )
{
foreach ( string filterPair in filters )
{
2020-07-22 10:05:35 -07:00
// If we don't even have a possible filter pair
if ( ! filterPair . Contains ( ":" ) )
{
Globals . Logger . Warning ( $"'{filterPair}` is not a valid filter string. Valid filter strings are of the form 'key:value'. Please refer to README.1ST or the help feature for more details." ) ;
continue ;
}
2020-07-18 21:35:17 -07:00
string filterPairTrimmed = filterPair . Trim ( '"' , ' ' , '\t' ) ;
bool negate = filterPairTrimmed . StartsWith ( "!" )
| | filterPairTrimmed . StartsWith ( "~" )
| | filterPairTrimmed . StartsWith ( "not-" ) ;
filterPairTrimmed = filterPairTrimmed . TrimStart ( '!' , '~' ) ;
filterPairTrimmed = filterPairTrimmed . StartsWith ( "not-" ) ? filterPairTrimmed . Substring ( 4 ) : filterPairTrimmed ;
string filterFieldString = filterPairTrimmed . Split ( ':' ) [ 0 ] . ToLowerInvariant ( ) . Trim ( '"' , ' ' , '\t' ) ;
string filterValue = filterPairTrimmed . Substring ( filterFieldString . Length + 1 ) . Trim ( '"' , ' ' , '\t' ) ;
Field filterField = filterFieldString . AsField ( ) ;
SetFilter ( filterField , filterValue , negate ) ;
}
}
/// <summary>
/// Set multiple filters from key
/// </summary>
/// <param name="key">Key for the filter to be set</param>
/// <param name="values">List of values for the filter</param>
/// <param name="negate">True if negative filter, false otherwise</param>
public void SetFilter ( Field key , List < string > values , bool negate )
{
foreach ( string value in values )
{
SetFilter ( key , value , negate ) ;
}
}
/// <summary>
/// Set a single filter from key
/// </summary>
/// <param name="key">Key for the filter to be set</param>
/// <param name="value">Value of the filter</param>
/// <param name="negate">True if negative filter, false otherwise</param>
public void SetFilter ( Field key , string value , bool negate )
{
switch ( key )
{
#region Machine Filters
2020-08-20 14:36:36 -07:00
#region Common
2020-08-24 22:25:47 -07:00
case Field . Machine_Name :
2020-07-18 21:35:17 -07:00
if ( negate )
2020-08-25 14:11:00 -07:00
Machine_Name . NegativeSet . Add ( value ) ;
2020-07-18 21:35:17 -07:00
else
2020-08-25 14:11:00 -07:00
Machine_Name . PositiveSet . Add ( value ) ;
2020-07-18 21:35:17 -07:00
break ;
2020-08-24 22:25:47 -07:00
case Field . Machine_Comment :
2020-07-18 21:35:17 -07:00
if ( negate )
2020-08-25 14:11:00 -07:00
Machine_Comment . NegativeSet . Add ( value ) ;
2020-07-18 21:35:17 -07:00
else
2020-08-25 14:11:00 -07:00
Machine_Comment . PositiveSet . Add ( value ) ;
2020-07-18 21:35:17 -07:00
break ;
2020-08-24 22:25:47 -07:00
case Field . Machine_Description :
2020-07-18 21:35:17 -07:00
if ( negate )
2020-08-25 14:11:00 -07:00
Machine_Description . NegativeSet . Add ( value ) ;
2020-07-18 21:35:17 -07:00
else
2020-08-25 14:11:00 -07:00
Machine_Description . PositiveSet . Add ( value ) ;
2020-07-18 21:35:17 -07:00
break ;
2020-08-24 22:25:47 -07:00
case Field . Machine_Year :
2020-07-18 21:35:17 -07:00
if ( negate )
2020-08-25 14:11:00 -07:00
Machine_Year . NegativeSet . Add ( value ) ;
2020-07-18 21:35:17 -07:00
else
2020-08-25 14:11:00 -07:00
Machine_Year . PositiveSet . Add ( value ) ;
2020-07-18 21:35:17 -07:00
break ;
2020-08-24 22:25:47 -07:00
case Field . Machine_Manufacturer :
2020-07-18 21:35:17 -07:00
if ( negate )
2020-08-25 14:11:00 -07:00
Machine_Manufacturer . NegativeSet . Add ( value ) ;
2020-07-18 21:35:17 -07:00
else
2020-08-25 14:11:00 -07:00
Machine_Manufacturer . PositiveSet . Add ( value ) ;
2020-07-18 21:35:17 -07:00
break ;
2020-08-24 22:25:47 -07:00
case Field . Machine_Publisher :
2020-07-18 21:35:17 -07:00
if ( negate )
2020-08-25 14:11:00 -07:00
Machine_Publisher . NegativeSet . Add ( value ) ;
2020-07-18 21:35:17 -07:00
else
2020-08-25 14:11:00 -07:00
Machine_Publisher . PositiveSet . Add ( value ) ;
2020-07-18 21:35:17 -07:00
break ;
2020-08-24 22:25:47 -07:00
case Field . Machine_Category :
2020-07-18 21:35:17 -07:00
if ( negate )
2020-08-25 14:11:00 -07:00
Machine_Category . NegativeSet . Add ( value ) ;
2020-07-18 21:35:17 -07:00
else
2020-08-25 14:11:00 -07:00
Machine_Category . PositiveSet . Add ( value ) ;
2020-07-18 21:35:17 -07:00
break ;
2020-08-24 22:25:47 -07:00
case Field . Machine_RomOf :
2020-07-18 21:35:17 -07:00
if ( negate )
2020-08-25 14:11:00 -07:00
Machine_RomOf . NegativeSet . Add ( value ) ;
2020-07-18 21:35:17 -07:00
else
2020-08-25 14:11:00 -07:00
Machine_RomOf . PositiveSet . Add ( value ) ;
2020-07-18 21:35:17 -07:00
break ;
2020-08-24 22:25:47 -07:00
case Field . Machine_CloneOf :
2020-07-18 21:35:17 -07:00
if ( negate )
2020-08-25 14:11:00 -07:00
Machine_CloneOf . NegativeSet . Add ( value ) ;
2020-07-18 21:35:17 -07:00
else
2020-08-25 14:11:00 -07:00
Machine_CloneOf . PositiveSet . Add ( value ) ;
2020-07-18 21:35:17 -07:00
break ;
2020-08-24 22:25:47 -07:00
case Field . Machine_SampleOf :
2020-07-18 21:35:17 -07:00
if ( negate )
2020-08-25 14:11:00 -07:00
Machine_SampleOf . NegativeSet . Add ( value ) ;
2020-07-18 21:35:17 -07:00
else
2020-08-25 14:11:00 -07:00
Machine_SampleOf . PositiveSet . Add ( value ) ;
2020-07-18 21:35:17 -07:00
break ;
2020-08-24 22:25:47 -07:00
case Field . Machine_Type :
2020-08-20 15:39:32 -07:00
if ( negate )
2020-08-25 14:11:00 -07:00
Machine_Type . Negative | = value . AsMachineType ( ) ;
2020-08-20 15:39:32 -07:00
else
2020-08-25 14:11:00 -07:00
Machine_Type . Positive | = value . AsMachineType ( ) ;
2020-08-20 15:39:32 -07:00
break ;
2020-08-20 14:36:36 -07:00
#endregion
#region AttractMode
2020-08-24 22:25:47 -07:00
case Field . Machine_Players :
2020-08-20 14:36:36 -07:00
if ( negate )
2020-08-25 14:11:00 -07:00
Machine_Players . NegativeSet . Add ( value ) ;
2020-07-18 21:35:17 -07:00
else
2020-08-25 14:11:00 -07:00
Machine_Players . PositiveSet . Add ( value ) ;
2020-07-18 21:35:17 -07:00
break ;
2020-08-24 22:25:47 -07:00
case Field . Machine_Rotation :
2020-07-18 21:35:17 -07:00
if ( negate )
2020-08-25 14:11:00 -07:00
Machine_Rotation . NegativeSet . Add ( value ) ;
2020-07-18 21:35:17 -07:00
else
2020-08-25 14:11:00 -07:00
Machine_Rotation . PositiveSet . Add ( value ) ;
2020-07-18 21:35:17 -07:00
break ;
2020-08-24 22:25:47 -07:00
case Field . Machine_Control :
2020-08-20 14:36:36 -07:00
if ( negate )
2020-08-25 14:11:00 -07:00
Machine_Control . NegativeSet . Add ( value ) ;
2020-07-18 21:35:17 -07:00
else
2020-08-25 14:11:00 -07:00
Machine_Control . PositiveSet . Add ( value ) ;
2020-07-18 21:35:17 -07:00
break ;
2020-08-25 11:20:50 -07:00
case Field . Machine_Status :
2020-07-18 21:35:17 -07:00
if ( negate )
2020-08-25 14:11:00 -07:00
Machine_Status . NegativeSet . Add ( value ) ;
2020-07-18 21:35:17 -07:00
else
2020-08-25 14:11:00 -07:00
Machine_Status . PositiveSet . Add ( value ) ;
2020-07-18 21:35:17 -07:00
break ;
2020-08-24 22:25:47 -07:00
case Field . Machine_DisplayCount :
2020-07-18 21:35:17 -07:00
if ( negate )
2020-08-25 14:11:00 -07:00
Machine_DisplayCount . NegativeSet . Add ( value ) ;
2020-07-18 21:35:17 -07:00
else
2020-08-25 14:11:00 -07:00
Machine_DisplayCount . PositiveSet . Add ( value ) ;
2020-08-20 14:36:36 -07:00
break ;
2020-08-24 22:25:47 -07:00
case Field . Machine_DisplayType :
2020-08-20 14:36:36 -07:00
if ( negate )
2020-08-25 14:11:00 -07:00
Machine_DisplayType . NegativeSet . Add ( value ) ;
2020-08-20 14:36:36 -07:00
else
2020-08-25 14:11:00 -07:00
Machine_DisplayType . PositiveSet . Add ( value ) ;
2020-08-20 14:36:36 -07:00
break ;
2020-08-24 22:25:47 -07:00
case Field . Machine_Buttons :
2020-08-20 14:36:36 -07:00
if ( negate )
2020-08-25 14:11:00 -07:00
Machine_Buttons . NegativeSet . Add ( value ) ;
2020-08-20 14:36:36 -07:00
else
2020-08-25 14:11:00 -07:00
Machine_Buttons . PositiveSet . Add ( value ) ;
2020-08-20 14:36:36 -07:00
break ;
#endregion
#region ListXML
2020-08-24 22:25:47 -07:00
case Field . Machine_SourceFile :
2020-08-20 14:36:36 -07:00
if ( negate )
2020-08-25 14:11:00 -07:00
Machine_SourceFile . NegativeSet . Add ( value ) ;
2020-08-20 14:36:36 -07:00
else
2020-08-25 14:11:00 -07:00
Machine_SourceFile . PositiveSet . Add ( value ) ;
2020-08-20 14:36:36 -07:00
break ;
2020-08-24 22:25:47 -07:00
case Field . Machine_Runnable :
2020-08-23 15:34:42 -07:00
if ( negate )
2020-08-25 14:11:00 -07:00
Machine_Runnable . Negative | = value . AsRunnable ( ) ;
2020-07-26 23:39:33 -07:00
else
2020-08-25 14:11:00 -07:00
Machine_Runnable . Positive | = value . AsRunnable ( ) ;
2020-07-26 23:39:33 -07:00
break ;
2020-08-25 14:53:51 -07:00
// Displays
case Field . Machine_Displays :
if ( negate | | value . Equals ( "false" , StringComparison . OrdinalIgnoreCase ) )
Machine_Displays . Neutral = false ;
else
Machine_Displays . Neutral = true ;
break ;
case Field . Machine_Display_Tag :
if ( negate )
Machine_Display_Tag . NegativeSet . Add ( value ) ;
else
Machine_Display_Tag . PositiveSet . Add ( value ) ;
break ;
case Field . Machine_Display_Type :
if ( negate )
Machine_Display_Type . NegativeSet . Add ( value ) ;
else
Machine_Display_Type . PositiveSet . Add ( value ) ;
break ;
case Field . Machine_Display_Rotate :
if ( negate )
Machine_Display_Rotate . NegativeSet . Add ( value ) ;
else
Machine_Display_Rotate . PositiveSet . Add ( value ) ;
break ;
case Field . Machine_Display_FlipX :
if ( negate | | value . Equals ( "false" , StringComparison . OrdinalIgnoreCase ) )
Machine_Display_FlipX . Neutral = false ;
else
Machine_Display_FlipX . Neutral = true ;
break ;
case Field . Machine_Display_Width :
if ( negate )
Machine_Display_Width . NegativeSet . Add ( value ) ;
else
Machine_Display_Width . PositiveSet . Add ( value ) ;
break ;
case Field . Machine_Display_Height :
if ( negate )
Machine_Display_Height . NegativeSet . Add ( value ) ;
else
Machine_Display_Height . PositiveSet . Add ( value ) ;
break ;
case Field . Machine_Display_Refresh :
if ( negate )
Machine_Display_Refresh . NegativeSet . Add ( value ) ;
else
Machine_Display_Refresh . PositiveSet . Add ( value ) ;
break ;
case Field . Machine_Display_PixClock :
if ( negate )
Machine_Display_PixClock . NegativeSet . Add ( value ) ;
else
Machine_Display_PixClock . PositiveSet . Add ( value ) ;
break ;
case Field . Machine_Display_HTotal :
if ( negate )
Machine_Display_HTotal . NegativeSet . Add ( value ) ;
else
Machine_Display_HTotal . PositiveSet . Add ( value ) ;
break ;
case Field . Machine_Display_HBEnd :
if ( negate )
Machine_Display_HBEnd . NegativeSet . Add ( value ) ;
else
Machine_Display_HBEnd . PositiveSet . Add ( value ) ;
break ;
case Field . Machine_Display_HBStart :
if ( negate )
Machine_Display_HBStart . NegativeSet . Add ( value ) ;
else
Machine_Display_HBStart . PositiveSet . Add ( value ) ;
break ;
case Field . Machine_Display_VTotal :
if ( negate )
Machine_Display_VTotal . NegativeSet . Add ( value ) ;
else
Machine_Display_VTotal . PositiveSet . Add ( value ) ;
break ;
case Field . Machine_Display_VBEnd :
if ( negate )
Machine_Display_VBEnd . NegativeSet . Add ( value ) ;
else
Machine_Display_VBEnd . PositiveSet . Add ( value ) ;
break ;
case Field . Machine_Display_VBStart :
if ( negate )
Machine_Display_VBStart . NegativeSet . Add ( value ) ;
else
Machine_Display_VBStart . PositiveSet . Add ( value ) ;
break ;
// Conditions
case Field . Machine_Conditions :
if ( negate | | value . Equals ( "false" , StringComparison . OrdinalIgnoreCase ) )
Machine_Conditions . Neutral = false ;
else
Machine_Conditions . Neutral = true ;
break ;
case Field . Machine_Condition_Tag :
if ( negate )
Machine_Condition_Tag . NegativeSet . Add ( value ) ;
else
Machine_Condition_Tag . PositiveSet . Add ( value ) ;
break ;
case Field . Machine_Condition_Mask :
if ( negate )
Machine_Condition_Mask . NegativeSet . Add ( value ) ;
else
Machine_Condition_Mask . PositiveSet . Add ( value ) ;
break ;
case Field . Machine_Condition_Relation :
if ( negate )
Machine_Condition_Relation . NegativeSet . Add ( value ) ;
else
Machine_Condition_Relation . PositiveSet . Add ( value ) ;
break ;
case Field . Machine_Condition_Value :
if ( negate )
Machine_Condition_Value . NegativeSet . Add ( value ) ;
else
Machine_Condition_Value . PositiveSet . Add ( value ) ;
break ;
// Inputs
case Field . Machine_Inputs :
if ( negate | | value . Equals ( "false" , StringComparison . OrdinalIgnoreCase ) )
Machine_Inputs . Neutral = false ;
else
Machine_Inputs . Neutral = true ;
break ;
case Field . Machine_Input_Service :
if ( negate | | value . Equals ( "false" , StringComparison . OrdinalIgnoreCase ) )
Machine_Input_Service . Neutral = false ;
else
Machine_Input_Service . Neutral = true ;
break ;
case Field . Machine_Input_Tilt :
if ( negate | | value . Equals ( "false" , StringComparison . OrdinalIgnoreCase ) )
Machine_Input_Tilt . Neutral = false ;
else
Machine_Input_Tilt . Neutral = true ;
break ;
case Field . Machine_Input_Players :
if ( negate )
Machine_Input_Players . NegativeSet . Add ( value ) ;
else
Machine_Input_Players . PositiveSet . Add ( value ) ;
break ;
case Field . Machine_Input_Coins :
if ( negate )
Machine_Input_Coins . NegativeSet . Add ( value ) ;
else
Machine_Input_Coins . PositiveSet . Add ( value ) ;
break ;
// Inputs.Controls
case Field . Machine_Input_Controls :
if ( negate | | value . Equals ( "false" , StringComparison . OrdinalIgnoreCase ) )
Machine_Input_Controls . Neutral = false ;
else
Machine_Input_Controls . Neutral = true ;
break ;
case Field . Machine_Input_Control_Type :
if ( negate )
Machine_Input_Control_Type . NegativeSet . Add ( value ) ;
else
Machine_Input_Control_Type . PositiveSet . Add ( value ) ;
break ;
case Field . Machine_Input_Control_Player :
if ( negate )
Machine_Input_Control_Player . NegativeSet . Add ( value ) ;
else
Machine_Input_Control_Player . PositiveSet . Add ( value ) ;
break ;
case Field . Machine_Input_Control_Buttons :
if ( negate )
Machine_Input_Control_Buttons . NegativeSet . Add ( value ) ;
else
Machine_Input_Control_Buttons . PositiveSet . Add ( value ) ;
break ;
case Field . Machine_Input_Control_RegButtons :
if ( negate )
Machine_Input_Control_RegButtons . NegativeSet . Add ( value ) ;
else
Machine_Input_Control_RegButtons . PositiveSet . Add ( value ) ;
break ;
case Field . Machine_Input_Control_Minimum :
if ( negate )
Machine_Input_Control_Minimum . NegativeSet . Add ( value ) ;
else
Machine_Input_Control_Minimum . PositiveSet . Add ( value ) ;
break ;
case Field . Machine_Input_Control_Maximum :
if ( negate )
Machine_Input_Control_Maximum . NegativeSet . Add ( value ) ;
else
Machine_Input_Control_Maximum . PositiveSet . Add ( value ) ;
break ;
case Field . Machine_Input_Control_Sensitivity :
if ( negate )
Machine_Input_Control_Sensitivity . NegativeSet . Add ( value ) ;
else
Machine_Input_Control_Sensitivity . PositiveSet . Add ( value ) ;
break ;
case Field . Machine_Input_Control_KeyDelta :
if ( negate )
Machine_Input_Control_KeyDelta . NegativeSet . Add ( value ) ;
else
Machine_Input_Control_KeyDelta . PositiveSet . Add ( value ) ;
break ;
case Field . Machine_Input_Control_Reverse :
if ( negate | | value . Equals ( "false" , StringComparison . OrdinalIgnoreCase ) )
Machine_Input_Control_Reverse . Neutral = false ;
else
Machine_Input_Control_Reverse . Neutral = true ;
break ;
case Field . Machine_Input_Control_Ways :
if ( negate )
Machine_Input_Control_Ways . NegativeSet . Add ( value ) ;
else
Machine_Input_Control_Ways . PositiveSet . Add ( value ) ;
break ;
case Field . Machine_Input_Control_Ways2 :
if ( negate )
Machine_Input_Control_Ways2 . NegativeSet . Add ( value ) ;
else
Machine_Input_Control_Ways2 . PositiveSet . Add ( value ) ;
break ;
case Field . Machine_Input_Control_Ways3 :
if ( negate )
Machine_Input_Control_Ways3 . NegativeSet . Add ( value ) ;
else
Machine_Input_Control_Ways3 . PositiveSet . Add ( value ) ;
break ;
// Ports
case Field . Machine_Ports :
if ( negate | | value . Equals ( "false" , StringComparison . OrdinalIgnoreCase ) )
Machine_Ports . Neutral = false ;
else
Machine_Ports . Neutral = true ;
break ;
case Field . Machine_Port_Tag :
if ( negate )
Machine_Port_Tag . NegativeSet . Add ( value ) ;
else
Machine_Port_Tag . PositiveSet . Add ( value ) ;
break ;
// Ports.Analogs
case Field . Machine_Port_Analogs :
if ( negate | | value . Equals ( "false" , StringComparison . OrdinalIgnoreCase ) )
Machine_Port_Analogs . Neutral = false ;
else
Machine_Port_Analogs . Neutral = true ;
break ;
case Field . Machine_Port_Analog_Mask :
if ( negate )
Machine_Port_Analog_Mask . NegativeSet . Add ( value ) ;
else
Machine_Port_Analog_Mask . PositiveSet . Add ( value ) ;
break ;
// Drivers
case Field . Machine_Drivers :
if ( negate | | value . Equals ( "false" , StringComparison . OrdinalIgnoreCase ) )
Machine_Drivers . Neutral = false ;
else
Machine_Drivers . Neutral = true ;
break ;
case Field . Machine_Driver_Status :
if ( negate )
Machine_Driver_Status . NegativeSet . Add ( value ) ;
else
Machine_Driver_Status . PositiveSet . Add ( value ) ;
break ;
case Field . Machine_Driver_Emulation :
if ( negate )
Machine_Driver_Emulation . NegativeSet . Add ( value ) ;
else
Machine_Driver_Emulation . PositiveSet . Add ( value ) ;
break ;
case Field . Machine_Driver_Cocktail :
if ( negate )
Machine_Driver_Cocktail . NegativeSet . Add ( value ) ;
else
Machine_Driver_Cocktail . PositiveSet . Add ( value ) ;
break ;
case Field . Machine_Driver_SaveState :
if ( negate )
Machine_Driver_SaveState . NegativeSet . Add ( value ) ;
else
Machine_Driver_SaveState . PositiveSet . Add ( value ) ;
break ;
// Devices
case Field . Machine_Devices :
if ( negate | | value . Equals ( "false" , StringComparison . OrdinalIgnoreCase ) )
Machine_Devices . Neutral = false ;
else
Machine_Devices . Neutral = true ;
break ;
case Field . Machine_Device_Type :
if ( negate )
Machine_Device_Type . NegativeSet . Add ( value ) ;
else
Machine_Device_Type . PositiveSet . Add ( value ) ;
break ;
case Field . Machine_Device_Tag :
if ( negate )
Machine_Device_Tag . NegativeSet . Add ( value ) ;
else
Machine_Device_Tag . PositiveSet . Add ( value ) ;
break ;
case Field . Machine_Device_FixedImage :
if ( negate )
Machine_Device_FixedImage . NegativeSet . Add ( value ) ;
else
Machine_Device_FixedImage . PositiveSet . Add ( value ) ;
break ;
case Field . Machine_Device_Mandatory :
if ( negate )
Machine_Device_Mandatory . NegativeSet . Add ( value ) ;
else
Machine_Device_Mandatory . PositiveSet . Add ( value ) ;
break ;
case Field . Machine_Device_Interface :
if ( negate )
Machine_Device_Interface . NegativeSet . Add ( value ) ;
else
Machine_Device_Interface . PositiveSet . Add ( value ) ;
break ;
// Devices.Instances
case Field . Machine_Device_Instances :
if ( negate | | value . Equals ( "false" , StringComparison . OrdinalIgnoreCase ) )
Machine_Device_Instances . Neutral = false ;
else
Machine_Device_Instances . Neutral = true ;
break ;
case Field . Machine_Device_Instance_Name :
if ( negate )
Machine_Device_Instance_Name . NegativeSet . Add ( value ) ;
else
Machine_Device_Instance_Name . PositiveSet . Add ( value ) ;
break ;
case Field . Machine_Device_Instance_BriefName :
if ( negate )
Machine_Device_Instance_BriefName . NegativeSet . Add ( value ) ;
else
Machine_Device_Instance_BriefName . PositiveSet . Add ( value ) ;
break ;
// Devices.Extensions
case Field . Machine_Device_Extensions :
if ( negate | | value . Equals ( "false" , StringComparison . OrdinalIgnoreCase ) )
Machine_Device_Extensions . Neutral = false ;
else
Machine_Device_Extensions . Neutral = true ;
break ;
case Field . Machine_Device_Extension_Name :
if ( negate )
Machine_Device_Extension_Name . NegativeSet . Add ( value ) ;
else
Machine_Device_Extension_Name . PositiveSet . Add ( value ) ;
break ;
2020-07-18 21:35:17 -07:00
#endregion
2020-08-20 14:36:36 -07:00
#region Logiqx
2020-08-24 22:25:47 -07:00
case Field . Machine_Board :
2020-08-20 14:36:36 -07:00
if ( negate )
2020-08-25 14:11:00 -07:00
Machine_Board . NegativeSet . Add ( value ) ;
2020-08-20 14:36:36 -07:00
else
2020-08-25 14:11:00 -07:00
Machine_Board . PositiveSet . Add ( value ) ;
2020-08-20 14:36:36 -07:00
break ;
2020-08-24 22:25:47 -07:00
case Field . Machine_RebuildTo :
2020-08-20 14:36:36 -07:00
if ( negate )
2020-08-25 14:11:00 -07:00
Machine_RebuildTo . NegativeSet . Add ( value ) ;
2020-08-20 14:36:36 -07:00
else
2020-08-25 14:11:00 -07:00
Machine_RebuildTo . PositiveSet . Add ( value ) ;
2020-08-20 14:36:36 -07:00
break ;
#endregion
2020-08-20 22:42:04 -07:00
#region Logiqx EmuArc
2020-08-24 22:25:47 -07:00
case Field . Machine_TitleID :
2020-08-20 22:42:04 -07:00
if ( negate )
2020-08-25 14:11:00 -07:00
Machine_TitleID . NegativeSet . Add ( value ) ;
2020-08-20 22:42:04 -07:00
else
2020-08-25 14:11:00 -07:00
Machine_TitleID . PositiveSet . Add ( value ) ;
2020-08-20 22:42:04 -07:00
break ;
2020-08-24 22:25:47 -07:00
case Field . Machine_Developer :
2020-08-20 22:42:04 -07:00
if ( negate )
2020-08-25 14:11:00 -07:00
Machine_Developer . NegativeSet . Add ( value ) ;
2020-08-20 22:42:04 -07:00
else
2020-08-25 14:11:00 -07:00
Machine_Developer . PositiveSet . Add ( value ) ;
2020-08-20 22:42:04 -07:00
break ;
2020-08-24 22:25:47 -07:00
case Field . Machine_Genre :
2020-08-20 22:42:04 -07:00
if ( negate )
2020-08-25 14:11:00 -07:00
Machine_Genre . NegativeSet . Add ( value ) ;
2020-08-20 22:42:04 -07:00
else
2020-08-25 14:11:00 -07:00
Machine_Genre . PositiveSet . Add ( value ) ;
2020-08-20 22:42:04 -07:00
break ;
2020-08-24 22:25:47 -07:00
case Field . Machine_Subgenre :
2020-08-20 22:42:04 -07:00
if ( negate )
2020-08-25 14:11:00 -07:00
Machine_Subgenre . NegativeSet . Add ( value ) ;
2020-08-20 22:42:04 -07:00
else
2020-08-25 14:11:00 -07:00
Machine_Subgenre . PositiveSet . Add ( value ) ;
2020-08-20 22:42:04 -07:00
break ;
2020-08-24 22:25:47 -07:00
case Field . Machine_Ratings :
2020-08-20 22:42:04 -07:00
if ( negate )
2020-08-25 14:11:00 -07:00
Machine_Ratings . NegativeSet . Add ( value ) ;
2020-08-20 22:42:04 -07:00
else
2020-08-25 14:11:00 -07:00
Machine_Ratings . PositiveSet . Add ( value ) ;
2020-08-20 22:42:04 -07:00
break ;
2020-08-24 22:25:47 -07:00
case Field . Machine_Score :
2020-08-20 22:42:04 -07:00
if ( negate )
2020-08-25 14:11:00 -07:00
Machine_Score . NegativeSet . Add ( value ) ;
2020-08-20 22:42:04 -07:00
else
2020-08-25 14:11:00 -07:00
Machine_Score . PositiveSet . Add ( value ) ;
2020-08-20 22:42:04 -07:00
break ;
2020-08-24 22:25:47 -07:00
case Field . Machine_Enabled :
2020-08-20 22:42:04 -07:00
if ( negate )
2020-08-25 14:11:00 -07:00
Machine_Enabled . NegativeSet . Add ( value ) ;
2020-08-20 22:42:04 -07:00
else
2020-08-25 14:11:00 -07:00
Machine_Enabled . PositiveSet . Add ( value ) ;
2020-08-20 22:42:04 -07:00
break ;
2020-08-25 12:15:28 -07:00
case Field . Machine_CRC :
2020-08-20 22:42:04 -07:00
if ( negate | | value . Equals ( "false" , StringComparison . OrdinalIgnoreCase ) )
2020-08-25 14:11:00 -07:00
Machine_CRC . Neutral = false ;
2020-08-20 22:42:04 -07:00
else
2020-08-25 14:11:00 -07:00
Machine_CRC . Neutral = true ;
2020-08-20 22:42:04 -07:00
break ;
2020-08-24 22:25:47 -07:00
case Field . Machine_RelatedTo :
2020-08-20 22:42:04 -07:00
if ( negate )
2020-08-25 14:11:00 -07:00
Machine_RelatedTo . NegativeSet . Add ( value ) ;
2020-08-20 22:42:04 -07:00
else
2020-08-25 14:11:00 -07:00
Machine_RelatedTo . PositiveSet . Add ( value ) ;
2020-08-20 22:42:04 -07:00
break ;
#endregion
2020-08-21 17:27:11 -07:00
#region OpenMSX
2020-08-24 22:25:47 -07:00
case Field . Machine_GenMSXID :
2020-08-21 17:27:11 -07:00
if ( negate )
2020-08-25 14:11:00 -07:00
Machine_GenMSXID . NegativeSet . Add ( value ) ;
2020-08-21 17:27:11 -07:00
else
2020-08-25 14:11:00 -07:00
Machine_GenMSXID . PositiveSet . Add ( value ) ;
2020-08-21 17:27:11 -07:00
break ;
2020-08-24 22:25:47 -07:00
case Field . Machine_System :
2020-08-21 17:27:11 -07:00
if ( negate )
2020-08-25 14:11:00 -07:00
Machine_System . NegativeSet . Add ( value ) ;
2020-08-21 17:27:11 -07:00
else
2020-08-25 14:11:00 -07:00
Machine_System . PositiveSet . Add ( value ) ;
2020-08-21 17:27:11 -07:00
break ;
2020-08-24 22:25:47 -07:00
case Field . Machine_Country :
2020-08-21 17:27:11 -07:00
if ( negate )
2020-08-25 14:11:00 -07:00
Machine_Country . NegativeSet . Add ( value ) ;
2020-08-21 17:27:11 -07:00
else
2020-08-25 14:11:00 -07:00
Machine_Country . PositiveSet . Add ( value ) ;
2020-08-21 17:27:11 -07:00
break ;
#endregion
2020-08-20 14:36:36 -07:00
#region SoftwareList
2020-08-24 22:25:47 -07:00
case Field . Machine_Supported :
2020-08-22 13:31:13 -07:00
if ( negate )
2020-08-25 14:11:00 -07:00
Machine_Supported . Negative | = value . AsSupported ( ) ;
2020-08-20 14:36:36 -07:00
else
2020-08-25 14:11:00 -07:00
Machine_Supported . Positive | = value . AsSupported ( ) ;
2020-08-20 14:36:36 -07:00
break ;
2020-08-25 14:53:51 -07:00
// Infos
case Field . Machine_Infos :
if ( negate | | value . Equals ( "false" , StringComparison . OrdinalIgnoreCase ) )
Machine_Infos . Neutral = false ;
else
Machine_Infos . Neutral = true ;
break ;
case Field . Machine_Info_Name :
if ( negate )
Machine_Info_Name . NegativeSet . Add ( value ) ;
else
Machine_Info_Name . PositiveSet . Add ( value ) ;
break ;
case Field . Machine_Info_Value :
if ( negate )
Machine_Info_Value . NegativeSet . Add ( value ) ;
else
Machine_Info_Value . PositiveSet . Add ( value ) ;
break ;
// SharedFeatures
case Field . Machine_SharedFeatures :
if ( negate | | value . Equals ( "false" , StringComparison . OrdinalIgnoreCase ) )
Machine_SharedFeatures . Neutral = false ;
else
Machine_SharedFeatures . Neutral = true ;
break ;
case Field . Machine_SharedFeature_Name :
if ( negate )
Machine_SharedFeature_Name . NegativeSet . Add ( value ) ;
else
Machine_SharedFeature_Name . PositiveSet . Add ( value ) ;
break ;
case Field . Machine_SharedFeature_Value :
if ( negate )
Machine_SharedFeature_Value . NegativeSet . Add ( value ) ;
else
Machine_SharedFeature_Value . PositiveSet . Add ( value ) ;
break ;
2020-08-20 14:36:36 -07:00
#endregion
#endregion // Machine Filters
2020-07-18 21:35:17 -07:00
#region DatItem Filters
2020-08-20 21:15:37 -07:00
#region Common
2020-08-24 22:25:47 -07:00
case Field . DatItem_Name :
2020-08-20 21:15:37 -07:00
if ( negate )
2020-08-25 14:24:34 -07:00
DatItem_Name . NegativeSet . Add ( value ) ;
2020-08-20 21:15:37 -07:00
else
2020-08-25 14:24:34 -07:00
DatItem_Name . PositiveSet . Add ( value ) ;
2020-08-20 21:15:37 -07:00
break ;
2020-08-24 22:25:47 -07:00
case Field . DatItem_Type :
2020-07-18 21:35:17 -07:00
if ( value . AsItemType ( ) = = null )
return ;
if ( negate )
2020-08-25 14:24:34 -07:00
DatItem_Type . NegativeSet . Add ( value ) ;
2020-07-18 21:35:17 -07:00
else
2020-08-25 14:24:34 -07:00
DatItem_Type . PositiveSet . Add ( value ) ;
2020-07-18 21:35:17 -07:00
break ;
2020-08-20 21:15:37 -07:00
#endregion
#region AttractMode
2020-08-24 22:25:47 -07:00
case Field . DatItem_AltName :
2020-07-18 21:35:17 -07:00
if ( negate )
2020-08-25 14:24:34 -07:00
DatItem_AltName . NegativeSet . Add ( value ) ;
2020-07-18 21:35:17 -07:00
else
2020-08-25 14:24:34 -07:00
DatItem_AltName . PositiveSet . Add ( value ) ;
2020-08-20 21:15:37 -07:00
break ;
2020-08-24 22:25:47 -07:00
case Field . DatItem_AltTitle :
2020-08-20 21:15:37 -07:00
if ( negate )
2020-08-25 14:24:34 -07:00
DatItem_AltTitle . NegativeSet . Add ( value ) ;
2020-08-20 21:15:37 -07:00
else
2020-08-25 14:24:34 -07:00
DatItem_AltTitle . PositiveSet . Add ( value ) ;
2020-07-18 21:35:17 -07:00
break ;
2020-08-20 21:15:37 -07:00
#endregion
2020-08-21 23:48:35 -07:00
#region OpenMSX
2020-08-24 22:25:47 -07:00
case Field . DatItem_Original :
2020-08-21 23:48:35 -07:00
if ( negate )
2020-08-25 14:24:34 -07:00
DatItem_Original . NegativeSet . Add ( value ) ;
2020-08-21 23:48:35 -07:00
else
2020-08-25 14:24:34 -07:00
DatItem_Original . PositiveSet . Add ( value ) ;
2020-08-21 23:48:35 -07:00
break ;
2020-08-24 22:25:47 -07:00
case Field . DatItem_OpenMSXSubType :
2020-08-21 23:48:35 -07:00
if ( negate )
2020-08-25 14:24:34 -07:00
DatItem_OpenMSXSubType . Negative | = value . AsOpenMSXSubType ( ) ;
2020-08-21 23:48:35 -07:00
else
2020-08-25 14:24:34 -07:00
DatItem_OpenMSXSubType . Positive | = value . AsOpenMSXSubType ( ) ;
2020-08-21 23:48:35 -07:00
break ;
2020-08-24 22:25:47 -07:00
case Field . DatItem_OpenMSXType :
2020-08-21 23:48:35 -07:00
if ( negate )
2020-08-25 14:24:34 -07:00
DatItem_OpenMSXType . NegativeSet . Add ( value ) ;
2020-08-21 23:48:35 -07:00
else
2020-08-25 14:24:34 -07:00
DatItem_OpenMSXType . PositiveSet . Add ( value ) ;
2020-08-21 23:48:35 -07:00
break ;
2020-08-24 22:25:47 -07:00
case Field . DatItem_Remark :
2020-08-21 23:48:35 -07:00
if ( negate )
2020-08-25 14:24:34 -07:00
DatItem_Remark . NegativeSet . Add ( value ) ;
2020-08-21 23:48:35 -07:00
else
2020-08-25 14:24:34 -07:00
DatItem_Remark . PositiveSet . Add ( value ) ;
2020-08-21 23:48:35 -07:00
break ;
2020-08-24 22:25:47 -07:00
case Field . DatItem_Boot :
2020-08-21 23:48:35 -07:00
if ( negate )
2020-08-25 14:24:34 -07:00
DatItem_Boot . NegativeSet . Add ( value ) ;
2020-08-21 23:48:35 -07:00
else
2020-08-25 14:24:34 -07:00
DatItem_Boot . PositiveSet . Add ( value ) ;
2020-08-21 23:48:35 -07:00
break ;
#endregion
2020-08-20 21:15:37 -07:00
#region SoftwareList
2020-08-25 14:53:51 -07:00
// Part
case Field . DatItem_Part :
if ( negate | | value . Equals ( "false" , StringComparison . OrdinalIgnoreCase ) )
DatItem_Part . Neutral = false ;
else
DatItem_Part . Neutral = true ;
break ;
2020-08-25 11:20:50 -07:00
case Field . DatItem_Part_Name :
2020-07-18 21:35:17 -07:00
if ( negate )
2020-08-25 14:24:34 -07:00
DatItem_Part_Name . NegativeSet . Add ( value ) ;
2020-07-18 21:35:17 -07:00
else
2020-08-25 14:24:34 -07:00
DatItem_Part_Name . PositiveSet . Add ( value ) ;
2020-07-18 21:35:17 -07:00
break ;
2020-08-25 11:20:50 -07:00
case Field . DatItem_Part_Interface :
2020-07-18 21:35:17 -07:00
if ( negate )
2020-08-25 14:24:34 -07:00
DatItem_Part_Interface . NegativeSet . Add ( value ) ;
2020-07-18 21:35:17 -07:00
else
2020-08-25 14:24:34 -07:00
DatItem_Part_Interface . PositiveSet . Add ( value ) ;
2020-07-18 21:35:17 -07:00
break ;
2020-08-25 14:53:51 -07:00
// Feature
case Field . DatItem_Features :
if ( negate | | value . Equals ( "false" , StringComparison . OrdinalIgnoreCase ) )
DatItem_Features . Neutral = false ;
else
DatItem_Features . Neutral = true ;
break ;
case Field . DatItem_Feature_Name :
if ( negate )
DatItem_Feature_Name . NegativeSet . Add ( value ) ;
else
DatItem_Feature_Name . PositiveSet . Add ( value ) ;
break ;
case Field . DatItem_Feature_Value :
if ( negate )
DatItem_Feature_Value . NegativeSet . Add ( value ) ;
else
DatItem_Feature_Value . PositiveSet . Add ( value ) ;
break ;
2020-08-25 11:20:50 -07:00
case Field . DatItem_AreaName :
2020-07-18 21:35:17 -07:00
if ( negate )
2020-08-25 14:24:34 -07:00
DatItem_AreaName . NegativeSet . Add ( value ) ;
2020-07-18 21:35:17 -07:00
else
2020-08-25 14:24:34 -07:00
DatItem_AreaName . PositiveSet . Add ( value ) ;
2020-07-18 21:35:17 -07:00
break ;
2020-08-25 11:20:50 -07:00
case Field . DatItem_AreaSize :
2020-07-18 21:35:17 -07:00
bool? asOperation = null ;
if ( value . StartsWith ( ">" ) )
asOperation = true ;
else if ( value . StartsWith ( "<" ) )
asOperation = false ;
else if ( value . StartsWith ( "=" ) )
asOperation = null ;
string areasizeString = value . TrimStart ( '>' , '<' , '=' ) ;
if ( ! Int64 . TryParse ( areasizeString , out long areasize ) )
return ;
// Equal
if ( asOperation = = null & & ! negate )
{
2020-08-25 14:24:34 -07:00
DatItem_AreaSize . Neutral = areasize ;
2020-07-18 21:35:17 -07:00
}
// Not Equal
else if ( asOperation = = null & & negate )
{
2020-08-25 14:24:34 -07:00
DatItem_AreaSize . Negative = areasize - 1 ;
DatItem_AreaSize . Positive = areasize + 1 ;
2020-07-18 21:35:17 -07:00
}
// Greater Than or Equal
else if ( asOperation = = true & & ! negate )
{
2020-08-25 14:24:34 -07:00
DatItem_AreaSize . Positive = areasize ;
2020-07-18 21:35:17 -07:00
}
// Strictly Less Than
else if ( asOperation = = true & & negate )
{
2020-08-25 14:24:34 -07:00
DatItem_AreaSize . Negative = areasize - 1 ;
2020-07-18 21:35:17 -07:00
}
// Less Than or Equal
else if ( asOperation = = false & & ! negate )
{
2020-08-25 14:24:34 -07:00
DatItem_AreaSize . Negative = areasize ;
2020-07-18 21:35:17 -07:00
}
// Strictly Greater Than
else if ( asOperation = = false & & negate )
{
2020-08-25 14:24:34 -07:00
DatItem_AreaSize . Positive = areasize + 1 ;
2020-07-18 21:35:17 -07:00
}
break ;
2020-08-25 11:20:50 -07:00
case Field . DatItem_AreaWidth :
2020-08-21 13:31:22 -07:00
if ( negate )
2020-08-25 14:24:34 -07:00
DatItem_AreaWidth . NegativeSet . Add ( value ) ;
2020-08-21 13:31:22 -07:00
else
2020-08-25 14:24:34 -07:00
DatItem_AreaWidth . PositiveSet . Add ( value ) ;
2020-08-21 13:31:22 -07:00
break ;
2020-08-25 11:20:50 -07:00
case Field . DatItem_AreaEndianness :
2020-08-21 13:31:22 -07:00
if ( negate )
2020-08-25 14:24:34 -07:00
DatItem_AreaEndianness . NegativeSet . Add ( value ) ;
2020-08-21 13:31:22 -07:00
else
2020-08-25 14:24:34 -07:00
DatItem_AreaEndianness . PositiveSet . Add ( value ) ;
2020-08-21 13:31:22 -07:00
break ;
2020-08-25 11:20:50 -07:00
case Field . DatItem_Value :
2020-08-21 14:20:17 -07:00
if ( negate )
2020-08-25 14:24:34 -07:00
DatItem_Value . NegativeSet . Add ( value ) ;
2020-08-21 14:20:17 -07:00
else
2020-08-25 14:24:34 -07:00
DatItem_Value . PositiveSet . Add ( value ) ;
2020-08-21 14:20:17 -07:00
break ;
2020-08-25 11:20:50 -07:00
case Field . DatItem_LoadFlag :
2020-08-21 14:20:17 -07:00
if ( negate )
2020-08-25 14:24:34 -07:00
DatItem_LoadFlag . NegativeSet . Add ( value ) ;
2020-08-21 14:20:17 -07:00
else
2020-08-25 14:24:34 -07:00
DatItem_LoadFlag . PositiveSet . Add ( value ) ;
2020-08-21 14:20:17 -07:00
break ;
2020-08-20 21:15:37 -07:00
#endregion
2020-08-25 14:53:51 -07:00
#region Item - Specific
2020-08-31 23:01:51 -07:00
#region Actionable
2020-07-18 21:35:17 -07:00
2020-08-25 14:53:51 -07:00
// Rom
2020-08-25 11:20:50 -07:00
case Field . DatItem_Bios :
2020-07-18 21:35:17 -07:00
if ( negate )
2020-08-25 14:24:34 -07:00
DatItem_Bios . NegativeSet . Add ( value ) ;
2020-07-18 21:35:17 -07:00
else
2020-08-25 14:24:34 -07:00
DatItem_Bios . PositiveSet . Add ( value ) ;
2020-07-18 21:35:17 -07:00
break ;
2020-08-25 14:53:51 -07:00
case Field . DatItem_Size :
bool? sOperation = null ;
if ( value . StartsWith ( ">" ) )
sOperation = true ;
else if ( value . StartsWith ( "<" ) )
sOperation = false ;
else if ( value . StartsWith ( "=" ) )
sOperation = null ;
string sizeString = value . TrimStart ( '>' , '<' , '=' ) ;
if ( ! Int64 . TryParse ( sizeString , out long size ) )
return ;
// Equal
if ( sOperation = = null & & ! negate )
{
DatItem_Size . Neutral = size ;
}
// Not Equal
else if ( sOperation = = null & & negate )
{
DatItem_Size . Negative = size - 1 ;
DatItem_Size . Positive = size + 1 ;
}
// Greater Than or Equal
else if ( sOperation = = true & & ! negate )
{
DatItem_Size . Positive = size ;
}
// Strictly Less Than
else if ( sOperation = = true & & negate )
{
DatItem_Size . Negative = size - 1 ;
}
// Less Than or Equal
else if ( sOperation = = false & & ! negate )
{
DatItem_Size . Negative = size ;
}
// Strictly Greater Than
else if ( sOperation = = false & & negate )
{
DatItem_Size . Positive = size + 1 ;
}
break ;
case Field . DatItem_CRC :
if ( negate )
DatItem_CRC . NegativeSet . Add ( value ) ;
else
DatItem_CRC . PositiveSet . Add ( value ) ;
break ;
2020-08-31 23:01:51 -07:00
case Field . DatItem_MD5 :
if ( negate )
DatItem_MD5 . NegativeSet . Add ( value ) ;
else
DatItem_MD5 . PositiveSet . Add ( value ) ;
break ;
2020-08-27 16:57:22 -07:00
#if NET_FRAMEWORK
case Field . DatItem_RIPEMD160 :
if ( negate )
DatItem_RIPEMD160 . NegativeSet . Add ( value ) ;
else
DatItem_RIPEMD160 . PositiveSet . Add ( value ) ;
break ;
#endif
2020-08-31 23:01:51 -07:00
case Field . DatItem_SHA1 :
if ( negate )
DatItem_SHA1 . NegativeSet . Add ( value ) ;
else
DatItem_SHA1 . PositiveSet . Add ( value ) ;
break ;
case Field . DatItem_SHA256 :
if ( negate )
DatItem_SHA256 . NegativeSet . Add ( value ) ;
else
DatItem_SHA256 . PositiveSet . Add ( value ) ;
break ;
2020-08-27 16:57:22 -07:00
case Field . DatItem_SHA384 :
if ( negate )
DatItem_SHA384 . NegativeSet . Add ( value ) ;
else
DatItem_SHA384 . PositiveSet . Add ( value ) ;
break ;
case Field . DatItem_SHA512 :
if ( negate )
DatItem_SHA512 . NegativeSet . Add ( value ) ;
else
DatItem_SHA512 . PositiveSet . Add ( value ) ;
break ;
2020-08-31 23:01:51 -07:00
case Field . DatItem_Merge :
if ( negate )
DatItem_Merge . NegativeSet . Add ( value ) ;
else
DatItem_Merge . PositiveSet . Add ( value ) ;
break ;
case Field . DatItem_Region :
if ( negate )
DatItem_Region . NegativeSet . Add ( value ) ;
else
DatItem_Region . PositiveSet . Add ( value ) ;
break ;
2020-08-25 11:20:50 -07:00
case Field . DatItem_Offset :
2020-07-18 21:35:17 -07:00
if ( negate )
2020-08-25 14:24:34 -07:00
DatItem_Offset . NegativeSet . Add ( value ) ;
2020-07-18 21:35:17 -07:00
else
2020-08-25 14:24:34 -07:00
DatItem_Offset . PositiveSet . Add ( value ) ;
2020-07-18 21:35:17 -07:00
break ;
2020-08-31 23:01:51 -07:00
case Field . DatItem_Date :
if ( negate )
DatItem_Date . NegativeSet . Add ( value ) ;
else
DatItem_Date . PositiveSet . Add ( value ) ;
break ;
case Field . DatItem_Status :
if ( negate )
DatItem_Status . Negative | = value . AsItemStatus ( ) ;
else
DatItem_Status . Positive | = value . AsItemStatus ( ) ;
break ;
case Field . DatItem_Optional :
if ( negate | | value . Equals ( "false" , StringComparison . OrdinalIgnoreCase ) )
DatItem_Optional . Neutral = false ;
else
DatItem_Optional . Neutral = true ;
break ;
2020-08-25 11:20:50 -07:00
case Field . DatItem_Inverted :
2020-07-28 17:00:19 -07:00
if ( negate | | value . Equals ( "false" , StringComparison . OrdinalIgnoreCase ) )
2020-08-25 14:24:34 -07:00
DatItem_Inverted . Neutral = false ;
2020-07-28 17:00:19 -07:00
else
2020-08-25 14:24:34 -07:00
DatItem_Inverted . Neutral = true ;
2020-07-28 17:00:19 -07:00
break ;
2020-08-31 23:01:51 -07:00
// Disk
case Field . DatItem_Index :
if ( negate )
DatItem_Index . NegativeSet . Add ( value ) ;
else
DatItem_Index . PositiveSet . Add ( value ) ;
break ;
case Field . DatItem_Writable :
if ( negate | | value . Equals ( "false" , StringComparison . OrdinalIgnoreCase ) )
DatItem_Writable . Neutral = false ;
else
DatItem_Writable . Neutral = true ;
break ;
#endregion
#region Auxiliary
2020-09-01 11:34:52 -07:00
// Adjuster
case Field . DatItem_Default :
if ( negate | | value . Equals ( "false" , StringComparison . OrdinalIgnoreCase ) )
DatItem_Default . Neutral = false ;
else
DatItem_Default . Neutral = true ;
break ;
case Field . DatItem_Conditions :
if ( negate | | value . Equals ( "false" , StringComparison . OrdinalIgnoreCase ) )
DatItem_Conditions . Neutral = false ;
else
DatItem_Conditions . Neutral = true ;
break ;
case Field . DatItem_Condition_Tag :
if ( negate )
DatItem_Condition_Tag . NegativeSet . Add ( value ) ;
else
DatItem_Condition_Tag . PositiveSet . Add ( value ) ;
break ;
case Field . DatItem_Condition_Mask :
if ( negate )
DatItem_Condition_Mask . NegativeSet . Add ( value ) ;
else
DatItem_Condition_Mask . PositiveSet . Add ( value ) ;
break ;
case Field . DatItem_Condition_Relation :
if ( negate )
DatItem_Condition_Relation . NegativeSet . Add ( value ) ;
else
DatItem_Condition_Relation . PositiveSet . Add ( value ) ;
break ;
case Field . DatItem_Condition_Value :
if ( negate )
DatItem_Condition_Value . NegativeSet . Add ( value ) ;
else
DatItem_Condition_Value . PositiveSet . Add ( value ) ;
break ;
2020-08-31 23:01:51 -07:00
// BiosSet
case Field . DatItem_Description :
if ( negate )
DatItem_Description . NegativeSet . Add ( value ) ;
else
DatItem_Description . PositiveSet . Add ( value ) ;
break ;
// Chip
case Field . DatItem_Tag :
if ( negate )
DatItem_Tag . NegativeSet . Add ( value ) ;
else
DatItem_Tag . PositiveSet . Add ( value ) ;
break ;
case Field . DatItem_ChipType :
if ( negate )
DatItem_ChipType . NegativeSet . Add ( value ) ;
else
DatItem_ChipType . PositiveSet . Add ( value ) ;
break ;
case Field . DatItem_Clock :
if ( negate )
DatItem_Clock . NegativeSet . Add ( value ) ;
else
DatItem_Clock . PositiveSet . Add ( value ) ;
break ;
2020-09-01 11:55:11 -07:00
// Configuration
case Field . DatItem_Mask :
if ( negate )
DatItem_Mask . NegativeSet . Add ( value ) ;
else
DatItem_Mask . PositiveSet . Add ( value ) ;
break ;
// Configurations.Locations
case Field . DatItem_Locations :
if ( negate | | value . Equals ( "false" , StringComparison . OrdinalIgnoreCase ) )
DatItem_Locations . Neutral = false ;
else
DatItem_Locations . Neutral = true ;
break ;
case Field . DatItem_Location_Name :
if ( negate )
DatItem_Location_Name . NegativeSet . Add ( value ) ;
else
DatItem_Location_Name . PositiveSet . Add ( value ) ;
break ;
case Field . DatItem_Location_Number :
if ( negate )
DatItem_Location_Number . NegativeSet . Add ( value ) ;
else
DatItem_Location_Number . PositiveSet . Add ( value ) ;
break ;
case Field . DatItem_Location_Inverted :
if ( negate | | value . Equals ( "false" , StringComparison . OrdinalIgnoreCase ) )
DatItem_Location_Inverted . Neutral = false ;
else
DatItem_Location_Inverted . Neutral = true ;
break ;
// Configurations.Settings
case Field . DatItem_Settings :
if ( negate | | value . Equals ( "false" , StringComparison . OrdinalIgnoreCase ) )
DatItem_Settings . Neutral = false ;
else
DatItem_Settings . Neutral = true ;
break ;
case Field . DatItem_Setting_Name :
if ( negate )
DatItem_Setting_Name . NegativeSet . Add ( value ) ;
else
DatItem_Setting_Name . PositiveSet . Add ( value ) ;
break ;
case Field . DatItem_Setting_Value :
if ( negate )
DatItem_Setting_Value . NegativeSet . Add ( value ) ;
else
DatItem_Setting_Value . PositiveSet . Add ( value ) ;
break ;
case Field . DatItem_Setting_Default :
if ( negate | | value . Equals ( "false" , StringComparison . OrdinalIgnoreCase ) )
DatItem_Setting_Default . Neutral = false ;
else
DatItem_Setting_Default . Neutral = true ;
break ;
2020-09-01 13:36:32 -07:00
// DipSwitches.Values
case Field . DatItem_Values :
if ( negate | | value . Equals ( "false" , StringComparison . OrdinalIgnoreCase ) )
DatItem_Values . Neutral = false ;
else
DatItem_Values . Neutral = true ;
break ;
case Field . DatItem_Value_Name :
if ( negate )
DatItem_Value_Name . NegativeSet . Add ( value ) ;
else
DatItem_Value_Name . PositiveSet . Add ( value ) ;
break ;
case Field . DatItem_Value_Value :
if ( negate )
DatItem_Value_Value . NegativeSet . Add ( value ) ;
else
DatItem_Value_Value . PositiveSet . Add ( value ) ;
break ;
case Field . DatItem_Value_Default :
if ( negate | | value . Equals ( "false" , StringComparison . OrdinalIgnoreCase ) )
DatItem_Value_Default . Neutral = false ;
else
DatItem_Value_Default . Neutral = true ;
break ;
2020-09-02 13:31:50 -07:00
// Feature
case Field . DatItem_FeatureType :
if ( negate )
2020-09-02 14:04:02 -07:00
DatItem_FeatureType . Negative | = value . AsFeatureType ( ) ;
2020-09-02 13:31:50 -07:00
else
2020-09-02 14:04:02 -07:00
DatItem_FeatureType . Positive | = value . AsFeatureType ( ) ;
2020-09-02 13:31:50 -07:00
break ;
case Field . DatItem_FeatureStatus :
if ( negate )
DatItem_FeatureStatus . NegativeSet . Add ( value ) ;
else
DatItem_FeatureStatus . PositiveSet . Add ( value ) ;
break ;
case Field . DatItem_FeatureOverall :
if ( negate )
DatItem_FeatureOverall . NegativeSet . Add ( value ) ;
else
DatItem_FeatureOverall . PositiveSet . Add ( value ) ;
break ;
2020-09-01 11:34:52 -07:00
// Ram Option
case Field . DatItem_Content :
if ( negate )
DatItem_Content . NegativeSet . Add ( value ) ;
else
DatItem_Content . PositiveSet . Add ( value ) ;
break ;
2020-08-31 23:01:51 -07:00
// Release
case Field . DatItem_Language :
if ( negate )
DatItem_Language . NegativeSet . Add ( value ) ;
else
DatItem_Language . PositiveSet . Add ( value ) ;
break ;
2020-09-01 16:21:55 -07:00
// Slots.SlotOptions
case Field . DatItem_SlotOptions :
if ( negate | | value . Equals ( "false" , StringComparison . OrdinalIgnoreCase ) )
DatItem_SlotOptions . Neutral = false ;
else
DatItem_SlotOptions . Neutral = true ;
break ;
case Field . DatItem_SlotOption_Name :
if ( negate )
DatItem_SlotOption_Name . NegativeSet . Add ( value ) ;
else
DatItem_SlotOption_Name . PositiveSet . Add ( value ) ;
break ;
case Field . DatItem_SlotOption_DeviceName :
if ( negate )
DatItem_SlotOption_DeviceName . NegativeSet . Add ( value ) ;
else
DatItem_SlotOption_DeviceName . PositiveSet . Add ( value ) ;
break ;
case Field . DatItem_SlotOption_Default :
if ( negate | | value . Equals ( "false" , StringComparison . OrdinalIgnoreCase ) )
DatItem_SlotOption_Default . Neutral = false ;
else
DatItem_SlotOption_Default . Neutral = true ;
break ;
2020-08-31 23:26:07 -07:00
// Software List
case Field . DatItem_SoftwareListStatus :
if ( negate )
DatItem_SoftwareListStatus . Negative | = value . AsSoftwareListStatus ( ) ;
else
DatItem_SoftwareListStatus . Positive | = value . AsSoftwareListStatus ( ) ;
break ;
case Field . DatItem_Filter :
if ( negate )
DatItem_Filter . NegativeSet . Add ( value ) ;
else
DatItem_Filter . PositiveSet . Add ( value ) ;
break ;
2020-09-02 12:51:21 -07:00
// Sound
case Field . DatItem_Channels :
if ( negate )
DatItem_Channels . NegativeSet . Add ( value ) ;
else
DatItem_Channels . PositiveSet . Add ( value ) ;
break ;
#endregion
2020-08-25 14:53:51 -07:00
2020-09-02 12:51:21 -07:00
#endregion // Item-Specifics
2020-08-31 23:01:51 -07:00
2020-09-02 12:51:21 -07:00
#endregion // DatItem Filters
2020-07-18 21:35:17 -07:00
}
}
#endregion
2020-07-15 09:41:59 -07:00
#endregion // Instance Methods
2019-01-08 17:40:28 -08:00
}
2016-10-26 21:02:01 -07:00
}