mirror of
https://github.com/claunia/SabreTools.git
synced 2025-12-16 19:14:27 +00:00
Create and use DatItems.FeatureType
This commit is contained in:
@@ -292,7 +292,7 @@ namespace SabreTools.Library.DatFiles
|
||||
case "feature":
|
||||
datItems.Add(new Feature
|
||||
{
|
||||
Type = reader.GetAttribute("type"),
|
||||
Type = reader.GetAttribute("type").AsFeatureType(),
|
||||
Status = reader.GetAttribute("status"),
|
||||
Overall = reader.GetAttribute("overall"),
|
||||
});
|
||||
@@ -1569,7 +1569,7 @@ namespace SabreTools.Library.DatFiles
|
||||
case ItemType.Feature:
|
||||
var feature = datItem as Feature;
|
||||
xtw.WriteStartElement("feature");
|
||||
xtw.WriteOptionalAttributeString("type", feature.Type);
|
||||
xtw.WriteOptionalAttributeString("type", feature.Type.FromFeatureType());
|
||||
xtw.WriteOptionalAttributeString("status", feature.Status);
|
||||
xtw.WriteOptionalAttributeString("overall", feature.Overall);
|
||||
xtw.WriteEndElement();
|
||||
|
||||
@@ -1393,7 +1393,7 @@ namespace SabreTools.Library.DatFiles
|
||||
var feature = datItem as Feature;
|
||||
xtw.WriteStartElement("file");
|
||||
xtw.WriteAttributeString("type", "feature");
|
||||
xtw.WriteOptionalAttributeString("type", feature.Type);
|
||||
xtw.WriteOptionalAttributeString("type", feature.Type.FromFeatureType());
|
||||
xtw.WriteOptionalAttributeString("status", feature.Status);
|
||||
xtw.WriteOptionalAttributeString("overall", feature.Overall);
|
||||
xtw.WriteEndElement();
|
||||
|
||||
@@ -17,6 +17,33 @@ namespace SabreTools.Library.DatItems
|
||||
External = 1 << 3,
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Determine the feature type
|
||||
/// </summary>
|
||||
[Flags]
|
||||
public enum FeatureType
|
||||
{
|
||||
/// <summary>
|
||||
/// This is a fake flag that is used for filter only
|
||||
/// </summary>
|
||||
NULL = 0,
|
||||
|
||||
Protection = 1 << 0,
|
||||
Palette = 1 << 1,
|
||||
Graphics = 1 << 2,
|
||||
Sound = 1 << 3,
|
||||
Controls = 1 << 4,
|
||||
Keyboard = 1 << 5,
|
||||
Mouse = 1 << 6,
|
||||
Microphone = 1 << 7,
|
||||
Camera = 1 << 8,
|
||||
Disk = 1 << 9,
|
||||
Printer = 1 << 10,
|
||||
Lan = 1 << 11,
|
||||
Wan = 1 << 12,
|
||||
Timing = 1 << 13,
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// List of valid field types within a DatItem/Machine
|
||||
/// </summary>
|
||||
|
||||
@@ -3,6 +3,7 @@ using System.Linq;
|
||||
|
||||
using SabreTools.Library.Filtering;
|
||||
using Newtonsoft.Json;
|
||||
using SabreTools.Library.Tools;
|
||||
|
||||
namespace SabreTools.Library.DatItems
|
||||
{
|
||||
@@ -18,7 +19,7 @@ namespace SabreTools.Library.DatItems
|
||||
/// Type of feature
|
||||
/// </summary>
|
||||
[JsonProperty("type")]
|
||||
public string Type { get; set; } // TODO: (protection|palette|graphics|sound|controls|keyboard|mouse|microphone|camera|disk|printer|lan|wan|timing)
|
||||
public FeatureType Type { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Emulation status
|
||||
@@ -47,7 +48,7 @@ namespace SabreTools.Library.DatItems
|
||||
|
||||
// Handle Feature-specific fields
|
||||
if (mappings.Keys.Contains(Field.DatItem_FeatureType))
|
||||
Type = mappings[Field.DatItem_FeatureType];
|
||||
Type = mappings[Field.DatItem_FeatureType].AsFeatureType();
|
||||
|
||||
if (mappings.Keys.Contains(Field.DatItem_FeatureStatus))
|
||||
Status = mappings[Field.DatItem_FeatureStatus];
|
||||
@@ -140,9 +141,9 @@ namespace SabreTools.Library.DatItems
|
||||
return false;
|
||||
|
||||
// Filter on type
|
||||
if (filter.DatItem_FeatureType.MatchesPositiveSet(Type) == false)
|
||||
if (filter.DatItem_FeatureType.MatchesPositive(FeatureType.NULL, Type) == false)
|
||||
return false;
|
||||
if (filter.DatItem_FeatureType.MatchesNegativeSet(Type) == true)
|
||||
if (filter.DatItem_FeatureType.MatchesNegative(FeatureType.NULL, Type) == true)
|
||||
return false;
|
||||
|
||||
// Filter on status
|
||||
@@ -171,7 +172,7 @@ namespace SabreTools.Library.DatItems
|
||||
|
||||
// Remove the fields
|
||||
if (fields.Contains(Field.DatItem_FeatureType))
|
||||
Type = null;
|
||||
Type = FeatureType.NULL;
|
||||
|
||||
if (fields.Contains(Field.DatItem_FeatureStatus))
|
||||
Status = null;
|
||||
|
||||
@@ -295,7 +295,7 @@ namespace SabreTools.Library.Filtering
|
||||
public FilterItem<bool?> DatItem_Value_Default { get; private set; } = new FilterItem<bool?>() { Neutral = null };
|
||||
|
||||
// Feature
|
||||
public FilterItem<string> DatItem_FeatureType { get; private set; } = new FilterItem<string>();
|
||||
public FilterItem<FeatureType> DatItem_FeatureType { get; private set; } = new FilterItem<FeatureType>() { Positive = FeatureType.NULL, Negative = FeatureType.NULL };
|
||||
public FilterItem<string> DatItem_FeatureStatus { get; private set; } = new FilterItem<string>();
|
||||
public FilterItem<string> DatItem_FeatureOverall { get; private set; } = new FilterItem<string>();
|
||||
|
||||
@@ -1700,9 +1700,9 @@ namespace SabreTools.Library.Filtering
|
||||
// Feature
|
||||
case Field.DatItem_FeatureType:
|
||||
if (negate)
|
||||
DatItem_FeatureType.NegativeSet.Add(value);
|
||||
DatItem_FeatureType.Negative |= value.AsFeatureType();
|
||||
else
|
||||
DatItem_FeatureType.PositiveSet.Add(value);
|
||||
DatItem_FeatureType.Positive |= value.AsFeatureType();
|
||||
break;
|
||||
|
||||
case Field.DatItem_FeatureStatus:
|
||||
|
||||
@@ -145,6 +145,69 @@ namespace SabreTools.Library.Tools
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get FeatureType value from input string
|
||||
/// </summary>
|
||||
/// <param name="featureType">String to get value from</param>
|
||||
/// <returns>FeatureType value corresponding to the string</returns>
|
||||
public static FeatureType AsFeatureType(this string featureType)
|
||||
{
|
||||
#if NET_FRAMEWORK
|
||||
switch (featureType?.ToLowerInvariant())
|
||||
{
|
||||
case "protection":
|
||||
return FeatureType.Protection;
|
||||
case "palette":
|
||||
return FeatureType.Palette;
|
||||
case "graphics":
|
||||
return FeatureType.Graphics;
|
||||
case "sound":
|
||||
return FeatureType.Sound;
|
||||
case "controls":
|
||||
return FeatureType.Controls;
|
||||
case "keyboard":
|
||||
return FeatureType.Keyboard;
|
||||
case "mouse":
|
||||
return FeatureType.Mouse;
|
||||
case "microphone":
|
||||
return FeatureType.Microphone;
|
||||
case "camera":
|
||||
return FeatureType.Camera;
|
||||
case "disk":
|
||||
return FeatureType.Disk;
|
||||
case "printer":
|
||||
return FeatureType.Printer;
|
||||
case "lan":
|
||||
return FeatureType.Lan;
|
||||
case "wan":
|
||||
return FeatureType.Wan;
|
||||
case "timing":
|
||||
return FeatureType.Timing;
|
||||
default:
|
||||
return FeatureType.NULL;
|
||||
}
|
||||
#else
|
||||
return featureType?.ToLowerInvariant() switch
|
||||
{
|
||||
"protection" => FeatureType.Protection,
|
||||
"palette" => FeatureType.Palette,
|
||||
"graphics" => FeatureType.Graphics,
|
||||
"sound" => FeatureType.Sound,
|
||||
"controls" => FeatureType.Controls,
|
||||
"keyboard" => FeatureType.Keyboard,
|
||||
"mouse" => FeatureType.Mouse,
|
||||
"microphone" => FeatureType.Microphone,
|
||||
"camera" => FeatureType.Camera,
|
||||
"disk" => FeatureType.Disk,
|
||||
"printer" => FeatureType.Printer,
|
||||
"lan" => FeatureType.Lan,
|
||||
"wan" => FeatureType.Wan,
|
||||
"timing" => FeatureType.Timing,
|
||||
_ => FeatureType.NULL,
|
||||
};
|
||||
#endif
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get Field value from input string
|
||||
/// </summary>
|
||||
@@ -1955,6 +2018,69 @@ namespace SabreTools.Library.Tools
|
||||
// TODO: DatFormat -> string
|
||||
// TODO: Field -> string
|
||||
|
||||
/// <summary>
|
||||
/// Get string value from input FeatureType
|
||||
/// </summary>
|
||||
/// <param name="featureType">FeatureType to get value from</param>
|
||||
/// <returns>String value corresponding to the FeatureType</returns>
|
||||
public static string FromFeatureType(this FeatureType featureType)
|
||||
{
|
||||
#if NET_FRAMEWORK
|
||||
switch (featureType)
|
||||
{
|
||||
case FeatureType.Protection:
|
||||
return "protection";
|
||||
case FeatureType.Palette:
|
||||
return "palette";
|
||||
case FeatureType.Graphics:
|
||||
return "graphics";
|
||||
case FeatureType.Sound:
|
||||
return "sound";
|
||||
case FeatureType.Controls:
|
||||
return "controls";
|
||||
case FeatureType.Keyboard:
|
||||
return "keyboard";
|
||||
case FeatureType.Mouse:
|
||||
return "mouse";
|
||||
case FeatureType.Microphone:
|
||||
return "microphone";
|
||||
case FeatureType.Camera:
|
||||
return "camera";
|
||||
case FeatureType.Disk:
|
||||
return "disk";
|
||||
case FeatureType.Printer:
|
||||
return "printer";
|
||||
case FeatureType.Lan:
|
||||
return "lan";
|
||||
case FeatureType.Wan:
|
||||
return "wan";
|
||||
case FeatureType.Timing:
|
||||
return "timing";
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
#else
|
||||
return featureType switch
|
||||
{
|
||||
FeatureType.Protection => "protection",
|
||||
FeatureType.Palette => "palette",
|
||||
FeatureType.Graphics => "graphics",
|
||||
FeatureType.Sound => "sound",
|
||||
FeatureType.Controls => "controls",
|
||||
FeatureType.Keyboard => "keyboard",
|
||||
FeatureType.Mouse => "mouse",
|
||||
FeatureType.Microphone => "microphone",
|
||||
FeatureType.Camera => "camera",
|
||||
FeatureType.Disk => "disk",
|
||||
FeatureType.Printer => "printer",
|
||||
FeatureType.Lan => "lan",
|
||||
FeatureType.Wan => "wan",
|
||||
FeatureType.Timing => "timing",
|
||||
_ => null,
|
||||
};
|
||||
#endif
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get string value from input ItemStatus
|
||||
/// </summary>
|
||||
|
||||
Reference in New Issue
Block a user