diff --git a/SabreTools.DatItems/DatItemTool.cs b/SabreTools.DatItems/DatItemTool.cs
index 6890a77b..847f724f 100644
--- a/SabreTools.DatItems/DatItemTool.cs
+++ b/SabreTools.DatItems/DatItemTool.cs
@@ -13,11 +13,13 @@ namespace SabreTools.DatItems
///
public static class DatItemTool
{
+ #region Field Replacement
+
///
/// Replace fields with given values
///
/// DatItem to replace fields in
- /// DatItem to pull new information from
+ /// DatItem to pull new information from
/// List of fields representing what should be updated
public static void ReplaceFields(DatItem datItem, DatItem repDatItem, List datItemFields)
{
@@ -34,824 +36,41 @@ namespace SabreTools.DatItems
#endregion
- #region Adjuster
-
- if (datItem is Adjuster adjuster)
- {
- Adjuster newItem = repDatItem as Adjuster;
-
- if (datItemFields.Contains(DatItemField.Default))
- adjuster.Default = newItem.Default;
-
- // Condition_* doesn't make sense here
- // since not every condition under the other item
- // can replace every condition under this item
- }
-
- #endregion
-
- #region Analog
-
- else if (datItem is Analog analog)
- {
- Analog newItem = repDatItem as Analog;
-
- if (datItemFields.Contains(DatItemField.Analog_Mask))
- analog.Mask = newItem.Mask;
- }
-
- #endregion
-
- #region BiosSet
-
- else if (datItem is BiosSet biosSet)
- {
- BiosSet newItem = repDatItem as BiosSet;
-
- if (datItemFields.Contains(DatItemField.Description))
- biosSet.Description = newItem.Description;
-
- if (datItemFields.Contains(DatItemField.Default))
- biosSet.Default = newItem.Default;
- }
-
- #endregion
-
- #region Chip
-
- else if (datItem is Chip chip)
- {
- Chip newItem = repDatItem as Chip;
-
- if (datItemFields.Contains(DatItemField.Tag))
- chip.Tag = newItem.Tag;
-
- if (datItemFields.Contains(DatItemField.ChipType))
- chip.ChipType = newItem.ChipType;
-
- if (datItemFields.Contains(DatItemField.Clock))
- chip.Clock = newItem.Clock;
- }
-
- #endregion
-
- #region Condition
-
- else if (datItem is Condition condition)
- {
- Condition newItem = repDatItem as Condition;
-
- if (datItemFields.Contains(DatItemField.Tag))
- condition.Tag = newItem.Tag;
- else if (datItemFields.Contains(DatItemField.Condition_Tag))
- condition.Tag = newItem.Tag;
-
- if (datItemFields.Contains(DatItemField.Mask))
- condition.Mask = newItem.Mask;
- else if (datItemFields.Contains(DatItemField.Condition_Mask))
- condition.Mask = newItem.Mask;
-
- if (datItemFields.Contains(DatItemField.Relation))
- condition.Relation = newItem.Relation;
- else if (datItemFields.Contains(DatItemField.Condition_Relation))
- condition.Relation = newItem.Relation;
-
- if (datItemFields.Contains(DatItemField.Value))
- condition.Value = newItem.Value;
- else if (datItemFields.Contains(DatItemField.Condition_Value))
- condition.Value = newItem.Value;
- }
-
- #endregion
-
- #region Configuration
-
- else if (datItem is Configuration configuration)
- {
- Configuration newItem = repDatItem as Configuration;
-
- if (datItemFields.Contains(DatItemField.Tag))
- configuration.Tag = newItem.Tag;
-
- if (datItemFields.Contains(DatItemField.Mask))
- configuration.Mask = newItem.Mask;
-
- // Condition_* doesn't make sense here
- // since not every condition under the other item
- // can replace every condition under this item
-
- // Location_* doesn't make sense here
- // since not every location under the other item
- // can replace every location under this item
-
- // Setting_* doesn't make sense here
- // since not every setting under the other item
- // can replace every setting under this item
- }
-
- #endregion
-
- #region Control
-
- else if (datItem is Control control)
- {
- Control newItem = repDatItem as Control;
-
- if (datItemFields.Contains(DatItemField.Control_Type))
- control.ControlType = newItem.ControlType;
-
- if (datItemFields.Contains(DatItemField.Control_Player))
- control.Player = newItem.Player;
-
- if (datItemFields.Contains(DatItemField.Control_Buttons))
- control.Buttons = newItem.Buttons;
-
- if (datItemFields.Contains(DatItemField.Control_RequiredButtons))
- control.RequiredButtons = newItem.RequiredButtons;
-
- if (datItemFields.Contains(DatItemField.Control_Minimum))
- control.Minimum = newItem.Minimum;
-
- if (datItemFields.Contains(DatItemField.Control_Maximum))
- control.Maximum = newItem.Maximum;
-
- if (datItemFields.Contains(DatItemField.Control_Sensitivity))
- control.Sensitivity = newItem.Sensitivity;
-
- if (datItemFields.Contains(DatItemField.Control_KeyDelta))
- control.KeyDelta = newItem.KeyDelta;
-
- if (datItemFields.Contains(DatItemField.Control_Reverse))
- control.Reverse = newItem.Reverse;
-
- if (datItemFields.Contains(DatItemField.Control_Ways))
- control.Ways = newItem.Ways;
-
- if (datItemFields.Contains(DatItemField.Control_Ways2))
- control.Ways2 = newItem.Ways2;
-
- if (datItemFields.Contains(DatItemField.Control_Ways3))
- control.Ways3 = newItem.Ways3;
- }
-
- #endregion
-
- #region DataArea
-
- else if (datItem is DataArea dataArea)
- {
- DataArea newItem = repDatItem as DataArea;
-
- if (datItemFields.Contains(DatItemField.AreaName))
- dataArea.Name = newItem.Name;
-
- if (datItemFields.Contains(DatItemField.AreaSize))
- dataArea.Size = newItem.Size;
-
- if (datItemFields.Contains(DatItemField.AreaWidth))
- dataArea.Width = newItem.Width;
-
- if (datItemFields.Contains(DatItemField.AreaEndianness))
- dataArea.Endianness = newItem.Endianness;
- }
-
- #endregion
-
- #region Device
-
- else if (datItem is Device device)
- {
- Device newItem = repDatItem as Device;
-
- if (datItemFields.Contains(DatItemField.DeviceType))
- device.DeviceType = newItem.DeviceType;
-
- if (datItemFields.Contains(DatItemField.Tag))
- device.Tag = newItem.Tag;
-
- if (datItemFields.Contains(DatItemField.FixedImage))
- device.FixedImage = newItem.FixedImage;
-
- if (datItemFields.Contains(DatItemField.Mandatory))
- device.Mandatory = newItem.Mandatory;
-
- if (datItemFields.Contains(DatItemField.Interface))
- device.Interface = newItem.Interface;
-
- // Instance_* doesn't make sense here
- // since not every instance under the other item
- // can replace every instance under this item
-
- // Extension_* doesn't make sense here
- // since not every extension under the other item
- // can replace every extension under this item
- }
-
- #endregion
-
- #region DipSwitch
-
- else if (datItem is DipSwitch dipSwitch)
- {
- DipSwitch newItem = repDatItem as DipSwitch;
-
- #region Common
-
- if (datItemFields.Contains(DatItemField.Tag))
- dipSwitch.Tag = newItem.Tag;
-
- if (datItemFields.Contains(DatItemField.Mask))
- dipSwitch.Mask = newItem.Mask;
-
- // Condition_* doesn't make sense here
- // since not every condition under the other item
- // can replace every condition under this item
-
- // Location_* doesn't make sense here
- // since not every location under the other item
- // can replace every location under this item
-
- // Setting_* doesn't make sense here
- // since not every value under the other item
- // can replace every value under this item
-
- #endregion
-
- #region SoftwareList
-
- if (dipSwitch.PartSpecified && newItem.PartSpecified)
- ReplaceFields(dipSwitch.Part, newItem.Part, datItemFields);
-
- #endregion
- }
-
- #endregion
-
- #region Disk
-
- else if (datItem is Disk disk)
- {
- Disk newItem = repDatItem as Disk;
-
- #region Common
-
- if (datItemFields.Contains(DatItemField.MD5))
- {
- if (string.IsNullOrEmpty(disk.MD5) && !string.IsNullOrEmpty(newItem.MD5))
- disk.MD5 = newItem.MD5;
- }
-
- if (datItemFields.Contains(DatItemField.SHA1))
- {
- if (string.IsNullOrEmpty(disk.SHA1) && !string.IsNullOrEmpty(newItem.SHA1))
- disk.SHA1 = newItem.SHA1;
- }
-
- if (datItemFields.Contains(DatItemField.Merge))
- disk.MergeTag = newItem.MergeTag;
-
- if (datItemFields.Contains(DatItemField.Region))
- disk.Region = newItem.Region;
-
- if (datItemFields.Contains(DatItemField.Index))
- disk.Index = newItem.Index;
-
- if (datItemFields.Contains(DatItemField.Writable))
- disk.Writable = newItem.Writable;
-
- if (datItemFields.Contains(DatItemField.Status))
- disk.ItemStatus = newItem.ItemStatus;
-
- if (datItemFields.Contains(DatItemField.Optional))
- disk.Optional = newItem.Optional;
-
- #endregion
-
- #region SoftwareList
-
- if (disk.DiskAreaSpecified && newItem.DiskAreaSpecified)
- ReplaceFields(disk.DiskArea, newItem.DiskArea, datItemFields);
-
- if (disk.PartSpecified && newItem.PartSpecified)
- ReplaceFields(disk.Part, newItem.Part, datItemFields);
-
- #endregion
- }
-
- #endregion
-
- #region DiskArea
-
- else if (datItem is DiskArea diskArea)
- {
- DiskArea newItem = repDatItem as DiskArea;
-
- if (datItemFields.Contains(DatItemField.AreaName))
- diskArea.Name = newItem.Name;
- }
-
- #endregion
-
- #region Display
-
- else if (datItem is Display display)
- {
- Display newItem = repDatItem as Display;
-
- if (datItemFields.Contains(DatItemField.Tag))
- display.Tag = newItem.Tag;
-
- if (datItemFields.Contains(DatItemField.DisplayType))
- display.DisplayType = newItem.DisplayType;
-
- if (datItemFields.Contains(DatItemField.Rotate))
- display.Rotate = newItem.Rotate;
-
- if (datItemFields.Contains(DatItemField.FlipX))
- display.FlipX = newItem.FlipX;
-
- if (datItemFields.Contains(DatItemField.Width))
- display.Width = newItem.Width;
-
- if (datItemFields.Contains(DatItemField.Height))
- display.Height = newItem.Height;
-
- if (datItemFields.Contains(DatItemField.Refresh))
- display.Refresh = newItem.Refresh;
-
- if (datItemFields.Contains(DatItemField.PixClock))
- display.PixClock = newItem.PixClock;
-
- if (datItemFields.Contains(DatItemField.HTotal))
- display.HTotal = newItem.HTotal;
-
- if (datItemFields.Contains(DatItemField.HBEnd))
- display.HBEnd = newItem.HBEnd;
-
- if (datItemFields.Contains(DatItemField.HBStart))
- display.HBStart = newItem.HBStart;
-
- if (datItemFields.Contains(DatItemField.VTotal))
- display.VTotal = newItem.VTotal;
-
- if (datItemFields.Contains(DatItemField.VBEnd))
- display.VBEnd = newItem.VBEnd;
-
- if (datItemFields.Contains(DatItemField.VBStart))
- display.VBStart = newItem.VBStart;
- }
-
- #endregion
-
- #region Driver
-
- else if (datItem is Driver driver)
- {
- Driver newItem = repDatItem as Driver;
-
- if (datItemFields.Contains(DatItemField.SupportStatus))
- driver.Status = newItem.Status;
-
- if (datItemFields.Contains(DatItemField.EmulationStatus))
- driver.Emulation = newItem.Emulation;
-
- if (datItemFields.Contains(DatItemField.CocktailStatus))
- driver.Cocktail = newItem.Cocktail;
-
- if (datItemFields.Contains(DatItemField.SaveStateStatus))
- driver.SaveState = newItem.SaveState;
- }
-
- #endregion
-
- #region Extension
-
- else if (datItem is Extension extension)
- {
- Extension newItem = repDatItem as Extension;
-
- if (datItemFields.Contains(DatItemField.Extension_Name))
- extension.Name = newItem.Name;
- }
-
- #endregion
-
- #region Feature
-
- else if (datItem is Feature feature)
- {
- Feature newItem = repDatItem as Feature;
-
- if (datItemFields.Contains(DatItemField.FeatureType))
- feature.Type = newItem.Type;
-
- if (datItemFields.Contains(DatItemField.FeatureStatus))
- feature.Status = newItem.Status;
-
- if (datItemFields.Contains(DatItemField.FeatureOverall))
- feature.Overall = newItem.Overall;
- }
-
- #endregion
-
- #region Info
-
- else if (datItem is Info info)
- {
- Info newItem = repDatItem as Info;
-
- if (datItemFields.Contains(DatItemField.Value))
- info.Value = newItem.Value;
- }
-
- #endregion
-
- #region Input
-
- else if (datItem is Input input)
- {
- Input newItem = repDatItem as Input;
-
- if (datItemFields.Contains(DatItemField.Service))
- input.Service = newItem.Service;
-
- if (datItemFields.Contains(DatItemField.Tilt))
- input.Tilt = newItem.Tilt;
-
- if (datItemFields.Contains(DatItemField.Players))
- input.Players = newItem.Players;
-
- if (datItemFields.Contains(DatItemField.Coins))
- input.Coins = newItem.Coins;
-
- // Control_* doesn't make sense here
- // since not every control under the other item
- // can replace every control under this item
- }
-
- #endregion
-
- #region Instance
-
- else if (datItem is Instance instance)
- {
- Instance newItem = repDatItem as Instance;
-
- if (datItemFields.Contains(DatItemField.Instance_Name))
- instance.Name = newItem.Name;
-
- if (datItemFields.Contains(DatItemField.Instance_BriefName))
- instance.BriefName = newItem.BriefName;
- }
-
- #endregion
-
- #region Location
-
- else if (datItem is Location location)
- {
- Location newItem = repDatItem as Location;
-
- if (datItemFields.Contains(DatItemField.Location_Name))
- location.Name = newItem.Name;
-
- if (datItemFields.Contains(DatItemField.Location_Number))
- location.Number = newItem.Number;
-
- if (datItemFields.Contains(DatItemField.Location_Inverted))
- location.Inverted = newItem.Inverted;
- }
-
- #endregion
-
- #region Media
-
- else if (datItem is Media media)
- {
- Media newItem = repDatItem as Media;
-
- if (datItemFields.Contains(DatItemField.MD5))
- {
- if (string.IsNullOrEmpty(media.MD5) && !string.IsNullOrEmpty(newItem.MD5))
- media.MD5 = newItem.MD5;
- }
-
- if (datItemFields.Contains(DatItemField.SHA1))
- {
- if (string.IsNullOrEmpty(media.SHA1) && !string.IsNullOrEmpty(newItem.SHA1))
- media.SHA1 = newItem.SHA1;
- }
-
- if (datItemFields.Contains(DatItemField.SHA256))
- {
- if (string.IsNullOrEmpty(media.SHA256) && !string.IsNullOrEmpty(newItem.SHA256))
- media.SHA256 = newItem.SHA256;
- }
-
- if (datItemFields.Contains(DatItemField.SpamSum))
- {
- if (string.IsNullOrEmpty(media.SpamSum) && !string.IsNullOrEmpty(newItem.SpamSum))
- media.SpamSum = newItem.SpamSum;
- }
- }
-
- #endregion
-
- #region Part
-
- else if (datItem is Part part)
- {
- Part newItem = repDatItem as Part;
-
- if (datItemFields.Contains(DatItemField.Part_Name))
- part.Name = newItem.Name;
-
- if (datItemFields.Contains(DatItemField.Part_Interface))
- part.Interface = newItem.Interface;
-
- // Part_Feature_* doesn't make sense here
- // since not every part feature under the other item
- // can replace every part feature under this item
- }
-
- #endregion
-
- #region PartFeature
-
- else if (datItem is PartFeature partFeature)
- {
- PartFeature newItem = repDatItem as PartFeature;
-
- if (datItemFields.Contains(DatItemField.Part_Feature_Name))
- partFeature.Name = newItem.Name;
-
- if (datItemFields.Contains(DatItemField.Part_Feature_Value))
- partFeature.Value = newItem.Value;
- }
-
- #endregion
-
- #region Port
-
- else if (datItem is Port)
- {
- // Analog_* doesn't make sense here
- // since not every analog under the other item
- // can replace every analog under this item
- }
-
- #endregion
-
- #region RamOption
-
- else if (datItem is RamOption ramOption)
- {
- RamOption newItem = repDatItem as RamOption;
-
- if (datItemFields.Contains(DatItemField.Default))
- ramOption.Default = newItem.Default;
-
- if (datItemFields.Contains(DatItemField.Content))
- ramOption.Content = newItem.Content;
- }
-
- #endregion
-
- #region Release
-
- else if (datItem is Release release)
- {
- Release newItem = repDatItem as Release;
-
- if (datItemFields.Contains(DatItemField.Region))
- release.Region = newItem.Region;
-
- if (datItemFields.Contains(DatItemField.Language))
- release.Language = newItem.Language;
-
- if (datItemFields.Contains(DatItemField.Date))
- release.Date = newItem.Date;
-
- if (datItemFields.Contains(DatItemField.Default))
- release.Default = newItem.Default;
- }
-
- #endregion
-
- #region Rom
-
- else if (datItem is Rom rom)
- {
- Rom newItem = repDatItem as Rom;
-
- #region Common
-
- if (datItemFields.Contains(DatItemField.Bios))
- rom.Bios = newItem.Bios;
-
- if (datItemFields.Contains(DatItemField.Size))
- rom.Size = newItem.Size;
-
- if (datItemFields.Contains(DatItemField.CRC))
- {
- if (string.IsNullOrEmpty(rom.CRC) && !string.IsNullOrEmpty(newItem.CRC))
- rom.CRC = newItem.CRC;
- }
-
- if (datItemFields.Contains(DatItemField.MD5))
- {
- if (string.IsNullOrEmpty(rom.MD5) && !string.IsNullOrEmpty(newItem.MD5))
- rom.MD5 = newItem.MD5;
- }
-
- if (datItemFields.Contains(DatItemField.SHA1))
- {
- if (string.IsNullOrEmpty(rom.SHA1) && !string.IsNullOrEmpty(newItem.SHA1))
- rom.SHA1 = newItem.SHA1;
- }
-
- if (datItemFields.Contains(DatItemField.SHA256))
- {
- if (string.IsNullOrEmpty(rom.SHA256) && !string.IsNullOrEmpty(newItem.SHA256))
- rom.SHA256 = newItem.SHA256;
- }
-
- if (datItemFields.Contains(DatItemField.SHA384))
- {
- if (string.IsNullOrEmpty(rom.SHA384) && !string.IsNullOrEmpty(newItem.SHA384))
- rom.SHA384 = newItem.SHA384;
- }
-
- if (datItemFields.Contains(DatItemField.SHA512))
- {
- if (string.IsNullOrEmpty(rom.SHA512) && !string.IsNullOrEmpty(newItem.SHA512))
- rom.SHA512 = newItem.SHA512;
- }
-
- if (datItemFields.Contains(DatItemField.SpamSum))
- {
- if (string.IsNullOrEmpty(rom.SpamSum) && !string.IsNullOrEmpty(newItem.SpamSum))
- rom.SpamSum = newItem.SpamSum;
- }
-
- if (datItemFields.Contains(DatItemField.Merge))
- rom.MergeTag = newItem.MergeTag;
-
- if (datItemFields.Contains(DatItemField.Region))
- rom.Region = newItem.Region;
-
- if (datItemFields.Contains(DatItemField.Offset))
- rom.Offset = newItem.Offset;
-
- if (datItemFields.Contains(DatItemField.Date))
- rom.Date = newItem.Date;
-
- if (datItemFields.Contains(DatItemField.Status))
- rom.ItemStatus = newItem.ItemStatus;
-
- if (datItemFields.Contains(DatItemField.Optional))
- rom.Optional = newItem.Optional;
-
- if (datItemFields.Contains(DatItemField.Inverted))
- rom.Inverted = newItem.Inverted;
-
- #endregion
-
- #region AttractMode
-
- if (datItemFields.Contains(DatItemField.AltName))
- rom.AltName = newItem.AltName;
-
- if (datItemFields.Contains(DatItemField.AltTitle))
- rom.AltTitle = newItem.AltTitle;
-
- #endregion
-
- #region OpenMSX
-
- if (datItemFields.Contains(DatItemField.Original))
- rom.Original = newItem.Original;
-
- if (datItemFields.Contains(DatItemField.OpenMSXSubType))
- rom.OpenMSXSubType = newItem.OpenMSXSubType;
-
- if (datItemFields.Contains(DatItemField.OpenMSXType))
- rom.OpenMSXType = newItem.OpenMSXType;
-
- if (datItemFields.Contains(DatItemField.Remark))
- rom.Remark = newItem.Remark;
-
- if (datItemFields.Contains(DatItemField.Boot))
- rom.Boot = newItem.Boot;
-
- #endregion
-
- #region SoftwareList
-
- if (datItemFields.Contains(DatItemField.LoadFlag))
- rom.LoadFlag = newItem.LoadFlag;
-
- if (datItemFields.Contains(DatItemField.Value))
- rom.Value = newItem.Value;
-
- if (rom.DataAreaSpecified && newItem.DataAreaSpecified)
- ReplaceFields(rom.DataArea, newItem.DataArea, datItemFields);
-
- if (rom.PartSpecified && newItem.PartSpecified)
- ReplaceFields(rom.Part, newItem.Part, datItemFields);
-
- #endregion
- }
-
- #endregion
-
- #region Setting
-
- else if (datItem is Setting setting)
- {
- Setting newItem = repDatItem as Setting;
-
- if (datItemFields.Contains(DatItemField.Setting_Name))
- setting.Name = newItem.Name;
-
- if (datItemFields.Contains(DatItemField.Setting_Value))
- setting.Value = newItem.Value;
-
- if (datItemFields.Contains(DatItemField.Setting_Default))
- setting.Default = newItem.Default;
-
- // Condition_* doesn't make sense here
- // since not every condition under the other item
- // can replace every condition under this item
- }
-
- #endregion
-
- #region SharedFeature
-
- else if (datItem is SharedFeature sharedFeature)
- {
- SharedFeature newItem = repDatItem as SharedFeature;
-
- if (datItemFields.Contains(DatItemField.Value))
- sharedFeature.Value = newItem.Value;
- }
-
- #endregion
-
- #region Slot
-
- else if (datItem is Slot)
- {
- // SlotOption_* doesn't make sense here
- // since not every slot option under the other item
- // can replace every slot option under this item
- }
-
- #endregion
-
- #region SlotOption
-
- else if (datItem is SlotOption slotOption)
- {
- SlotOption newItem = repDatItem as SlotOption;
-
- if (datItemFields.Contains(DatItemField.SlotOption_Name))
- slotOption.Name = newItem.Name;
-
- if (datItemFields.Contains(DatItemField.SlotOption_DeviceName))
- slotOption.DeviceName = newItem.DeviceName;
-
- if (datItemFields.Contains(DatItemField.SlotOption_Default))
- slotOption.Default = newItem.Default;
- }
-
- #endregion
-
- #region SoftwareList
-
- else if (datItem is SoftwareList softwareList)
- {
- SoftwareList newItem = repDatItem as SoftwareList;
-
- if (datItemFields.Contains(DatItemField.SoftwareListStatus))
- softwareList.Status = newItem.Status;
-
- if (datItemFields.Contains(DatItemField.Filter))
- softwareList.Filter = newItem.Filter;
- }
-
- #endregion
-
- #region Sound
-
- else if (datItem is Sound sound)
- {
- Sound newItem = repDatItem as Sound;
-
- if (datItemFields.Contains(DatItemField.Channels))
- sound.Channels = newItem.Channels;
- }
+ #region Item-Specific
+
+ if (datItem is Adjuster) ReplaceFields(datItem as Adjuster, repDatItem as Adjuster, datItemFields);
+ else if (datItem is Analog) ReplaceFields(datItem as Analog, repDatItem as Analog, datItemFields);
+ else if (datItem is BiosSet) ReplaceFields(datItem as BiosSet, repDatItem as BiosSet, datItemFields);
+ else if (datItem is Chip) ReplaceFields(datItem as Chip, repDatItem as Chip, datItemFields);
+ else if (datItem is Condition) ReplaceFields(datItem as Condition, repDatItem as Condition, datItemFields);
+ else if (datItem is Configuration) ReplaceFields(datItem as Configuration, repDatItem as Configuration, datItemFields);
+ else if (datItem is Control) ReplaceFields(datItem as Control, repDatItem as Control, datItemFields);
+ else if (datItem is DataArea) ReplaceFields(datItem as DataArea, repDatItem as DataArea, datItemFields);
+ else if (datItem is Device) ReplaceFields(datItem as Device, repDatItem as Device, datItemFields);
+ else if (datItem is DipSwitch) ReplaceFields(datItem as DipSwitch, repDatItem as DipSwitch, datItemFields);
+ else if (datItem is Disk) ReplaceFields(datItem as Disk, repDatItem as Disk, datItemFields);
+ else if (datItem is DiskArea) ReplaceFields(datItem as DiskArea, repDatItem as DiskArea, datItemFields);
+ else if (datItem is Display) ReplaceFields(datItem as Display, repDatItem as Display, datItemFields);
+ else if (datItem is Driver) ReplaceFields(datItem as Driver, repDatItem as Driver, datItemFields);
+ else if (datItem is Extension) ReplaceFields(datItem as Extension, repDatItem as Extension, datItemFields);
+ else if (datItem is Feature) ReplaceFields(datItem as Feature, repDatItem as Feature, datItemFields);
+ else if (datItem is Info) ReplaceFields(datItem as Info, repDatItem as Info, datItemFields);
+ else if (datItem is Input) ReplaceFields(datItem as Input, repDatItem as Input, datItemFields);
+ else if (datItem is Instance) ReplaceFields(datItem as Instance, repDatItem as Instance, datItemFields);
+ else if (datItem is Location) ReplaceFields(datItem as Location, repDatItem as Location, datItemFields);
+ else if (datItem is Media) ReplaceFields(datItem as Media, repDatItem as Media, datItemFields);
+ else if (datItem is Part) ReplaceFields(datItem as Part, repDatItem as Part, datItemFields);
+ else if (datItem is PartFeature) ReplaceFields(datItem as PartFeature, repDatItem as PartFeature, datItemFields);
+ else if (datItem is Port) ReplaceFields(datItem as Port, repDatItem as Port, datItemFields);
+ else if (datItem is RamOption) ReplaceFields(datItem as RamOption, repDatItem as RamOption, datItemFields);
+ else if (datItem is Release) ReplaceFields(datItem as Release, repDatItem as Release, datItemFields);
+ else if (datItem is Rom) ReplaceFields(datItem as Rom, repDatItem as Rom, datItemFields);
+ else if (datItem is Setting) ReplaceFields(datItem as Setting, repDatItem as Setting, datItemFields);
+ else if (datItem is SharedFeature) ReplaceFields(datItem as SharedFeature, repDatItem as SharedFeature, datItemFields);
+ else if (datItem is Slot) ReplaceFields(datItem as Slot, repDatItem as Slot, datItemFields);
+ else if (datItem is SlotOption) ReplaceFields(datItem as SlotOption, repDatItem as SlotOption, datItemFields);
+ else if (datItem is SoftwareList) ReplaceFields(datItem as SoftwareList, repDatItem as SoftwareList, datItemFields);
+ else if (datItem is Sound) ReplaceFields(datItem as Sound, repDatItem as Sound, datItemFields);
#endregion
}
@@ -1005,6 +224,838 @@ namespace SabreTools.DatItems
#endregion
}
+ ///
+ /// Replace fields with given values
+ ///
+ /// Adjuster to remove replace fields in
+ /// Adjuster to pull new information from
+ /// List of fields representing what should be updated
+ private static void ReplaceFields(Adjuster adjuster, Adjuster newItem, List datItemFields)
+ {
+ if (datItemFields.Contains(DatItemField.Default))
+ adjuster.Default = newItem.Default;
+
+ // Condition_* doesn't make sense here
+ // since not every condition under the other item
+ // can replace every condition under this item
+ }
+
+ ///
+ /// Replace fields with given values
+ ///
+ /// Analog to remove replace fields in
+ /// Analog to pull new information from
+ /// List of fields representing what should be updated
+ private static void ReplaceFields(Analog analog, Analog newItem, List datItemFields)
+ {
+ if (datItemFields.Contains(DatItemField.Analog_Mask))
+ analog.Mask = newItem.Mask;
+ }
+
+ ///
+ /// Replace fields with given values
+ ///
+ /// BiosSet to remove replace fields in
+ /// BiosSet to pull new information from
+ /// List of fields representing what should be updated
+ private static void ReplaceFields(BiosSet biosSet, BiosSet newItem, List datItemFields)
+ {
+ if (datItemFields.Contains(DatItemField.Description))
+ biosSet.Description = newItem.Description;
+
+ if (datItemFields.Contains(DatItemField.Default))
+ biosSet.Default = newItem.Default;
+ }
+
+ ///
+ /// Replace fields with given values
+ ///
+ /// Chip to remove replace fields in
+ /// Chip to pull new information from
+ /// List of fields representing what should be updated
+ private static void ReplaceFields(Chip chip, Chip newItem, List datItemFields)
+ {
+ if (datItemFields.Contains(DatItemField.Tag))
+ chip.Tag = newItem.Tag;
+
+ if (datItemFields.Contains(DatItemField.ChipType))
+ chip.ChipType = newItem.ChipType;
+
+ if (datItemFields.Contains(DatItemField.Clock))
+ chip.Clock = newItem.Clock;
+ }
+
+ ///
+ /// Replace fields with given values
+ ///
+ /// Condition to remove replace fields in
+ /// Condition to pull new information from
+ /// List of fields representing what should be updated
+ private static void ReplaceFields(Condition condition, Condition newItem, List datItemFields)
+ {
+ if (datItemFields.Contains(DatItemField.Tag))
+ condition.Tag = newItem.Tag;
+ else if (datItemFields.Contains(DatItemField.Condition_Tag))
+ condition.Tag = newItem.Tag;
+
+ if (datItemFields.Contains(DatItemField.Mask))
+ condition.Mask = newItem.Mask;
+ else if (datItemFields.Contains(DatItemField.Condition_Mask))
+ condition.Mask = newItem.Mask;
+
+ if (datItemFields.Contains(DatItemField.Relation))
+ condition.Relation = newItem.Relation;
+ else if (datItemFields.Contains(DatItemField.Condition_Relation))
+ condition.Relation = newItem.Relation;
+
+ if (datItemFields.Contains(DatItemField.Value))
+ condition.Value = newItem.Value;
+ else if (datItemFields.Contains(DatItemField.Condition_Value))
+ condition.Value = newItem.Value;
+ }
+
+ ///
+ /// Replace fields with given values
+ ///
+ /// Configuration to remove replace fields in
+ /// Configuration to pull new information from
+ /// List of fields representing what should be updated
+ private static void ReplaceFields(Configuration configuration, Configuration newItem, List datItemFields)
+ {
+ if (datItemFields.Contains(DatItemField.Tag))
+ configuration.Tag = newItem.Tag;
+
+ if (datItemFields.Contains(DatItemField.Mask))
+ configuration.Mask = newItem.Mask;
+
+ // Condition_* doesn't make sense here
+ // since not every condition under the other item
+ // can replace every condition under this item
+
+ // Location_* doesn't make sense here
+ // since not every location under the other item
+ // can replace every location under this item
+
+ // Setting_* doesn't make sense here
+ // since not every setting under the other item
+ // can replace every setting under this item
+ }
+
+ ///
+ /// Replace fields with given values
+ ///
+ /// Control to remove replace fields in
+ /// Control to pull new information from
+ /// List of fields representing what should be updated
+ private static void ReplaceFields(Control control, Control newItem, List datItemFields)
+ {
+ if (datItemFields.Contains(DatItemField.Control_Type))
+ control.ControlType = newItem.ControlType;
+
+ if (datItemFields.Contains(DatItemField.Control_Player))
+ control.Player = newItem.Player;
+
+ if (datItemFields.Contains(DatItemField.Control_Buttons))
+ control.Buttons = newItem.Buttons;
+
+ if (datItemFields.Contains(DatItemField.Control_RequiredButtons))
+ control.RequiredButtons = newItem.RequiredButtons;
+
+ if (datItemFields.Contains(DatItemField.Control_Minimum))
+ control.Minimum = newItem.Minimum;
+
+ if (datItemFields.Contains(DatItemField.Control_Maximum))
+ control.Maximum = newItem.Maximum;
+
+ if (datItemFields.Contains(DatItemField.Control_Sensitivity))
+ control.Sensitivity = newItem.Sensitivity;
+
+ if (datItemFields.Contains(DatItemField.Control_KeyDelta))
+ control.KeyDelta = newItem.KeyDelta;
+
+ if (datItemFields.Contains(DatItemField.Control_Reverse))
+ control.Reverse = newItem.Reverse;
+
+ if (datItemFields.Contains(DatItemField.Control_Ways))
+ control.Ways = newItem.Ways;
+
+ if (datItemFields.Contains(DatItemField.Control_Ways2))
+ control.Ways2 = newItem.Ways2;
+
+ if (datItemFields.Contains(DatItemField.Control_Ways3))
+ control.Ways3 = newItem.Ways3;
+ }
+
+ ///
+ /// Replace fields with given values
+ ///
+ /// DataArea to remove replace fields in
+ /// DataArea to pull new information from
+ /// List of fields representing what should be updated
+ private static void ReplaceFields(DataArea dataArea, DataArea newItem, List datItemFields)
+ {
+ if (datItemFields.Contains(DatItemField.AreaName))
+ dataArea.Name = newItem.Name;
+
+ if (datItemFields.Contains(DatItemField.AreaSize))
+ dataArea.Size = newItem.Size;
+
+ if (datItemFields.Contains(DatItemField.AreaWidth))
+ dataArea.Width = newItem.Width;
+
+ if (datItemFields.Contains(DatItemField.AreaEndianness))
+ dataArea.Endianness = newItem.Endianness;
+ }
+
+ ///
+ /// Replace fields with given values
+ ///
+ /// Device to remove replace fields in
+ /// Device to pull new information from
+ /// List of fields representing what should be updated
+ private static void ReplaceFields(Device device, Device newItem, List datItemFields)
+ {
+ if (datItemFields.Contains(DatItemField.DeviceType))
+ device.DeviceType = newItem.DeviceType;
+
+ if (datItemFields.Contains(DatItemField.Tag))
+ device.Tag = newItem.Tag;
+
+ if (datItemFields.Contains(DatItemField.FixedImage))
+ device.FixedImage = newItem.FixedImage;
+
+ if (datItemFields.Contains(DatItemField.Mandatory))
+ device.Mandatory = newItem.Mandatory;
+
+ if (datItemFields.Contains(DatItemField.Interface))
+ device.Interface = newItem.Interface;
+
+ // Instance_* doesn't make sense here
+ // since not every instance under the other item
+ // can replace every instance under this item
+
+ // Extension_* doesn't make sense here
+ // since not every extension under the other item
+ // can replace every extension under this item
+ }
+
+ ///
+ /// Replace fields with given values
+ ///
+ /// DipSwitch to remove replace fields in
+ /// DipSwitch to pull new information from
+ /// List of fields representing what should be updated
+ private static void ReplaceFields(DipSwitch dipSwitch, DipSwitch newItem, List datItemFields)
+ {
+ #region Common
+
+ if (datItemFields.Contains(DatItemField.Tag))
+ dipSwitch.Tag = newItem.Tag;
+
+ if (datItemFields.Contains(DatItemField.Mask))
+ dipSwitch.Mask = newItem.Mask;
+
+ // Condition_* doesn't make sense here
+ // since not every condition under the other item
+ // can replace every condition under this item
+
+ // Location_* doesn't make sense here
+ // since not every location under the other item
+ // can replace every location under this item
+
+ // Setting_* doesn't make sense here
+ // since not every value under the other item
+ // can replace every value under this item
+
+ #endregion
+
+ #region SoftwareList
+
+ if (dipSwitch.PartSpecified && newItem.PartSpecified)
+ ReplaceFields(dipSwitch.Part, newItem.Part, datItemFields);
+
+ #endregion
+ }
+
+ ///
+ /// Replace fields with given values
+ ///
+ /// Disk to remove replace fields in
+ /// Disk to pull new information from
+ /// List of fields representing what should be updated
+ private static void ReplaceFields(Disk disk, Disk newItem, List datItemFields)
+ {
+ #region Common
+
+ if (datItemFields.Contains(DatItemField.MD5))
+ {
+ if (string.IsNullOrEmpty(disk.MD5) && !string.IsNullOrEmpty(newItem.MD5))
+ disk.MD5 = newItem.MD5;
+ }
+
+ if (datItemFields.Contains(DatItemField.SHA1))
+ {
+ if (string.IsNullOrEmpty(disk.SHA1) && !string.IsNullOrEmpty(newItem.SHA1))
+ disk.SHA1 = newItem.SHA1;
+ }
+
+ if (datItemFields.Contains(DatItemField.Merge))
+ disk.MergeTag = newItem.MergeTag;
+
+ if (datItemFields.Contains(DatItemField.Region))
+ disk.Region = newItem.Region;
+
+ if (datItemFields.Contains(DatItemField.Index))
+ disk.Index = newItem.Index;
+
+ if (datItemFields.Contains(DatItemField.Writable))
+ disk.Writable = newItem.Writable;
+
+ if (datItemFields.Contains(DatItemField.Status))
+ disk.ItemStatus = newItem.ItemStatus;
+
+ if (datItemFields.Contains(DatItemField.Optional))
+ disk.Optional = newItem.Optional;
+
+ #endregion
+
+ #region SoftwareList
+
+ if (disk.DiskAreaSpecified && newItem.DiskAreaSpecified)
+ ReplaceFields(disk.DiskArea, newItem.DiskArea, datItemFields);
+
+ if (disk.PartSpecified && newItem.PartSpecified)
+ ReplaceFields(disk.Part, newItem.Part, datItemFields);
+
+ #endregion
+ }
+
+ ///
+ /// Replace fields with given values
+ ///
+ /// DiskArea to remove replace fields in
+ /// DiskArea to pull new information from
+ /// List of fields representing what should be updated
+ private static void ReplaceFields(DiskArea diskArea, DiskArea newItem, List datItemFields)
+ {
+ if (datItemFields.Contains(DatItemField.AreaName))
+ diskArea.Name = newItem.Name;
+ }
+
+ ///
+ /// Replace fields with given values
+ ///
+ /// Display to remove replace fields in
+ /// Display to pull new information from
+ /// List of fields representing what should be updated
+ private static void ReplaceFields(Display display, Display newItem, List datItemFields)
+ {
+ if (datItemFields.Contains(DatItemField.Tag))
+ display.Tag = newItem.Tag;
+
+ if (datItemFields.Contains(DatItemField.DisplayType))
+ display.DisplayType = newItem.DisplayType;
+
+ if (datItemFields.Contains(DatItemField.Rotate))
+ display.Rotate = newItem.Rotate;
+
+ if (datItemFields.Contains(DatItemField.FlipX))
+ display.FlipX = newItem.FlipX;
+
+ if (datItemFields.Contains(DatItemField.Width))
+ display.Width = newItem.Width;
+
+ if (datItemFields.Contains(DatItemField.Height))
+ display.Height = newItem.Height;
+
+ if (datItemFields.Contains(DatItemField.Refresh))
+ display.Refresh = newItem.Refresh;
+
+ if (datItemFields.Contains(DatItemField.PixClock))
+ display.PixClock = newItem.PixClock;
+
+ if (datItemFields.Contains(DatItemField.HTotal))
+ display.HTotal = newItem.HTotal;
+
+ if (datItemFields.Contains(DatItemField.HBEnd))
+ display.HBEnd = newItem.HBEnd;
+
+ if (datItemFields.Contains(DatItemField.HBStart))
+ display.HBStart = newItem.HBStart;
+
+ if (datItemFields.Contains(DatItemField.VTotal))
+ display.VTotal = newItem.VTotal;
+
+ if (datItemFields.Contains(DatItemField.VBEnd))
+ display.VBEnd = newItem.VBEnd;
+
+ if (datItemFields.Contains(DatItemField.VBStart))
+ display.VBStart = newItem.VBStart;
+ }
+
+ ///
+ /// Replace fields with given values
+ ///
+ /// Driver to remove replace fields in
+ /// Driver to pull new information from
+ /// List of fields representing what should be updated
+ private static void ReplaceFields(Driver driver, Driver newItem, List datItemFields)
+ {
+ if (datItemFields.Contains(DatItemField.SupportStatus))
+ driver.Status = newItem.Status;
+
+ if (datItemFields.Contains(DatItemField.EmulationStatus))
+ driver.Emulation = newItem.Emulation;
+
+ if (datItemFields.Contains(DatItemField.CocktailStatus))
+ driver.Cocktail = newItem.Cocktail;
+
+ if (datItemFields.Contains(DatItemField.SaveStateStatus))
+ driver.SaveState = newItem.SaveState;
+ }
+
+ ///
+ /// Replace fields with given values
+ ///
+ /// Extension to remove replace fields in
+ /// Extension to pull new information from
+ /// List of fields representing what should be updated
+ private static void ReplaceFields(Extension extension, Extension newItem, List datItemFields)
+ {
+ if (datItemFields.Contains(DatItemField.Extension_Name))
+ extension.Name = newItem.Name;
+ }
+
+ ///
+ /// Replace fields with given values
+ ///
+ /// Feature to remove replace fields in
+ /// Feature to pull new information from
+ /// List of fields representing what should be updated
+ private static void ReplaceFields(Feature feature, Feature newItem, List datItemFields)
+ {
+ if (datItemFields.Contains(DatItemField.FeatureType))
+ feature.Type = newItem.Type;
+
+ if (datItemFields.Contains(DatItemField.FeatureStatus))
+ feature.Status = newItem.Status;
+
+ if (datItemFields.Contains(DatItemField.FeatureOverall))
+ feature.Overall = newItem.Overall;
+ }
+
+ ///
+ /// Replace fields with given values
+ ///
+ /// Info to remove replace fields in
+ /// Info to pull new information from
+ /// List of fields representing what should be updated
+ private static void ReplaceFields(Info info, Info newItem, List datItemFields)
+ {
+ if (datItemFields.Contains(DatItemField.Value))
+ info.Value = newItem.Value;
+ }
+
+ ///
+ /// Replace fields with given values
+ ///
+ /// Input to remove replace fields in
+ /// Input to pull new information from
+ /// List of fields representing what should be updated
+ private static void ReplaceFields(Input input, Input newItem, List datItemFields)
+ {
+ if (datItemFields.Contains(DatItemField.Service))
+ input.Service = newItem.Service;
+
+ if (datItemFields.Contains(DatItemField.Tilt))
+ input.Tilt = newItem.Tilt;
+
+ if (datItemFields.Contains(DatItemField.Players))
+ input.Players = newItem.Players;
+
+ if (datItemFields.Contains(DatItemField.Coins))
+ input.Coins = newItem.Coins;
+
+ // Control_* doesn't make sense here
+ // since not every control under the other item
+ // can replace every control under this item
+ }
+
+ ///
+ /// Replace fields with given values
+ ///
+ /// Instance to remove replace fields in
+ /// Instance to pull new information from
+ /// List of fields representing what should be updated
+ private static void ReplaceFields(Instance instance, Instance newItem, List datItemFields)
+ {
+ if (datItemFields.Contains(DatItemField.Instance_Name))
+ instance.Name = newItem.Name;
+
+ if (datItemFields.Contains(DatItemField.Instance_BriefName))
+ instance.BriefName = newItem.BriefName;
+ }
+
+ ///
+ /// Replace fields with given values
+ ///
+ /// Location to remove replace fields in
+ /// Location to pull new information from
+ /// List of fields representing what should be updated
+ private static void ReplaceFields(Location location, Location newItem, List datItemFields)
+ {
+ if (datItemFields.Contains(DatItemField.Location_Name))
+ location.Name = newItem.Name;
+
+ if (datItemFields.Contains(DatItemField.Location_Number))
+ location.Number = newItem.Number;
+
+ if (datItemFields.Contains(DatItemField.Location_Inverted))
+ location.Inverted = newItem.Inverted;
+ }
+
+ ///
+ /// Replace fields with given values
+ ///
+ /// Media to remove replace fields in
+ /// Media to pull new information from
+ /// List of fields representing what should be updated
+ private static void ReplaceFields(Media media, Media newItem, List datItemFields)
+ {
+ if (datItemFields.Contains(DatItemField.MD5))
+ {
+ if (string.IsNullOrEmpty(media.MD5) && !string.IsNullOrEmpty(newItem.MD5))
+ media.MD5 = newItem.MD5;
+ }
+
+ if (datItemFields.Contains(DatItemField.SHA1))
+ {
+ if (string.IsNullOrEmpty(media.SHA1) && !string.IsNullOrEmpty(newItem.SHA1))
+ media.SHA1 = newItem.SHA1;
+ }
+
+ if (datItemFields.Contains(DatItemField.SHA256))
+ {
+ if (string.IsNullOrEmpty(media.SHA256) && !string.IsNullOrEmpty(newItem.SHA256))
+ media.SHA256 = newItem.SHA256;
+ }
+
+ if (datItemFields.Contains(DatItemField.SpamSum))
+ {
+ if (string.IsNullOrEmpty(media.SpamSum) && !string.IsNullOrEmpty(newItem.SpamSum))
+ media.SpamSum = newItem.SpamSum;
+ }
+ }
+
+ ///
+ /// Replace fields with given values
+ ///
+ /// Part to remove replace fields in
+ /// Part to pull new information from
+ /// List of fields representing what should be updated
+ private static void ReplaceFields(Part part, Part newItem, List datItemFields)
+ {
+ if (datItemFields.Contains(DatItemField.Part_Name))
+ part.Name = newItem.Name;
+
+ if (datItemFields.Contains(DatItemField.Part_Interface))
+ part.Interface = newItem.Interface;
+
+ // Part_Feature_* doesn't make sense here
+ // since not every part feature under the other item
+ // can replace every part feature under this item
+ }
+
+ ///
+ /// Replace fields with given values
+ ///
+ /// PartFeature to remove replace fields in
+ /// PartFeature to pull new information from
+ /// List of fields representing what should be updated
+ private static void ReplaceFields(PartFeature partFeature, PartFeature newItem, List datItemFields)
+ {
+ if (datItemFields.Contains(DatItemField.Part_Feature_Name))
+ partFeature.Name = newItem.Name;
+
+ if (datItemFields.Contains(DatItemField.Part_Feature_Value))
+ partFeature.Value = newItem.Value;
+ }
+
+ ///
+ /// Replace fields with given values
+ ///
+ /// Port to remove replace fields in
+ /// Port to pull new information from
+ /// List of fields representing what should be updated
+ private static void ReplaceFields(Port port, Port newItem, List datItemFields)
+ {
+ if (datItemFields.Contains(DatItemField.Tag))
+ port.Tag = newItem.Tag;
+
+ // Analog_* doesn't make sense here
+ // since not every analog under the other item
+ // can replace every analog under this item
+ }
+
+ ///
+ /// Replace fields with given values
+ ///
+ /// RamOption to remove replace fields in
+ /// RamOption to pull new information from
+ /// List of fields representing what should be updated
+ private static void ReplaceFields(RamOption ramOption, RamOption newItem, List datItemFields)
+ {
+ if (datItemFields.Contains(DatItemField.Default))
+ ramOption.Default = newItem.Default;
+
+ if (datItemFields.Contains(DatItemField.Content))
+ ramOption.Content = newItem.Content;
+ }
+
+ ///
+ /// Replace fields with given values
+ ///
+ /// Release to remove replace fields in
+ /// Release to pull new information from
+ /// List of fields representing what should be updated
+ private static void ReplaceFields(Release release, Release newItem, List datItemFields)
+ {
+ if (datItemFields.Contains(DatItemField.Region))
+ release.Region = newItem.Region;
+
+ if (datItemFields.Contains(DatItemField.Language))
+ release.Language = newItem.Language;
+
+ if (datItemFields.Contains(DatItemField.Date))
+ release.Date = newItem.Date;
+
+ if (datItemFields.Contains(DatItemField.Default))
+ release.Default = newItem.Default;
+ }
+
+ ///
+ /// Replace fields with given values
+ ///
+ /// Rom to remove replace fields in
+ /// Rom to pull new information from
+ /// List of fields representing what should be updated
+ private static void ReplaceFields(Rom rom, Rom newItem, List datItemFields)
+ {
+ #region Common
+
+ if (datItemFields.Contains(DatItemField.Bios))
+ rom.Bios = newItem.Bios;
+
+ if (datItemFields.Contains(DatItemField.Size))
+ rom.Size = newItem.Size;
+
+ if (datItemFields.Contains(DatItemField.CRC))
+ {
+ if (string.IsNullOrEmpty(rom.CRC) && !string.IsNullOrEmpty(newItem.CRC))
+ rom.CRC = newItem.CRC;
+ }
+
+ if (datItemFields.Contains(DatItemField.MD5))
+ {
+ if (string.IsNullOrEmpty(rom.MD5) && !string.IsNullOrEmpty(newItem.MD5))
+ rom.MD5 = newItem.MD5;
+ }
+
+ if (datItemFields.Contains(DatItemField.SHA1))
+ {
+ if (string.IsNullOrEmpty(rom.SHA1) && !string.IsNullOrEmpty(newItem.SHA1))
+ rom.SHA1 = newItem.SHA1;
+ }
+
+ if (datItemFields.Contains(DatItemField.SHA256))
+ {
+ if (string.IsNullOrEmpty(rom.SHA256) && !string.IsNullOrEmpty(newItem.SHA256))
+ rom.SHA256 = newItem.SHA256;
+ }
+
+ if (datItemFields.Contains(DatItemField.SHA384))
+ {
+ if (string.IsNullOrEmpty(rom.SHA384) && !string.IsNullOrEmpty(newItem.SHA384))
+ rom.SHA384 = newItem.SHA384;
+ }
+
+ if (datItemFields.Contains(DatItemField.SHA512))
+ {
+ if (string.IsNullOrEmpty(rom.SHA512) && !string.IsNullOrEmpty(newItem.SHA512))
+ rom.SHA512 = newItem.SHA512;
+ }
+
+ if (datItemFields.Contains(DatItemField.SpamSum))
+ {
+ if (string.IsNullOrEmpty(rom.SpamSum) && !string.IsNullOrEmpty(newItem.SpamSum))
+ rom.SpamSum = newItem.SpamSum;
+ }
+
+ if (datItemFields.Contains(DatItemField.Merge))
+ rom.MergeTag = newItem.MergeTag;
+
+ if (datItemFields.Contains(DatItemField.Region))
+ rom.Region = newItem.Region;
+
+ if (datItemFields.Contains(DatItemField.Offset))
+ rom.Offset = newItem.Offset;
+
+ if (datItemFields.Contains(DatItemField.Date))
+ rom.Date = newItem.Date;
+
+ if (datItemFields.Contains(DatItemField.Status))
+ rom.ItemStatus = newItem.ItemStatus;
+
+ if (datItemFields.Contains(DatItemField.Optional))
+ rom.Optional = newItem.Optional;
+
+ if (datItemFields.Contains(DatItemField.Inverted))
+ rom.Inverted = newItem.Inverted;
+
+ #endregion
+
+ #region AttractMode
+
+ if (datItemFields.Contains(DatItemField.AltName))
+ rom.AltName = newItem.AltName;
+
+ if (datItemFields.Contains(DatItemField.AltTitle))
+ rom.AltTitle = newItem.AltTitle;
+
+ #endregion
+
+ #region OpenMSX
+
+ if (datItemFields.Contains(DatItemField.Original))
+ rom.Original = newItem.Original;
+
+ if (datItemFields.Contains(DatItemField.OpenMSXSubType))
+ rom.OpenMSXSubType = newItem.OpenMSXSubType;
+
+ if (datItemFields.Contains(DatItemField.OpenMSXType))
+ rom.OpenMSXType = newItem.OpenMSXType;
+
+ if (datItemFields.Contains(DatItemField.Remark))
+ rom.Remark = newItem.Remark;
+
+ if (datItemFields.Contains(DatItemField.Boot))
+ rom.Boot = newItem.Boot;
+
+ #endregion
+
+ #region SoftwareList
+
+ if (datItemFields.Contains(DatItemField.LoadFlag))
+ rom.LoadFlag = newItem.LoadFlag;
+
+ if (datItemFields.Contains(DatItemField.Value))
+ rom.Value = newItem.Value;
+
+ if (rom.DataAreaSpecified && newItem.DataAreaSpecified)
+ ReplaceFields(rom.DataArea, newItem.DataArea, datItemFields);
+
+ if (rom.PartSpecified && newItem.PartSpecified)
+ ReplaceFields(rom.Part, newItem.Part, datItemFields);
+
+ #endregion
+ }
+
+ ///
+ /// Replace fields with given values
+ ///
+ /// Setting to remove replace fields in
+ /// Setting to pull new information from
+ /// List of fields representing what should be updated
+ private static void ReplaceFields(Setting setting, Setting newItem, List datItemFields)
+ {
+ if (datItemFields.Contains(DatItemField.Setting_Name))
+ setting.Name = newItem.Name;
+
+ if (datItemFields.Contains(DatItemField.Setting_Value))
+ setting.Value = newItem.Value;
+
+ if (datItemFields.Contains(DatItemField.Setting_Default))
+ setting.Default = newItem.Default;
+
+ // Condition_* doesn't make sense here
+ // since not every condition under the other item
+ // can replace every condition under this item
+ }
+
+ ///
+ /// Replace fields with given values
+ ///
+ /// SharedFeature to remove replace fields in
+ /// SharedFeature to pull new information from
+ /// List of fields representing what should be updated
+ private static void ReplaceFields(SharedFeature sharedFeature, SharedFeature newItem, List datItemFields)
+ {
+ if (datItemFields.Contains(DatItemField.Value))
+ sharedFeature.Value = newItem.Value;
+ }
+
+ ///
+ /// Replace fields with given values
+ ///
+ /// Slot to remove replace fields in
+ /// Slot to pull new information from
+ /// List of fields representing what should be updated
+ private static void ReplaceFields(Slot slot, Slot newItem, List datItemFields)
+ {
+ // SlotOption_* doesn't make sense here
+ // since not every slot option under the other item
+ // can replace every slot option under this item
+ }
+
+ ///
+ /// Replace fields with given values
+ ///
+ /// SlotOption to remove replace fields in
+ /// SlotOption to pull new information from
+ /// List of fields representing what should be updated
+ private static void ReplaceFields(SlotOption slotOption, SlotOption newItem, List datItemFields)
+ {
+ if (datItemFields.Contains(DatItemField.SlotOption_Name))
+ slotOption.Name = newItem.Name;
+
+ if (datItemFields.Contains(DatItemField.SlotOption_DeviceName))
+ slotOption.DeviceName = newItem.DeviceName;
+
+ if (datItemFields.Contains(DatItemField.SlotOption_Default))
+ slotOption.Default = newItem.Default;
+ }
+
+ ///
+ /// Replace fields with given values
+ ///
+ /// SoftwareList to remove replace fields in
+ /// SoftwareList to pull new information from
+ /// List of fields representing what should be updated
+ private static void ReplaceFields(SoftwareList softwareList, SoftwareList newItem, List datItemFields)
+ {
+ if (datItemFields.Contains(DatItemField.SoftwareListStatus))
+ softwareList.Status = newItem.Status;
+
+ if (datItemFields.Contains(DatItemField.Filter))
+ softwareList.Filter = newItem.Filter;
+ }
+
+ ///
+ /// Replace fields with given values
+ ///
+ /// Sound to remove replace fields in
+ /// Sound to pull new information from
+ /// List of fields representing what should be updated
+ private static void ReplaceFields(Sound sound, Sound newItem, List datItemFields)
+ {
+ if (datItemFields.Contains(DatItemField.Channels))
+ sound.Channels = newItem.Channels;
+ }
+
+ #endregion
+
+ #region Field Setting
+
///
/// Set fields with given values
///
@@ -1956,6 +2007,8 @@ namespace SabreTools.DatItems
#endregion
}
+ #endregion
+
///
/// Set internal names to match One Rom Per Game (ORPG) logic
///
diff --git a/SabreTools.Filtering/Cleaner.cs b/SabreTools.Filtering/Cleaner.cs
index 53323129..7d5ba136 100644
--- a/SabreTools.Filtering/Cleaner.cs
+++ b/SabreTools.Filtering/Cleaner.cs
@@ -15,7 +15,6 @@ namespace SabreTools.Filtering
///
/// Represents the cleaning operations that need to be performed on a set of items, usually a DAT
///
- /// TODO: Split out helper classes
public class Cleaner
{
#region Exclusion Fields