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