diff --git a/SabreTools.DatFiles/Formats/SeparatedValue.cs b/SabreTools.DatFiles/Formats/SeparatedValue.cs index bb8b8b08..c3557c8c 100644 --- a/SabreTools.DatFiles/Formats/SeparatedValue.cs +++ b/SabreTools.DatFiles/Formats/SeparatedValue.cs @@ -60,46 +60,21 @@ namespace SabreTools.DatFiles.Formats svr.ReadNextLine(); // Create mapping dictionaries - var datHeaderMappings = new Dictionary(); - var machineMappings = new Dictionary(); - var datItemMappings = new Dictionary(); - - // Now we loop through and get values for everything - for (int i = 0; i < svr.HeaderValues.Count; i++) - { - string value = svr.Line[i]; - DatHeaderField dhf = svr.HeaderValues[i].AsDatHeaderField(); - if (dhf != DatHeaderField.NULL) - { - datHeaderMappings[dhf] = value; - continue; - } - - MachineField mf = svr.HeaderValues[i].AsMachineField(); - if (mf != MachineField.NULL) - { - machineMappings[mf] = value; - continue; - } - - DatItemField dif = svr.HeaderValues[i].AsDatItemField(); - if (dif != DatItemField.NULL) - { - datItemMappings[dif] = value; - continue; - } - } + Setter setter = new Setter(); + setter.PopulateSettersFromList(svr.HeaderValues, svr.Line); // Set DatHeader fields - DatHeader header = new DatHeader(); - header.SetFields(datHeaderMappings); - Header.ConditionalCopy(header); + DatHeader datHeader = new DatHeader(); + setter.SetFields(datHeader); + Header.ConditionalCopy(datHeader); // Set Machine and DatItem fields - if (datItemMappings.ContainsKey(DatItemField.Type)) + if (setter.DatItemMappings.ContainsKey(DatItemField.Type)) { - DatItem datItem = DatItem.Create(datItemMappings[DatItemField.Type].AsItemType()); - Setter.SetFields(datItem, datItemMappings, machineMappings); + DatItem datItem = DatItem.Create(setter.DatItemMappings[DatItemField.Type].AsItemType()); + setter.SetFields(datItem); + datItem.Machine = new Machine(); + setter.SetFields(datItem.Machine); datItem.Source = new Source(indexId, filename); ParseAddHelper(datItem, statsOnly); } diff --git a/SabreTools.DatFiles/Setter.cs b/SabreTools.DatFiles/Setter.cs new file mode 100644 index 00000000..ffd927aa --- /dev/null +++ b/SabreTools.DatFiles/Setter.cs @@ -0,0 +1,1220 @@ +using System; +using System.Collections.Generic; +using System.Linq; + +using SabreTools.Core; +using SabreTools.Core.Tools; +using SabreTools.DatItems; +using SabreTools.Logging; + +namespace SabreTools.DatFiles +{ + /// + /// Set fields on DatItems + /// + public class Setter + { + #region Fields + + /// + /// Mappings to set DatHeader fields + /// + public Dictionary DatHeaderMappings { get; set; } + + /// + /// Mappings to set Machine fields + /// + public Dictionary MachineMappings { get; set; } + + /// + /// Mappings to set DatItem fields + /// + public Dictionary DatItemMappings { get; set; } + + #endregion + + #region Logging + + /// + /// Logging object + /// + private readonly Logger logger = new Logger(); + + #endregion + + #region Population + + /// + /// Populate the setters using a set of field names + /// + /// List of header names + /// List of field names + public void PopulateSettersFromList(List headers, List fields) + { + // Instantiate the setters, if necessary + DatHeaderMappings ??= new Dictionary(); + MachineMappings ??= new Dictionary(); + DatItemMappings ??= new Dictionary(); + + // If the list is null or empty, just return + if (fields == null || fields.Count == 0) + return; + + // Now we loop through and get values for everything + for (int i = 0; i < headers.Count; i++) + { + string field = fields[i]; + DatHeaderField dhf = headers[i].AsDatHeaderField(); + if (dhf != DatHeaderField.NULL) + { + DatHeaderMappings[dhf] = field; + continue; + } + + MachineField mf = headers[i].AsMachineField(); + if (mf != MachineField.NULL) + { + MachineMappings[mf] = field; + continue; + } + + DatItemField dif = headers[i].AsDatItemField(); + if (dif != DatItemField.NULL) + { + DatItemMappings[dif] = field; + continue; + } + + // If we didn't match anything, log an error + logger.Warning($"The value {field} did not match any known field names. Please check the wiki for more details on supported field names."); + } + } + + #endregion + + /// + /// Set fields with given values + /// + /// DatHeader to set fields on + public void SetFields(DatHeader datHeader) + { + if (datHeader == null) + return; + + #region Common + + if (DatHeaderMappings.Keys.Contains(DatHeaderField.FileName)) + datHeader.FileName = DatHeaderMappings[DatHeaderField.FileName]; + + if (DatHeaderMappings.Keys.Contains(DatHeaderField.Name)) + datHeader.Name = DatHeaderMappings[DatHeaderField.Name]; + + if (DatHeaderMappings.Keys.Contains(DatHeaderField.Description)) + datHeader.Description = DatHeaderMappings[DatHeaderField.Description]; + + if (DatHeaderMappings.Keys.Contains(DatHeaderField.RootDir)) + datHeader.RootDir = DatHeaderMappings[DatHeaderField.RootDir]; + + if (DatHeaderMappings.Keys.Contains(DatHeaderField.Category)) + datHeader.Category = DatHeaderMappings[DatHeaderField.Category]; + + if (DatHeaderMappings.Keys.Contains(DatHeaderField.Version)) + datHeader.Version = DatHeaderMappings[DatHeaderField.Version]; + + if (DatHeaderMappings.Keys.Contains(DatHeaderField.Date)) + datHeader.Date = DatHeaderMappings[DatHeaderField.Date]; + + if (DatHeaderMappings.Keys.Contains(DatHeaderField.Author)) + datHeader.Author = DatHeaderMappings[DatHeaderField.Author]; + + if (DatHeaderMappings.Keys.Contains(DatHeaderField.Email)) + datHeader.Email = DatHeaderMappings[DatHeaderField.Email]; + + if (DatHeaderMappings.Keys.Contains(DatHeaderField.Homepage)) + datHeader.Homepage = DatHeaderMappings[DatHeaderField.Homepage]; + + if (DatHeaderMappings.Keys.Contains(DatHeaderField.Url)) + datHeader.Url = DatHeaderMappings[DatHeaderField.Url]; + + if (DatHeaderMappings.Keys.Contains(DatHeaderField.Comment)) + datHeader.Comment = DatHeaderMappings[DatHeaderField.Comment]; + + if (DatHeaderMappings.Keys.Contains(DatHeaderField.HeaderSkipper)) + datHeader.HeaderSkipper = DatHeaderMappings[DatHeaderField.HeaderSkipper]; + + if (DatHeaderMappings.Keys.Contains(DatHeaderField.Type)) + datHeader.Type = DatHeaderMappings[DatHeaderField.Type]; + + if (DatHeaderMappings.Keys.Contains(DatHeaderField.ForceMerging)) + datHeader.ForceMerging = DatHeaderMappings[DatHeaderField.ForceMerging].AsMergingFlag(); + + if (DatHeaderMappings.Keys.Contains(DatHeaderField.ForceNodump)) + datHeader.ForceNodump = DatHeaderMappings[DatHeaderField.ForceNodump].AsNodumpFlag(); + + if (DatHeaderMappings.Keys.Contains(DatHeaderField.ForcePacking)) + datHeader.ForcePacking = DatHeaderMappings[DatHeaderField.ForcePacking].AsPackingFlag(); + + #endregion + + #region ListXML + + if (DatHeaderMappings.Keys.Contains(DatHeaderField.Debug)) + datHeader.Debug = DatHeaderMappings[DatHeaderField.Debug].AsYesNo(); + + if (DatHeaderMappings.Keys.Contains(DatHeaderField.MameConfig)) + datHeader.MameConfig = DatHeaderMappings[DatHeaderField.MameConfig]; + + #endregion + + #region Logiqx + + if (DatHeaderMappings.Keys.Contains(DatHeaderField.Build)) + datHeader.Build = DatHeaderMappings[DatHeaderField.Build]; + + if (DatHeaderMappings.Keys.Contains(DatHeaderField.RomMode)) + datHeader.RomMode = DatHeaderMappings[DatHeaderField.RomMode].AsMergingFlag(); + + if (DatHeaderMappings.Keys.Contains(DatHeaderField.BiosMode)) + datHeader.BiosMode = DatHeaderMappings[DatHeaderField.BiosMode].AsMergingFlag(); + + if (DatHeaderMappings.Keys.Contains(DatHeaderField.SampleMode)) + datHeader.SampleMode = DatHeaderMappings[DatHeaderField.SampleMode].AsMergingFlag(); + + if (DatHeaderMappings.Keys.Contains(DatHeaderField.LockRomMode)) + datHeader.LockRomMode = DatHeaderMappings[DatHeaderField.LockRomMode].AsYesNo(); + + if (DatHeaderMappings.Keys.Contains(DatHeaderField.LockBiosMode)) + datHeader.LockBiosMode = DatHeaderMappings[DatHeaderField.LockBiosMode].AsYesNo(); + + if (DatHeaderMappings.Keys.Contains(DatHeaderField.LockSampleMode)) + datHeader.LockSampleMode = DatHeaderMappings[DatHeaderField.LockSampleMode].AsYesNo(); + + #endregion + + #region OfflineList + + if (DatHeaderMappings.Keys.Contains(DatHeaderField.System)) + datHeader.System = DatHeaderMappings[DatHeaderField.System]; + + if (DatHeaderMappings.Keys.Contains(DatHeaderField.ScreenshotsWidth)) + datHeader.ScreenshotsWidth = DatHeaderMappings[DatHeaderField.ScreenshotsWidth]; + + if (DatHeaderMappings.Keys.Contains(DatHeaderField.ScreenshotsHeight)) + datHeader.ScreenshotsHeight = DatHeaderMappings[DatHeaderField.ScreenshotsHeight]; + + // TODO: Add DatHeader_Info* + // TDOO: Add DatHeader_CanOpen* + + if (DatHeaderMappings.Keys.Contains(DatHeaderField.RomTitle)) + datHeader.RomTitle = DatHeaderMappings[DatHeaderField.RomTitle]; + + #endregion + + #region RomCenter + + if (DatHeaderMappings.Keys.Contains(DatHeaderField.RomCenterVersion)) + datHeader.RomCenterVersion = DatHeaderMappings[DatHeaderField.RomCenterVersion]; + + #endregion + } + + /// + /// Set fields with given values + /// + /// DatItem to set fields on + public void SetFields(DatItem datItem) + { + if (datItem == null || DatItemMappings == null) + return; + + #region Common + + if (DatItemMappings.Keys.Contains(DatItemField.Name)) + datItem.SetName(DatItemMappings[DatItemField.Name]); + + #endregion + + #region Item-Specific + + if (datItem is Adjuster) SetFields(datItem as Adjuster); + else if (datItem is Analog) SetFields(datItem as Analog); + else if (datItem is BiosSet) SetFields(datItem as BiosSet); + else if (datItem is Chip) SetFields(datItem as Chip); + else if (datItem is Condition) SetFields(datItem as Condition); + else if (datItem is Configuration) SetFields(datItem as Configuration); + else if (datItem is Control) SetFields(datItem as Control); + else if (datItem is DataArea) SetFields(datItem as DataArea); + else if (datItem is Device) SetFields(datItem as Device); + else if (datItem is DipSwitch) SetFields(datItem as DipSwitch); + else if (datItem is Disk) SetFields(datItem as Disk); + else if (datItem is DiskArea) SetFields(datItem as DiskArea); + else if (datItem is Display) SetFields(datItem as Display); + else if (datItem is Driver) SetFields(datItem as Driver); + else if (datItem is Extension) SetFields(datItem as Extension); + else if (datItem is Feature) SetFields(datItem as Feature); + else if (datItem is Info) SetFields(datItem as Info); + else if (datItem is Input) SetFields(datItem as Input); + else if (datItem is Instance) SetFields(datItem as Instance); + else if (datItem is Location) SetFields(datItem as Location); + else if (datItem is Media) SetFields(datItem as Media); + else if (datItem is Part) SetFields(datItem as Part); + else if (datItem is PartFeature) SetFields(datItem as PartFeature); + else if (datItem is Port) SetFields(datItem as Port); + else if (datItem is RamOption) SetFields(datItem as RamOption); + else if (datItem is Release) SetFields(datItem as Release); + else if (datItem is Rom) SetFields(datItem as Rom); + else if (datItem is Setting) SetFields(datItem as Setting); + else if (datItem is SharedFeature) SetFields(datItem as SharedFeature); + else if (datItem is Slot) SetFields(datItem as Slot); + else if (datItem is SlotOption) SetFields(datItem as SlotOption); + else if (datItem is SoftwareList) SetFields(datItem as SoftwareList); + else if (datItem is Sound) SetFields(datItem as Sound); + + #endregion + } + + /// + /// Set fields with given values + /// + /// Machine to set fields on + public void SetFields(Machine machine) + { + if (machine == null || MachineMappings == null) + return; + + #region Common + + if (MachineMappings.Keys.Contains(MachineField.Name)) + machine.Name = MachineMappings[MachineField.Name]; + + if (MachineMappings.Keys.Contains(MachineField.Comment)) + machine.Comment = MachineMappings[MachineField.Comment]; + + if (MachineMappings.Keys.Contains(MachineField.Description)) + machine.Description = MachineMappings[MachineField.Description]; + + if (MachineMappings.Keys.Contains(MachineField.Year)) + machine.Year = MachineMappings[MachineField.Year]; + + if (MachineMappings.Keys.Contains(MachineField.Manufacturer)) + machine.Manufacturer = MachineMappings[MachineField.Manufacturer]; + + if (MachineMappings.Keys.Contains(MachineField.Publisher)) + machine.Publisher = MachineMappings[MachineField.Publisher]; + + if (MachineMappings.Keys.Contains(MachineField.Category)) + machine.Category = MachineMappings[MachineField.Category]; + + if (MachineMappings.Keys.Contains(MachineField.RomOf)) + machine.RomOf = MachineMappings[MachineField.RomOf]; + + if (MachineMappings.Keys.Contains(MachineField.CloneOf)) + machine.CloneOf = MachineMappings[MachineField.CloneOf]; + + if (MachineMappings.Keys.Contains(MachineField.SampleOf)) + machine.SampleOf = MachineMappings[MachineField.SampleOf]; + + if (MachineMappings.Keys.Contains(MachineField.Type)) + machine.MachineType = MachineMappings[MachineField.Type].AsMachineType(); + + #endregion + + #region AttractMode + + if (MachineMappings.Keys.Contains(MachineField.Players)) + machine.Players = MachineMappings[MachineField.Players]; + + if (MachineMappings.Keys.Contains(MachineField.Rotation)) + machine.Rotation = MachineMappings[MachineField.Rotation]; + + if (MachineMappings.Keys.Contains(MachineField.Control)) + machine.Control = MachineMappings[MachineField.Control]; + + if (MachineMappings.Keys.Contains(MachineField.Status)) + machine.Status = MachineMappings[MachineField.Status]; + + if (MachineMappings.Keys.Contains(MachineField.DisplayCount)) + machine.DisplayCount = MachineMappings[MachineField.DisplayCount]; + + if (MachineMappings.Keys.Contains(MachineField.DisplayType)) + machine.DisplayType = MachineMappings[MachineField.DisplayType]; + + if (MachineMappings.Keys.Contains(MachineField.Buttons)) + machine.Buttons = MachineMappings[MachineField.Buttons]; + + #endregion + + #region ListXML + + if (MachineMappings.Keys.Contains(MachineField.History)) + machine.History = MachineMappings[MachineField.History]; + + if (MachineMappings.Keys.Contains(MachineField.SourceFile)) + machine.SourceFile = MachineMappings[MachineField.SourceFile]; + + if (MachineMappings.Keys.Contains(MachineField.Runnable)) + machine.Runnable = MachineMappings[MachineField.Runnable].AsRunnable(); + + #endregion + + #region Logiqx + + if (MachineMappings.Keys.Contains(MachineField.Board)) + machine.Board = MachineMappings[MachineField.Board]; + + if (MachineMappings.Keys.Contains(MachineField.RebuildTo)) + machine.RebuildTo = MachineMappings[MachineField.RebuildTo]; + + #endregion + + #region Logiqx EmuArc + + if (MachineMappings.Keys.Contains(MachineField.TitleID)) + machine.TitleID = MachineMappings[MachineField.TitleID]; + + if (MachineMappings.Keys.Contains(MachineField.Developer)) + machine.Developer = MachineMappings[MachineField.Developer]; + + if (MachineMappings.Keys.Contains(MachineField.Genre)) + machine.Genre = MachineMappings[MachineField.Genre]; + + if (MachineMappings.Keys.Contains(MachineField.Subgenre)) + machine.Subgenre = MachineMappings[MachineField.Subgenre]; + + if (MachineMappings.Keys.Contains(MachineField.Ratings)) + machine.Ratings = MachineMappings[MachineField.Ratings]; + + if (MachineMappings.Keys.Contains(MachineField.Score)) + machine.Score = MachineMappings[MachineField.Score]; + + if (MachineMappings.Keys.Contains(MachineField.Enabled)) + machine.Enabled = MachineMappings[MachineField.Enabled]; + + if (MachineMappings.Keys.Contains(MachineField.CRC)) + machine.Crc = MachineMappings[MachineField.CRC].AsYesNo(); + + if (MachineMappings.Keys.Contains(MachineField.RelatedTo)) + machine.RelatedTo = MachineMappings[MachineField.RelatedTo]; + + #endregion + + #region OpenMSX + + if (MachineMappings.Keys.Contains(MachineField.GenMSXID)) + machine.GenMSXID = MachineMappings[MachineField.GenMSXID]; + + if (MachineMappings.Keys.Contains(MachineField.System)) + machine.System = MachineMappings[MachineField.System]; + + if (MachineMappings.Keys.Contains(MachineField.Country)) + machine.Country = MachineMappings[MachineField.Country]; + + #endregion + + #region SoftwareList + + if (MachineMappings.Keys.Contains(MachineField.Supported)) + machine.Supported = MachineMappings[MachineField.Supported].AsSupported(); + + #endregion + } + + /// + /// Set fields with given values + /// + /// Adjuster to remove replace fields in + private void SetFields(Adjuster adjuster) + { + if (DatItemMappings.Keys.Contains(DatItemField.Default)) + adjuster.Default = DatItemMappings[DatItemField.Default].AsYesNo(); + + // Field.DatItem_Conditions does not apply here + if (adjuster.ConditionsSpecified) + { + foreach (Condition subCondition in adjuster.Conditions) + { + SetFields(subCondition, true); + } + } + } + + /// + /// Set fields with given values + /// + /// Analog to remove replace fields in + private void SetFields(Analog analog) + { + if (DatItemMappings.Keys.Contains(DatItemField.Analog_Mask)) + analog.Mask = DatItemMappings[DatItemField.Analog_Mask]; + } + + /// + /// Set fields with given values + /// + /// BiosSet to remove replace fields in + private void SetFields(BiosSet biosSet) + { + if (DatItemMappings.Keys.Contains(DatItemField.Description)) + biosSet.Description = DatItemMappings[DatItemField.Description]; + + if (DatItemMappings.Keys.Contains(DatItemField.Default)) + biosSet.Default = DatItemMappings[DatItemField.Default].AsYesNo(); + } + + /// + /// Set fields with given values + /// + /// Chip to remove replace fields in + private void SetFields(Chip chip) + { + if (DatItemMappings.Keys.Contains(DatItemField.Tag)) + chip.Tag = DatItemMappings[DatItemField.Tag]; + + if (DatItemMappings.Keys.Contains(DatItemField.ChipType)) + chip.ChipType = DatItemMappings[DatItemField.ChipType].AsChipType(); + + if (DatItemMappings.Keys.Contains(DatItemField.Clock)) + chip.Clock = Utilities.CleanLong(DatItemMappings[DatItemField.Clock]); + } + + /// + /// Set fields with given values + /// + /// Condition to remove replace fields in + /// True if this is a subitem, false otherwise + private void SetFields(Condition condition, bool sub = false) + { + if (sub) + { + if (DatItemMappings.Keys.Contains(DatItemField.Condition_Tag)) + condition.Tag = DatItemMappings[DatItemField.Condition_Tag]; + + if (DatItemMappings.Keys.Contains(DatItemField.Condition_Mask)) + condition.Mask = DatItemMappings[DatItemField.Condition_Mask]; + + if (DatItemMappings.Keys.Contains(DatItemField.Condition_Relation)) + condition.Relation = DatItemMappings[DatItemField.Condition_Relation].AsRelation(); + + if (DatItemMappings.Keys.Contains(DatItemField.Condition_Value)) + condition.Value = DatItemMappings[DatItemField.Condition_Value]; + } + else + { + if (DatItemMappings.Keys.Contains(DatItemField.Tag)) + condition.Tag = DatItemMappings[DatItemField.Tag]; + + if (DatItemMappings.Keys.Contains(DatItemField.Mask)) + condition.Mask = DatItemMappings[DatItemField.Mask]; + + if (DatItemMappings.Keys.Contains(DatItemField.Relation)) + condition.Relation = DatItemMappings[DatItemField.Relation].AsRelation(); + + if (DatItemMappings.Keys.Contains(DatItemField.Value)) + condition.Value = DatItemMappings[DatItemField.Value]; + } + } + + /// + /// Set fields with given values + /// + /// Configuration to remove replace fields in + private void SetFields(Configuration configuration) + { + if (DatItemMappings.Keys.Contains(DatItemField.Tag)) + configuration.Tag = DatItemMappings[DatItemField.Tag]; + + if (DatItemMappings.Keys.Contains(DatItemField.Mask)) + configuration.Mask = DatItemMappings[DatItemField.Mask]; + + if (configuration.ConditionsSpecified) + { + foreach (Condition subCondition in configuration.Conditions) + { + SetFields(subCondition, true); + } + } + + if (configuration.LocationsSpecified) + { + foreach (Location subLocation in configuration.Locations) + { + SetFields(subLocation); + } + } + + if (configuration.SettingsSpecified) + { + foreach (Setting subSetting in configuration.Settings) + { + SetFields(subSetting); + } + } + } + + /// + /// Set fields with given values + /// + /// Control to remove replace fields in + private void SetFields(Control control) + { + if (DatItemMappings.Keys.Contains(DatItemField.Control_Type)) + control.ControlType = DatItemMappings[DatItemField.Control_Type].AsControlType(); + + if (DatItemMappings.Keys.Contains(DatItemField.Control_Player)) + control.Player = Utilities.CleanLong(DatItemMappings[DatItemField.Control_Player]); + + if (DatItemMappings.Keys.Contains(DatItemField.Control_Buttons)) + control.Buttons = Utilities.CleanLong(DatItemMappings[DatItemField.Control_Buttons]); + + if (DatItemMappings.Keys.Contains(DatItemField.Control_RequiredButtons)) + control.RequiredButtons = Utilities.CleanLong(DatItemMappings[DatItemField.Control_RequiredButtons]); + + if (DatItemMappings.Keys.Contains(DatItemField.Control_Minimum)) + control.Minimum = Utilities.CleanLong(DatItemMappings[DatItemField.Control_Minimum]); + + if (DatItemMappings.Keys.Contains(DatItemField.Control_Maximum)) + control.Maximum = Utilities.CleanLong(DatItemMappings[DatItemField.Control_Maximum]); + + if (DatItemMappings.Keys.Contains(DatItemField.Control_Sensitivity)) + control.Sensitivity = Utilities.CleanLong(DatItemMappings[DatItemField.Control_Sensitivity]); + + if (DatItemMappings.Keys.Contains(DatItemField.Control_KeyDelta)) + control.KeyDelta = Utilities.CleanLong(DatItemMappings[DatItemField.Control_KeyDelta]); + + if (DatItemMappings.Keys.Contains(DatItemField.Control_Reverse)) + control.Reverse = DatItemMappings[DatItemField.Control_Reverse].AsYesNo(); + + if (DatItemMappings.Keys.Contains(DatItemField.Control_Ways)) + control.Ways = DatItemMappings[DatItemField.Control_Ways]; + + if (DatItemMappings.Keys.Contains(DatItemField.Control_Ways2)) + control.Ways2 = DatItemMappings[DatItemField.Control_Ways2]; + + if (DatItemMappings.Keys.Contains(DatItemField.Control_Ways3)) + control.Ways3 = DatItemMappings[DatItemField.Control_Ways3]; + } + + /// + /// Set fields with given values + /// + /// DataArea to remove replace fields in + private void SetFields(DataArea dataArea) + { + if (DatItemMappings.Keys.Contains(DatItemField.AreaSize)) + dataArea.Size = Utilities.CleanLong(DatItemMappings[DatItemField.AreaSize]); + + if (DatItemMappings.Keys.Contains(DatItemField.AreaWidth)) + dataArea.Width = Utilities.CleanLong(DatItemMappings[DatItemField.AreaWidth]); + + if (DatItemMappings.Keys.Contains(DatItemField.AreaEndianness)) + dataArea.Endianness = DatItemMappings[DatItemField.AreaEndianness].AsEndianness(); + } + + /// + /// Set fields with given values + /// + /// Device to remove replace fields in + private void SetFields(Device device) + { + if (DatItemMappings.Keys.Contains(DatItemField.DeviceType)) + device.DeviceType = DatItemMappings[DatItemField.DeviceType].AsDeviceType(); + + if (DatItemMappings.Keys.Contains(DatItemField.Tag)) + device.Tag = DatItemMappings[DatItemField.Tag]; + + if (DatItemMappings.Keys.Contains(DatItemField.FixedImage)) + device.FixedImage = DatItemMappings[DatItemField.FixedImage]; + + if (DatItemMappings.Keys.Contains(DatItemField.Mandatory)) + device.Mandatory = Utilities.CleanLong(DatItemMappings[DatItemField.Mandatory]); + + if (DatItemMappings.Keys.Contains(DatItemField.Interface)) + device.Interface = DatItemMappings[DatItemField.Interface]; + + if (device.InstancesSpecified) + { + foreach (Instance subInstance in device.Instances) + { + SetFields(subInstance); + } + } + + if (device.ExtensionsSpecified) + { + foreach (Extension subExtension in device.Extensions) + { + SetFields(subExtension); + } + } + } + + /// + /// Set fields with given values + /// + /// DipSwitch to remove replace fields in + private void SetFields(DipSwitch dipSwitch) + { + #region Common + + if (DatItemMappings.Keys.Contains(DatItemField.Tag)) + dipSwitch.Tag = DatItemMappings[DatItemField.Tag]; + + if (DatItemMappings.Keys.Contains(DatItemField.Mask)) + dipSwitch.Mask = DatItemMappings[DatItemField.Mask]; + + if (dipSwitch.ConditionsSpecified) + { + foreach (Condition subCondition in dipSwitch.Conditions) + { + SetFields(subCondition, true); + } + } + + if (dipSwitch.LocationsSpecified) + { + foreach (Location subLocation in dipSwitch.Locations) + { + SetFields(subLocation); + } + } + + if (dipSwitch.ValuesSpecified) + { + foreach (Setting subValue in dipSwitch.Values) + { + SetFields(subValue); + } + } + + #endregion + + #region SoftwareList + + // Handle Part-specific fields + if (dipSwitch.Part == null) + dipSwitch.Part = new Part(); + + SetFields(dipSwitch.Part); + + #endregion + } + + /// + /// Set fields with given values + /// + /// Disk to remove replace fields in + private void SetFields(Disk disk) + { + #region Common + + if (DatItemMappings.Keys.Contains(DatItemField.MD5)) + disk.MD5 = DatItemMappings[DatItemField.MD5]; + + if (DatItemMappings.Keys.Contains(DatItemField.SHA1)) + disk.SHA1 = DatItemMappings[DatItemField.SHA1]; + + if (DatItemMappings.Keys.Contains(DatItemField.Merge)) + disk.MergeTag = DatItemMappings[DatItemField.Merge]; + + if (DatItemMappings.Keys.Contains(DatItemField.Region)) + disk.Region = DatItemMappings[DatItemField.Region]; + + if (DatItemMappings.Keys.Contains(DatItemField.Index)) + disk.Index = DatItemMappings[DatItemField.Index]; + + if (DatItemMappings.Keys.Contains(DatItemField.Writable)) + disk.Writable = DatItemMappings[DatItemField.Writable].AsYesNo(); + + if (DatItemMappings.Keys.Contains(DatItemField.Status)) + disk.ItemStatus = DatItemMappings[DatItemField.Status].AsItemStatus(); + + if (DatItemMappings.Keys.Contains(DatItemField.Optional)) + disk.Optional = DatItemMappings[DatItemField.Optional].AsYesNo(); + + #endregion + + #region SoftwareList + + if (disk.DiskArea == null) + disk.DiskArea = new DiskArea(); + + SetFields(disk.DiskArea); + + if (disk.Part == null) + disk.Part = new Part(); + + SetFields(disk.Part); + + #endregion + } + + /// + /// Set fields with given values + /// + /// DiskArea to remove replace fields in + private void SetFields(DiskArea diskArea) + { + if (DatItemMappings.Keys.Contains(DatItemField.AreaName)) + diskArea.Name = DatItemMappings[DatItemField.AreaName]; + } + + /// + /// Set fields with given values + /// + /// Display to remove replace fields in + private void SetFields(Display display) + { + if (DatItemMappings.Keys.Contains(DatItemField.Tag)) + display.Tag = DatItemMappings[DatItemField.Tag]; + + if (DatItemMappings.Keys.Contains(DatItemField.DisplayType)) + display.DisplayType = DatItemMappings[DatItemField.DisplayType].AsDisplayType(); + + if (DatItemMappings.Keys.Contains(DatItemField.Rotate)) + display.Rotate = Utilities.CleanLong(DatItemMappings[DatItemField.Rotate]); + + if (DatItemMappings.Keys.Contains(DatItemField.FlipX)) + display.FlipX = DatItemMappings[DatItemField.FlipX].AsYesNo(); + + if (DatItemMappings.Keys.Contains(DatItemField.Width)) + display.Width = Utilities.CleanLong(DatItemMappings[DatItemField.Width]); + + if (DatItemMappings.Keys.Contains(DatItemField.Height)) + display.Height = Utilities.CleanLong(DatItemMappings[DatItemField.Height]); + + if (DatItemMappings.Keys.Contains(DatItemField.Refresh)) + display.Refresh = Utilities.CleanDouble(DatItemMappings[DatItemField.Refresh]); + + if (DatItemMappings.Keys.Contains(DatItemField.PixClock)) + display.PixClock = Utilities.CleanLong(DatItemMappings[DatItemField.PixClock]); + + if (DatItemMappings.Keys.Contains(DatItemField.HTotal)) + display.HTotal = Utilities.CleanLong(DatItemMappings[DatItemField.HTotal]); + + if (DatItemMappings.Keys.Contains(DatItemField.HBEnd)) + display.HBEnd = Utilities.CleanLong(DatItemMappings[DatItemField.HBEnd]); + + if (DatItemMappings.Keys.Contains(DatItemField.HBStart)) + display.HBStart = Utilities.CleanLong(DatItemMappings[DatItemField.HBStart]); + + if (DatItemMappings.Keys.Contains(DatItemField.VTotal)) + display.VTotal = Utilities.CleanLong(DatItemMappings[DatItemField.VTotal]); + + if (DatItemMappings.Keys.Contains(DatItemField.VBEnd)) + display.VBEnd = Utilities.CleanLong(DatItemMappings[DatItemField.VBEnd]); + + if (DatItemMappings.Keys.Contains(DatItemField.VBStart)) + display.VBStart = Utilities.CleanLong(DatItemMappings[DatItemField.VBStart]); + } + + /// + /// Set fields with given values + /// + /// Driver to remove replace fields in + private void SetFields(Driver driver) + { + if (DatItemMappings.Keys.Contains(DatItemField.SupportStatus)) + driver.Status = DatItemMappings[DatItemField.SupportStatus].AsSupportStatus(); + + if (DatItemMappings.Keys.Contains(DatItemField.EmulationStatus)) + driver.Emulation = DatItemMappings[DatItemField.EmulationStatus].AsSupportStatus(); + + if (DatItemMappings.Keys.Contains(DatItemField.CocktailStatus)) + driver.Cocktail = DatItemMappings[DatItemField.CocktailStatus].AsSupportStatus(); + + if (DatItemMappings.Keys.Contains(DatItemField.SaveStateStatus)) + driver.SaveState = DatItemMappings[DatItemField.SaveStateStatus].AsSupported(); + } + + /// + /// Set fields with given values + /// + /// Extension to remove replace fields in + private void SetFields(Extension extension) + { + if (DatItemMappings.Keys.Contains(DatItemField.Extension_Name)) + extension.Name = DatItemMappings[DatItemField.Extension_Name]; + } + + /// + /// Set fields with given values + /// + /// Feature to remove replace fields in + private void SetFields(Feature feature) + { + if (DatItemMappings.Keys.Contains(DatItemField.FeatureType)) + feature.Type = DatItemMappings[DatItemField.FeatureType].AsFeatureType(); + + if (DatItemMappings.Keys.Contains(DatItemField.FeatureStatus)) + feature.Status = DatItemMappings[DatItemField.FeatureStatus].AsFeatureStatus(); + + if (DatItemMappings.Keys.Contains(DatItemField.FeatureOverall)) + feature.Overall = DatItemMappings[DatItemField.FeatureOverall].AsFeatureStatus(); + } + + /// + /// Set fields with given values + /// + /// Info to remove replace fields in + private void SetFields(Info info) + { + if (DatItemMappings.Keys.Contains(DatItemField.Value)) + info.Value = DatItemMappings[DatItemField.Value]; + } + + /// + /// Set fields with given values + /// + /// Input to remove replace fields in + private void SetFields(Input input) + { + if (DatItemMappings.Keys.Contains(DatItemField.Service)) + input.Service = DatItemMappings[DatItemField.Service].AsYesNo(); + + if (DatItemMappings.Keys.Contains(DatItemField.Tilt)) + input.Tilt = DatItemMappings[DatItemField.Tilt].AsYesNo(); + + if (DatItemMappings.Keys.Contains(DatItemField.Players)) + input.Players = Utilities.CleanLong(DatItemMappings[DatItemField.Players]); + + if (DatItemMappings.Keys.Contains(DatItemField.Coins)) + input.Coins = Utilities.CleanLong(DatItemMappings[DatItemField.Coins]); + + if (input.ControlsSpecified) + { + foreach (Control subControl in input.Controls) + { + SetFields(subControl); + } + } + } + + /// + /// Set fields with given values + /// + /// Instance to remove replace fields in + private void SetFields(Instance instance) + { + if (DatItemMappings.Keys.Contains(DatItemField.Instance_Name)) + instance.BriefName = DatItemMappings[DatItemField.Instance_Name]; + + if (DatItemMappings.Keys.Contains(DatItemField.Instance_BriefName)) + instance.BriefName = DatItemMappings[DatItemField.Instance_BriefName]; + } + + /// + /// Set fields with given values + /// + /// Location to remove replace fields in + private void SetFields(Location location) + { + if (DatItemMappings.Keys.Contains(DatItemField.Location_Name)) + location.Name = DatItemMappings[DatItemField.Location_Name]; + + if (DatItemMappings.Keys.Contains(DatItemField.Location_Number)) + location.Number = Utilities.CleanLong(DatItemMappings[DatItemField.Location_Number]); + + if (DatItemMappings.Keys.Contains(DatItemField.Location_Inverted)) + location.Inverted = DatItemMappings[DatItemField.Location_Inverted].AsYesNo(); + } + + /// + /// Set fields with given values + /// + /// Media to remove replace fields in + private void SetFields(Media media) + { + if (DatItemMappings.Keys.Contains(DatItemField.MD5)) + media.MD5 = DatItemMappings[DatItemField.MD5]; + + if (DatItemMappings.Keys.Contains(DatItemField.SHA1)) + media.SHA1 = DatItemMappings[DatItemField.SHA1]; + + if (DatItemMappings.Keys.Contains(DatItemField.SHA256)) + media.SHA256 = DatItemMappings[DatItemField.SHA256]; + + if (DatItemMappings.Keys.Contains(DatItemField.SpamSum)) + media.SpamSum = DatItemMappings[DatItemField.SpamSum]; + } + + /// + /// Set fields with given values + /// + /// Part to remove replace fields in + private void SetFields(Part part) + { + if (DatItemMappings.Keys.Contains(DatItemField.Part_Name)) + part.Name = DatItemMappings[DatItemField.Part_Name]; + + if (DatItemMappings.Keys.Contains(DatItemField.Part_Interface)) + part.Interface = DatItemMappings[DatItemField.Part_Interface]; + + if (part.FeaturesSpecified) + { + foreach (PartFeature subPartFeature in part.Features) + { + SetFields(subPartFeature); + } + } + } + + /// + /// Set fields with given values + /// + /// PartFeature to remove replace fields in + private void SetFields(PartFeature partFeature) + { + if (DatItemMappings.Keys.Contains(DatItemField.Part_Feature_Name)) + partFeature.Name = DatItemMappings[DatItemField.Part_Feature_Name]; + + if (DatItemMappings.Keys.Contains(DatItemField.Part_Feature_Value)) + partFeature.Value = DatItemMappings[DatItemField.Part_Feature_Value]; + } + + /// + /// Set fields with given values + /// + /// Port to remove replace fields in + private void SetFields(Port port) + { + if (DatItemMappings.Keys.Contains(DatItemField.Tag)) + port.Tag = DatItemMappings[DatItemField.Tag]; + + if (port.AnalogsSpecified) + { + foreach (Analog subAnalog in port.Analogs) + { + SetFields(subAnalog); + } + } + } + + /// + /// Set fields with given values + /// + /// RamOption to remove replace fields in + private void SetFields(RamOption ramOption) + { + if (DatItemMappings.Keys.Contains(DatItemField.Default)) + ramOption.Default = DatItemMappings[DatItemField.Default].AsYesNo(); + + if (DatItemMappings.Keys.Contains(DatItemField.Content)) + ramOption.Content = DatItemMappings[DatItemField.Content]; + } + + /// + /// Set fields with given values + /// + /// Release to remove replace fields in + private void SetFields(Release release) + { + if (DatItemMappings.Keys.Contains(DatItemField.Region)) + release.Region = DatItemMappings[DatItemField.Region]; + + if (DatItemMappings.Keys.Contains(DatItemField.Language)) + release.Language = DatItemMappings[DatItemField.Language]; + + if (DatItemMappings.Keys.Contains(DatItemField.Date)) + release.Date = DatItemMappings[DatItemField.Date]; + + if (DatItemMappings.Keys.Contains(DatItemField.Default)) + release.Default = DatItemMappings[DatItemField.Default].AsYesNo(); + } + + /// + /// Set fields with given values + /// + /// Rom to remove replace fields in + private void SetFields(Rom rom) + { + #region Common + + if (DatItemMappings.Keys.Contains(DatItemField.Bios)) + rom.Bios = DatItemMappings[DatItemField.Bios]; + + if (DatItemMappings.Keys.Contains(DatItemField.Size)) + rom.Size = Utilities.CleanLong(DatItemMappings[DatItemField.Size]); + + if (DatItemMappings.Keys.Contains(DatItemField.CRC)) + rom.CRC = DatItemMappings[DatItemField.CRC]; + + if (DatItemMappings.Keys.Contains(DatItemField.MD5)) + rom.MD5 = DatItemMappings[DatItemField.MD5]; + + if (DatItemMappings.Keys.Contains(DatItemField.SHA1)) + rom.SHA1 = DatItemMappings[DatItemField.SHA1]; + + if (DatItemMappings.Keys.Contains(DatItemField.SHA256)) + rom.SHA256 = DatItemMappings[DatItemField.SHA256]; + + if (DatItemMappings.Keys.Contains(DatItemField.SHA384)) + rom.SHA384 = DatItemMappings[DatItemField.SHA384]; + + if (DatItemMappings.Keys.Contains(DatItemField.SHA512)) + rom.SHA512 = DatItemMappings[DatItemField.SHA512]; + + if (DatItemMappings.Keys.Contains(DatItemField.SpamSum)) + rom.SpamSum = DatItemMappings[DatItemField.SpamSum]; + + if (DatItemMappings.Keys.Contains(DatItemField.Merge)) + rom.MergeTag = DatItemMappings[DatItemField.Merge]; + + if (DatItemMappings.Keys.Contains(DatItemField.Region)) + rom.Region = DatItemMappings[DatItemField.Region]; + + if (DatItemMappings.Keys.Contains(DatItemField.Offset)) + rom.Offset = DatItemMappings[DatItemField.Offset]; + + if (DatItemMappings.Keys.Contains(DatItemField.Date)) + rom.Date = DatItemMappings[DatItemField.Date]; + + if (DatItemMappings.Keys.Contains(DatItemField.Status)) + rom.ItemStatus = DatItemMappings[DatItemField.Status].AsItemStatus(); + + if (DatItemMappings.Keys.Contains(DatItemField.Optional)) + rom.Optional = DatItemMappings[DatItemField.Optional].AsYesNo(); + + if (DatItemMappings.Keys.Contains(DatItemField.Inverted)) + rom.Inverted = DatItemMappings[DatItemField.Optional].AsYesNo(); + + #endregion + + #region AttractMode + + if (DatItemMappings.Keys.Contains(DatItemField.AltName)) + rom.AltName = DatItemMappings[DatItemField.AltName]; + + if (DatItemMappings.Keys.Contains(DatItemField.AltTitle)) + rom.AltTitle = DatItemMappings[DatItemField.AltTitle]; + + #endregion + + #region OpenMSX + + if (DatItemMappings.Keys.Contains(DatItemField.Original)) + rom.Original = new Original() { Content = DatItemMappings[DatItemField.Original] }; + + if (DatItemMappings.Keys.Contains(DatItemField.OpenMSXSubType)) + rom.OpenMSXSubType = DatItemMappings[DatItemField.OpenMSXSubType].AsOpenMSXSubType(); + + if (DatItemMappings.Keys.Contains(DatItemField.OpenMSXType)) + rom.OpenMSXType = DatItemMappings[DatItemField.OpenMSXType]; + + if (DatItemMappings.Keys.Contains(DatItemField.Remark)) + rom.Remark = DatItemMappings[DatItemField.Remark]; + + if (DatItemMappings.Keys.Contains(DatItemField.Boot)) + rom.Boot = DatItemMappings[DatItemField.Boot]; + + #endregion + + #region SoftwareList + + if (DatItemMappings.Keys.Contains(DatItemField.LoadFlag)) + rom.LoadFlag = DatItemMappings[DatItemField.LoadFlag].AsLoadFlag(); + + if (DatItemMappings.Keys.Contains(DatItemField.Value)) + rom.Value = DatItemMappings[DatItemField.Value]; + + if (rom.DataArea == null) + rom.DataArea = new DataArea(); + + SetFields(rom.DataArea); + + if (rom.Part == null) + rom.Part = new Part(); + + SetFields(rom.Part); + + #endregion + } + + /// + /// Set fields with given values + /// + /// Setting to remove replace fields in + private void SetFields(Setting setting) + { + if (DatItemMappings.Keys.Contains(DatItemField.Setting_Name)) + setting.Name = DatItemMappings[DatItemField.Setting_Name]; + + if (DatItemMappings.Keys.Contains(DatItemField.Setting_Value)) + setting.Value = DatItemMappings[DatItemField.Setting_Value]; + + if (DatItemMappings.Keys.Contains(DatItemField.Setting_Default)) + setting.Default = DatItemMappings[DatItemField.Setting_Default].AsYesNo(); + + if (setting.ConditionsSpecified) + { + foreach (Condition subCondition in setting.Conditions) + { + SetFields(subCondition, true); + } + } + } + + /// + /// Set fields with given values + /// + /// SharedFeature to remove replace fields in + private void SetFields(SharedFeature sharedFeature) + { + if (DatItemMappings.Keys.Contains(DatItemField.Value)) + sharedFeature.Value = DatItemMappings[DatItemField.Value]; + } + + /// + /// Set fields with given values + /// + /// Slot to remove replace fields in + private void SetFields(Slot slot) + { + if (slot.SlotOptionsSpecified) + { + foreach (SlotOption subSlotOption in slot.SlotOptions) + { + SetFields(subSlotOption); + } + } + } + + /// + /// Set fields with given values + /// + /// SlotOption to remove replace fields in + private void SetFields(SlotOption slotOption) + { + if (DatItemMappings.Keys.Contains(DatItemField.SlotOption_Name)) + slotOption.Name = DatItemMappings[DatItemField.SlotOption_Name]; + + if (DatItemMappings.Keys.Contains(DatItemField.SlotOption_DeviceName)) + slotOption.DeviceName = DatItemMappings[DatItemField.SlotOption_DeviceName]; + + if (DatItemMappings.Keys.Contains(DatItemField.SlotOption_Default)) + slotOption.Default = DatItemMappings[DatItemField.SlotOption_Default].AsYesNo(); + } + + /// + /// Set fields with given values + /// + /// SoftwareList to remove replace fields in + private void SetFields(SoftwareList softwareList) + { + if (DatItemMappings.Keys.Contains(DatItemField.SoftwareListStatus)) + softwareList.Status = DatItemMappings[DatItemField.SoftwareListStatus].AsSoftwareListStatus(); + + if (DatItemMappings.Keys.Contains(DatItemField.Filter)) + softwareList.Filter = DatItemMappings[DatItemField.Filter]; + } + + /// + /// Set fields with given values + /// + /// Sound to remove replace fields in + private void SetFields(Sound sound) + { + if (DatItemMappings.Keys.Contains(DatItemField.Channels)) + sound.Channels = Utilities.CleanLong(DatItemMappings[DatItemField.Channels]); + } + } +} \ No newline at end of file diff --git a/SabreTools.DatItems/Setter.cs b/SabreTools.DatItems/Setter.cs deleted file mode 100644 index eee047c8..00000000 --- a/SabreTools.DatItems/Setter.cs +++ /dev/null @@ -1,1062 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; - -using SabreTools.Core; -using SabreTools.Core.Tools; - -namespace SabreTools.DatItems -{ - /// - /// Set fields on DatItems - /// - public static class Setter - { - /// - /// Set fields with given values - /// - /// DatItem to set fields on - /// DatItem mappings dictionary - /// Machine mappings dictionary - public static void SetFields( - DatItem datItem, - Dictionary datItemMappings, - Dictionary machineMappings) - { - if (datItem == null) - return; - - #region Common - - if (machineMappings != null && datItem.Machine != null) - SetFields(datItem.Machine, machineMappings); - - if (datItemMappings == null) - return; - - if (datItemMappings.Keys.Contains(DatItemField.Name)) - datItem.SetName(datItemMappings[DatItemField.Name]); - - #endregion - - #region Item-Specific - - if (datItem is Adjuster) SetFields(datItem as Adjuster, datItemMappings); - else if (datItem is Analog) SetFields(datItem as Analog, datItemMappings); - else if (datItem is BiosSet) SetFields(datItem as BiosSet, datItemMappings); - else if (datItem is Chip) SetFields(datItem as Chip, datItemMappings); - else if (datItem is Condition) SetFields(datItem as Condition, datItemMappings); - else if (datItem is Configuration) SetFields(datItem as Configuration, datItemMappings); - else if (datItem is Control) SetFields(datItem as Control, datItemMappings); - else if (datItem is DataArea) SetFields(datItem as DataArea, datItemMappings); - else if (datItem is Device) SetFields(datItem as Device, datItemMappings); - else if (datItem is DipSwitch) SetFields(datItem as DipSwitch, datItemMappings); - else if (datItem is Disk) SetFields(datItem as Disk, datItemMappings); - else if (datItem is DiskArea) SetFields(datItem as DiskArea, datItemMappings); - else if (datItem is Display) SetFields(datItem as Display, datItemMappings); - else if (datItem is Driver) SetFields(datItem as Driver, datItemMappings); - else if (datItem is Extension) SetFields(datItem as Extension, datItemMappings); - else if (datItem is Feature) SetFields(datItem as Feature, datItemMappings); - else if (datItem is Info) SetFields(datItem as Info, datItemMappings); - else if (datItem is Input) SetFields(datItem as Input, datItemMappings); - else if (datItem is Instance) SetFields(datItem as Instance, datItemMappings); - else if (datItem is Location) SetFields(datItem as Location, datItemMappings); - else if (datItem is Media) SetFields(datItem as Media, datItemMappings); - else if (datItem is Part) SetFields(datItem as Part, datItemMappings); - else if (datItem is PartFeature) SetFields(datItem as PartFeature, datItemMappings); - else if (datItem is Port) SetFields(datItem as Port, datItemMappings); - else if (datItem is RamOption) SetFields(datItem as RamOption, datItemMappings); - else if (datItem is Release) SetFields(datItem as Release, datItemMappings); - else if (datItem is Rom) SetFields(datItem as Rom, datItemMappings); - else if (datItem is Setting) SetFields(datItem as Setting, datItemMappings); - else if (datItem is SharedFeature) SetFields(datItem as SharedFeature, datItemMappings); - else if (datItem is Slot) SetFields(datItem as Slot, datItemMappings); - else if (datItem is SlotOption) SetFields(datItem as SlotOption, datItemMappings); - else if (datItem is SoftwareList) SetFields(datItem as SoftwareList, datItemMappings); - else if (datItem is Sound) SetFields(datItem as Sound, datItemMappings); - - #endregion - } - - /// - /// Set fields with given values - /// - /// Machine to set fields on - /// Mappings dictionary - public static void SetFields(Machine machine, Dictionary mappings) - { - if (machine == null || mappings == null) - return; - - #region Common - - if (mappings.Keys.Contains(MachineField.Name)) - machine.Name = mappings[MachineField.Name]; - - if (mappings.Keys.Contains(MachineField.Comment)) - machine.Comment = mappings[MachineField.Comment]; - - if (mappings.Keys.Contains(MachineField.Description)) - machine.Description = mappings[MachineField.Description]; - - if (mappings.Keys.Contains(MachineField.Year)) - machine.Year = mappings[MachineField.Year]; - - if (mappings.Keys.Contains(MachineField.Manufacturer)) - machine.Manufacturer = mappings[MachineField.Manufacturer]; - - if (mappings.Keys.Contains(MachineField.Publisher)) - machine.Publisher = mappings[MachineField.Publisher]; - - if (mappings.Keys.Contains(MachineField.Category)) - machine.Category = mappings[MachineField.Category]; - - if (mappings.Keys.Contains(MachineField.RomOf)) - machine.RomOf = mappings[MachineField.RomOf]; - - if (mappings.Keys.Contains(MachineField.CloneOf)) - machine.CloneOf = mappings[MachineField.CloneOf]; - - if (mappings.Keys.Contains(MachineField.SampleOf)) - machine.SampleOf = mappings[MachineField.SampleOf]; - - if (mappings.Keys.Contains(MachineField.Type)) - machine.MachineType = mappings[MachineField.Type].AsMachineType(); - - #endregion - - #region AttractMode - - if (mappings.Keys.Contains(MachineField.Players)) - machine.Players = mappings[MachineField.Players]; - - if (mappings.Keys.Contains(MachineField.Rotation)) - machine.Rotation = mappings[MachineField.Rotation]; - - if (mappings.Keys.Contains(MachineField.Control)) - machine.Control = mappings[MachineField.Control]; - - if (mappings.Keys.Contains(MachineField.Status)) - machine.Status = mappings[MachineField.Status]; - - if (mappings.Keys.Contains(MachineField.DisplayCount)) - machine.DisplayCount = mappings[MachineField.DisplayCount]; - - if (mappings.Keys.Contains(MachineField.DisplayType)) - machine.DisplayType = mappings[MachineField.DisplayType]; - - if (mappings.Keys.Contains(MachineField.Buttons)) - machine.Buttons = mappings[MachineField.Buttons]; - - #endregion - - #region ListXML - - if (mappings.Keys.Contains(MachineField.History)) - machine.History = mappings[MachineField.History]; - - if (mappings.Keys.Contains(MachineField.SourceFile)) - machine.SourceFile = mappings[MachineField.SourceFile]; - - if (mappings.Keys.Contains(MachineField.Runnable)) - machine.Runnable = mappings[MachineField.Runnable].AsRunnable(); - - #endregion - - #region Logiqx - - if (mappings.Keys.Contains(MachineField.Board)) - machine.Board = mappings[MachineField.Board]; - - if (mappings.Keys.Contains(MachineField.RebuildTo)) - machine.RebuildTo = mappings[MachineField.RebuildTo]; - - #endregion - - #region Logiqx EmuArc - - if (mappings.Keys.Contains(MachineField.TitleID)) - machine.TitleID = mappings[MachineField.TitleID]; - - if (mappings.Keys.Contains(MachineField.Developer)) - machine.Developer = mappings[MachineField.Developer]; - - if (mappings.Keys.Contains(MachineField.Genre)) - machine.Genre = mappings[MachineField.Genre]; - - if (mappings.Keys.Contains(MachineField.Subgenre)) - machine.Subgenre = mappings[MachineField.Subgenre]; - - if (mappings.Keys.Contains(MachineField.Ratings)) - machine.Ratings = mappings[MachineField.Ratings]; - - if (mappings.Keys.Contains(MachineField.Score)) - machine.Score = mappings[MachineField.Score]; - - if (mappings.Keys.Contains(MachineField.Enabled)) - machine.Enabled = mappings[MachineField.Enabled]; - - if (mappings.Keys.Contains(MachineField.CRC)) - machine.Crc = mappings[MachineField.CRC].AsYesNo(); - - if (mappings.Keys.Contains(MachineField.RelatedTo)) - machine.RelatedTo = mappings[MachineField.RelatedTo]; - - #endregion - - #region OpenMSX - - if (mappings.Keys.Contains(MachineField.GenMSXID)) - machine.GenMSXID = mappings[MachineField.GenMSXID]; - - if (mappings.Keys.Contains(MachineField.System)) - machine.System = mappings[MachineField.System]; - - if (mappings.Keys.Contains(MachineField.Country)) - machine.Country = mappings[MachineField.Country]; - - #endregion - - #region SoftwareList - - if (mappings.Keys.Contains(MachineField.Supported)) - machine.Supported = mappings[MachineField.Supported].AsSupported(); - - #endregion - } - - /// - /// Set fields with given values - /// - /// Adjuster to remove replace fields in - /// DatItem mappings dictionary - private static void SetFields(Adjuster adjuster, Dictionary datItemMappings) - { - if (datItemMappings.Keys.Contains(DatItemField.Default)) - adjuster.Default = datItemMappings[DatItemField.Default].AsYesNo(); - - // Field.DatItem_Conditions does not apply here - if (adjuster.ConditionsSpecified) - { - foreach (Condition subCondition in adjuster.Conditions) - { - SetFields(subCondition, datItemMappings, true); - } - } - } - - /// - /// Set fields with given values - /// - /// Analog to remove replace fields in - /// DatItem mappings dictionary - private static void SetFields(Analog analog, Dictionary datItemMappings) - { - if (datItemMappings.Keys.Contains(DatItemField.Analog_Mask)) - analog.Mask = datItemMappings[DatItemField.Analog_Mask]; - } - - /// - /// Set fields with given values - /// - /// BiosSet to remove replace fields in - /// DatItem mappings dictionary - private static void SetFields(BiosSet biosSet, Dictionary datItemMappings) - { - if (datItemMappings.Keys.Contains(DatItemField.Description)) - biosSet.Description = datItemMappings[DatItemField.Description]; - - if (datItemMappings.Keys.Contains(DatItemField.Default)) - biosSet.Default = datItemMappings[DatItemField.Default].AsYesNo(); - } - - /// - /// Set fields with given values - /// - /// Chip to remove replace fields in - /// DatItem mappings dictionary - private static void SetFields(Chip chip, Dictionary datItemMappings) - { - if (datItemMappings.Keys.Contains(DatItemField.Tag)) - chip.Tag = datItemMappings[DatItemField.Tag]; - - if (datItemMappings.Keys.Contains(DatItemField.ChipType)) - chip.ChipType = datItemMappings[DatItemField.ChipType].AsChipType(); - - if (datItemMappings.Keys.Contains(DatItemField.Clock)) - chip.Clock = Utilities.CleanLong(datItemMappings[DatItemField.Clock]); - } - - /// - /// Set fields with given values - /// - /// Condition to remove replace fields in - /// DatItem mappings dictionary - /// True if this is a subitem, false otherwise - private static void SetFields(Condition condition, Dictionary datItemMappings, bool sub = false) - { - if (sub) - { - if (datItemMappings.Keys.Contains(DatItemField.Condition_Tag)) - condition.Tag = datItemMappings[DatItemField.Condition_Tag]; - - if (datItemMappings.Keys.Contains(DatItemField.Condition_Mask)) - condition.Mask = datItemMappings[DatItemField.Condition_Mask]; - - if (datItemMappings.Keys.Contains(DatItemField.Condition_Relation)) - condition.Relation = datItemMappings[DatItemField.Condition_Relation].AsRelation(); - - if (datItemMappings.Keys.Contains(DatItemField.Condition_Value)) - condition.Value = datItemMappings[DatItemField.Condition_Value]; - } - else - { - if (datItemMappings.Keys.Contains(DatItemField.Tag)) - condition.Tag = datItemMappings[DatItemField.Tag]; - - if (datItemMappings.Keys.Contains(DatItemField.Mask)) - condition.Mask = datItemMappings[DatItemField.Mask]; - - if (datItemMappings.Keys.Contains(DatItemField.Relation)) - condition.Relation = datItemMappings[DatItemField.Relation].AsRelation(); - - if (datItemMappings.Keys.Contains(DatItemField.Value)) - condition.Value = datItemMappings[DatItemField.Value]; - } - } - - /// - /// Set fields with given values - /// - /// Configuration to remove replace fields in - /// DatItem mappings dictionary - private static void SetFields(Configuration configuration, Dictionary datItemMappings) - { - if (datItemMappings.Keys.Contains(DatItemField.Tag)) - configuration.Tag = datItemMappings[DatItemField.Tag]; - - if (datItemMappings.Keys.Contains(DatItemField.Mask)) - configuration.Mask = datItemMappings[DatItemField.Mask]; - - if (configuration.ConditionsSpecified) - { - foreach (Condition subCondition in configuration.Conditions) - { - SetFields(subCondition, datItemMappings, true); - } - } - - if (configuration.LocationsSpecified) - { - foreach (Location subLocation in configuration.Locations) - { - SetFields(subLocation, datItemMappings); - } - } - - if (configuration.SettingsSpecified) - { - foreach (Setting subSetting in configuration.Settings) - { - SetFields(subSetting, datItemMappings); - } - } - } - - /// - /// Set fields with given values - /// - /// Control to remove replace fields in - /// DatItem mappings dictionary - private static void SetFields(Control control, Dictionary datItemMappings) - { - if (datItemMappings.Keys.Contains(DatItemField.Control_Type)) - control.ControlType = datItemMappings[DatItemField.Control_Type].AsControlType(); - - if (datItemMappings.Keys.Contains(DatItemField.Control_Player)) - control.Player = Utilities.CleanLong(datItemMappings[DatItemField.Control_Player]); - - if (datItemMappings.Keys.Contains(DatItemField.Control_Buttons)) - control.Buttons = Utilities.CleanLong(datItemMappings[DatItemField.Control_Buttons]); - - if (datItemMappings.Keys.Contains(DatItemField.Control_RequiredButtons)) - control.RequiredButtons = Utilities.CleanLong(datItemMappings[DatItemField.Control_RequiredButtons]); - - if (datItemMappings.Keys.Contains(DatItemField.Control_Minimum)) - control.Minimum = Utilities.CleanLong(datItemMappings[DatItemField.Control_Minimum]); - - if (datItemMappings.Keys.Contains(DatItemField.Control_Maximum)) - control.Maximum = Utilities.CleanLong(datItemMappings[DatItemField.Control_Maximum]); - - if (datItemMappings.Keys.Contains(DatItemField.Control_Sensitivity)) - control.Sensitivity = Utilities.CleanLong(datItemMappings[DatItemField.Control_Sensitivity]); - - if (datItemMappings.Keys.Contains(DatItemField.Control_KeyDelta)) - control.KeyDelta = Utilities.CleanLong(datItemMappings[DatItemField.Control_KeyDelta]); - - if (datItemMappings.Keys.Contains(DatItemField.Control_Reverse)) - control.Reverse = datItemMappings[DatItemField.Control_Reverse].AsYesNo(); - - if (datItemMappings.Keys.Contains(DatItemField.Control_Ways)) - control.Ways = datItemMappings[DatItemField.Control_Ways]; - - if (datItemMappings.Keys.Contains(DatItemField.Control_Ways2)) - control.Ways2 = datItemMappings[DatItemField.Control_Ways2]; - - if (datItemMappings.Keys.Contains(DatItemField.Control_Ways3)) - control.Ways3 = datItemMappings[DatItemField.Control_Ways3]; - } - - /// - /// Set fields with given values - /// - /// DataArea to remove replace fields in - /// DatItem mappings dictionary - private static void SetFields(DataArea dataArea, Dictionary datItemMappings) - { - if (datItemMappings.Keys.Contains(DatItemField.AreaSize)) - dataArea.Size = Utilities.CleanLong(datItemMappings[DatItemField.AreaSize]); - - if (datItemMappings.Keys.Contains(DatItemField.AreaWidth)) - dataArea.Width = Utilities.CleanLong(datItemMappings[DatItemField.AreaWidth]); - - if (datItemMappings.Keys.Contains(DatItemField.AreaEndianness)) - dataArea.Endianness = datItemMappings[DatItemField.AreaEndianness].AsEndianness(); - } - - /// - /// Set fields with given values - /// - /// Device to remove replace fields in - /// DatItem mappings dictionary - private static void SetFields(Device device, Dictionary datItemMappings) - { - if (datItemMappings.Keys.Contains(DatItemField.DeviceType)) - device.DeviceType = datItemMappings[DatItemField.DeviceType].AsDeviceType(); - - if (datItemMappings.Keys.Contains(DatItemField.Tag)) - device.Tag = datItemMappings[DatItemField.Tag]; - - if (datItemMappings.Keys.Contains(DatItemField.FixedImage)) - device.FixedImage = datItemMappings[DatItemField.FixedImage]; - - if (datItemMappings.Keys.Contains(DatItemField.Mandatory)) - device.Mandatory = Utilities.CleanLong(datItemMappings[DatItemField.Mandatory]); - - if (datItemMappings.Keys.Contains(DatItemField.Interface)) - device.Interface = datItemMappings[DatItemField.Interface]; - - if (device.InstancesSpecified) - { - foreach (Instance subInstance in device.Instances) - { - SetFields(subInstance, datItemMappings); - } - } - - if (device.ExtensionsSpecified) - { - foreach (Extension subExtension in device.Extensions) - { - SetFields(subExtension, datItemMappings); - } - } - } - - /// - /// Set fields with given values - /// - /// DipSwitch to remove replace fields in - /// DatItem mappings dictionary - private static void SetFields(DipSwitch dipSwitch, Dictionary datItemMappings) - { - #region Common - - if (datItemMappings.Keys.Contains(DatItemField.Tag)) - dipSwitch.Tag = datItemMappings[DatItemField.Tag]; - - if (datItemMappings.Keys.Contains(DatItemField.Mask)) - dipSwitch.Mask = datItemMappings[DatItemField.Mask]; - - if (dipSwitch.ConditionsSpecified) - { - foreach (Condition subCondition in dipSwitch.Conditions) - { - SetFields(subCondition, datItemMappings, true); - } - } - - if (dipSwitch.LocationsSpecified) - { - foreach (Location subLocation in dipSwitch.Locations) - { - SetFields(subLocation, datItemMappings); - } - } - - if (dipSwitch.ValuesSpecified) - { - foreach (Setting subValue in dipSwitch.Values) - { - SetFields(subValue, datItemMappings); - } - } - - #endregion - - #region SoftwareList - - // Handle Part-specific fields - if (dipSwitch.Part == null) - dipSwitch.Part = new Part(); - - SetFields(dipSwitch.Part, datItemMappings); - - #endregion - } - - /// - /// Set fields with given values - /// - /// Disk to remove replace fields in - /// DatItem mappings dictionary - private static void SetFields(Disk disk, Dictionary datItemMappings) - { - #region Common - - if (datItemMappings.Keys.Contains(DatItemField.MD5)) - disk.MD5 = datItemMappings[DatItemField.MD5]; - - if (datItemMappings.Keys.Contains(DatItemField.SHA1)) - disk.SHA1 = datItemMappings[DatItemField.SHA1]; - - if (datItemMappings.Keys.Contains(DatItemField.Merge)) - disk.MergeTag = datItemMappings[DatItemField.Merge]; - - if (datItemMappings.Keys.Contains(DatItemField.Region)) - disk.Region = datItemMappings[DatItemField.Region]; - - if (datItemMappings.Keys.Contains(DatItemField.Index)) - disk.Index = datItemMappings[DatItemField.Index]; - - if (datItemMappings.Keys.Contains(DatItemField.Writable)) - disk.Writable = datItemMappings[DatItemField.Writable].AsYesNo(); - - if (datItemMappings.Keys.Contains(DatItemField.Status)) - disk.ItemStatus = datItemMappings[DatItemField.Status].AsItemStatus(); - - if (datItemMappings.Keys.Contains(DatItemField.Optional)) - disk.Optional = datItemMappings[DatItemField.Optional].AsYesNo(); - - #endregion - - #region SoftwareList - - if (disk.DiskArea == null) - disk.DiskArea = new DiskArea(); - - SetFields(disk.DiskArea, datItemMappings); - - if (disk.Part == null) - disk.Part = new Part(); - - SetFields(disk.Part, datItemMappings); - - #endregion - } - - /// - /// Set fields with given values - /// - /// DiskArea to remove replace fields in - /// DatItem mappings dictionary - private static void SetFields(DiskArea diskArea, Dictionary datItemMappings) - { - if (datItemMappings.Keys.Contains(DatItemField.AreaName)) - diskArea.Name = datItemMappings[DatItemField.AreaName]; - } - - /// - /// Set fields with given values - /// - /// Display to remove replace fields in - /// DatItem mappings dictionary - private static void SetFields(Display display, Dictionary datItemMappings) - { - if (datItemMappings.Keys.Contains(DatItemField.Tag)) - display.Tag = datItemMappings[DatItemField.Tag]; - - if (datItemMappings.Keys.Contains(DatItemField.DisplayType)) - display.DisplayType = datItemMappings[DatItemField.DisplayType].AsDisplayType(); - - if (datItemMappings.Keys.Contains(DatItemField.Rotate)) - display.Rotate = Utilities.CleanLong(datItemMappings[DatItemField.Rotate]); - - if (datItemMappings.Keys.Contains(DatItemField.FlipX)) - display.FlipX = datItemMappings[DatItemField.FlipX].AsYesNo(); - - if (datItemMappings.Keys.Contains(DatItemField.Width)) - display.Width = Utilities.CleanLong(datItemMappings[DatItemField.Width]); - - if (datItemMappings.Keys.Contains(DatItemField.Height)) - display.Height = Utilities.CleanLong(datItemMappings[DatItemField.Height]); - - if (datItemMappings.Keys.Contains(DatItemField.Refresh)) - { - if (Double.TryParse(datItemMappings[DatItemField.Refresh], out double refresh)) - display.Refresh = refresh; - } - - if (datItemMappings.Keys.Contains(DatItemField.PixClock)) - display.PixClock = Utilities.CleanLong(datItemMappings[DatItemField.PixClock]); - - if (datItemMappings.Keys.Contains(DatItemField.HTotal)) - display.HTotal = Utilities.CleanLong(datItemMappings[DatItemField.HTotal]); - - if (datItemMappings.Keys.Contains(DatItemField.HBEnd)) - display.HBEnd = Utilities.CleanLong(datItemMappings[DatItemField.HBEnd]); - - if (datItemMappings.Keys.Contains(DatItemField.HBStart)) - display.HBStart = Utilities.CleanLong(datItemMappings[DatItemField.HBStart]); - - if (datItemMappings.Keys.Contains(DatItemField.VTotal)) - display.VTotal = Utilities.CleanLong(datItemMappings[DatItemField.VTotal]); - - if (datItemMappings.Keys.Contains(DatItemField.VBEnd)) - display.VBEnd = Utilities.CleanLong(datItemMappings[DatItemField.VBEnd]); - - if (datItemMappings.Keys.Contains(DatItemField.VBStart)) - display.VBStart = Utilities.CleanLong(datItemMappings[DatItemField.VBStart]); - } - - /// - /// Set fields with given values - /// - /// Driver to remove replace fields in - /// DatItem mappings dictionary - private static void SetFields(Driver driver, Dictionary datItemMappings) - { - if (datItemMappings.Keys.Contains(DatItemField.SupportStatus)) - driver.Status = datItemMappings[DatItemField.SupportStatus].AsSupportStatus(); - - if (datItemMappings.Keys.Contains(DatItemField.EmulationStatus)) - driver.Emulation = datItemMappings[DatItemField.EmulationStatus].AsSupportStatus(); - - if (datItemMappings.Keys.Contains(DatItemField.CocktailStatus)) - driver.Cocktail = datItemMappings[DatItemField.CocktailStatus].AsSupportStatus(); - - if (datItemMappings.Keys.Contains(DatItemField.SaveStateStatus)) - driver.SaveState = datItemMappings[DatItemField.SaveStateStatus].AsSupported(); - } - - /// - /// Set fields with given values - /// - /// Extension to remove replace fields in - /// DatItem mappings dictionary - private static void SetFields(Extension extension, Dictionary datItemMappings) - { - if (datItemMappings.Keys.Contains(DatItemField.Extension_Name)) - extension.Name = datItemMappings[DatItemField.Extension_Name]; - } - - /// - /// Set fields with given values - /// - /// Feature to remove replace fields in - /// DatItem mappings dictionary - private static void SetFields(Feature feature, Dictionary datItemMappings) - { - if (datItemMappings.Keys.Contains(DatItemField.FeatureType)) - feature.Type = datItemMappings[DatItemField.FeatureType].AsFeatureType(); - - if (datItemMappings.Keys.Contains(DatItemField.FeatureStatus)) - feature.Status = datItemMappings[DatItemField.FeatureStatus].AsFeatureStatus(); - - if (datItemMappings.Keys.Contains(DatItemField.FeatureOverall)) - feature.Overall = datItemMappings[DatItemField.FeatureOverall].AsFeatureStatus(); - } - - /// - /// Set fields with given values - /// - /// Info to remove replace fields in - /// DatItem mappings dictionary - private static void SetFields(Info info, Dictionary datItemMappings) - { - if (datItemMappings.Keys.Contains(DatItemField.Value)) - info.Value = datItemMappings[DatItemField.Value]; - } - - /// - /// Set fields with given values - /// - /// Input to remove replace fields in - /// DatItem mappings dictionary - private static void SetFields(Input input, Dictionary datItemMappings) - { - if (datItemMappings.Keys.Contains(DatItemField.Service)) - input.Service = datItemMappings[DatItemField.Service].AsYesNo(); - - if (datItemMappings.Keys.Contains(DatItemField.Tilt)) - input.Tilt = datItemMappings[DatItemField.Tilt].AsYesNo(); - - if (datItemMappings.Keys.Contains(DatItemField.Players)) - input.Players = Utilities.CleanLong(datItemMappings[DatItemField.Players]); - - if (datItemMappings.Keys.Contains(DatItemField.Coins)) - input.Coins = Utilities.CleanLong(datItemMappings[DatItemField.Coins]); - - if (input.ControlsSpecified) - { - foreach (Control subControl in input.Controls) - { - SetFields(subControl, datItemMappings); - } - } - } - - /// - /// Set fields with given values - /// - /// Instance to remove replace fields in - /// DatItem mappings dictionary - private static void SetFields(Instance instance, Dictionary datItemMappings) - { - if (datItemMappings.Keys.Contains(DatItemField.Instance_Name)) - instance.BriefName = datItemMappings[DatItemField.Instance_Name]; - - if (datItemMappings.Keys.Contains(DatItemField.Instance_BriefName)) - instance.BriefName = datItemMappings[DatItemField.Instance_BriefName]; - } - - /// - /// Set fields with given values - /// - /// Location to remove replace fields in - /// DatItem mappings dictionary - private static void SetFields(Location location, Dictionary datItemMappings) - { - if (datItemMappings.Keys.Contains(DatItemField.Location_Name)) - location.Name = datItemMappings[DatItemField.Location_Name]; - - if (datItemMappings.Keys.Contains(DatItemField.Location_Number)) - location.Number = Utilities.CleanLong(datItemMappings[DatItemField.Location_Number]); - - if (datItemMappings.Keys.Contains(DatItemField.Location_Inverted)) - location.Inverted = datItemMappings[DatItemField.Location_Inverted].AsYesNo(); - } - - /// - /// Set fields with given values - /// - /// Media to remove replace fields in - /// DatItem mappings dictionary - private static void SetFields(Media media, Dictionary datItemMappings) - { - if (datItemMappings.Keys.Contains(DatItemField.MD5)) - media.MD5 = datItemMappings[DatItemField.MD5]; - - if (datItemMappings.Keys.Contains(DatItemField.SHA1)) - media.SHA1 = datItemMappings[DatItemField.SHA1]; - - if (datItemMappings.Keys.Contains(DatItemField.SHA256)) - media.SHA256 = datItemMappings[DatItemField.SHA256]; - - if (datItemMappings.Keys.Contains(DatItemField.SpamSum)) - media.SpamSum = datItemMappings[DatItemField.SpamSum]; - } - - /// - /// Set fields with given values - /// - /// Part to remove replace fields in - /// DatItem mappings dictionary - private static void SetFields(Part part, Dictionary datItemMappings) - { - if (datItemMappings.Keys.Contains(DatItemField.Part_Name)) - part.Name = datItemMappings[DatItemField.Part_Name]; - - if (datItemMappings.Keys.Contains(DatItemField.Part_Interface)) - part.Interface = datItemMappings[DatItemField.Part_Interface]; - - if (part.FeaturesSpecified) - { - foreach (PartFeature subPartFeature in part.Features) - { - SetFields(subPartFeature, datItemMappings); - } - } - } - - /// - /// Set fields with given values - /// - /// PartFeature to remove replace fields in - /// DatItem mappings dictionary - private static void SetFields(PartFeature partFeature, Dictionary datItemMappings) - { - if (datItemMappings.Keys.Contains(DatItemField.Part_Feature_Name)) - partFeature.Name = datItemMappings[DatItemField.Part_Feature_Name]; - - if (datItemMappings.Keys.Contains(DatItemField.Part_Feature_Value)) - partFeature.Value = datItemMappings[DatItemField.Part_Feature_Value]; - } - - /// - /// Set fields with given values - /// - /// Port to remove replace fields in - /// DatItem mappings dictionary - private static void SetFields(Port port, Dictionary datItemMappings) - { - if (datItemMappings.Keys.Contains(DatItemField.Tag)) - port.Tag = datItemMappings[DatItemField.Tag]; - - if (port.AnalogsSpecified) - { - foreach (Analog subAnalog in port.Analogs) - { - SetFields(subAnalog, datItemMappings); - } - } - } - - /// - /// Set fields with given values - /// - /// RamOption to remove replace fields in - /// DatItem mappings dictionary - private static void SetFields(RamOption ramOption, Dictionary datItemMappings) - { - if (datItemMappings.Keys.Contains(DatItemField.Default)) - ramOption.Default = datItemMappings[DatItemField.Default].AsYesNo(); - - if (datItemMappings.Keys.Contains(DatItemField.Content)) - ramOption.Content = datItemMappings[DatItemField.Content]; - } - - /// - /// Set fields with given values - /// - /// Release to remove replace fields in - /// DatItem mappings dictionary - private static void SetFields(Release release, Dictionary datItemMappings) - { - if (datItemMappings.Keys.Contains(DatItemField.Region)) - release.Region = datItemMappings[DatItemField.Region]; - - if (datItemMappings.Keys.Contains(DatItemField.Language)) - release.Language = datItemMappings[DatItemField.Language]; - - if (datItemMappings.Keys.Contains(DatItemField.Date)) - release.Date = datItemMappings[DatItemField.Date]; - - if (datItemMappings.Keys.Contains(DatItemField.Default)) - release.Default = datItemMappings[DatItemField.Default].AsYesNo(); - } - - /// - /// Set fields with given values - /// - /// Rom to remove replace fields in - /// DatItem mappings dictionary - private static void SetFields(Rom rom, Dictionary datItemMappings) - { - #region Common - - if (datItemMappings.Keys.Contains(DatItemField.Bios)) - rom.Bios = datItemMappings[DatItemField.Bios]; - - if (datItemMappings.Keys.Contains(DatItemField.Size)) - rom.Size = Utilities.CleanLong(datItemMappings[DatItemField.Size]); - - if (datItemMappings.Keys.Contains(DatItemField.CRC)) - rom.CRC = datItemMappings[DatItemField.CRC]; - - if (datItemMappings.Keys.Contains(DatItemField.MD5)) - rom.MD5 = datItemMappings[DatItemField.MD5]; - - if (datItemMappings.Keys.Contains(DatItemField.SHA1)) - rom.SHA1 = datItemMappings[DatItemField.SHA1]; - - if (datItemMappings.Keys.Contains(DatItemField.SHA256)) - rom.SHA256 = datItemMappings[DatItemField.SHA256]; - - if (datItemMappings.Keys.Contains(DatItemField.SHA384)) - rom.SHA384 = datItemMappings[DatItemField.SHA384]; - - if (datItemMappings.Keys.Contains(DatItemField.SHA512)) - rom.SHA512 = datItemMappings[DatItemField.SHA512]; - - if (datItemMappings.Keys.Contains(DatItemField.SpamSum)) - rom.SpamSum = datItemMappings[DatItemField.SpamSum]; - - if (datItemMappings.Keys.Contains(DatItemField.Merge)) - rom.MergeTag = datItemMappings[DatItemField.Merge]; - - if (datItemMappings.Keys.Contains(DatItemField.Region)) - rom.Region = datItemMappings[DatItemField.Region]; - - if (datItemMappings.Keys.Contains(DatItemField.Offset)) - rom.Offset = datItemMappings[DatItemField.Offset]; - - if (datItemMappings.Keys.Contains(DatItemField.Date)) - rom.Date = datItemMappings[DatItemField.Date]; - - if (datItemMappings.Keys.Contains(DatItemField.Status)) - rom.ItemStatus = datItemMappings[DatItemField.Status].AsItemStatus(); - - if (datItemMappings.Keys.Contains(DatItemField.Optional)) - rom.Optional = datItemMappings[DatItemField.Optional].AsYesNo(); - - if (datItemMappings.Keys.Contains(DatItemField.Inverted)) - rom.Inverted = datItemMappings[DatItemField.Optional].AsYesNo(); - - #endregion - - #region AttractMode - - if (datItemMappings.Keys.Contains(DatItemField.AltName)) - rom.AltName = datItemMappings[DatItemField.AltName]; - - if (datItemMappings.Keys.Contains(DatItemField.AltTitle)) - rom.AltTitle = datItemMappings[DatItemField.AltTitle]; - - #endregion - - #region OpenMSX - - if (datItemMappings.Keys.Contains(DatItemField.Original)) - rom.Original = new Original() { Content = datItemMappings[DatItemField.Original] }; - - if (datItemMappings.Keys.Contains(DatItemField.OpenMSXSubType)) - rom.OpenMSXSubType = datItemMappings[DatItemField.OpenMSXSubType].AsOpenMSXSubType(); - - if (datItemMappings.Keys.Contains(DatItemField.OpenMSXType)) - rom.OpenMSXType = datItemMappings[DatItemField.OpenMSXType]; - - if (datItemMappings.Keys.Contains(DatItemField.Remark)) - rom.Remark = datItemMappings[DatItemField.Remark]; - - if (datItemMappings.Keys.Contains(DatItemField.Boot)) - rom.Boot = datItemMappings[DatItemField.Boot]; - - #endregion - - #region SoftwareList - - if (datItemMappings.Keys.Contains(DatItemField.LoadFlag)) - rom.LoadFlag = datItemMappings[DatItemField.LoadFlag].AsLoadFlag(); - - if (datItemMappings.Keys.Contains(DatItemField.Value)) - rom.Value = datItemMappings[DatItemField.Value]; - - if (rom.DataArea == null) - rom.DataArea = new DataArea(); - - SetFields(rom.DataArea, datItemMappings); - - if (rom.Part == null) - rom.Part = new Part(); - - SetFields(rom.Part, datItemMappings); - - #endregion - } - - /// - /// Set fields with given values - /// - /// Setting to remove replace fields in - /// DatItem mappings dictionary - private static void SetFields(Setting setting, Dictionary datItemMappings) - { - if (datItemMappings.Keys.Contains(DatItemField.Setting_Name)) - setting.Name = datItemMappings[DatItemField.Setting_Name]; - - if (datItemMappings.Keys.Contains(DatItemField.Setting_Value)) - setting.Value = datItemMappings[DatItemField.Setting_Value]; - - if (datItemMappings.Keys.Contains(DatItemField.Setting_Default)) - setting.Default = datItemMappings[DatItemField.Setting_Default].AsYesNo(); - - if (setting.ConditionsSpecified) - { - foreach (Condition subCondition in setting.Conditions) - { - SetFields(subCondition, datItemMappings, true); - } - } - } - - /// - /// Set fields with given values - /// - /// SharedFeature to remove replace fields in - /// DatItem mappings dictionary - private static void SetFields(SharedFeature sharedFeature, Dictionary datItemMappings) - { - if (datItemMappings.Keys.Contains(DatItemField.Value)) - sharedFeature.Value = datItemMappings[DatItemField.Value]; - } - - /// - /// Set fields with given values - /// - /// Slot to remove replace fields in - /// DatItem mappings dictionary - private static void SetFields(Slot slot, Dictionary datItemMappings) - { - if (slot.SlotOptionsSpecified) - { - foreach (SlotOption subSlotOption in slot.SlotOptions) - { - SetFields(subSlotOption, datItemMappings); - } - } - } - - /// - /// Set fields with given values - /// - /// SlotOption to remove replace fields in - /// DatItem mappings dictionary - private static void SetFields(SlotOption slotOption, Dictionary datItemMappings) - { - if (datItemMappings.Keys.Contains(DatItemField.SlotOption_Name)) - slotOption.Name = datItemMappings[DatItemField.SlotOption_Name]; - - if (datItemMappings.Keys.Contains(DatItemField.SlotOption_DeviceName)) - slotOption.DeviceName = datItemMappings[DatItemField.SlotOption_DeviceName]; - - if (datItemMappings.Keys.Contains(DatItemField.SlotOption_Default)) - slotOption.Default = datItemMappings[DatItemField.SlotOption_Default].AsYesNo(); - } - - /// - /// Set fields with given values - /// - /// SoftwareList to remove replace fields in - /// DatItem mappings dictionary - private static void SetFields(SoftwareList softwareList, Dictionary datItemMappings) - { - if (datItemMappings.Keys.Contains(DatItemField.SoftwareListStatus)) - softwareList.Status = datItemMappings[DatItemField.SoftwareListStatus].AsSoftwareListStatus(); - - if (datItemMappings.Keys.Contains(DatItemField.Filter)) - softwareList.Filter = datItemMappings[DatItemField.Filter]; - } - - /// - /// Set fields with given values - /// - /// Sound to remove replace fields in - /// DatItem mappings dictionary - private static void SetFields(Sound sound, Dictionary datItemMappings) - { - if (datItemMappings.Keys.Contains(DatItemField.Channels)) - sound.Channels = Utilities.CleanLong(datItemMappings[DatItemField.Channels]); - } - } -} \ No newline at end of file diff --git a/SabreTools.Filtering/ExtraIni.cs b/SabreTools.Filtering/ExtraIni.cs index 864c2f26..14aa5779 100644 --- a/SabreTools.Filtering/ExtraIni.cs +++ b/SabreTools.Filtering/ExtraIni.cs @@ -129,11 +129,11 @@ namespace SabreTools.Filtering continue; List datItems = datFile.Items[key]; - var mappings = machineMap[key]; + Setter setter = new Setter { MachineMappings = machineMap[key] }; foreach (var datItem in datItems) { - Setter.SetFields(datItem.Machine, mappings); + setter.SetFields(datItem.Machine); } } @@ -145,11 +145,11 @@ namespace SabreTools.Filtering continue; List datItems = datFile.Items[key]; - var mappings = datItemMap[key]; + Setter setter = new Setter { DatItemMappings = datItemMap[key] }; foreach (var datItem in datItems) { - Setter.SetFields(datItem, mappings, null); + setter.SetFields(datItem); } } } diff --git a/SabreTools.Test/DatItems/SetterTests.cs b/SabreTools.Test/DatFiles/SetterTests.cs similarity index 64% rename from SabreTools.Test/DatItems/SetterTests.cs rename to SabreTools.Test/DatFiles/SetterTests.cs index 1f35a0b9..80751ce3 100644 --- a/SabreTools.Test/DatItems/SetterTests.cs +++ b/SabreTools.Test/DatFiles/SetterTests.cs @@ -1,10 +1,11 @@ using System.Collections.Generic; using SabreTools.Core; +using SabreTools.DatFiles; using SabreTools.DatItems; using Xunit; -namespace SabreTools.Test.DatItems +namespace SabreTools.Test.DatFiles { public class SetterTests { @@ -12,8 +13,11 @@ namespace SabreTools.Test.DatItems public void SetFieldsDatItemTest() { var datItem = CreateDatItem(); - var mappings = new Dictionary { [DatItemField.Name] = "bar" }; - Setter.SetFields(datItem, mappings, null); + Setter setter = new Setter + { + DatItemMappings = new Dictionary { [DatItemField.Name] = "bar" } + }; + setter.SetFields(datItem); Assert.Equal("bar", datItem.GetName()); } @@ -21,8 +25,11 @@ namespace SabreTools.Test.DatItems public void SetFieldsMachineTest() { var datItem = CreateDatItem(); - var mappings = new Dictionary { [MachineField.Name] = "foo" }; - Setter.SetFields(datItem, null, mappings); + Setter setter = new Setter + { + MachineMappings = new Dictionary { [MachineField.Name] = "foo" } + }; + setter.SetFields(datItem.Machine); Assert.Equal("foo", datItem.Machine.Name); }