Move item type override per-item

This commit is contained in:
Matt Nadareski
2026-04-02 21:07:41 -04:00
parent c0fd4d1334
commit 0df6378713
44 changed files with 208 additions and 25 deletions

View File

@@ -8,13 +8,6 @@ namespace SabreTools.Metadata.DatItems
/// </summary>
public abstract class DatItem<T> : DatItem, IEquatable<DatItem<T>>, IComparable<DatItem<T>>, ICloneable where T : Data.Models.Metadata.DatItem, new()
{
#region Fields
/// <inheritdoc>/>
public override Data.Models.Metadata.ItemType ItemType => _internal.ItemType;
#endregion
#region Constructors
/// <summary>

View File

@@ -28,6 +28,10 @@ namespace SabreTools.Metadata.DatItems.Formats
set => (_internal as Data.Models.Metadata.Adjuster)?.Default = value;
}
/// <inheritdoc>/>
public override Data.Models.Metadata.ItemType ItemType
=> Data.Models.Metadata.ItemType.Adjuster;
public string? Name
{
get => (_internal as Data.Models.Metadata.Adjuster)?.Name;

View File

@@ -12,6 +12,10 @@ namespace SabreTools.Metadata.DatItems.Formats
{
#region Fields
/// <inheritdoc>/>
public override Data.Models.Metadata.ItemType ItemType
=> Data.Models.Metadata.ItemType.Analog;
public string? Mask
{
get => (_internal as Data.Models.Metadata.Analog)?.Mask;

View File

@@ -12,6 +12,10 @@ namespace SabreTools.Metadata.DatItems.Formats
{
#region Fields
/// <inheritdoc>/>
public override Data.Models.Metadata.ItemType ItemType
=> Data.Models.Metadata.ItemType.Archive;
public string? Name
{
get => (_internal as Data.Models.Metadata.Archive)?.Name;

View File

@@ -24,6 +24,10 @@ namespace SabreTools.Metadata.DatItems.Formats
set => (_internal as Data.Models.Metadata.BiosSet)?.Description = value;
}
/// <inheritdoc>/>
public override Data.Models.Metadata.ItemType ItemType
=> Data.Models.Metadata.ItemType.BiosSet;
public string? Name
{
get => (_internal as Data.Models.Metadata.BiosSet)?.Name;

View File

@@ -10,6 +10,14 @@ namespace SabreTools.Metadata.DatItems.Formats
[JsonObject("blank"), XmlRoot("blank")]
public sealed class Blank : DatItem<Data.Models.Metadata.Blank>
{
#region Fields
/// <inheritdoc>/>
public override Data.Models.Metadata.ItemType ItemType
=> Data.Models.Metadata.ItemType.Blank;
#endregion
#region Constructors
public Blank() : base() { }

View File

@@ -18,6 +18,10 @@ namespace SabreTools.Metadata.DatItems.Formats
set => (_internal as Data.Models.Metadata.Chip)?.ChipType = value;
}
/// <inheritdoc>/>
public override Data.Models.Metadata.ItemType ItemType
=> Data.Models.Metadata.ItemType.Chip;
public string? Name
{
get => (_internal as Data.Models.Metadata.Chip)?.Name;

View File

@@ -12,6 +12,10 @@ namespace SabreTools.Metadata.DatItems.Formats
{
#region Fields
/// <inheritdoc>/>
public override Data.Models.Metadata.ItemType ItemType
=> Data.Models.Metadata.ItemType.Condition;
public string? Mask
{
get => (_internal as Data.Models.Metadata.Condition)?.Mask;

View File

@@ -12,6 +12,10 @@ namespace SabreTools.Metadata.DatItems.Formats
{
#region Fields
/// <inheritdoc>/>
public override Data.Models.Metadata.ItemType ItemType
=> Data.Models.Metadata.ItemType.ConfLocation;
public string? Name
{
get => (_internal as Data.Models.Metadata.ConfLocation)?.Name;

View File

@@ -28,6 +28,10 @@ namespace SabreTools.Metadata.DatItems.Formats
set => (_internal as Data.Models.Metadata.ConfSetting)?.Default = value;
}
/// <inheritdoc>/>
public override Data.Models.Metadata.ItemType ItemType
=> Data.Models.Metadata.ItemType.ConfSetting;
public string? Name
{
get => (_internal as Data.Models.Metadata.ConfSetting)?.Name;

View File

@@ -23,6 +23,10 @@ namespace SabreTools.Metadata.DatItems.Formats
}
}
/// <inheritdoc>/>
public override Data.Models.Metadata.ItemType ItemType
=> Data.Models.Metadata.ItemType.Configuration;
[JsonIgnore]
public bool LocationsSpecified
{

View File

@@ -18,6 +18,10 @@ namespace SabreTools.Metadata.DatItems.Formats
set => (_internal as Data.Models.Metadata.Control)?.ControlType = value;
}
/// <inheritdoc>/>
public override Data.Models.Metadata.ItemType ItemType
=> Data.Models.Metadata.ItemType.Control;
public bool? Reverse
{
get => (_internal as Data.Models.Metadata.Control)?.Reverse;

View File

@@ -19,6 +19,10 @@ namespace SabreTools.Metadata.DatItems.Formats
set => (_internal as Data.Models.Metadata.DataArea)?.Endianness = value;
}
/// <inheritdoc>/>
public override Data.Models.Metadata.ItemType ItemType
=> Data.Models.Metadata.ItemType.DataArea;
public string? Name
{
get => (_internal as Data.Models.Metadata.DataArea)?.Name;

View File

@@ -51,6 +51,10 @@ namespace SabreTools.Metadata.DatItems.Formats
set => (_internal as Data.Models.Metadata.Device)?.Interface = value;
}
/// <inheritdoc>/>
public override Data.Models.Metadata.ItemType ItemType
=> Data.Models.Metadata.ItemType.Device;
public bool? Mandatory
{
get => (_internal as Data.Models.Metadata.Device)?.Mandatory;

View File

@@ -12,6 +12,10 @@ namespace SabreTools.Metadata.DatItems.Formats
{
#region Fields
/// <inheritdoc>/>
public override Data.Models.Metadata.ItemType ItemType
=> Data.Models.Metadata.ItemType.DeviceRef;
public string? Name
{
get => (_internal as Data.Models.Metadata.DeviceRef)?.Name;

View File

@@ -18,6 +18,10 @@ namespace SabreTools.Metadata.DatItems.Formats
set => (_internal as Data.Models.Metadata.DipLocation)?.Inverted = value;
}
/// <inheritdoc>/>
public override Data.Models.Metadata.ItemType ItemType
=> Data.Models.Metadata.ItemType.DipLocation;
public string? Name
{
get => (_internal as Data.Models.Metadata.DipLocation)?.Name;

View File

@@ -39,6 +39,10 @@ namespace SabreTools.Metadata.DatItems.Formats
set => (_internal as Data.Models.Metadata.DipSwitch)?.Default = value;
}
/// <inheritdoc>/>
public override Data.Models.Metadata.ItemType ItemType
=> Data.Models.Metadata.ItemType.DipSwitch;
[JsonIgnore]
public bool LocationsSpecified
{
@@ -61,16 +65,6 @@ namespace SabreTools.Metadata.DatItems.Formats
set => (_internal as Data.Models.Metadata.DipSwitch)?.Name = value;
}
[JsonIgnore]
public bool ValuesSpecified
{
get
{
var values = Read<DipValue[]?>(Data.Models.Metadata.DipSwitch.DipValueKey);
return values is not null && values.Length > 0;
}
}
[JsonIgnore]
public bool PartSpecified
{
@@ -89,6 +83,16 @@ namespace SabreTools.Metadata.DatItems.Formats
set => (_internal as Data.Models.Metadata.DipSwitch)?.Tag = value;
}
[JsonIgnore]
public bool ValuesSpecified
{
get
{
var values = Read<DipValue[]?>(Data.Models.Metadata.DipSwitch.DipValueKey);
return values is not null && values.Length > 0;
}
}
#endregion
#region Constructors

View File

@@ -28,6 +28,10 @@ namespace SabreTools.Metadata.DatItems.Formats
set => (_internal as Data.Models.Metadata.DipValue)?.Default = value;
}
/// <inheritdoc>/>
public override Data.Models.Metadata.ItemType ItemType
=> Data.Models.Metadata.ItemType.DipValue;
public string? Name
{
get => (_internal as Data.Models.Metadata.DipValue)?.Name;

View File

@@ -38,6 +38,9 @@ namespace SabreTools.Metadata.DatItems.Formats
}
}
/// <inheritdoc>/>
public override ItemType ItemType => ItemType.Disk;
public string? Name
{
get => (_internal as Data.Models.Metadata.Disk)?.Name;

View File

@@ -13,6 +13,10 @@ namespace SabreTools.Metadata.DatItems.Formats
{
#region Fields
/// <inheritdoc>/>
public override Data.Models.Metadata.ItemType ItemType
=> Data.Models.Metadata.ItemType.DiskArea;
public string? Name
{
get => (_internal as Data.Models.Metadata.DiskArea)?.Name;

View File

@@ -25,6 +25,10 @@ namespace SabreTools.Metadata.DatItems.Formats
set => (_internal as Data.Models.Metadata.Display)?.FlipX = value;
}
/// <inheritdoc>/>
public override Data.Models.Metadata.ItemType ItemType
=> Data.Models.Metadata.ItemType.Display;
public string? Tag
{
get => (_internal as Data.Models.Metadata.Display)?.Tag;

View File

@@ -42,6 +42,10 @@ namespace SabreTools.Metadata.DatItems.Formats
set => (_internal as Data.Models.Metadata.Driver)?.Incomplete = value;
}
/// <inheritdoc>/>
public override Data.Models.Metadata.ItemType ItemType
=> Data.Models.Metadata.ItemType.Driver;
public bool? NoSoundHardware
{
get => (_internal as Data.Models.Metadata.Driver)?.NoSoundHardware;

View File

@@ -12,6 +12,10 @@ namespace SabreTools.Metadata.DatItems.Formats
{
#region Fields
/// <inheritdoc>/>
public override Data.Models.Metadata.ItemType ItemType
=> Data.Models.Metadata.ItemType.Extension;
public string? Name
{
get => (_internal as Data.Models.Metadata.Extension)?.Name;

View File

@@ -18,6 +18,10 @@ namespace SabreTools.Metadata.DatItems.Formats
set => (_internal as Data.Models.Metadata.Feature)?.FeatureType = value;
}
/// <inheritdoc>/>
public override Data.Models.Metadata.ItemType ItemType
=> Data.Models.Metadata.ItemType.Feature;
public string? Name
{
get => (_internal as Data.Models.Metadata.Feature)?.Name;

View File

@@ -12,6 +12,10 @@ namespace SabreTools.Metadata.DatItems.Formats
{
#region Fields
/// <inheritdoc>/>
public override Data.Models.Metadata.ItemType ItemType
=> Data.Models.Metadata.ItemType.Info;
public string? Name
{
get => (_internal as Data.Models.Metadata.Info)?.Name;

View File

@@ -23,6 +23,10 @@ namespace SabreTools.Metadata.DatItems.Formats
}
}
/// <inheritdoc>/>
public override Data.Models.Metadata.ItemType ItemType
=> Data.Models.Metadata.ItemType.Input;
public bool? Service
{
get => (_internal as Data.Models.Metadata.Input)?.Service;

View File

@@ -18,6 +18,10 @@ namespace SabreTools.Metadata.DatItems.Formats
set => (_internal as Data.Models.Metadata.Instance)?.BriefName = value;
}
/// <inheritdoc>/>
public override Data.Models.Metadata.ItemType ItemType
=> Data.Models.Metadata.ItemType.Instance;
public string? Name
{
get => (_internal as Data.Models.Metadata.Instance)?.Name;

View File

@@ -13,6 +13,10 @@ namespace SabreTools.Metadata.DatItems.Formats
{
#region Fields
/// <inheritdoc>/>
public override Data.Models.Metadata.ItemType ItemType
=> Data.Models.Metadata.ItemType.Media;
public string? Name
{
get => (_internal as Data.Models.Metadata.Media)?.Name;

View File

@@ -9,12 +9,7 @@ namespace SabreTools.Metadata.DatItems.Formats
[JsonObject("original"), XmlRoot("original")]
public sealed class Original
{
[JsonProperty("value"), XmlElement("value")]
public bool? Value
{
get => _internal.ReadBool(Data.Models.Metadata.Original.ValueKey);
set => _internal[Data.Models.Metadata.Original.ValueKey] = value;
}
#region Fields
[JsonProperty("content"), XmlElement("content")]
public string? Content
@@ -23,6 +18,19 @@ namespace SabreTools.Metadata.DatItems.Formats
set => _internal.Content = value;
}
/// <inheritdoc cref="DatItem.ItemType">/>
public Data.Models.Metadata.ItemType ItemType
=> Data.Models.Metadata.ItemType.Original;
[JsonProperty("value"), XmlElement("value")]
public bool? Value
{
get => _internal.ReadBool(Data.Models.Metadata.Original.ValueKey);
set => _internal[Data.Models.Metadata.Original.ValueKey] = value;
}
#endregion
/// <summary>
/// Internal Original model
/// </summary>

View File

@@ -29,6 +29,10 @@ namespace SabreTools.Metadata.DatItems.Formats
set => (_internal as Data.Models.Metadata.Part)?.Interface = value;
}
/// <inheritdoc>/>
public override Data.Models.Metadata.ItemType ItemType
=> Data.Models.Metadata.ItemType.Part;
public string? Name
{
get => (_internal as Data.Models.Metadata.Part)?.Name;

View File

@@ -28,8 +28,8 @@ namespace SabreTools.Metadata.DatItems.Formats
}
/// <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;
public override Data.Models.Metadata.ItemType ItemType
=> Data.Models.Metadata.ItemType.PartFeature;
public string? Name
{

View File

@@ -23,6 +23,10 @@ namespace SabreTools.Metadata.DatItems.Formats
}
}
/// <inheritdoc>/>
public override Data.Models.Metadata.ItemType ItemType
=> Data.Models.Metadata.ItemType.Port;
public string? Tag
{
get => (_internal as Data.Models.Metadata.Port)?.Tag;

View File

@@ -24,6 +24,10 @@ namespace SabreTools.Metadata.DatItems.Formats
set => (_internal as Data.Models.Metadata.RamOption)?.Default = value;
}
/// <inheritdoc>/>
public override Data.Models.Metadata.ItemType ItemType
=> Data.Models.Metadata.ItemType.RamOption;
public string? Name
{
get => (_internal as Data.Models.Metadata.RamOption)?.Name;

View File

@@ -18,6 +18,10 @@ namespace SabreTools.Metadata.DatItems.Formats
set => (_internal as Data.Models.Metadata.Release)?.Default = value;
}
/// <inheritdoc>/>
public override Data.Models.Metadata.ItemType ItemType
=> Data.Models.Metadata.ItemType.Release;
public string? Name
{
get => (_internal as Data.Models.Metadata.Release)?.Name;

View File

@@ -10,6 +10,14 @@ namespace SabreTools.Metadata.DatItems.Formats
[JsonObject("release_details"), XmlRoot("release_details")]
public sealed class ReleaseDetails : DatItem<Data.Models.Metadata.ReleaseDetails>
{
#region Fields
/// <inheritdoc>/>
public override Data.Models.Metadata.ItemType ItemType
=> Data.Models.Metadata.ItemType.ReleaseDetails;
#endregion
#region Constructors
public ReleaseDetails() : base() { }

View File

@@ -60,6 +60,9 @@ namespace SabreTools.Metadata.DatItems.Formats
set => (_internal as Data.Models.Metadata.Rom)?.Inverted = value;
}
/// <inheritdoc>/>
public override ItemType ItemType => ItemType.Rom;
public LoadFlag? LoadFlag
{
get => (_internal as Data.Models.Metadata.Rom)?.LoadFlag;

View File

@@ -12,6 +12,10 @@ namespace SabreTools.Metadata.DatItems.Formats
{
#region Fields
/// <inheritdoc>/>
public override Data.Models.Metadata.ItemType ItemType
=> Data.Models.Metadata.ItemType.Sample;
public string? Name
{
get => (_internal as Data.Models.Metadata.Sample)?.Name;

View File

@@ -10,6 +10,14 @@ namespace SabreTools.Metadata.DatItems.Formats
[JsonObject("serials"), XmlRoot("serials")]
public sealed class Serials : DatItem<Data.Models.Metadata.Serials>
{
#region Fields
/// <inheritdoc>/>
public override Data.Models.Metadata.ItemType ItemType
=> Data.Models.Metadata.ItemType.Serials;
#endregion
#region Constructors
public Serials() : base() { }

View File

@@ -12,6 +12,10 @@ namespace SabreTools.Metadata.DatItems.Formats
{
#region Fields
/// <inheritdoc>/>
public override Data.Models.Metadata.ItemType ItemType
=> Data.Models.Metadata.ItemType.SharedFeat;
public string? Name
{
get => (_internal as Data.Models.Metadata.SharedFeat)?.Name;

View File

@@ -13,6 +13,10 @@ namespace SabreTools.Metadata.DatItems.Formats
{
#region Fields
/// <inheritdoc>/>
public override Data.Models.Metadata.ItemType ItemType
=> Data.Models.Metadata.ItemType.Slot;
public string? Name
{
get => (_internal as Data.Models.Metadata.Slot)?.Name;

View File

@@ -24,6 +24,10 @@ namespace SabreTools.Metadata.DatItems.Formats
set => (_internal as Data.Models.Metadata.SlotOption)?.DevName = value;
}
/// <inheritdoc>/>
public override Data.Models.Metadata.ItemType ItemType
=> Data.Models.Metadata.ItemType.SlotOption;
public string? Name
{
get => (_internal as Data.Models.Metadata.SlotOption)?.Name;

View File

@@ -18,6 +18,10 @@ namespace SabreTools.Metadata.DatItems.Formats
set => (_internal as Data.Models.Metadata.SoftwareList)?.Description = value;
}
/// <inheritdoc>/>
public override Data.Models.Metadata.ItemType ItemType
=> Data.Models.Metadata.ItemType.SoftwareList;
public string? Name
{
get => (_internal as Data.Models.Metadata.SoftwareList)?.Name;

View File

@@ -10,6 +10,14 @@ namespace SabreTools.Metadata.DatItems.Formats
[JsonObject("sound"), XmlRoot("sound")]
public sealed class Sound : DatItem<Data.Models.Metadata.Sound>
{
#region Fields
/// <inheritdoc>/>
public override Data.Models.Metadata.ItemType ItemType
=> Data.Models.Metadata.ItemType.Sound;
#endregion
#region Constructors
public Sound() : base() { }

View File

@@ -10,6 +10,14 @@ namespace SabreTools.Metadata.DatItems.Formats
[JsonObject("source_details"), XmlRoot("source_details")]
public sealed class SourceDetails : DatItem<Data.Models.Metadata.SourceDetails>
{
#region Fields
/// <inheritdoc>/>
public override Data.Models.Metadata.ItemType ItemType
=> Data.Models.Metadata.ItemType.SourceDetails;
#endregion
#region Constructors
public SourceDetails() : base() { }