Enum type conversion to property

This commit is contained in:
Matt Nadareski
2026-04-02 02:18:08 -04:00
parent 4c9ff19cf3
commit c4524d20f0
121 changed files with 1507 additions and 1158 deletions

View File

@@ -12,7 +12,12 @@ namespace SabreTools.Metadata.DatItems.Formats
{
#region Fields
[JsonIgnore]
public Data.Models.Metadata.ChipType? ChipType
{
get => (_internal as Data.Models.Metadata.Chip)?.ChipType;
set => (_internal as Data.Models.Metadata.Chip)?.ChipType = value;
}
public bool? SoundOnly
{
get => (_internal as Data.Models.Metadata.Chip)?.SoundOnly;
@@ -25,13 +30,7 @@ namespace SabreTools.Metadata.DatItems.Formats
public Chip() : base() { }
public Chip(Data.Models.Metadata.Chip item) : base(item)
{
// Process flag values
string? chipType = ReadString(Data.Models.Metadata.Chip.ChipTypeKey);
if (chipType is not null)
Write<string?>(Data.Models.Metadata.Chip.ChipTypeKey, chipType.AsChipType()?.AsStringValue());
}
public Chip(Data.Models.Metadata.Chip item) : base(item) { }
public Chip(Data.Models.Metadata.Chip item, Machine machine, Source source) : this(item)
{

View File

@@ -10,17 +10,21 @@ namespace SabreTools.Metadata.DatItems.Formats
[JsonObject("condition"), XmlRoot("condition")]
public sealed class Condition : DatItem<Data.Models.Metadata.Condition>
{
#region Fields
public Data.Models.Metadata.Relation? Relation
{
get => (_internal as Data.Models.Metadata.Condition)?.Relation;
set => (_internal as Data.Models.Metadata.Condition)?.Relation = value;
}
#endregion
#region Constructors
public Condition() : base() { }
public Condition(Data.Models.Metadata.Condition item) : base(item)
{
// Process flag values
string? condition = ReadString(Data.Models.Metadata.Condition.RelationKey);
if (condition is not null)
Write<string?>(Data.Models.Metadata.Condition.RelationKey, condition.AsRelation()?.AsStringValue());
}
public Condition(Data.Models.Metadata.Condition item) : base(item) { }
public Condition(Data.Models.Metadata.Condition item, Machine machine, Source source) : this(item)
{

View File

@@ -12,6 +12,12 @@ namespace SabreTools.Metadata.DatItems.Formats
{
#region Fields
public Data.Models.Metadata.ControlType? ControlType
{
get => (_internal as Data.Models.Metadata.Control)?.ControlType;
set => (_internal as Data.Models.Metadata.Control)?.ControlType = value;
}
public bool? Reverse
{
get => (_internal as Data.Models.Metadata.Control)?.Reverse;
@@ -54,10 +60,6 @@ namespace SabreTools.Metadata.DatItems.Formats
long? sensitivity = ReadLong(Data.Models.Metadata.Control.SensitivityKey);
if (sensitivity is not null)
Write<string?>(Data.Models.Metadata.Control.SensitivityKey, sensitivity.ToString());
string? controlType = ReadString(Data.Models.Metadata.Control.ControlTypeKey);
if (controlType is not null)
Write<string?>(Data.Models.Metadata.Control.ControlTypeKey, controlType.AsControlType()?.AsStringValue());
}
public Control(Data.Models.Metadata.Control item, Machine machine, Source source) : this(item)

View File

@@ -11,6 +11,16 @@ namespace SabreTools.Metadata.DatItems.Formats
[JsonObject("dataarea"), XmlRoot("dataarea")]
public sealed class DataArea : DatItem<Data.Models.Metadata.DataArea>
{
#region Fields
public Data.Models.Metadata.Endianness? Endianness
{
get => (_internal as Data.Models.Metadata.DataArea)?.Endianness;
set => (_internal as Data.Models.Metadata.DataArea)?.Endianness = value;
}
#endregion
#region Constructors
public DataArea() : base() { }
@@ -18,10 +28,6 @@ namespace SabreTools.Metadata.DatItems.Formats
public DataArea(Data.Models.Metadata.DataArea item) : base(item)
{
// Process flag values
string? endianness = ReadString(Data.Models.Metadata.DataArea.EndiannessKey);
if (endianness is not null)
Write<string?>(Data.Models.Metadata.DataArea.EndiannessKey, endianness.AsEndianness()?.AsStringValue());
long? size = ReadLong(Data.Models.Metadata.DataArea.SizeKey);
if (size is not null)
Write<string?>(Data.Models.Metadata.DataArea.SizeKey, size.ToString());

View File

@@ -13,6 +13,12 @@ namespace SabreTools.Metadata.DatItems.Formats
{
#region Fields
public Data.Models.Metadata.DeviceType? DeviceType
{
get => (_internal as Data.Models.Metadata.Device)?.DeviceType;
set => (_internal as Data.Models.Metadata.Device)?.DeviceType = value;
}
[JsonIgnore]
public bool InstancesSpecified
{
@@ -46,10 +52,6 @@ namespace SabreTools.Metadata.DatItems.Formats
if (mandatory is not null)
Write<string?>(Data.Models.Metadata.Device.MandatoryKey, mandatory.FromYesNo());
string? deviceType = ReadString(Data.Models.Metadata.Device.DeviceTypeKey);
if (deviceType is not null)
Write<string?>(Data.Models.Metadata.Device.DeviceTypeKey, deviceType.AsDeviceType()?.AsStringValue());
// Handle subitems
var instance = item.Read<Data.Models.Metadata.Instance>(Data.Models.Metadata.Device.InstanceKey);
if (instance is not null)

View File

@@ -1,4 +1,4 @@
using System.Xml.Serialization;
using System.Xml.Serialization;
using Newtonsoft.Json;
using SabreTools.Data.Extensions;
using SabreTools.Data.Models.Metadata;
@@ -56,6 +56,12 @@ namespace SabreTools.Metadata.DatItems.Formats
}
}
public ItemStatus? Status
{
get => (_internal as Data.Models.Metadata.Disk)?.Status;
set => (_internal as Data.Models.Metadata.Disk)?.Status = value;
}
public bool? Writable
{
get => (_internal as Data.Models.Metadata.Disk)?.Writable;
@@ -69,18 +75,13 @@ namespace SabreTools.Metadata.DatItems.Formats
public Disk() : base()
{
Write<DupeType>(DupeTypeKey, 0x00);
Write<string?>(Data.Models.Metadata.Disk.StatusKey, ItemStatus.None.AsStringValue());
Status = ItemStatus.None;
}
public Disk(Data.Models.Metadata.Disk item) : base(item)
{
Write<DupeType>(DupeTypeKey, 0x00);
// Process flag values
string? status = ReadString(Data.Models.Metadata.Disk.StatusKey);
if (status is not null)
Write<string?>(Data.Models.Metadata.Disk.StatusKey, status.AsItemStatus()?.AsStringValue());
// Process hash values
string? md5 = ReadString(Data.Models.Metadata.Disk.MD5Key);
if (md5 is not null)

View File

@@ -13,6 +13,12 @@ namespace SabreTools.Metadata.DatItems.Formats
{
#region Fields
public Data.Models.Metadata.DisplayType? DisplayType
{
get => (_internal as Data.Models.Metadata.Display)?.DisplayType;
set => (_internal as Data.Models.Metadata.Display)?.DisplayType = value;
}
public bool? FlipX
{
get => (_internal as Data.Models.Metadata.Display)?.FlipX;
@@ -56,10 +62,6 @@ namespace SabreTools.Metadata.DatItems.Formats
if (rotate is not null)
Write<string?>(Data.Models.Metadata.Display.RotateKey, rotate.ToString());
string? displayType = ReadString(Data.Models.Metadata.Display.DisplayTypeKey);
if (displayType is not null)
Write<string?>(Data.Models.Metadata.Display.DisplayTypeKey, displayType.AsDisplayType()?.AsStringValue());
long? vbEnd = ReadLong(Data.Models.Metadata.Display.VBEndKey);
if (vbEnd is not null)
Write<string?>(Data.Models.Metadata.Display.VBEndKey, vbEnd.ToString());
@@ -88,7 +90,7 @@ namespace SabreTools.Metadata.DatItems.Formats
// TODO: Convert this block to more traditional set of if/then
Write(Data.Models.Metadata.Video.AspectXKey, NumberHelper.ConvertToInt64(item.ReadString(Data.Models.Metadata.Video.AspectXKey)));
Write(Data.Models.Metadata.Video.AspectYKey, NumberHelper.ConvertToInt64(item.ReadString(Data.Models.Metadata.Video.AspectYKey)));
Write<string?>(Data.Models.Metadata.Display.DisplayTypeKey, item.ReadString(Data.Models.Metadata.Video.ScreenKey).AsDisplayType()?.AsStringValue());
DisplayType = item.Screen;
Write(Data.Models.Metadata.Display.HeightKey, NumberHelper.ConvertToInt64(item.ReadString(Data.Models.Metadata.Video.HeightKey)));
Write(Data.Models.Metadata.Display.RefreshKey, NumberHelper.ConvertToDouble(item.ReadString(Data.Models.Metadata.Video.RefreshKey)));
Write(Data.Models.Metadata.Display.WidthKey, NumberHelper.ConvertToInt64(item.ReadString(Data.Models.Metadata.Video.WidthKey)));
@@ -123,10 +125,6 @@ namespace SabreTools.Metadata.DatItems.Formats
if (refresh is not null)
Write<string?>(Data.Models.Metadata.Display.RefreshKey, refresh.ToString());
string? screen = ReadString(Data.Models.Metadata.Video.ScreenKey);
if (screen is not null)
Write<string?>(Data.Models.Metadata.Display.DisplayTypeKey, screen.AsDisplayType()?.AsStringValue());
long? width = ReadLong(Data.Models.Metadata.Video.WidthKey);
if (width is not null)
Write<string?>(Data.Models.Metadata.Display.WidthKey, width.ToString());

View File

@@ -12,6 +12,30 @@ namespace SabreTools.Metadata.DatItems.Formats
{
#region Fields
public Data.Models.Metadata.Blit? Blit
{
get => (_internal as Data.Models.Metadata.Driver)?.Blit;
set => (_internal as Data.Models.Metadata.Driver)?.Blit = value;
}
public Data.Models.Metadata.SupportStatus? Cocktail
{
get => (_internal as Data.Models.Metadata.Driver)?.Cocktail;
set => (_internal as Data.Models.Metadata.Driver)?.Cocktail = value;
}
public Data.Models.Metadata.SupportStatus? Color
{
get => (_internal as Data.Models.Metadata.Driver)?.Color;
set => (_internal as Data.Models.Metadata.Driver)?.Color = value;
}
public Data.Models.Metadata.SupportStatus? Emulation
{
get => (_internal as Data.Models.Metadata.Driver)?.Emulation;
set => (_internal as Data.Models.Metadata.Driver)?.Emulation = value;
}
public bool? Incomplete
{
get => (_internal as Data.Models.Metadata.Driver)?.Incomplete;
@@ -30,6 +54,24 @@ namespace SabreTools.Metadata.DatItems.Formats
set => (_internal as Data.Models.Metadata.Driver)?.RequiresArtwork = value;
}
public Data.Models.Metadata.Supported? SaveState
{
get => (_internal as Data.Models.Metadata.Driver)?.SaveState;
set => (_internal as Data.Models.Metadata.Driver)?.SaveState = value;
}
public Data.Models.Metadata.SupportStatus? Sound
{
get => (_internal as Data.Models.Metadata.Driver)?.Sound;
set => (_internal as Data.Models.Metadata.Driver)?.Sound = value;
}
public Data.Models.Metadata.SupportStatus? Status
{
get => (_internal as Data.Models.Metadata.Driver)?.Status;
set => (_internal as Data.Models.Metadata.Driver)?.Status = value;
}
public bool? Unofficial
{
get => (_internal as Data.Models.Metadata.Driver)?.Unofficial;
@@ -45,33 +87,9 @@ namespace SabreTools.Metadata.DatItems.Formats
public Driver(Data.Models.Metadata.Driver item) : base(item)
{
// Process flag values
string? cocktail = ReadString(Data.Models.Metadata.Driver.CocktailKey);
if (cocktail is not null)
Write<string?>(Data.Models.Metadata.Driver.CocktailKey, cocktail.AsSupportStatus()?.AsStringValue());
string? color = ReadString(Data.Models.Metadata.Driver.ColorKey);
if (color is not null)
Write<string?>(Data.Models.Metadata.Driver.ColorKey, color.AsSupportStatus()?.AsStringValue());
string? emulation = ReadString(Data.Models.Metadata.Driver.EmulationKey);
if (emulation is not null)
Write<string?>(Data.Models.Metadata.Driver.EmulationKey, emulation.AsSupportStatus()?.AsStringValue());
long? paletteSize = ReadLong(Data.Models.Metadata.Driver.PaletteSizeKey);
if (paletteSize is not null)
Write<string?>(Data.Models.Metadata.Driver.PaletteSizeKey, paletteSize.ToString());
string? saveState = ReadString(Data.Models.Metadata.Driver.SaveStateKey);
if (saveState is not null)
Write<string?>(Data.Models.Metadata.Driver.SaveStateKey, saveState.AsSupported()?.AsStringValue(useSecond: true));
string? sound = ReadString(Data.Models.Metadata.Driver.SoundKey);
if (sound is not null)
Write<string?>(Data.Models.Metadata.Driver.SoundKey, sound.AsSupportStatus()?.AsStringValue());
string? status = ReadString(Data.Models.Metadata.Driver.StatusKey);
if (status is not null)
Write<string?>(Data.Models.Metadata.Driver.StatusKey, status.AsSupportStatus()?.AsStringValue());
}
public Driver(Data.Models.Metadata.Driver item, Machine machine, Source source) : this(item)

View File

@@ -10,25 +10,33 @@ namespace SabreTools.Metadata.DatItems.Formats
[JsonObject("feature"), XmlRoot("feature")]
public sealed class Feature : DatItem<Data.Models.Metadata.Feature>
{
#region Fields
public Data.Models.Metadata.FeatureType? FeatureType
{
get => (_internal as Data.Models.Metadata.Feature)?.FeatureType;
set => (_internal as Data.Models.Metadata.Feature)?.FeatureType = value;
}
public Data.Models.Metadata.FeatureStatus? Overall
{
get => (_internal as Data.Models.Metadata.Feature)?.Overall;
set => (_internal as Data.Models.Metadata.Feature)?.Overall = value;
}
public Data.Models.Metadata.FeatureStatus? Status
{
get => (_internal as Data.Models.Metadata.Feature)?.Status;
set => (_internal as Data.Models.Metadata.Feature)?.Status = value;
}
#endregion
#region Constructors
public Feature() : base() { }
public Feature(Data.Models.Metadata.Feature item) : base(item)
{
// Process flag values
string? overall = ReadString(Data.Models.Metadata.Feature.OverallKey);
if (overall is not null)
Write<string?>(Data.Models.Metadata.Feature.OverallKey, overall.AsFeatureStatus()?.AsStringValue());
string? status = ReadString(Data.Models.Metadata.Feature.StatusKey);
if (status is not null)
Write<string?>(Data.Models.Metadata.Feature.StatusKey, status.AsFeatureStatus()?.AsStringValue());
string? featureType = ReadString(Data.Models.Metadata.Feature.FeatureTypeKey);
if (featureType is not null)
Write<string?>(Data.Models.Metadata.Feature.FeatureTypeKey, featureType.AsFeatureType()?.AsStringValue());
}
public Feature(Data.Models.Metadata.Feature item) : base(item) { }
public Feature(Data.Models.Metadata.Feature item, Machine machine, Source source) : this(item)
{

View File

@@ -21,6 +21,24 @@ namespace SabreTools.Metadata.DatItems.Formats
#region Fields
public Data.Models.Metadata.FeatureType? FeatureType
{
get => (_internal as Data.Models.Metadata.Feature)?.FeatureType;
set => (_internal as Data.Models.Metadata.Feature)?.FeatureType = value;
}
public Data.Models.Metadata.FeatureStatus? Overall
{
get => (_internal as Data.Models.Metadata.Feature)?.Overall;
set => (_internal as Data.Models.Metadata.Feature)?.Overall = value;
}
public Data.Models.Metadata.FeatureStatus? Status
{
get => (_internal as Data.Models.Metadata.Feature)?.Status;
set => (_internal as Data.Models.Metadata.Feature)?.Status = value;
}
/// <inheritdoc>/>
/// <remarks>This needs to be set to PartFeature because internally it uses Feature</remarks>
public override Data.Models.Metadata.ItemType ItemType => Data.Models.Metadata.ItemType.PartFeature;
@@ -31,21 +49,7 @@ namespace SabreTools.Metadata.DatItems.Formats
public PartFeature() : base() { }
public PartFeature(Data.Models.Metadata.Feature item) : base(item)
{
// Process flag values
string? overall = ReadString(Data.Models.Metadata.Feature.OverallKey);
if (overall is not null)
Write<string?>(Data.Models.Metadata.Feature.OverallKey, overall.AsFeatureStatus()?.AsStringValue());
string? status = ReadString(Data.Models.Metadata.Feature.StatusKey);
if (status is not null)
Write<string?>(Data.Models.Metadata.Feature.StatusKey, status.AsFeatureStatus()?.AsStringValue());
string? featureType = ReadString(Data.Models.Metadata.Feature.FeatureTypeKey);
if (featureType is not null)
Write<string?>(Data.Models.Metadata.Feature.FeatureTypeKey, featureType.AsFeatureType()?.AsStringValue());
}
public PartFeature(Data.Models.Metadata.Feature item) : base(item) { }
public PartFeature(Data.Models.Metadata.Feature item, Machine machine, Source source) : this(item)
{

View File

@@ -38,7 +38,7 @@ namespace SabreTools.Metadata.DatItems.Formats
&& (!string.IsNullOrEmpty(dataArea.GetName())
|| dataArea.ReadLong(Data.Models.Metadata.DataArea.SizeKey) is not null
|| dataArea.ReadLong(Data.Models.Metadata.DataArea.WidthKey) is not null
|| dataArea.ReadString(Data.Models.Metadata.DataArea.EndiannessKey).AsEndianness() is not null);
|| dataArea.Endianness is not null);
}
}
@@ -60,14 +60,10 @@ namespace SabreTools.Metadata.DatItems.Formats
set => (_internal as Data.Models.Metadata.Rom)?.Inverted = value;
}
[JsonIgnore]
public bool ItemStatusSpecified
public LoadFlag? LoadFlag
{
get
{
var status = ReadString(Data.Models.Metadata.Rom.StatusKey).AsItemStatus();
return status is not null && status != ItemStatus.None;
}
get => (_internal as Data.Models.Metadata.Rom)?.LoadFlag;
set => (_internal as Data.Models.Metadata.Rom)?.LoadFlag = value;
}
public bool? MIA
@@ -76,6 +72,12 @@ namespace SabreTools.Metadata.DatItems.Formats
set => (_internal as Data.Models.Metadata.Rom)?.MIA = value;
}
public OpenMSXSubType? OpenMSXMediaType
{
get => (_internal as Data.Models.Metadata.Rom)?.OpenMSXMediaType;
set => (_internal as Data.Models.Metadata.Rom)?.OpenMSXMediaType = value;
}
public bool? Optional
{
get => (_internal as Data.Models.Metadata.Rom)?.Optional;
@@ -110,6 +112,12 @@ namespace SabreTools.Metadata.DatItems.Formats
set => (_internal as Data.Models.Metadata.Rom)?.SoundOnly = value;
}
public ItemStatus? Status
{
get => (_internal as Data.Models.Metadata.Rom)?.Status;
set => (_internal as Data.Models.Metadata.Rom)?.Status = value;
}
#endregion
#region Constructors
@@ -117,7 +125,7 @@ namespace SabreTools.Metadata.DatItems.Formats
public Rom() : base()
{
Write<DupeType>(DupeTypeKey, 0x00);
Write<string?>(Data.Models.Metadata.Rom.StatusKey, ItemStatus.None.AsStringValue());
Status = ItemStatus.None;
}
public Rom(Dump item, Machine machine, Source source, int index)
@@ -150,7 +158,7 @@ namespace SabreTools.Metadata.DatItems.Formats
SetName(name);
Write<string?>(Data.Models.Metadata.Rom.OffsetKey, rom.ReadString(Data.Models.Metadata.Rom.StartKey));
Write<string?>(Data.Models.Metadata.Rom.OpenMSXMediaType, subType?.AsStringValue());
OpenMSXMediaType = subType;
Write<string?>(Data.Models.Metadata.Rom.OpenMSXType, rom.ReadString(Data.Models.Metadata.Rom.OpenMSXType) ?? rom.ItemType.ToString());
Write<string?>(Data.Models.Metadata.Rom.RemarkKey, rom.ReadString(Data.Models.Metadata.Rom.RemarkKey));
Write<string?>(Data.Models.Metadata.Rom.SHA1Key, rom.ReadString(Data.Models.Metadata.Rom.SHA1Key));
@@ -229,19 +237,6 @@ namespace SabreTools.Metadata.DatItems.Formats
{
Write<DupeType>(DupeTypeKey, 0x00);
// Process flag values
string? loadFlag = ReadString(Data.Models.Metadata.Rom.LoadFlagKey);
if (loadFlag is not null)
Write<string?>(Data.Models.Metadata.Rom.LoadFlagKey, loadFlag.AsLoadFlag()?.AsStringValue());
string? openMSXMediaType = ReadString(Data.Models.Metadata.Rom.OpenMSXMediaType);
if (openMSXMediaType is not null)
Write<string?>(Data.Models.Metadata.Rom.OpenMSXMediaType, openMSXMediaType.AsOpenMSXSubType()?.AsStringValue());
string? status = ReadString(Data.Models.Metadata.Rom.StatusKey);
if (status is not null)
Write<string?>(Data.Models.Metadata.Rom.StatusKey, status.AsItemStatus()?.AsStringValue());
// Process hash values
long? size = ReadLong(Data.Models.Metadata.Rom.SizeKey);
if (size is not null)

View File

@@ -10,17 +10,22 @@ namespace SabreTools.Metadata.DatItems.Formats
[JsonObject("softwarelist"), XmlRoot("softwarelist")]
public sealed class SoftwareList : DatItem<Data.Models.Metadata.SoftwareList>
{
#region Fields
public Data.Models.Metadata.SoftwareListStatus? Status
{
get => (_internal as Data.Models.Metadata.SoftwareList)?.Status;
set => (_internal as Data.Models.Metadata.SoftwareList)?.Status = value;
}
#endregion
#region Constructors
public SoftwareList() : base() { }
public SoftwareList(Data.Models.Metadata.SoftwareList item) : base(item)
{
// Process flag values
string? status = ReadString(Data.Models.Metadata.SoftwareList.StatusKey);
if (status is not null)
Write<string?>(Data.Models.Metadata.SoftwareList.StatusKey, status.AsSoftwareListStatus()?.AsStringValue());
// Handle subitems
// TODO: Handle the Software subitem
}

View File

@@ -39,6 +39,12 @@ namespace SabreTools.Metadata.DatItems
set => _internal.Runnable = value;
}
public Data.Models.Metadata.Supported? Supported
{
get => _internal.Supported;
set => _internal.Supported = value;
}
#endregion
#region Constructors
@@ -91,10 +97,6 @@ namespace SabreTools.Metadata.DatItems
if (im2Crc is not null)
Write<string?>(Data.Models.Metadata.Machine.Im2CRCKey, TextHelper.NormalizeCRC32(im2Crc));
string? supported = ReadString(Data.Models.Metadata.Machine.SupportedKey);
if (supported is not null)
Write<string?>(Data.Models.Metadata.Machine.SupportedKey, supported.AsSupported()?.AsStringValue());
// Handle Trurip object, if it exists
var truripItem = machine.Read<Data.Models.Logiqx.Trurip>(Data.Models.Metadata.Machine.TruripKey);
if (truripItem is not null)