2021-02-01 14:07:50 -08:00
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using SabreTools.Core;
|
|
|
|
|
using SabreTools.Core.Tools;
|
|
|
|
|
using SabreTools.DatItems;
|
2021-02-02 10:23:43 -08:00
|
|
|
using SabreTools.DatItems.Formats;
|
2021-02-01 14:07:50 -08:00
|
|
|
using SabreTools.Logging;
|
|
|
|
|
|
|
|
|
|
namespace SabreTools.DatFiles
|
|
|
|
|
{
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Set fields on DatItems
|
|
|
|
|
/// </summary>
|
2021-02-01 14:17:25 -08:00
|
|
|
/// TODO: Figure out how to get this into the Filtering namespace
|
2021-02-01 14:07:50 -08:00
|
|
|
public class Setter
|
|
|
|
|
{
|
|
|
|
|
#region Fields
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Mappings to set DatHeader fields
|
|
|
|
|
/// </summary>
|
2023-08-10 23:22:14 -04:00
|
|
|
public Dictionary<DatHeaderField, string>? DatHeaderMappings { get; set; }
|
2021-02-01 14:07:50 -08:00
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Mappings to set Machine fields
|
|
|
|
|
/// </summary>
|
2023-08-10 23:22:14 -04:00
|
|
|
public Dictionary<MachineField, string>? MachineMappings { get; set; }
|
2021-02-01 14:07:50 -08:00
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Mappings to set DatItem fields
|
|
|
|
|
/// </summary>
|
2023-08-10 23:22:14 -04:00
|
|
|
public Dictionary<DatItemField, string>? DatItemMappings { get; set; }
|
2021-02-01 14:07:50 -08:00
|
|
|
|
|
|
|
|
#endregion
|
2023-03-26 21:47:17 -04:00
|
|
|
|
2021-02-01 14:07:50 -08:00
|
|
|
#region Logging
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Logging object
|
|
|
|
|
/// </summary>
|
2023-04-19 16:39:58 -04:00
|
|
|
private readonly Logger logger = new();
|
2021-02-01 14:07:50 -08:00
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
#region Population
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Populate the setters using a set of field names
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="headers">List of header names</param>
|
|
|
|
|
/// <param name="fields">List of field names</param>
|
|
|
|
|
public void PopulateSettersFromList(List<string> headers, List<string> fields)
|
|
|
|
|
{
|
|
|
|
|
// Instantiate the setters, if necessary
|
2024-02-28 19:19:50 -05:00
|
|
|
DatHeaderMappings ??= [];
|
|
|
|
|
MachineMappings ??= [];
|
|
|
|
|
DatItemMappings ??= [];
|
2021-02-01 14:07:50 -08:00
|
|
|
|
|
|
|
|
// 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
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Set fields with given values
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="datHeader">DatHeader to set fields on</param>
|
|
|
|
|
public void SetFields(DatHeader datHeader)
|
|
|
|
|
{
|
2023-08-10 23:22:14 -04:00
|
|
|
if (datHeader == null || DatHeaderMappings == null)
|
2021-02-01 14:07:50 -08:00
|
|
|
return;
|
|
|
|
|
|
2023-04-20 14:28:30 -04:00
|
|
|
if (DatHeaderMappings.ContainsKey(DatHeaderField.Author))
|
|
|
|
|
datHeader.Author = DatHeaderMappings[DatHeaderField.Author];
|
2021-02-01 14:07:50 -08:00
|
|
|
|
2023-04-20 14:28:30 -04:00
|
|
|
if (DatHeaderMappings.ContainsKey(DatHeaderField.BiosMode))
|
|
|
|
|
datHeader.BiosMode = DatHeaderMappings[DatHeaderField.BiosMode].AsMergingFlag();
|
2021-02-01 14:07:50 -08:00
|
|
|
|
2023-04-20 14:28:30 -04:00
|
|
|
if (DatHeaderMappings.ContainsKey(DatHeaderField.Build))
|
|
|
|
|
datHeader.Build = DatHeaderMappings[DatHeaderField.Build];
|
2021-02-01 14:07:50 -08:00
|
|
|
|
2023-04-20 14:28:30 -04:00
|
|
|
// TODO: Support CanOpen
|
2021-02-01 14:07:50 -08:00
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
if (DatHeaderMappings.ContainsKey(DatHeaderField.Category))
|
2021-02-01 14:07:50 -08:00
|
|
|
datHeader.Category = DatHeaderMappings[DatHeaderField.Category];
|
|
|
|
|
|
2023-04-20 14:28:30 -04:00
|
|
|
if (DatHeaderMappings.ContainsKey(DatHeaderField.Comment))
|
|
|
|
|
datHeader.Comment = DatHeaderMappings[DatHeaderField.Comment];
|
2021-02-01 14:07:50 -08:00
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
if (DatHeaderMappings.ContainsKey(DatHeaderField.Date))
|
2021-02-01 14:07:50 -08:00
|
|
|
datHeader.Date = DatHeaderMappings[DatHeaderField.Date];
|
|
|
|
|
|
2023-04-20 14:28:30 -04:00
|
|
|
if (DatHeaderMappings.ContainsKey(DatHeaderField.Debug))
|
|
|
|
|
datHeader.Debug = DatHeaderMappings[DatHeaderField.Debug].AsYesNo();
|
|
|
|
|
|
|
|
|
|
if (DatHeaderMappings.ContainsKey(DatHeaderField.Description))
|
|
|
|
|
datHeader.Description = DatHeaderMappings[DatHeaderField.Description];
|
2021-02-01 14:07:50 -08:00
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
if (DatHeaderMappings.ContainsKey(DatHeaderField.Email))
|
2021-02-01 14:07:50 -08:00
|
|
|
datHeader.Email = DatHeaderMappings[DatHeaderField.Email];
|
|
|
|
|
|
2023-04-20 14:28:30 -04:00
|
|
|
if (DatHeaderMappings.ContainsKey(DatHeaderField.FileName))
|
|
|
|
|
datHeader.FileName = DatHeaderMappings[DatHeaderField.FileName];
|
2021-02-01 14:07:50 -08:00
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
if (DatHeaderMappings.ContainsKey(DatHeaderField.ForceMerging))
|
2021-02-01 14:07:50 -08:00
|
|
|
datHeader.ForceMerging = DatHeaderMappings[DatHeaderField.ForceMerging].AsMergingFlag();
|
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
if (DatHeaderMappings.ContainsKey(DatHeaderField.ForceNodump))
|
2021-02-01 14:07:50 -08:00
|
|
|
datHeader.ForceNodump = DatHeaderMappings[DatHeaderField.ForceNodump].AsNodumpFlag();
|
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
if (DatHeaderMappings.ContainsKey(DatHeaderField.ForcePacking))
|
2021-02-01 14:07:50 -08:00
|
|
|
datHeader.ForcePacking = DatHeaderMappings[DatHeaderField.ForcePacking].AsPackingFlag();
|
|
|
|
|
|
2023-04-20 14:28:30 -04:00
|
|
|
if (DatHeaderMappings.ContainsKey(DatHeaderField.HeaderSkipper))
|
|
|
|
|
datHeader.HeaderSkipper = DatHeaderMappings[DatHeaderField.HeaderSkipper];
|
2023-04-03 12:24:42 -04:00
|
|
|
|
2023-04-20 14:28:30 -04:00
|
|
|
if (DatHeaderMappings.ContainsKey(DatHeaderField.Homepage))
|
|
|
|
|
datHeader.Homepage = DatHeaderMappings[DatHeaderField.Homepage];
|
2021-02-01 14:07:50 -08:00
|
|
|
|
2023-04-20 14:28:30 -04:00
|
|
|
if (DatHeaderMappings.ContainsKey(DatHeaderField.ID))
|
|
|
|
|
datHeader.NoIntroID = DatHeaderMappings[DatHeaderField.ID];
|
2021-02-01 14:07:50 -08:00
|
|
|
|
2023-04-20 14:28:30 -04:00
|
|
|
// TODO: Support Info_Default
|
|
|
|
|
// TODO: Support Info_IsNamingOption
|
|
|
|
|
// TODO: Support Info_Name
|
|
|
|
|
// TODO: Support Info_Visible
|
2021-02-01 14:07:50 -08:00
|
|
|
|
2023-04-20 14:28:30 -04:00
|
|
|
if (DatHeaderMappings.ContainsKey(DatHeaderField.LockBiosMode))
|
|
|
|
|
datHeader.LockBiosMode = DatHeaderMappings[DatHeaderField.LockBiosMode].AsYesNo();
|
2021-02-01 14:07:50 -08:00
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
if (DatHeaderMappings.ContainsKey(DatHeaderField.LockRomMode))
|
2021-02-01 14:07:50 -08:00
|
|
|
datHeader.LockRomMode = DatHeaderMappings[DatHeaderField.LockRomMode].AsYesNo();
|
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
if (DatHeaderMappings.ContainsKey(DatHeaderField.LockSampleMode))
|
2021-02-01 14:07:50 -08:00
|
|
|
datHeader.LockSampleMode = DatHeaderMappings[DatHeaderField.LockSampleMode].AsYesNo();
|
|
|
|
|
|
2023-04-20 14:28:30 -04:00
|
|
|
if (DatHeaderMappings.ContainsKey(DatHeaderField.MameConfig))
|
|
|
|
|
datHeader.MameConfig = DatHeaderMappings[DatHeaderField.MameConfig];
|
2021-02-01 14:07:50 -08:00
|
|
|
|
2023-04-20 14:28:30 -04:00
|
|
|
if (DatHeaderMappings.ContainsKey(DatHeaderField.Name))
|
|
|
|
|
datHeader.Name = DatHeaderMappings[DatHeaderField.Name];
|
2021-02-01 14:07:50 -08:00
|
|
|
|
2023-04-20 14:28:30 -04:00
|
|
|
if (DatHeaderMappings.ContainsKey(DatHeaderField.RomCenterVersion))
|
|
|
|
|
datHeader.RomCenterVersion = DatHeaderMappings[DatHeaderField.RomCenterVersion];
|
2021-02-01 14:07:50 -08:00
|
|
|
|
2023-04-20 14:28:30 -04:00
|
|
|
if (DatHeaderMappings.ContainsKey(DatHeaderField.RomMode))
|
|
|
|
|
datHeader.RomMode = DatHeaderMappings[DatHeaderField.RomMode].AsMergingFlag();
|
|
|
|
|
|
|
|
|
|
if (DatHeaderMappings.ContainsKey(DatHeaderField.RomTitle))
|
|
|
|
|
datHeader.RomTitle = DatHeaderMappings[DatHeaderField.RomTitle];
|
|
|
|
|
|
|
|
|
|
if (DatHeaderMappings.ContainsKey(DatHeaderField.RootDir))
|
|
|
|
|
datHeader.RootDir = DatHeaderMappings[DatHeaderField.RootDir];
|
|
|
|
|
|
|
|
|
|
if (DatHeaderMappings.ContainsKey(DatHeaderField.SampleMode))
|
|
|
|
|
datHeader.SampleMode = DatHeaderMappings[DatHeaderField.SampleMode].AsMergingFlag();
|
2021-02-01 14:07:50 -08:00
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
if (DatHeaderMappings.ContainsKey(DatHeaderField.ScreenshotsHeight))
|
2021-02-01 14:07:50 -08:00
|
|
|
datHeader.ScreenshotsHeight = DatHeaderMappings[DatHeaderField.ScreenshotsHeight];
|
|
|
|
|
|
2023-04-20 14:28:30 -04:00
|
|
|
if (DatHeaderMappings.ContainsKey(DatHeaderField.ScreenshotsWidth))
|
|
|
|
|
datHeader.ScreenshotsWidth = DatHeaderMappings[DatHeaderField.ScreenshotsWidth];
|
2021-02-01 14:07:50 -08:00
|
|
|
|
2023-04-20 14:28:30 -04:00
|
|
|
if (DatHeaderMappings.ContainsKey(DatHeaderField.System))
|
|
|
|
|
datHeader.System = DatHeaderMappings[DatHeaderField.System];
|
2021-02-01 14:07:50 -08:00
|
|
|
|
2023-04-20 14:28:30 -04:00
|
|
|
if (DatHeaderMappings.ContainsKey(DatHeaderField.Type))
|
|
|
|
|
datHeader.Type = DatHeaderMappings[DatHeaderField.Type];
|
2021-02-01 14:07:50 -08:00
|
|
|
|
2023-04-20 14:28:30 -04:00
|
|
|
if (DatHeaderMappings.ContainsKey(DatHeaderField.Url))
|
|
|
|
|
datHeader.Url = DatHeaderMappings[DatHeaderField.Url];
|
2021-02-01 14:07:50 -08:00
|
|
|
|
2023-04-20 14:28:30 -04:00
|
|
|
if (DatHeaderMappings.ContainsKey(DatHeaderField.Version))
|
|
|
|
|
datHeader.Version = DatHeaderMappings[DatHeaderField.Version];
|
2021-02-01 14:07:50 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Set fields with given values
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="datItem">DatItem to set fields on</param>
|
|
|
|
|
public void SetFields(DatItem datItem)
|
|
|
|
|
{
|
|
|
|
|
if (datItem == null || DatItemMappings == null)
|
|
|
|
|
return;
|
|
|
|
|
|
2023-08-10 23:22:14 -04:00
|
|
|
#region Common
|
2021-02-01 14:07:50 -08:00
|
|
|
|
2023-08-10 23:22:14 -04:00
|
|
|
if (DatItemMappings!.ContainsKey(DatItemField.Name))
|
2021-02-01 14:07:50 -08:00
|
|
|
datItem.SetName(DatItemMappings[DatItemField.Name]);
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
#region Item-Specific
|
2024-03-05 02:20:12 -05:00
|
|
|
|
|
|
|
|
// Handle unnested sets first
|
|
|
|
|
foreach (var kvp in DatItemMappings)
|
|
|
|
|
{
|
|
|
|
|
datItem.SetField(kvp.Key, kvp.Value);
|
|
|
|
|
}
|
2023-08-10 23:22:14 -04:00
|
|
|
|
2024-03-05 02:20:12 -05:00
|
|
|
// Handle nested sets
|
2023-08-10 23:22:14 -04:00
|
|
|
switch (datItem)
|
|
|
|
|
{
|
|
|
|
|
case Adjuster adjuster: SetFields(adjuster); break;
|
|
|
|
|
case Configuration condition: SetFields(condition); break;
|
2023-08-14 13:17:51 -04:00
|
|
|
case ConfSetting confSetting: SetFields(confSetting); break;
|
2023-08-10 23:22:14 -04:00
|
|
|
case Device device: SetFields(device); break;
|
|
|
|
|
case DipSwitch dipSwitch: SetFields(dipSwitch); break;
|
2023-08-14 13:17:51 -04:00
|
|
|
case DipValue dipValue: SetFields(dipValue); break;
|
2023-08-10 23:22:14 -04:00
|
|
|
case Disk disk: SetFields(disk); break;
|
|
|
|
|
case Input input: SetFields(input); break;
|
|
|
|
|
case Part part: SetFields(part); break;
|
|
|
|
|
case Port port: SetFields(port); break;
|
|
|
|
|
case Rom rom: SetFields(rom); break;
|
|
|
|
|
case Slot slot: SetFields(slot); break;
|
|
|
|
|
}
|
2021-02-01 14:07:50 -08:00
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Set fields with given values
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="machine">Machine to set fields on</param>
|
2024-03-05 02:20:12 -05:00
|
|
|
public void SetFields(Machine? machine)
|
2021-02-01 14:07:50 -08:00
|
|
|
{
|
|
|
|
|
if (machine == null || MachineMappings == null)
|
|
|
|
|
return;
|
|
|
|
|
|
2024-03-05 02:20:12 -05:00
|
|
|
foreach (var kvp in MachineMappings)
|
|
|
|
|
{
|
|
|
|
|
machine.SetField(kvp.Key, kvp.Value);
|
|
|
|
|
}
|
2021-02-01 14:07:50 -08:00
|
|
|
}
|
2023-03-26 21:47:17 -04:00
|
|
|
|
2021-02-01 14:07:50 -08:00
|
|
|
/// <summary>
|
|
|
|
|
/// Set fields with given values
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="adjuster">Adjuster to remove replace fields in</param>
|
|
|
|
|
private void SetFields(Adjuster adjuster)
|
|
|
|
|
{
|
|
|
|
|
// Field.DatItem_Conditions does not apply here
|
|
|
|
|
if (adjuster.ConditionsSpecified)
|
|
|
|
|
{
|
2023-08-14 13:17:51 -04:00
|
|
|
foreach (Condition subCondition in adjuster.Conditions!)
|
2021-02-01 14:07:50 -08:00
|
|
|
{
|
2024-03-05 02:20:12 -05:00
|
|
|
SetFields(subCondition);
|
2021-02-01 14:07:50 -08:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Set fields with given values
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="configuration">Configuration to remove replace fields in</param>
|
|
|
|
|
private void SetFields(Configuration configuration)
|
|
|
|
|
{
|
|
|
|
|
if (configuration.ConditionsSpecified)
|
|
|
|
|
{
|
2023-08-14 13:17:51 -04:00
|
|
|
foreach (Condition subCondition in configuration.Conditions!)
|
2021-02-01 14:07:50 -08:00
|
|
|
{
|
2024-03-05 02:20:12 -05:00
|
|
|
SetFields(subCondition);
|
2021-02-01 14:07:50 -08:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (configuration.LocationsSpecified)
|
|
|
|
|
{
|
2023-08-14 13:17:51 -04:00
|
|
|
foreach (ConfLocation subLocation in configuration.Locations!)
|
2021-02-01 14:07:50 -08:00
|
|
|
{
|
|
|
|
|
SetFields(subLocation);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (configuration.SettingsSpecified)
|
|
|
|
|
{
|
2023-08-14 13:17:51 -04:00
|
|
|
foreach (ConfSetting subSetting in configuration.Settings!)
|
2021-02-01 14:07:50 -08:00
|
|
|
{
|
2024-03-05 02:20:12 -05:00
|
|
|
SetFields(subSetting as DatItem);
|
2021-02-01 14:07:50 -08:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2023-08-14 13:17:51 -04:00
|
|
|
/// <summary>
|
|
|
|
|
/// Set fields with given values
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="confSetting">ConfSetting to remove replace fields in</param>
|
|
|
|
|
private void SetFields(ConfSetting confSetting)
|
|
|
|
|
{
|
|
|
|
|
if (confSetting.ConditionsSpecified)
|
|
|
|
|
{
|
|
|
|
|
foreach (Condition subCondition in confSetting.Conditions!)
|
|
|
|
|
{
|
2024-03-05 02:20:12 -05:00
|
|
|
SetFields(subCondition);
|
2023-08-14 13:17:51 -04:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2021-02-01 14:07:50 -08:00
|
|
|
/// <summary>
|
|
|
|
|
/// Set fields with given values
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="device">Device to remove replace fields in</param>
|
|
|
|
|
private void SetFields(Device device)
|
|
|
|
|
{
|
2023-04-20 15:57:39 -04:00
|
|
|
if (device.ExtensionsSpecified)
|
2021-02-01 14:07:50 -08:00
|
|
|
{
|
2023-08-14 13:17:51 -04:00
|
|
|
foreach (Extension subExtension in device.Extensions!)
|
2021-02-01 14:07:50 -08:00
|
|
|
{
|
2023-04-20 15:57:39 -04:00
|
|
|
SetFields(subExtension);
|
2021-02-01 14:07:50 -08:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2023-04-20 15:57:39 -04:00
|
|
|
if (device.InstancesSpecified)
|
2021-02-01 14:07:50 -08:00
|
|
|
{
|
2023-08-14 13:17:51 -04:00
|
|
|
foreach (Instance subInstance in device.Instances!)
|
2021-02-01 14:07:50 -08:00
|
|
|
{
|
2023-04-20 15:57:39 -04:00
|
|
|
SetFields(subInstance);
|
2021-02-01 14:07:50 -08:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Set fields with given values
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="dipSwitch">DipSwitch to remove replace fields in</param>
|
|
|
|
|
private void SetFields(DipSwitch dipSwitch)
|
|
|
|
|
{
|
|
|
|
|
if (dipSwitch.ConditionsSpecified)
|
|
|
|
|
{
|
2023-08-14 13:17:51 -04:00
|
|
|
foreach (Condition subCondition in dipSwitch.Conditions!)
|
2021-02-01 14:07:50 -08:00
|
|
|
{
|
2024-03-05 02:20:12 -05:00
|
|
|
SetFields(subCondition);
|
2021-02-01 14:07:50 -08:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (dipSwitch.LocationsSpecified)
|
|
|
|
|
{
|
2023-08-14 13:17:51 -04:00
|
|
|
foreach (DipLocation subLocation in dipSwitch.Locations!)
|
2021-02-01 14:07:50 -08:00
|
|
|
{
|
|
|
|
|
SetFields(subLocation);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (dipSwitch.ValuesSpecified)
|
|
|
|
|
{
|
2023-08-14 13:17:51 -04:00
|
|
|
foreach (DipValue subValue in dipSwitch.Values!)
|
2021-02-01 14:07:50 -08:00
|
|
|
{
|
2024-03-05 02:20:12 -05:00
|
|
|
SetFields(subValue as DatItem);
|
2021-02-01 14:07:50 -08:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
dipSwitch.Part ??= new Part();
|
2024-03-05 02:20:12 -05:00
|
|
|
SetFields(dipSwitch.Part as DatItem);
|
2021-02-01 14:07:50 -08:00
|
|
|
}
|
|
|
|
|
|
2023-08-14 13:17:51 -04:00
|
|
|
/// <summary>
|
|
|
|
|
/// Set fields with given values
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="dipValue">DipValue to remove replace fields in</param>
|
|
|
|
|
private void SetFields(DipValue dipValue)
|
|
|
|
|
{
|
|
|
|
|
if (dipValue.ConditionsSpecified)
|
|
|
|
|
{
|
|
|
|
|
foreach (Condition subCondition in dipValue.Conditions!)
|
|
|
|
|
{
|
2024-03-05 02:20:12 -05:00
|
|
|
SetFields(subCondition);
|
2023-08-14 13:17:51 -04:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2021-02-01 14:07:50 -08:00
|
|
|
/// <summary>
|
|
|
|
|
/// Set fields with given values
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="disk">Disk to remove replace fields in</param>
|
|
|
|
|
private void SetFields(Disk disk)
|
|
|
|
|
{
|
2023-04-19 16:39:58 -04:00
|
|
|
disk.DiskArea ??= new DiskArea();
|
2021-02-01 14:07:50 -08:00
|
|
|
SetFields(disk.DiskArea);
|
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
disk.Part ??= new Part();
|
2024-03-05 02:20:12 -05:00
|
|
|
SetFields(disk.Part as DatItem);
|
2021-02-01 14:07:50 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Set fields with given values
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="input">Input to remove replace fields in</param>
|
|
|
|
|
private void SetFields(Input input)
|
|
|
|
|
{
|
|
|
|
|
if (input.ControlsSpecified)
|
|
|
|
|
{
|
2023-08-14 13:17:51 -04:00
|
|
|
foreach (Control subControl in input.Controls!)
|
2021-02-01 14:07:50 -08:00
|
|
|
{
|
|
|
|
|
SetFields(subControl);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2024-03-05 02:20:12 -05:00
|
|
|
/// <summary>s
|
2021-02-01 14:07:50 -08:00
|
|
|
/// Set fields with given values
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="part">Part to remove replace fields in</param>
|
|
|
|
|
private void SetFields(Part part)
|
|
|
|
|
{
|
|
|
|
|
if (part.FeaturesSpecified)
|
|
|
|
|
{
|
2023-08-14 13:17:51 -04:00
|
|
|
foreach (PartFeature subPartFeature in part.Features!)
|
2021-02-01 14:07:50 -08:00
|
|
|
{
|
|
|
|
|
SetFields(subPartFeature);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Set fields with given values
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="port">Port to remove replace fields in</param>
|
|
|
|
|
private void SetFields(Port port)
|
|
|
|
|
{
|
|
|
|
|
if (port.AnalogsSpecified)
|
|
|
|
|
{
|
2023-08-14 13:17:51 -04:00
|
|
|
foreach (Analog subAnalog in port.Analogs!)
|
2021-02-01 14:07:50 -08:00
|
|
|
{
|
|
|
|
|
SetFields(subAnalog);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Set fields with given values
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="rom">Rom to remove replace fields in</param>
|
|
|
|
|
private void SetFields(Rom rom)
|
|
|
|
|
{
|
2023-04-19 16:39:58 -04:00
|
|
|
rom.DataArea ??= new DataArea();
|
2021-02-01 14:07:50 -08:00
|
|
|
SetFields(rom.DataArea);
|
|
|
|
|
|
2023-04-19 16:39:58 -04:00
|
|
|
rom.Part ??= new Part();
|
2024-03-05 02:20:12 -05:00
|
|
|
SetFields(rom.Part as DatItem);
|
2021-02-01 14:07:50 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Set fields with given values
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="slot">Slot to remove replace fields in</param>
|
|
|
|
|
private void SetFields(Slot slot)
|
|
|
|
|
{
|
|
|
|
|
if (slot.SlotOptionsSpecified)
|
|
|
|
|
{
|
2023-08-14 13:17:51 -04:00
|
|
|
foreach (SlotOption subSlotOption in slot.SlotOptions!)
|
2021-02-01 14:07:50 -08:00
|
|
|
{
|
|
|
|
|
SetFields(subSlotOption);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|