Convert Driver fully over to properties

This commit is contained in:
Matt Nadareski
2026-04-03 13:22:17 -04:00
parent 1d5514b29d
commit b6ab8a19be
19 changed files with 112 additions and 74 deletions

View File

@@ -163,6 +163,8 @@ namespace SabreTools.Data.Extensions
return dipLocation.Clone() as DipLocation;
else if (self is Display display)
return display.Clone() as Display;
else if (self is Driver driver)
return driver.Clone() as Driver;
else if (self is Extension extension)
return extension.Clone() as Extension;
// TODO: Reenable when PartFeature no longer needs nesting
@@ -236,20 +238,6 @@ namespace SabreTools.Data.Extensions
cloneDisk.Status = selfDisk.Status;
cloneDisk.Writable = selfDisk.Writable;
}
else if (self is Driver selfDriver && clone is Driver cloneDriver)
{
cloneDriver.Blit = selfDriver.Blit;
cloneDriver.Cocktail = selfDriver.Cocktail;
cloneDriver.Color = selfDriver.Color;
cloneDriver.Emulation = selfDriver.Emulation;
cloneDriver.Incomplete = selfDriver.Incomplete;
cloneDriver.NoSoundHardware = selfDriver.NoSoundHardware;
cloneDriver.RequiresArtwork = selfDriver.RequiresArtwork;
cloneDriver.SaveState = selfDriver.SaveState;
cloneDriver.Sound = selfDriver.Sound;
cloneDriver.Status = selfDriver.Status;
cloneDriver.Unofficial = selfDriver.Unofficial;
}
else if (self is Feature selfFeature && clone is Feature cloneFeature)
{
// TODO: Remove when PartFeature no longer needs nesting

View File

@@ -1,10 +1,11 @@
using System;
using System.Xml.Serialization;
using Newtonsoft.Json;
namespace SabreTools.Data.Models.Metadata
{
[JsonObject("driver"), XmlRoot("driver")]
public class Driver : DatItem
public class Driver : DatItem, ICloneable, IEquatable<Driver>
{
#region Properties
@@ -26,6 +27,9 @@ namespace SabreTools.Data.Models.Metadata
/// <remarks>(yes|no) "no"</remarks>
public bool? NoSoundHardware { get; set; }
/// <remarks>Possibly long</remarks>
public string? PaletteSize { get; set; }
/// <remarks>(yes|no) "no"</remarks>
public bool? RequiresArtwork { get; set; }
@@ -43,13 +47,76 @@ namespace SabreTools.Data.Models.Metadata
#endregion
#region Keys
/// <remarks>string, possibly long</remarks>
public const string PaletteSizeKey = "palettesize";
#endregion
public Driver() => ItemType = ItemType.Driver;
/// <inheritdoc/>
public object Clone()
{
var obj = new Driver();
obj.Blit = Blit;
obj.Cocktail = Cocktail;
obj.Color = Color;
obj.Emulation = Emulation;
obj.Incomplete = Incomplete;
obj.NoSoundHardware = NoSoundHardware;
obj.PaletteSize = PaletteSize;
obj.RequiresArtwork = RequiresArtwork;
obj.SaveState = SaveState;
obj.Sound = Sound;
obj.Status = Status;
obj.Unofficial = Unofficial;
return obj;
}
/// <inheritdoc/>
public bool Equals(Driver? other)
{
// Null never matches
if (other is null)
return false;
// Properties
if (Blit != other.Blit)
return false;
if (Cocktail != other.Cocktail)
return false;
if (Color != other.Color)
return false;
if (Emulation != other.Emulation)
return false;
if (Incomplete != other.Incomplete)
return false;
if (NoSoundHardware != other.NoSoundHardware)
return false;
if ((PaletteSize is null) ^ (other.PaletteSize is null))
return false;
else if (PaletteSize is not null && !PaletteSize.Equals(other.PaletteSize, StringComparison.OrdinalIgnoreCase))
return false;
if (RequiresArtwork != other.RequiresArtwork)
return false;
if (SaveState != other.SaveState)
return false;
if (Sound != other.Sound)
return false;
if (Status != other.Status)
return false;
if (Unofficial != other.Unofficial)
return false;
return true;
}
}
}

View File

@@ -605,7 +605,7 @@ namespace SabreTools.Metadata.DatFiles.Test
Emulation = Data.Models.Metadata.SupportStatus.Good,
Incomplete = true,
NoSoundHardware = true,
[Data.Models.Metadata.Driver.PaletteSizeKey] = "pallettesize",
PaletteSize = "palettesize",
RequiresArtwork = true,
SaveState = Data.Models.Metadata.Supported.Yes,
Sound = Data.Models.Metadata.SupportStatus.Good,
@@ -1379,7 +1379,7 @@ namespace SabreTools.Metadata.DatFiles.Test
Assert.Equal(Data.Models.Metadata.SupportStatus.Good, driver.Emulation);
Assert.True(driver.Incomplete);
Assert.True(driver.NoSoundHardware);
Assert.Equal("pallettesize", driver.ReadString(Data.Models.Metadata.Driver.PaletteSizeKey));
Assert.Equal("palettesize", driver.PaletteSize);
Assert.True(driver.RequiresArtwork);
Assert.Equal(Data.Models.Metadata.Supported.Yes, driver.SaveState);
Assert.Equal(Data.Models.Metadata.SupportStatus.Good, driver.Sound);

View File

@@ -894,7 +894,7 @@ namespace SabreTools.Metadata.DatFiles.Test
Assert.Equal(Data.Models.Metadata.SupportStatus.Good, driver.Emulation);
Assert.True(driver.Incomplete);
Assert.True(driver.NoSoundHardware);
Assert.Equal("pallettesize", driver.ReadString(Data.Models.Metadata.Driver.PaletteSizeKey));
Assert.Equal("pallettesize", driver.PaletteSize);
Assert.True(driver.RequiresArtwork);
Assert.Equal(Data.Models.Metadata.Supported.Yes, driver.SaveState);
Assert.Equal(Data.Models.Metadata.SupportStatus.Good, driver.Sound);

View File

@@ -1,4 +1,4 @@
using System.Xml.Serialization;
using System.Xml.Serialization;
using Newtonsoft.Json;
using SabreTools.Data.Extensions;
@@ -52,6 +52,12 @@ namespace SabreTools.Metadata.DatItems.Formats
set => (_internal as Data.Models.Metadata.Driver)?.NoSoundHardware = value;
}
public string? PaletteSize
{
get => (_internal as Data.Models.Metadata.Driver)?.PaletteSize;
set => (_internal as Data.Models.Metadata.Driver)?.PaletteSize = value;
}
public bool? RequiresArtwork
{
get => (_internal as Data.Models.Metadata.Driver)?.RequiresArtwork;
@@ -88,13 +94,7 @@ namespace SabreTools.Metadata.DatItems.Formats
public Driver() : base() { }
public Driver(Data.Models.Metadata.Driver item) : base(item)
{
// Process flag values
long? paletteSize = ReadLong(Data.Models.Metadata.Driver.PaletteSizeKey);
if (paletteSize is not null)
Write<string?>(Data.Models.Metadata.Driver.PaletteSizeKey, paletteSize.ToString());
}
public Driver(Data.Models.Metadata.Driver item) : base(item) { }
public Driver(Data.Models.Metadata.Driver item, Machine machine, Source source) : this(item)
{

View File

@@ -578,6 +578,9 @@ namespace SabreTools.Metadata.Filter
case Driver item when fieldName == "nosoundhardware":
checkValue = item.NoSoundHardware.FromYesNo();
return true;
case Driver item when fieldName == "palettesize":
checkValue = item.PaletteSize;
return true;
case Driver item when fieldName == "requiresartwork":
checkValue = item.RequiresArtwork.FromYesNo();
return true;

View File

@@ -168,27 +168,7 @@ namespace SabreTools.Metadata
}
else if (self is Driver selfDriver && other is Driver otherDriver)
{
if (selfDriver.Blit != otherDriver.Blit)
return false;
if (selfDriver.Cocktail != otherDriver.Cocktail)
return false;
if (selfDriver.Color != otherDriver.Color)
return false;
if (selfDriver.Emulation != otherDriver.Emulation)
return false;
if (selfDriver.Incomplete != otherDriver.Incomplete)
return false;
if (selfDriver.NoSoundHardware != otherDriver.NoSoundHardware)
return false;
if (selfDriver.RequiresArtwork != otherDriver.RequiresArtwork)
return false;
if (selfDriver.SaveState != otherDriver.SaveState)
return false;
if (selfDriver.Sound != otherDriver.Sound)
return false;
if (selfDriver.Status != otherDriver.Status)
return false;
if (selfDriver.Unofficial != otherDriver.Unofficial)
if (!selfDriver.Equals(otherDriver))
return false;
}
else if (self is Feature selfFeature && other is Feature otherFeature)

View File

@@ -200,7 +200,7 @@ namespace SabreTools.Serialization.CrossModel.Test
Status = Data.Models.Metadata.SupportStatus.Good,
Color = Data.Models.Metadata.SupportStatus.Good,
Sound = Data.Models.Metadata.SupportStatus.Good,
PaletteSize = "XXXXXX",
PaletteSize = "palettesize",
Blit = Data.Models.Metadata.Blit.Plain,
};
@@ -507,7 +507,7 @@ namespace SabreTools.Serialization.CrossModel.Test
Assert.Equal(Data.Models.Metadata.SupportStatus.Good, driver.Status);
Assert.Equal(Data.Models.Metadata.SupportStatus.Good, driver.Color);
Assert.Equal(Data.Models.Metadata.SupportStatus.Good, driver.Sound);
Assert.Equal("XXXXXX", driver.PaletteSize);
Assert.Equal("palettesize", driver.PaletteSize);
Assert.Equal(Data.Models.Metadata.Blit.Plain, driver.Blit);
}

View File

@@ -260,7 +260,7 @@ namespace SabreTools.Serialization.CrossModel.Test
Status = Data.Models.Metadata.SupportStatus.Good,
Color = Data.Models.Metadata.SupportStatus.Good,
Sound = Data.Models.Metadata.SupportStatus.Good,
PaletteSize = "XXXXXX",
PaletteSize = "palettesize",
Emulation = Data.Models.Metadata.SupportStatus.Good,
Cocktail = Data.Models.Metadata.SupportStatus.Good,
SaveState = Data.Models.Metadata.Supported.Yes,
@@ -770,7 +770,7 @@ namespace SabreTools.Serialization.CrossModel.Test
Assert.Equal(Data.Models.Metadata.SupportStatus.Good, driver.Status);
Assert.Equal(Data.Models.Metadata.SupportStatus.Good, driver.Color);
Assert.Equal(Data.Models.Metadata.SupportStatus.Good, driver.Sound);
Assert.Equal("XXXXXX", driver.PaletteSize);
Assert.Equal("palettesize", driver.PaletteSize);
Assert.Equal(Data.Models.Metadata.SupportStatus.Good, driver.Emulation);
Assert.Equal(Data.Models.Metadata.SupportStatus.Good, driver.Cocktail);
Assert.Equal(Data.Models.Metadata.Supported.Yes, driver.SaveState);

View File

@@ -256,7 +256,7 @@ namespace SabreTools.Serialization.CrossModel.Test
Status = Data.Models.Metadata.SupportStatus.Good,
Color = Data.Models.Metadata.SupportStatus.Good,
Sound = Data.Models.Metadata.SupportStatus.Good,
PaletteSize = "XXXXXX",
PaletteSize = "palettesize",
Emulation = Data.Models.Metadata.SupportStatus.Good,
Cocktail = Data.Models.Metadata.SupportStatus.Good,
SaveState = Data.Models.Metadata.Supported.Yes,
@@ -764,7 +764,7 @@ namespace SabreTools.Serialization.CrossModel.Test
Assert.Equal(Data.Models.Metadata.SupportStatus.Good, driver.Status);
Assert.Equal(Data.Models.Metadata.SupportStatus.Good, driver.Color);
Assert.Equal(Data.Models.Metadata.SupportStatus.Good, driver.Sound);
Assert.Equal("XXXXXX", driver.PaletteSize);
Assert.Equal("palettesize", driver.PaletteSize);
Assert.Equal(Data.Models.Metadata.SupportStatus.Good, driver.Emulation);
Assert.Equal(Data.Models.Metadata.SupportStatus.Good, driver.Cocktail);
Assert.Equal(Data.Models.Metadata.Supported.Yes, driver.SaveState);

View File

@@ -256,7 +256,7 @@ namespace SabreTools.Serialization.CrossModel.Test
Status = Data.Models.Metadata.SupportStatus.Good,
Color = Data.Models.Metadata.SupportStatus.Good,
Sound = Data.Models.Metadata.SupportStatus.Good,
PaletteSize = "XXXXXX",
PaletteSize = "palettesize",
Emulation = Data.Models.Metadata.SupportStatus.Good,
Cocktail = Data.Models.Metadata.SupportStatus.Good,
SaveState = Data.Models.Metadata.Supported.Yes,
@@ -764,7 +764,7 @@ namespace SabreTools.Serialization.CrossModel.Test
Assert.Equal(Data.Models.Metadata.SupportStatus.Good, driver.Status);
Assert.Equal(Data.Models.Metadata.SupportStatus.Good, driver.Color);
Assert.Equal(Data.Models.Metadata.SupportStatus.Good, driver.Sound);
Assert.Equal("XXXXXX", driver.PaletteSize);
Assert.Equal("palettesize", driver.PaletteSize);
Assert.Equal(Data.Models.Metadata.SupportStatus.Good, driver.Emulation);
Assert.Equal(Data.Models.Metadata.SupportStatus.Good, driver.Cocktail);
Assert.Equal(Data.Models.Metadata.Supported.Yes, driver.SaveState);

View File

@@ -216,7 +216,7 @@ namespace SabreTools.Serialization.CrossModel
Status = item.Status,
Color = item.Color,
Sound = item.Sound,
PaletteSize = item.ReadString(Data.Models.Metadata.Driver.PaletteSizeKey),
PaletteSize = item.PaletteSize,
Blit = item.Blit,
};
return driver;

View File

@@ -229,7 +229,7 @@ namespace SabreTools.Serialization.CrossModel
Status = item.Status,
Color = item.Color,
Sound = item.Sound,
[Data.Models.Metadata.Driver.PaletteSizeKey] = item.PaletteSize,
PaletteSize = item.PaletteSize,
Blit = item.Blit,
};
return driver;

View File

@@ -451,7 +451,7 @@ namespace SabreTools.Serialization.CrossModel
Status = item.Status,
Color = item.Color,
Sound = item.Sound,
PaletteSize = item.ReadString(Data.Models.Metadata.Driver.PaletteSizeKey),
PaletteSize = item.PaletteSize,
Emulation = item.Emulation,
Cocktail = item.Cocktail,
SaveState = item.SaveState,

View File

@@ -489,7 +489,7 @@ namespace SabreTools.Serialization.CrossModel
Status = item.Status,
Color = item.Color,
Sound = item.Sound,
[Data.Models.Metadata.Driver.PaletteSizeKey] = item.PaletteSize,
PaletteSize = item.PaletteSize,
Emulation = item.Emulation,
Cocktail = item.Cocktail,
SaveState = item.SaveState,

View File

@@ -317,7 +317,7 @@ namespace SabreTools.Serialization.Readers.Test
Status = Data.Models.Metadata.SupportStatus.Good,
Color = Data.Models.Metadata.SupportStatus.Good,
Sound = Data.Models.Metadata.SupportStatus.Good,
PaletteSize = "XXXXXX",
PaletteSize = "palettesize",
Blit = Data.Models.Metadata.Blit.Plain,
};
@@ -624,7 +624,7 @@ namespace SabreTools.Serialization.Readers.Test
Assert.Equal(Data.Models.Metadata.SupportStatus.Good, driver.Status);
Assert.Equal(Data.Models.Metadata.SupportStatus.Good, driver.Color);
Assert.Equal(Data.Models.Metadata.SupportStatus.Good, driver.Sound);
Assert.Equal("XXXXXX", driver.PaletteSize);
Assert.Equal("palettesize", driver.PaletteSize);
Assert.Equal(Data.Models.Metadata.Blit.Plain, driver.Blit);
}

View File

@@ -327,7 +327,7 @@ namespace SabreTools.Serialization.Readers.Test
Status = Data.Models.Metadata.SupportStatus.Good,
Color = Data.Models.Metadata.SupportStatus.Good,
Sound = Data.Models.Metadata.SupportStatus.Good,
PaletteSize = "XXXXXX",
PaletteSize = "palettesize",
Emulation = Data.Models.Metadata.SupportStatus.Good,
Cocktail = Data.Models.Metadata.SupportStatus.Good,
SaveState = Data.Models.Metadata.Supported.Yes,
@@ -837,7 +837,7 @@ namespace SabreTools.Serialization.Readers.Test
Assert.Equal(Data.Models.Metadata.SupportStatus.Good, driver.Status);
Assert.Equal(Data.Models.Metadata.SupportStatus.Good, driver.Color);
Assert.Equal(Data.Models.Metadata.SupportStatus.Good, driver.Sound);
Assert.Equal("XXXXXX", driver.PaletteSize);
Assert.Equal("palettesize", driver.PaletteSize);
Assert.Equal(Data.Models.Metadata.SupportStatus.Good, driver.Emulation);
Assert.Equal(Data.Models.Metadata.SupportStatus.Good, driver.Cocktail);
Assert.Equal(Data.Models.Metadata.Supported.Yes, driver.SaveState);

View File

@@ -323,7 +323,7 @@ namespace SabreTools.Serialization.Readers.Test
Status = Data.Models.Metadata.SupportStatus.Good,
Color = Data.Models.Metadata.SupportStatus.Good,
Sound = Data.Models.Metadata.SupportStatus.Good,
PaletteSize = "XXXXXX",
PaletteSize = "palettesize",
Emulation = Data.Models.Metadata.SupportStatus.Good,
Cocktail = Data.Models.Metadata.SupportStatus.Good,
SaveState = Data.Models.Metadata.Supported.Yes,
@@ -831,7 +831,7 @@ namespace SabreTools.Serialization.Readers.Test
Assert.Equal(Data.Models.Metadata.SupportStatus.Good, driver.Status);
Assert.Equal(Data.Models.Metadata.SupportStatus.Good, driver.Color);
Assert.Equal(Data.Models.Metadata.SupportStatus.Good, driver.Sound);
Assert.Equal("XXXXXX", driver.PaletteSize);
Assert.Equal("palettesize", driver.PaletteSize);
Assert.Equal(Data.Models.Metadata.SupportStatus.Good, driver.Emulation);
Assert.Equal(Data.Models.Metadata.SupportStatus.Good, driver.Cocktail);
Assert.Equal(Data.Models.Metadata.Supported.Yes, driver.SaveState);

View File

@@ -323,7 +323,7 @@ namespace SabreTools.Serialization.Readers.Test
Status = Data.Models.Metadata.SupportStatus.Good,
Color = Data.Models.Metadata.SupportStatus.Good,
Sound = Data.Models.Metadata.SupportStatus.Good,
PaletteSize = "XXXXXX",
PaletteSize = "palettesize",
Emulation = Data.Models.Metadata.SupportStatus.Good,
Cocktail = Data.Models.Metadata.SupportStatus.Good,
SaveState = Data.Models.Metadata.Supported.Yes,
@@ -831,7 +831,7 @@ namespace SabreTools.Serialization.Readers.Test
Assert.Equal(Data.Models.Metadata.SupportStatus.Good, driver.Status);
Assert.Equal(Data.Models.Metadata.SupportStatus.Good, driver.Color);
Assert.Equal(Data.Models.Metadata.SupportStatus.Good, driver.Sound);
Assert.Equal("XXXXXX", driver.PaletteSize);
Assert.Equal("palettesize", driver.PaletteSize);
Assert.Equal(Data.Models.Metadata.SupportStatus.Good, driver.Emulation);
Assert.Equal(Data.Models.Metadata.SupportStatus.Good, driver.Cocktail);
Assert.Equal(Data.Models.Metadata.Supported.Yes, driver.SaveState);