mirror of
https://github.com/claunia/SabreTools.git
synced 2025-12-16 19:14:27 +00:00
Fix consistency issues in converting to metadata
This commit is contained in:
@@ -23,7 +23,7 @@ namespace SabreTools.DatFiles
|
|||||||
var metadataFile = new Models.Metadata.MetadataFile();
|
var metadataFile = new Models.Metadata.MetadataFile();
|
||||||
|
|
||||||
// Convert and assign the header
|
// Convert and assign the header
|
||||||
var header = ConvertHeader();
|
var header = Header.GetInternalClone();
|
||||||
if (header != null)
|
if (header != null)
|
||||||
metadataFile[Models.Metadata.MetadataFile.HeaderKey] = header;
|
metadataFile[Models.Metadata.MetadataFile.HeaderKey] = header;
|
||||||
|
|
||||||
@@ -48,7 +48,7 @@ namespace SabreTools.DatFiles
|
|||||||
var metadataFile = new Models.Metadata.MetadataFile();
|
var metadataFile = new Models.Metadata.MetadataFile();
|
||||||
|
|
||||||
// Convert and assign the header
|
// Convert and assign the header
|
||||||
var header = ConvertHeader();
|
var header = Header.GetInternalClone();
|
||||||
if (header != null)
|
if (header != null)
|
||||||
metadataFile[Models.Metadata.MetadataFile.HeaderKey] = header;
|
metadataFile[Models.Metadata.MetadataFile.HeaderKey] = header;
|
||||||
|
|
||||||
@@ -60,37 +60,6 @@ namespace SabreTools.DatFiles
|
|||||||
return metadataFile;
|
return metadataFile;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Convert header information
|
|
||||||
/// </summary>
|
|
||||||
private Models.Metadata.Header? ConvertHeader()
|
|
||||||
{
|
|
||||||
// Create an internal header
|
|
||||||
var header = Header.GetInternalClone();
|
|
||||||
|
|
||||||
// Remove fields with default values
|
|
||||||
if (header.ReadString(Models.Metadata.Header.ForceMergingKey).AsEnumValue<MergingFlag>() == MergingFlag.None)
|
|
||||||
header.Remove(Models.Metadata.Header.ForceMergingKey);
|
|
||||||
if (header.ReadString(Models.Metadata.Header.ForceNodumpKey).AsEnumValue<NodumpFlag>() == NodumpFlag.None)
|
|
||||||
header.Remove(Models.Metadata.Header.ForceNodumpKey);
|
|
||||||
if (header.ReadString(Models.Metadata.Header.ForcePackingKey).AsEnumValue<PackingFlag>() == PackingFlag.None)
|
|
||||||
header.Remove(Models.Metadata.Header.ForcePackingKey);
|
|
||||||
|
|
||||||
// Convert subheader values
|
|
||||||
if (Header.CanOpenSpecified)
|
|
||||||
header[Models.Metadata.Header.CanOpenKey] = new Models.OfflineList.CanOpen { Extension = Header.GetStringArrayFieldValue(Models.Metadata.Header.CanOpenKey) };
|
|
||||||
if (Header.ImagesSpecified)
|
|
||||||
header[Models.Metadata.Header.ImagesKey] = Header.GetFieldValue<Models.OfflineList.Images>(Models.Metadata.Header.ImagesKey);
|
|
||||||
if (Header.InfosSpecified)
|
|
||||||
header[Models.Metadata.Header.InfosKey] = Header.GetFieldValue<Models.OfflineList.Infos>(Models.Metadata.Header.InfosKey);
|
|
||||||
if (Header.NewDatSpecified)
|
|
||||||
header[Models.Metadata.Header.NewDatKey] = Header.GetFieldValue<Models.OfflineList.NewDat>(Models.Metadata.Header.NewDatKey);
|
|
||||||
if (Header.SearchSpecified)
|
|
||||||
header[Models.Metadata.Header.SearchKey] = Header.GetFieldValue<Models.OfflineList.Search>(Models.Metadata.Header.SearchKey);
|
|
||||||
|
|
||||||
return header;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Convert machines information
|
/// Convert machines information
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -146,7 +115,7 @@ namespace SabreTools.DatFiles
|
|||||||
switch (item)
|
switch (item)
|
||||||
{
|
{
|
||||||
case DatItems.Formats.Adjuster adjuster:
|
case DatItems.Formats.Adjuster adjuster:
|
||||||
var adjusterItem = ProcessItem(adjuster);
|
var adjusterItem = adjuster.GetInternalClone();
|
||||||
EnsureMachineKey<Models.Metadata.Adjuster?>(machine, Models.Metadata.Machine.AdjusterKey);
|
EnsureMachineKey<Models.Metadata.Adjuster?>(machine, Models.Metadata.Machine.AdjusterKey);
|
||||||
AppendToMachineKey(machine, Models.Metadata.Machine.AdjusterKey, adjusterItem);
|
AppendToMachineKey(machine, Models.Metadata.Machine.AdjusterKey, adjusterItem);
|
||||||
break;
|
break;
|
||||||
@@ -166,12 +135,12 @@ namespace SabreTools.DatFiles
|
|||||||
AppendToMachineKey(machine, Models.Metadata.Machine.ChipKey, chipItem);
|
AppendToMachineKey(machine, Models.Metadata.Machine.ChipKey, chipItem);
|
||||||
break;
|
break;
|
||||||
case DatItems.Formats.Configuration configuration:
|
case DatItems.Formats.Configuration configuration:
|
||||||
var configurationItem = ProcessItem(configuration);
|
var configurationItem = configuration.GetInternalClone();
|
||||||
EnsureMachineKey<Models.Metadata.Configuration?>(machine, Models.Metadata.Machine.ConfigurationKey);
|
EnsureMachineKey<Models.Metadata.Configuration?>(machine, Models.Metadata.Machine.ConfigurationKey);
|
||||||
AppendToMachineKey(machine, Models.Metadata.Machine.ConfigurationKey, configurationItem);
|
AppendToMachineKey(machine, Models.Metadata.Machine.ConfigurationKey, configurationItem);
|
||||||
break;
|
break;
|
||||||
case DatItems.Formats.Device device:
|
case DatItems.Formats.Device device:
|
||||||
var deviceItem = ProcessItem(device);
|
var deviceItem = device.GetInternalClone();
|
||||||
EnsureMachineKey<Models.Metadata.Device?>(machine, Models.Metadata.Machine.DeviceKey);
|
EnsureMachineKey<Models.Metadata.Device?>(machine, Models.Metadata.Machine.DeviceKey);
|
||||||
AppendToMachineKey(machine, Models.Metadata.Machine.DeviceKey, deviceItem);
|
AppendToMachineKey(machine, Models.Metadata.Machine.DeviceKey, deviceItem);
|
||||||
break;
|
break;
|
||||||
@@ -181,7 +150,7 @@ namespace SabreTools.DatFiles
|
|||||||
AppendToMachineKey(machine, Models.Metadata.Machine.DeviceRefKey, deviceRefItem);
|
AppendToMachineKey(machine, Models.Metadata.Machine.DeviceRefKey, deviceRefItem);
|
||||||
break;
|
break;
|
||||||
case DatItems.Formats.DipSwitch dipSwitch:
|
case DatItems.Formats.DipSwitch dipSwitch:
|
||||||
var dipSwitchItem = ProcessItem(dipSwitch);
|
var dipSwitchItem = dipSwitch.GetInternalClone();
|
||||||
EnsureMachineKey<Models.Metadata.DipSwitch?>(machine, Models.Metadata.Machine.DipSwitchKey);
|
EnsureMachineKey<Models.Metadata.DipSwitch?>(machine, Models.Metadata.Machine.DipSwitchKey);
|
||||||
AppendToMachineKey(machine, Models.Metadata.Machine.DipSwitchKey, dipSwitchItem);
|
AppendToMachineKey(machine, Models.Metadata.Machine.DipSwitchKey, dipSwitchItem);
|
||||||
|
|
||||||
@@ -238,7 +207,7 @@ namespace SabreTools.DatFiles
|
|||||||
AppendToMachineKey(machine, Models.Metadata.Machine.InfoKey, infoItem);
|
AppendToMachineKey(machine, Models.Metadata.Machine.InfoKey, infoItem);
|
||||||
break;
|
break;
|
||||||
case DatItems.Formats.Input input:
|
case DatItems.Formats.Input input:
|
||||||
var inputItem = ProcessItem(input);
|
var inputItem = input.GetInternalClone();
|
||||||
EnsureMachineKey<Models.Metadata.Input?>(machine, Models.Metadata.Machine.InputKey);
|
EnsureMachineKey<Models.Metadata.Input?>(machine, Models.Metadata.Machine.InputKey);
|
||||||
AppendToMachineKey(machine, Models.Metadata.Machine.InputKey, inputItem);
|
AppendToMachineKey(machine, Models.Metadata.Machine.InputKey, inputItem);
|
||||||
break;
|
break;
|
||||||
@@ -262,7 +231,7 @@ namespace SabreTools.DatFiles
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case DatItems.Formats.Port port:
|
case DatItems.Formats.Port port:
|
||||||
var portItem = ProcessItem(port);
|
var portItem = port.GetInternalClone();
|
||||||
EnsureMachineKey<Models.Metadata.Port?>(machine, Models.Metadata.Machine.PortKey);
|
EnsureMachineKey<Models.Metadata.Port?>(machine, Models.Metadata.Machine.PortKey);
|
||||||
AppendToMachineKey(machine, Models.Metadata.Machine.PortKey, portItem);
|
AppendToMachineKey(machine, Models.Metadata.Machine.PortKey, portItem);
|
||||||
break;
|
break;
|
||||||
@@ -309,7 +278,7 @@ namespace SabreTools.DatFiles
|
|||||||
AppendToMachineKey(machine, Models.Metadata.Machine.SharedFeatKey, sharedFeatItem);
|
AppendToMachineKey(machine, Models.Metadata.Machine.SharedFeatKey, sharedFeatItem);
|
||||||
break;
|
break;
|
||||||
case DatItems.Formats.Slot slot:
|
case DatItems.Formats.Slot slot:
|
||||||
var slotItem = ProcessItem(slot);
|
var slotItem = slot.GetInternalClone();
|
||||||
EnsureMachineKey<Models.Metadata.Slot?>(machine, Models.Metadata.Machine.SlotKey);
|
EnsureMachineKey<Models.Metadata.Slot?>(machine, Models.Metadata.Machine.SlotKey);
|
||||||
AppendToMachineKey(machine, Models.Metadata.Machine.SlotKey, slotItem);
|
AppendToMachineKey(machine, Models.Metadata.Machine.SlotKey, slotItem);
|
||||||
break;
|
break;
|
||||||
@@ -566,7 +535,7 @@ namespace SabreTools.DatFiles
|
|||||||
switch (item.Value)
|
switch (item.Value)
|
||||||
{
|
{
|
||||||
case DatItems.Formats.Adjuster adjuster:
|
case DatItems.Formats.Adjuster adjuster:
|
||||||
var adjusterItem = ProcessItem(adjuster);
|
var adjusterItem = adjuster.GetInternalClone();
|
||||||
EnsureMachineKey<Models.Metadata.Adjuster?>(machine, Models.Metadata.Machine.AdjusterKey);
|
EnsureMachineKey<Models.Metadata.Adjuster?>(machine, Models.Metadata.Machine.AdjusterKey);
|
||||||
AppendToMachineKey(machine, Models.Metadata.Machine.AdjusterKey, adjusterItem);
|
AppendToMachineKey(machine, Models.Metadata.Machine.AdjusterKey, adjusterItem);
|
||||||
break;
|
break;
|
||||||
@@ -586,12 +555,12 @@ namespace SabreTools.DatFiles
|
|||||||
AppendToMachineKey(machine, Models.Metadata.Machine.ChipKey, chipItem);
|
AppendToMachineKey(machine, Models.Metadata.Machine.ChipKey, chipItem);
|
||||||
break;
|
break;
|
||||||
case DatItems.Formats.Configuration configuration:
|
case DatItems.Formats.Configuration configuration:
|
||||||
var configurationItem = ProcessItem(configuration);
|
var configurationItem = configuration.GetInternalClone();
|
||||||
EnsureMachineKey<Models.Metadata.Configuration?>(machine, Models.Metadata.Machine.ConfigurationKey);
|
EnsureMachineKey<Models.Metadata.Configuration?>(machine, Models.Metadata.Machine.ConfigurationKey);
|
||||||
AppendToMachineKey(machine, Models.Metadata.Machine.ConfigurationKey, configurationItem);
|
AppendToMachineKey(machine, Models.Metadata.Machine.ConfigurationKey, configurationItem);
|
||||||
break;
|
break;
|
||||||
case DatItems.Formats.Device device:
|
case DatItems.Formats.Device device:
|
||||||
var deviceItem = ProcessItem(device);
|
var deviceItem = device.GetInternalClone();
|
||||||
EnsureMachineKey<Models.Metadata.Device?>(machine, Models.Metadata.Machine.DeviceKey);
|
EnsureMachineKey<Models.Metadata.Device?>(machine, Models.Metadata.Machine.DeviceKey);
|
||||||
AppendToMachineKey(machine, Models.Metadata.Machine.DeviceKey, deviceItem);
|
AppendToMachineKey(machine, Models.Metadata.Machine.DeviceKey, deviceItem);
|
||||||
break;
|
break;
|
||||||
@@ -601,7 +570,7 @@ namespace SabreTools.DatFiles
|
|||||||
AppendToMachineKey(machine, Models.Metadata.Machine.DeviceRefKey, deviceRefItem);
|
AppendToMachineKey(machine, Models.Metadata.Machine.DeviceRefKey, deviceRefItem);
|
||||||
break;
|
break;
|
||||||
case DatItems.Formats.DipSwitch dipSwitch:
|
case DatItems.Formats.DipSwitch dipSwitch:
|
||||||
var dipSwitchItem = ProcessItem(dipSwitch);
|
var dipSwitchItem = dipSwitch.GetInternalClone();
|
||||||
EnsureMachineKey<Models.Metadata.DipSwitch?>(machine, Models.Metadata.Machine.DipSwitchKey);
|
EnsureMachineKey<Models.Metadata.DipSwitch?>(machine, Models.Metadata.Machine.DipSwitchKey);
|
||||||
AppendToMachineKey(machine, Models.Metadata.Machine.DipSwitchKey, dipSwitchItem);
|
AppendToMachineKey(machine, Models.Metadata.Machine.DipSwitchKey, dipSwitchItem);
|
||||||
|
|
||||||
@@ -658,7 +627,7 @@ namespace SabreTools.DatFiles
|
|||||||
AppendToMachineKey(machine, Models.Metadata.Machine.InfoKey, infoItem);
|
AppendToMachineKey(machine, Models.Metadata.Machine.InfoKey, infoItem);
|
||||||
break;
|
break;
|
||||||
case DatItems.Formats.Input input:
|
case DatItems.Formats.Input input:
|
||||||
var inputItem = ProcessItem(input);
|
var inputItem = input.GetInternalClone();
|
||||||
EnsureMachineKey<Models.Metadata.Input?>(machine, Models.Metadata.Machine.InputKey);
|
EnsureMachineKey<Models.Metadata.Input?>(machine, Models.Metadata.Machine.InputKey);
|
||||||
AppendToMachineKey(machine, Models.Metadata.Machine.InputKey, inputItem);
|
AppendToMachineKey(machine, Models.Metadata.Machine.InputKey, inputItem);
|
||||||
break;
|
break;
|
||||||
@@ -682,7 +651,7 @@ namespace SabreTools.DatFiles
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case DatItems.Formats.Port port:
|
case DatItems.Formats.Port port:
|
||||||
var portItem = ProcessItem(port);
|
var portItem = port.GetInternalClone();
|
||||||
EnsureMachineKey<Models.Metadata.Port?>(machine, Models.Metadata.Machine.PortKey);
|
EnsureMachineKey<Models.Metadata.Port?>(machine, Models.Metadata.Machine.PortKey);
|
||||||
AppendToMachineKey(machine, Models.Metadata.Machine.PortKey, portItem);
|
AppendToMachineKey(machine, Models.Metadata.Machine.PortKey, portItem);
|
||||||
break;
|
break;
|
||||||
@@ -729,7 +698,7 @@ namespace SabreTools.DatFiles
|
|||||||
AppendToMachineKey(machine, Models.Metadata.Machine.SharedFeatKey, sharedFeatItem);
|
AppendToMachineKey(machine, Models.Metadata.Machine.SharedFeatKey, sharedFeatItem);
|
||||||
break;
|
break;
|
||||||
case DatItems.Formats.Slot slot:
|
case DatItems.Formats.Slot slot:
|
||||||
var slotItem = ProcessItem(slot);
|
var slotItem = slot.GetInternalClone();
|
||||||
EnsureMachineKey<Models.Metadata.Slot?>(machine, Models.Metadata.Machine.SlotKey);
|
EnsureMachineKey<Models.Metadata.Slot?>(machine, Models.Metadata.Machine.SlotKey);
|
||||||
AppendToMachineKey(machine, Models.Metadata.Machine.SlotKey, slotItem);
|
AppendToMachineKey(machine, Models.Metadata.Machine.SlotKey, slotItem);
|
||||||
break;
|
break;
|
||||||
@@ -934,133 +903,15 @@ namespace SabreTools.DatFiles
|
|||||||
return [.. machines];
|
return [.. machines];
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Convert Adjuster information
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="item">Item to convert</param>
|
|
||||||
private static Models.Metadata.Adjuster ProcessItem(DatItems.Formats.Adjuster item)
|
|
||||||
{
|
|
||||||
var adjusterItem = item.GetInternalClone();
|
|
||||||
|
|
||||||
var condition = item.GetFieldValue<DatItems.Formats.Condition?>(Models.Metadata.Adjuster.ConditionKey);
|
|
||||||
if (condition != null)
|
|
||||||
adjusterItem[Models.Metadata.Adjuster.ConditionKey] = condition.GetInternalClone();
|
|
||||||
|
|
||||||
return adjusterItem;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Convert Configuration information
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="item">Item to convert</param>
|
|
||||||
private static Models.Metadata.Configuration ProcessItem(DatItems.Formats.Configuration item)
|
|
||||||
{
|
|
||||||
var configurationItem = item.GetInternalClone();
|
|
||||||
|
|
||||||
var condition = item.GetFieldValue<DatItems.Formats.Condition?>(Models.Metadata.Configuration.ConditionKey);
|
|
||||||
if (condition != null)
|
|
||||||
configurationItem[Models.Metadata.Configuration.ConditionKey] = condition.GetInternalClone();
|
|
||||||
|
|
||||||
var confLocations = item.GetFieldValue<DatItems.Formats.ConfLocation[]?>(Models.Metadata.Configuration.ConfLocationKey);
|
|
||||||
if (confLocations != null)
|
|
||||||
{
|
|
||||||
Models.Metadata.ConfLocation[] confLocationItems = Array.ConvertAll(confLocations, confLocation => confLocation.GetInternalClone());
|
|
||||||
configurationItem[Models.Metadata.Configuration.ConfLocationKey] = confLocationItems;
|
|
||||||
}
|
|
||||||
|
|
||||||
var confSettings = item.GetFieldValue<DatItems.Formats.ConfSetting[]?>(Models.Metadata.Configuration.ConfSettingKey);
|
|
||||||
if (confSettings != null)
|
|
||||||
{
|
|
||||||
Models.Metadata.ConfSetting[] confSettingItems = new Models.Metadata.ConfSetting[confSettings.Length];
|
|
||||||
for (int i = 0; i < confSettings.Length; i++)
|
|
||||||
{
|
|
||||||
var confSetting = confSettings[i];
|
|
||||||
Models.Metadata.ConfSetting confSettingItem = confSetting.GetInternalClone();
|
|
||||||
|
|
||||||
// Handle subitems
|
|
||||||
var subCondition = confSetting.GetFieldValue<DatItems.Formats.Condition>(Models.Metadata.ConfSetting.ConditionKey);
|
|
||||||
if (subCondition != null)
|
|
||||||
confSettingItem[Models.Metadata.ConfSetting.ConditionKey] = subCondition.GetInternalClone();
|
|
||||||
|
|
||||||
confSettingItems[i] = confSettingItem;
|
|
||||||
}
|
|
||||||
|
|
||||||
configurationItem[Models.Metadata.Configuration.ConfSettingKey] = confSettingItems;
|
|
||||||
}
|
|
||||||
|
|
||||||
return configurationItem;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Convert Device information
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="item">Item to convert</param>
|
|
||||||
private static Models.Metadata.Device ProcessItem(DatItems.Formats.Device item)
|
|
||||||
{
|
|
||||||
var deviceItem = item.GetInternalClone();
|
|
||||||
|
|
||||||
var instance = item.GetFieldValue<DatItems.Formats.Instance?>(Models.Metadata.Device.InstanceKey);
|
|
||||||
if (instance != null)
|
|
||||||
deviceItem[Models.Metadata.Device.InstanceKey] = instance.GetInternalClone();
|
|
||||||
|
|
||||||
var extensions = item.GetFieldValue<DatItems.Formats.Extension[]?>(Models.Metadata.Device.ExtensionKey);
|
|
||||||
if (extensions != null)
|
|
||||||
{
|
|
||||||
Models.Metadata.Extension[] extensionItems = Array.ConvertAll(extensions, extension => extension.GetInternalClone());
|
|
||||||
deviceItem[Models.Metadata.Device.ExtensionKey] = extensionItems;
|
|
||||||
}
|
|
||||||
|
|
||||||
return deviceItem;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Convert DipSwitch information
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="item">Item to convert</param>
|
|
||||||
/// <param name="machine">Machine to use for Part</param>
|
|
||||||
private static Models.Metadata.DipSwitch ProcessItem(DatItems.Formats.DipSwitch item)
|
|
||||||
{
|
|
||||||
var dipSwitchItem = item.GetInternalClone();
|
|
||||||
|
|
||||||
var condition = item.GetFieldValue<DatItems.Formats.Condition?>(Models.Metadata.DipSwitch.ConditionKey);
|
|
||||||
if (condition != null)
|
|
||||||
dipSwitchItem[Models.Metadata.DipSwitch.ConditionKey] = condition.GetInternalClone();
|
|
||||||
|
|
||||||
var dipLocations = item.GetFieldValue<DatItems.Formats.DipLocation[]?>(Models.Metadata.DipSwitch.DipLocationKey);
|
|
||||||
if (dipLocations != null)
|
|
||||||
{
|
|
||||||
Models.Metadata.DipLocation[] dipLocationItems = Array.ConvertAll(dipLocations, dipLocation => dipLocation.GetInternalClone());
|
|
||||||
dipSwitchItem[Models.Metadata.DipSwitch.DipLocationKey] = dipLocationItems;
|
|
||||||
}
|
|
||||||
|
|
||||||
var dipValues = item.GetFieldValue<DatItems.Formats.DipValue[]?>(Models.Metadata.DipSwitch.DipValueKey);
|
|
||||||
if (dipValues != null)
|
|
||||||
{
|
|
||||||
Models.Metadata.DipValue[] dipValueItems = new Models.Metadata.DipValue[dipValues.Length];
|
|
||||||
for (int i = 0; i < dipValues.Length; i++)
|
|
||||||
{
|
|
||||||
var dipValue = dipValues[i];
|
|
||||||
Models.Metadata.DipValue dipValueItem = dipValue.GetInternalClone();
|
|
||||||
|
|
||||||
// Handle subitems
|
|
||||||
var subCondition = dipValue.GetFieldValue<DatItems.Formats.Condition>(Models.Metadata.DipValue.ConditionKey);
|
|
||||||
if (subCondition != null)
|
|
||||||
dipValueItem[Models.Metadata.DipValue.ConditionKey] = subCondition.GetInternalClone();
|
|
||||||
|
|
||||||
dipValueItems[i] = dipValueItem;
|
|
||||||
}
|
|
||||||
|
|
||||||
dipSwitchItem[Models.Metadata.DipSwitch.DipValueKey] = dipValueItems;
|
|
||||||
}
|
|
||||||
|
|
||||||
return dipSwitchItem;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Convert Display information
|
/// Convert Display information
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="item">Item to convert</param>
|
/// <param name="item">Item to convert</param>
|
||||||
/// <param name="machine">Machine to use for Video</param>
|
/// <param name="machine">Machine to use for Video</param>
|
||||||
|
/// <remarks>
|
||||||
|
/// This method is required because both a Display and a Video
|
||||||
|
/// item might be created and added for a given Display input.
|
||||||
|
/// </remarks>
|
||||||
private static Models.Metadata.Display ProcessItem(DatItems.Formats.Display item, Models.Metadata.Machine machine)
|
private static Models.Metadata.Display ProcessItem(DatItems.Formats.Display item, Models.Metadata.Machine machine)
|
||||||
{
|
{
|
||||||
var displayItem = item.GetInternalClone();
|
var displayItem = item.GetInternalClone();
|
||||||
@@ -1095,47 +946,15 @@ namespace SabreTools.DatFiles
|
|||||||
return displayItem;
|
return displayItem;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Convert Input information
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="item">Item to convert</param>
|
|
||||||
private static Models.Metadata.Input ProcessItem(DatItems.Formats.Input item)
|
|
||||||
{
|
|
||||||
var inputItem = item.GetInternalClone();
|
|
||||||
|
|
||||||
var controls = item.GetFieldValue<DatItems.Formats.Control[]?>(Models.Metadata.Input.ControlKey);
|
|
||||||
if (controls != null)
|
|
||||||
{
|
|
||||||
Models.Metadata.Control[] controlItems = Array.ConvertAll(controls, control => control.GetInternalClone());
|
|
||||||
inputItem[Models.Metadata.Input.ControlKey] = controlItems;
|
|
||||||
}
|
|
||||||
|
|
||||||
return inputItem;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Convert Port information
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="item">Item to convert</param>
|
|
||||||
private static Models.Metadata.Port ProcessItem(DatItems.Formats.Port item)
|
|
||||||
{
|
|
||||||
var slotItem = item.GetInternalClone();
|
|
||||||
|
|
||||||
var analogs = item.GetFieldValue<DatItems.Formats.Analog[]?>(Models.Metadata.Port.AnalogKey);
|
|
||||||
if (analogs != null)
|
|
||||||
{
|
|
||||||
Models.Metadata.Analog[] analogItems = Array.ConvertAll(analogs, analog => analog.GetInternalClone());
|
|
||||||
slotItem[Models.Metadata.Port.AnalogKey] = analogItems;
|
|
||||||
}
|
|
||||||
|
|
||||||
return slotItem;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Convert Rom information
|
/// Convert Rom information
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="item">Item to convert</param>
|
/// <param name="item">Item to convert</param>
|
||||||
/// <param name="machine">Machine to use for Part and DataArea</param>
|
/// <param name="machine">Machine to use for Part and DataArea</param>
|
||||||
|
/// <remarks>
|
||||||
|
/// This method is required because both a Rom and a Dump
|
||||||
|
/// item might be created and added for a given Rom input.
|
||||||
|
/// </remarks>
|
||||||
private static Models.Metadata.Rom ProcessItem(DatItems.Formats.Rom item, Models.Metadata.Machine machine)
|
private static Models.Metadata.Rom ProcessItem(DatItems.Formats.Rom item, Models.Metadata.Machine machine)
|
||||||
{
|
{
|
||||||
var romItem = item.GetInternalClone();
|
var romItem = item.GetInternalClone();
|
||||||
@@ -1231,24 +1050,6 @@ namespace SabreTools.DatFiles
|
|||||||
return romItem;
|
return romItem;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Convert Slot information
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="item">Item to convert</param>
|
|
||||||
private static Models.Metadata.Slot ProcessItem(DatItems.Formats.Slot item)
|
|
||||||
{
|
|
||||||
var slotItem = item.GetInternalClone();
|
|
||||||
|
|
||||||
var slotOptions = item.GetFieldValue<DatItems.Formats.SlotOption[]?>(Models.Metadata.Slot.SlotOptionKey);
|
|
||||||
if (slotOptions != null)
|
|
||||||
{
|
|
||||||
Models.Metadata.SlotOption[] slotOptionItems = Array.ConvertAll(slotOptions, slotOption => slotOption.GetInternalClone());
|
|
||||||
slotItem[Models.Metadata.Slot.SlotOptionKey] = slotOptionItems;
|
|
||||||
}
|
|
||||||
|
|
||||||
return slotItem;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Ensure a key in a machine
|
/// Ensure a key in a machine
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@@ -163,15 +163,6 @@ namespace SabreTools.DatFiles
|
|||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Accessors
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Get a clone of the current internal model
|
|
||||||
/// </summary>
|
|
||||||
public Models.Metadata.Header GetInternalClone() => (_internal.Clone() as Models.Metadata.Header)!;
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
#region Cloning Methods
|
#region Cloning Methods
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -257,6 +248,36 @@ namespace SabreTools.DatFiles
|
|||||||
return header;
|
return header;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Get a clone of the current internal model
|
||||||
|
/// </summary>
|
||||||
|
public Models.Metadata.Header GetInternalClone()
|
||||||
|
{
|
||||||
|
var header = (_internal.Clone() as Models.Metadata.Header)!;
|
||||||
|
|
||||||
|
// Remove fields with default values
|
||||||
|
if (header.ReadString(Models.Metadata.Header.ForceMergingKey).AsEnumValue<MergingFlag>() == MergingFlag.None)
|
||||||
|
header.Remove(Models.Metadata.Header.ForceMergingKey);
|
||||||
|
if (header.ReadString(Models.Metadata.Header.ForceNodumpKey).AsEnumValue<NodumpFlag>() == NodumpFlag.None)
|
||||||
|
header.Remove(Models.Metadata.Header.ForceNodumpKey);
|
||||||
|
if (header.ReadString(Models.Metadata.Header.ForcePackingKey).AsEnumValue<PackingFlag>() == PackingFlag.None)
|
||||||
|
header.Remove(Models.Metadata.Header.ForcePackingKey);
|
||||||
|
|
||||||
|
// Convert subheader values
|
||||||
|
if (CanOpenSpecified)
|
||||||
|
header[Models.Metadata.Header.CanOpenKey] = new Models.OfflineList.CanOpen { Extension = GetStringArrayFieldValue(Models.Metadata.Header.CanOpenKey) };
|
||||||
|
if (ImagesSpecified)
|
||||||
|
header[Models.Metadata.Header.ImagesKey] = GetFieldValue<Models.OfflineList.Images>(Models.Metadata.Header.ImagesKey);
|
||||||
|
if (InfosSpecified)
|
||||||
|
header[Models.Metadata.Header.InfosKey] = GetFieldValue<Models.OfflineList.Infos>(Models.Metadata.Header.InfosKey);
|
||||||
|
if (NewDatSpecified)
|
||||||
|
header[Models.Metadata.Header.NewDatKey] = GetFieldValue<Models.OfflineList.NewDat>(Models.Metadata.Header.NewDatKey);
|
||||||
|
if (SearchSpecified)
|
||||||
|
header[Models.Metadata.Header.SearchKey] = GetFieldValue<Models.OfflineList.Search>(Models.Metadata.Header.SearchKey);
|
||||||
|
|
||||||
|
return header;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Overwrite local values from another DatHeader if not default
|
/// Overwrite local values from another DatHeader if not default
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@@ -609,7 +609,7 @@ namespace SabreTools.DatItems
|
|||||||
/// Get a clone of the current internal model
|
/// Get a clone of the current internal model
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// TODO: Make virtual so individuals can handle conversion
|
/// TODO: Make virtual so individuals can handle conversion
|
||||||
public T GetInternalClone() => (_internal.Clone() as T)!;
|
public virtual T GetInternalClone() => (_internal.Clone() as T)!;
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
|||||||
@@ -33,6 +33,7 @@ namespace SabreTools.DatItems.Formats
|
|||||||
#region Constructors
|
#region Constructors
|
||||||
|
|
||||||
public Adjuster() : base() { }
|
public Adjuster() : base() { }
|
||||||
|
|
||||||
public Adjuster(Models.Metadata.Adjuster item) : base(item)
|
public Adjuster(Models.Metadata.Adjuster item) : base(item)
|
||||||
{
|
{
|
||||||
// Process flag values
|
// Process flag values
|
||||||
@@ -46,5 +47,21 @@ namespace SabreTools.DatItems.Formats
|
|||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
#region Cloning Methods
|
||||||
|
|
||||||
|
/// <inheritdoc/>
|
||||||
|
public override Models.Metadata.Adjuster GetInternalClone()
|
||||||
|
{
|
||||||
|
var adjusterItem = base.GetInternalClone();
|
||||||
|
|
||||||
|
var condition = GetFieldValue<Condition?>(Models.Metadata.Adjuster.ConditionKey);
|
||||||
|
if (condition != null)
|
||||||
|
adjusterItem[Models.Metadata.Adjuster.ConditionKey] = condition.GetInternalClone();
|
||||||
|
|
||||||
|
return adjusterItem;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ namespace SabreTools.DatItems.Formats
|
|||||||
#region Constructors
|
#region Constructors
|
||||||
|
|
||||||
public Analog() : base() { }
|
public Analog() : base() { }
|
||||||
|
|
||||||
public Analog(Models.Metadata.Analog item) : base(item) { }
|
public Analog(Models.Metadata.Analog item) : base(item) { }
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|||||||
@@ -89,6 +89,7 @@ namespace SabreTools.DatItems.Formats
|
|||||||
#region Constructors
|
#region Constructors
|
||||||
|
|
||||||
public Archive() : base() { }
|
public Archive() : base() { }
|
||||||
|
|
||||||
public Archive(Models.Metadata.Archive item) : base(item) { }
|
public Archive(Models.Metadata.Archive item) : base(item) { }
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ namespace SabreTools.DatItems.Formats
|
|||||||
#region Constructors
|
#region Constructors
|
||||||
|
|
||||||
public BiosSet() : base() { }
|
public BiosSet() : base() { }
|
||||||
|
|
||||||
public BiosSet(Models.Metadata.BiosSet item) : base(item)
|
public BiosSet(Models.Metadata.BiosSet item) : base(item)
|
||||||
{
|
{
|
||||||
// Process flag values
|
// Process flag values
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ namespace SabreTools.DatItems.Formats
|
|||||||
#region Constructors
|
#region Constructors
|
||||||
|
|
||||||
public Chip() : base() { }
|
public Chip() : base() { }
|
||||||
|
|
||||||
public Chip(Models.Metadata.Chip item) : base(item)
|
public Chip(Models.Metadata.Chip item) : base(item)
|
||||||
{
|
{
|
||||||
// Process flag values
|
// Process flag values
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ namespace SabreTools.DatItems.Formats
|
|||||||
#region Constructors
|
#region Constructors
|
||||||
|
|
||||||
public Condition() : base() { }
|
public Condition() : base() { }
|
||||||
|
|
||||||
public Condition(Models.Metadata.Condition item) : base(item)
|
public Condition(Models.Metadata.Condition item) : base(item)
|
||||||
{
|
{
|
||||||
// Process flag values
|
// Process flag values
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ namespace SabreTools.DatItems.Formats
|
|||||||
#region Constructors
|
#region Constructors
|
||||||
|
|
||||||
public ConfLocation() : base() { }
|
public ConfLocation() : base() { }
|
||||||
|
|
||||||
public ConfLocation(Models.Metadata.ConfLocation item) : base(item)
|
public ConfLocation(Models.Metadata.ConfLocation item) : base(item)
|
||||||
{
|
{
|
||||||
// Process flag values
|
// Process flag values
|
||||||
|
|||||||
@@ -33,6 +33,7 @@ namespace SabreTools.DatItems.Formats
|
|||||||
#region Constructors
|
#region Constructors
|
||||||
|
|
||||||
public ConfSetting() : base() { }
|
public ConfSetting() : base() { }
|
||||||
|
|
||||||
public ConfSetting(Models.Metadata.ConfSetting item) : base(item)
|
public ConfSetting(Models.Metadata.ConfSetting item) : base(item)
|
||||||
{
|
{
|
||||||
// Process flag values
|
// Process flag values
|
||||||
@@ -46,5 +47,22 @@ namespace SabreTools.DatItems.Formats
|
|||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
#region Cloning Methods
|
||||||
|
|
||||||
|
/// <inheritdoc/>
|
||||||
|
public override Models.Metadata.ConfSetting GetInternalClone()
|
||||||
|
{
|
||||||
|
var confSettingItem = base.GetInternalClone();
|
||||||
|
|
||||||
|
// Handle subitems
|
||||||
|
var condition = GetFieldValue<Condition>(Models.Metadata.ConfSetting.ConditionKey);
|
||||||
|
if (condition != null)
|
||||||
|
confSettingItem[Models.Metadata.ConfSetting.ConditionKey] = condition.GetInternalClone();
|
||||||
|
|
||||||
|
return confSettingItem;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -54,6 +54,7 @@ namespace SabreTools.DatItems.Formats
|
|||||||
#region Constructors
|
#region Constructors
|
||||||
|
|
||||||
public Configuration() : base() { }
|
public Configuration() : base() { }
|
||||||
|
|
||||||
public Configuration(Models.Metadata.Configuration item) : base(item)
|
public Configuration(Models.Metadata.Configuration item) : base(item)
|
||||||
{
|
{
|
||||||
// Handle subitems
|
// Handle subitems
|
||||||
@@ -77,5 +78,35 @@ namespace SabreTools.DatItems.Formats
|
|||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
#region Cloning Methods
|
||||||
|
|
||||||
|
/// <inheritdoc/>
|
||||||
|
public override Models.Metadata.Configuration GetInternalClone()
|
||||||
|
{
|
||||||
|
var configurationItem = base.GetInternalClone();
|
||||||
|
|
||||||
|
var condition = GetFieldValue<Condition?>(Models.Metadata.Configuration.ConditionKey);
|
||||||
|
if (condition != null)
|
||||||
|
configurationItem[Models.Metadata.Configuration.ConditionKey] = condition.GetInternalClone();
|
||||||
|
|
||||||
|
var confLocations = GetFieldValue<ConfLocation[]?>(Models.Metadata.Configuration.ConfLocationKey);
|
||||||
|
if (confLocations != null)
|
||||||
|
{
|
||||||
|
Models.Metadata.ConfLocation[] confLocationItems = Array.ConvertAll(confLocations, confLocation => confLocation.GetInternalClone());
|
||||||
|
configurationItem[Models.Metadata.Configuration.ConfLocationKey] = confLocationItems;
|
||||||
|
}
|
||||||
|
|
||||||
|
var confSettings = GetFieldValue<ConfSetting[]?>(Models.Metadata.Configuration.ConfSettingKey);
|
||||||
|
if (confSettings != null)
|
||||||
|
{
|
||||||
|
Models.Metadata.ConfSetting[] confSettingItems = Array.ConvertAll(confSettings, confSetting => confSetting.GetInternalClone());
|
||||||
|
configurationItem[Models.Metadata.Configuration.ConfSettingKey] = confSettingItems;
|
||||||
|
}
|
||||||
|
|
||||||
|
return configurationItem;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ namespace SabreTools.DatItems.Formats
|
|||||||
#region Constructors
|
#region Constructors
|
||||||
|
|
||||||
public Control() : base() { }
|
public Control() : base() { }
|
||||||
|
|
||||||
public Control(Models.Metadata.Control item) : base(item)
|
public Control(Models.Metadata.Control item) : base(item)
|
||||||
{
|
{
|
||||||
// Process flag values
|
// Process flag values
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ namespace SabreTools.DatItems.Formats
|
|||||||
#region Constructors
|
#region Constructors
|
||||||
|
|
||||||
public DataArea() : base() { }
|
public DataArea() : base() { }
|
||||||
|
|
||||||
public DataArea(Models.Metadata.DataArea item) : base(item)
|
public DataArea(Models.Metadata.DataArea item) : base(item)
|
||||||
{
|
{
|
||||||
// Process flag values
|
// Process flag values
|
||||||
|
|||||||
@@ -45,6 +45,7 @@ namespace SabreTools.DatItems.Formats
|
|||||||
#region Constructors
|
#region Constructors
|
||||||
|
|
||||||
public Device() : base() { }
|
public Device() : base() { }
|
||||||
|
|
||||||
public Device(Models.Metadata.Device item) : base(item)
|
public Device(Models.Metadata.Device item) : base(item)
|
||||||
{
|
{
|
||||||
// Process flag values
|
// Process flag values
|
||||||
@@ -67,5 +68,28 @@ namespace SabreTools.DatItems.Formats
|
|||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
#region Cloning Methods
|
||||||
|
|
||||||
|
/// <inheritdoc/>
|
||||||
|
public override Models.Metadata.Device GetInternalClone()
|
||||||
|
{
|
||||||
|
var deviceItem = base.GetInternalClone();
|
||||||
|
|
||||||
|
var instance = GetFieldValue<Instance?>(Models.Metadata.Device.InstanceKey);
|
||||||
|
if (instance != null)
|
||||||
|
deviceItem[Models.Metadata.Device.InstanceKey] = instance.GetInternalClone();
|
||||||
|
|
||||||
|
var extensions = GetFieldValue<Extension[]?>(Models.Metadata.Device.ExtensionKey);
|
||||||
|
if (extensions != null)
|
||||||
|
{
|
||||||
|
Models.Metadata.Extension[] extensionItems = Array.ConvertAll(extensions, extension => extension.GetInternalClone());
|
||||||
|
deviceItem[Models.Metadata.Device.ExtensionKey] = extensionItems;
|
||||||
|
}
|
||||||
|
|
||||||
|
return deviceItem;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ namespace SabreTools.DatItems.Formats
|
|||||||
#region Constructors
|
#region Constructors
|
||||||
|
|
||||||
public DeviceRef() : base() { }
|
public DeviceRef() : base() { }
|
||||||
|
|
||||||
public DeviceRef(Models.Metadata.DeviceRef item) : base(item) { }
|
public DeviceRef(Models.Metadata.DeviceRef item) : base(item) { }
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ namespace SabreTools.DatItems.Formats
|
|||||||
#region Constructors
|
#region Constructors
|
||||||
|
|
||||||
public DipLocation() : base() { }
|
public DipLocation() : base() { }
|
||||||
|
|
||||||
public DipLocation(Models.Metadata.DipLocation item) : base(item)
|
public DipLocation(Models.Metadata.DipLocation item) : base(item)
|
||||||
{
|
{
|
||||||
// Process flag values
|
// Process flag values
|
||||||
|
|||||||
@@ -76,6 +76,7 @@ namespace SabreTools.DatItems.Formats
|
|||||||
#region Constructors
|
#region Constructors
|
||||||
|
|
||||||
public DipSwitch() : base() { }
|
public DipSwitch() : base() { }
|
||||||
|
|
||||||
public DipSwitch(Models.Metadata.DipSwitch item) : base(item)
|
public DipSwitch(Models.Metadata.DipSwitch item) : base(item)
|
||||||
{
|
{
|
||||||
// Process flag values
|
// Process flag values
|
||||||
@@ -103,5 +104,35 @@ namespace SabreTools.DatItems.Formats
|
|||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
#region Cloning Methods
|
||||||
|
|
||||||
|
/// <inheritdoc/>
|
||||||
|
public override Models.Metadata.DipSwitch GetInternalClone()
|
||||||
|
{
|
||||||
|
var dipSwitchItem = base.GetInternalClone();
|
||||||
|
|
||||||
|
var condition = GetFieldValue<Condition?>(Models.Metadata.DipSwitch.ConditionKey);
|
||||||
|
if (condition != null)
|
||||||
|
dipSwitchItem[Models.Metadata.DipSwitch.ConditionKey] = condition.GetInternalClone();
|
||||||
|
|
||||||
|
var dipLocations = GetFieldValue<DipLocation[]?>(Models.Metadata.DipSwitch.DipLocationKey);
|
||||||
|
if (dipLocations != null)
|
||||||
|
{
|
||||||
|
Models.Metadata.DipLocation[] dipLocationItems = Array.ConvertAll(dipLocations, dipLocation => dipLocation.GetInternalClone());
|
||||||
|
dipSwitchItem[Models.Metadata.DipSwitch.DipLocationKey] = dipLocationItems;
|
||||||
|
}
|
||||||
|
|
||||||
|
var dipValues = GetFieldValue<DipValue[]?>(Models.Metadata.DipSwitch.DipValueKey);
|
||||||
|
if (dipValues != null)
|
||||||
|
{
|
||||||
|
Models.Metadata.DipValue[] dipValueItems = Array.ConvertAll(dipValues, dipValue => dipValue.GetInternalClone());
|
||||||
|
dipSwitchItem[Models.Metadata.DipSwitch.DipValueKey] = dipValueItems;
|
||||||
|
}
|
||||||
|
|
||||||
|
return dipSwitchItem;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -33,6 +33,7 @@ namespace SabreTools.DatItems.Formats
|
|||||||
#region Constructors
|
#region Constructors
|
||||||
|
|
||||||
public DipValue() : base() { }
|
public DipValue() : base() { }
|
||||||
|
|
||||||
public DipValue(Models.Metadata.DipValue item) : base(item)
|
public DipValue(Models.Metadata.DipValue item) : base(item)
|
||||||
{
|
{
|
||||||
// Process flag values
|
// Process flag values
|
||||||
@@ -46,5 +47,22 @@ namespace SabreTools.DatItems.Formats
|
|||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
#region Cloning Methods
|
||||||
|
|
||||||
|
/// <inheritdoc/>
|
||||||
|
public override Models.Metadata.DipValue GetInternalClone()
|
||||||
|
{
|
||||||
|
var dipValueItem = base.GetInternalClone();
|
||||||
|
|
||||||
|
// Handle subitems
|
||||||
|
var subCondition = GetFieldValue<Condition>(Models.Metadata.DipValue.ConditionKey);
|
||||||
|
if (subCondition != null)
|
||||||
|
dipValueItem[Models.Metadata.DipValue.ConditionKey] = subCondition.GetInternalClone();
|
||||||
|
|
||||||
|
return dipValueItem;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ namespace SabreTools.DatItems.Formats
|
|||||||
#region Constructors
|
#region Constructors
|
||||||
|
|
||||||
public DiskArea() : base() { }
|
public DiskArea() : base() { }
|
||||||
|
|
||||||
public DiskArea(Models.Metadata.DiskArea item) : base(item) { }
|
public DiskArea(Models.Metadata.DiskArea item) : base(item) { }
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ namespace SabreTools.DatItems.Formats
|
|||||||
#region Constructors
|
#region Constructors
|
||||||
|
|
||||||
public Display() : base() { }
|
public Display() : base() { }
|
||||||
|
|
||||||
public Display(Models.Metadata.Display item) : base(item)
|
public Display(Models.Metadata.Display item) : base(item)
|
||||||
{
|
{
|
||||||
// Process flag values
|
// Process flag values
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ namespace SabreTools.DatItems.Formats
|
|||||||
#region Constructors
|
#region Constructors
|
||||||
|
|
||||||
public Driver() : base() { }
|
public Driver() : base() { }
|
||||||
|
|
||||||
public Driver(Models.Metadata.Driver item) : base(item)
|
public Driver(Models.Metadata.Driver item) : base(item)
|
||||||
{
|
{
|
||||||
// Process flag values
|
// Process flag values
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ namespace SabreTools.DatItems.Formats
|
|||||||
#region Constructors
|
#region Constructors
|
||||||
|
|
||||||
public Extension() : base() { }
|
public Extension() : base() { }
|
||||||
|
|
||||||
public Extension(Models.Metadata.Extension item) : base(item) { }
|
public Extension(Models.Metadata.Extension item) : base(item) { }
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ namespace SabreTools.DatItems.Formats
|
|||||||
#region Constructors
|
#region Constructors
|
||||||
|
|
||||||
public Feature() : base() { }
|
public Feature() : base() { }
|
||||||
|
|
||||||
public Feature(Models.Metadata.Feature item) : base(item)
|
public Feature(Models.Metadata.Feature item) : base(item)
|
||||||
{
|
{
|
||||||
// Process flag values
|
// Process flag values
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ namespace SabreTools.DatItems.Formats
|
|||||||
#region Constructors
|
#region Constructors
|
||||||
|
|
||||||
public Info() : base() { }
|
public Info() : base() { }
|
||||||
|
|
||||||
public Info(Models.Metadata.Info item) : base(item) { }
|
public Info(Models.Metadata.Info item) : base(item) { }
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|||||||
@@ -35,6 +35,7 @@ namespace SabreTools.DatItems.Formats
|
|||||||
#region Constructors
|
#region Constructors
|
||||||
|
|
||||||
public Input() : base() { }
|
public Input() : base() { }
|
||||||
|
|
||||||
public Input(Models.Metadata.Input item) : base(item)
|
public Input(Models.Metadata.Input item) : base(item)
|
||||||
{
|
{
|
||||||
// Process flag values
|
// Process flag values
|
||||||
@@ -59,5 +60,24 @@ namespace SabreTools.DatItems.Formats
|
|||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
#region Cloning Methods
|
||||||
|
|
||||||
|
/// <inheritdoc/>
|
||||||
|
public override Models.Metadata.Input GetInternalClone()
|
||||||
|
{
|
||||||
|
var inputItem = base.GetInternalClone();
|
||||||
|
|
||||||
|
var controls = GetFieldValue<Control[]?>(Models.Metadata.Input.ControlKey);
|
||||||
|
if (controls != null)
|
||||||
|
{
|
||||||
|
Models.Metadata.Control[] controlItems = Array.ConvertAll(controls, control => control.GetInternalClone());
|
||||||
|
inputItem[Models.Metadata.Input.ControlKey] = controlItems;
|
||||||
|
}
|
||||||
|
|
||||||
|
return inputItem;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ namespace SabreTools.DatItems.Formats
|
|||||||
#region Constructors
|
#region Constructors
|
||||||
|
|
||||||
public Instance() : base() { }
|
public Instance() : base() { }
|
||||||
|
|
||||||
public Instance(Models.Metadata.Instance item) : base(item) { }
|
public Instance(Models.Metadata.Instance item) : base(item) { }
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|||||||
@@ -33,6 +33,7 @@ namespace SabreTools.DatItems.Formats
|
|||||||
#region Constructors
|
#region Constructors
|
||||||
|
|
||||||
public Part() : base() { }
|
public Part() : base() { }
|
||||||
|
|
||||||
public Part(Models.Metadata.Part item) : base(item) { }
|
public Part(Models.Metadata.Part item) : base(item) { }
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ namespace SabreTools.DatItems.Formats
|
|||||||
#region Constructors
|
#region Constructors
|
||||||
|
|
||||||
public PartFeature() : base() { }
|
public PartFeature() : base() { }
|
||||||
|
|
||||||
public PartFeature(Models.Metadata.Feature item) : base(item)
|
public PartFeature(Models.Metadata.Feature item) : base(item)
|
||||||
{
|
{
|
||||||
// Process flag values
|
// Process flag values
|
||||||
|
|||||||
@@ -34,6 +34,7 @@ namespace SabreTools.DatItems.Formats
|
|||||||
#region Constructors
|
#region Constructors
|
||||||
|
|
||||||
public Port() : base() { }
|
public Port() : base() { }
|
||||||
|
|
||||||
public Port(Models.Metadata.Port item) : base(item)
|
public Port(Models.Metadata.Port item) : base(item)
|
||||||
{
|
{
|
||||||
// Handle subitems
|
// Handle subitems
|
||||||
@@ -46,5 +47,24 @@ namespace SabreTools.DatItems.Formats
|
|||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
#region Cloning Methods
|
||||||
|
|
||||||
|
/// <inheritdoc/>
|
||||||
|
public override Models.Metadata.Port GetInternalClone()
|
||||||
|
{
|
||||||
|
var portItem = base.GetInternalClone();
|
||||||
|
|
||||||
|
var analogs = GetFieldValue<Analog[]?>(Models.Metadata.Port.AnalogKey);
|
||||||
|
if (analogs != null)
|
||||||
|
{
|
||||||
|
Models.Metadata.Analog[] analogItems = Array.ConvertAll(analogs, analog => analog.GetInternalClone());
|
||||||
|
portItem[Models.Metadata.Port.AnalogKey] = analogItems;
|
||||||
|
}
|
||||||
|
|
||||||
|
return portItem;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ namespace SabreTools.DatItems.Formats
|
|||||||
#region Constructors
|
#region Constructors
|
||||||
|
|
||||||
public RamOption() : base() { }
|
public RamOption() : base() { }
|
||||||
|
|
||||||
public RamOption(Models.Metadata.RamOption item) : base(item)
|
public RamOption(Models.Metadata.RamOption item) : base(item)
|
||||||
{
|
{
|
||||||
// Process flag values
|
// Process flag values
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ namespace SabreTools.DatItems.Formats
|
|||||||
#region Constructors
|
#region Constructors
|
||||||
|
|
||||||
public Release() : base() { }
|
public Release() : base() { }
|
||||||
|
|
||||||
public Release(Models.Metadata.Release item) : base(item)
|
public Release(Models.Metadata.Release item) : base(item)
|
||||||
{
|
{
|
||||||
// Process flag values
|
// Process flag values
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
using System.Xml.Serialization;
|
using System.Xml.Serialization;
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
using SabreTools.Core;
|
|
||||||
using SabreTools.Core.Tools;
|
using SabreTools.Core.Tools;
|
||||||
|
|
||||||
// TODO: Add item mappings for all fields
|
// TODO: Add item mappings for all fields
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ namespace SabreTools.DatItems.Formats
|
|||||||
#region Constructors
|
#region Constructors
|
||||||
|
|
||||||
public Sample() : base() { }
|
public Sample() : base() { }
|
||||||
|
|
||||||
public Sample(Models.Metadata.Sample item) : base(item) { }
|
public Sample(Models.Metadata.Sample item) : base(item) { }
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ namespace SabreTools.DatItems.Formats
|
|||||||
#region Constructors
|
#region Constructors
|
||||||
|
|
||||||
public SharedFeat() : base() { }
|
public SharedFeat() : base() { }
|
||||||
|
|
||||||
public SharedFeat(Models.Metadata.SharedFeat item) : base(item) { }
|
public SharedFeat(Models.Metadata.SharedFeat item) : base(item) { }
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|||||||
@@ -34,6 +34,7 @@ namespace SabreTools.DatItems.Formats
|
|||||||
#region Constructors
|
#region Constructors
|
||||||
|
|
||||||
public Slot() : base() { }
|
public Slot() : base() { }
|
||||||
|
|
||||||
public Slot(Models.Metadata.Slot item) : base(item)
|
public Slot(Models.Metadata.Slot item) : base(item)
|
||||||
{
|
{
|
||||||
// Handle subitems
|
// Handle subitems
|
||||||
@@ -46,5 +47,24 @@ namespace SabreTools.DatItems.Formats
|
|||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
#region Cloning Methods
|
||||||
|
|
||||||
|
/// <inheritdoc/>
|
||||||
|
public override Models.Metadata.Slot GetInternalClone()
|
||||||
|
{
|
||||||
|
var slotItem = base.GetInternalClone();
|
||||||
|
|
||||||
|
var slotOptions = GetFieldValue<SlotOption[]?>(Models.Metadata.Slot.SlotOptionKey);
|
||||||
|
if (slotOptions != null)
|
||||||
|
{
|
||||||
|
Models.Metadata.SlotOption[] slotOptionItems = Array.ConvertAll(slotOptions, slotOption => slotOption.GetInternalClone());
|
||||||
|
slotItem[Models.Metadata.Slot.SlotOptionKey] = slotOptionItems;
|
||||||
|
}
|
||||||
|
|
||||||
|
return slotItem;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ namespace SabreTools.DatItems.Formats
|
|||||||
#region Constructors
|
#region Constructors
|
||||||
|
|
||||||
public SlotOption() : base() { }
|
public SlotOption() : base() { }
|
||||||
|
|
||||||
public SlotOption(Models.Metadata.SlotOption item) : base(item)
|
public SlotOption(Models.Metadata.SlotOption item) : base(item)
|
||||||
{
|
{
|
||||||
// Process flag values
|
// Process flag values
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ namespace SabreTools.DatItems.Formats
|
|||||||
#region Constructors
|
#region Constructors
|
||||||
|
|
||||||
public SoftwareList() : base() { }
|
public SoftwareList() : base() { }
|
||||||
|
|
||||||
public SoftwareList(Models.Metadata.SoftwareList item) : base(item)
|
public SoftwareList(Models.Metadata.SoftwareList item) : base(item)
|
||||||
{
|
{
|
||||||
// Process flag values
|
// Process flag values
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ namespace SabreTools.DatItems.Formats
|
|||||||
#region Constructors
|
#region Constructors
|
||||||
|
|
||||||
public Sound() : base() { }
|
public Sound() : base() { }
|
||||||
|
|
||||||
public Sound(Models.Metadata.Sound item) : base(item)
|
public Sound(Models.Metadata.Sound item) : base(item)
|
||||||
{
|
{
|
||||||
// Process flag values
|
// Process flag values
|
||||||
|
|||||||
Reference in New Issue
Block a user