diff --git a/SabreTools.DatFiles/Formats/Listxml.cs b/SabreTools.DatFiles/Formats/Listxml.cs
index e2722c4b..611b5956 100644
--- a/SabreTools.DatFiles/Formats/Listxml.cs
+++ b/SabreTools.DatFiles/Formats/Listxml.cs
@@ -726,6 +726,7 @@ namespace SabreTools.DatFiles.Formats
case "softwarelist":
datItems.Add(new DatItems.Formats.SoftwareList
{
+ Tag = reader.GetAttribute("tag"),
Name = reader.GetAttribute("name"),
Status = reader.GetAttribute("status").AsSoftwareListStatus(),
Filter = reader.GetAttribute("filter"),
@@ -1862,6 +1863,7 @@ namespace SabreTools.DatFiles.Formats
case ItemType.SoftwareList:
var softwareList = datItem as DatItems.Formats.SoftwareList;
xtw.WriteStartElement("softwarelist");
+ xtw.WriteRequiredAttributeString("tag", softwareList.Tag);
xtw.WriteRequiredAttributeString("name", softwareList.Name);
xtw.WriteRequiredAttributeString("status", softwareList.Status.FromSoftwareListStatus());
xtw.WriteOptionalAttributeString("filter", softwareList.Filter);
diff --git a/SabreTools.DatFiles/Setter.cs b/SabreTools.DatFiles/Setter.cs
index 64a659ba..80244d7a 100644
--- a/SabreTools.DatFiles/Setter.cs
+++ b/SabreTools.DatFiles/Setter.cs
@@ -1233,6 +1233,9 @@ namespace SabreTools.DatFiles
/// SoftwareList to remove replace fields in
private void SetFields(SoftwareList softwareList)
{
+ if (DatItemMappings.Keys.Contains(DatItemField.Tag))
+ softwareList.Tag = DatItemMappings[DatItemField.Tag];
+
if (DatItemMappings.Keys.Contains(DatItemField.SoftwareListStatus))
softwareList.Status = DatItemMappings[DatItemField.SoftwareListStatus].AsSoftwareListStatus();
diff --git a/SabreTools.DatItems/Formats/SoftwareList.cs b/SabreTools.DatItems/Formats/SoftwareList.cs
index 704f38dc..14c8223f 100644
--- a/SabreTools.DatItems/Formats/SoftwareList.cs
+++ b/SabreTools.DatItems/Formats/SoftwareList.cs
@@ -14,6 +14,13 @@ namespace SabreTools.DatItems.Formats
{
#region Fields
+ ///
+ /// Tag for the software list
+ ///
+ [JsonProperty("tag", DefaultValueHandling = DefaultValueHandling.Ignore)]
+ [XmlElement("tag")]
+ public string Tag { get; set; }
+
///
/// Name of the item
///
@@ -77,6 +84,7 @@ namespace SabreTools.DatItems.Formats
Source = this.Source.Clone() as Source,
Remove = this.Remove,
+ Tag = this.Tag,
Name = this.Name,
Status = this.Status,
Filter = this.Filter,
@@ -97,7 +105,8 @@ namespace SabreTools.DatItems.Formats
SoftwareList newOther = other as SoftwareList;
// If the SoftwareList information matches
- return (Name == newOther.Name
+ return (Tag == newOther.Tag
+ && Name == newOther.Name
&& Status == newOther.Status
&& Filter == newOther.Filter);
}
diff --git a/SabreTools.Filtering/DatItemFilter.cs b/SabreTools.Filtering/DatItemFilter.cs
index 8a32e6c9..3622a722 100644
--- a/SabreTools.Filtering/DatItemFilter.cs
+++ b/SabreTools.Filtering/DatItemFilter.cs
@@ -952,7 +952,7 @@ namespace SabreTools.Filtering
/// True if the item passed the filter, false otherwise
private bool PassesFilters(Chip chip)
{
- // DatItem_Tag
+ // Filter on tag
if (!PassStringFilter(Tag, chip.Tag))
return false;
@@ -2007,6 +2007,10 @@ namespace SabreTools.Filtering
/// True if the item passed the filter, false otherwise
private bool PassesFilters(SoftwareList softwareList)
{
+ // Filter on tag
+ if (!PassStringFilter(Tag, softwareList.Tag))
+ return false;
+
// Filter on status
if (SoftwareListStatus.MatchesPositive(Core.SoftwareListStatus.NULL, softwareList.Status) == false)
return false;
diff --git a/SabreTools.Filtering/DatItemRemover.cs b/SabreTools.Filtering/DatItemRemover.cs
index a9e83e0d..0da3f014 100644
--- a/SabreTools.Filtering/DatItemRemover.cs
+++ b/SabreTools.Filtering/DatItemRemover.cs
@@ -1069,6 +1069,9 @@ namespace SabreTools.Filtering
/// SoftwareList to remove fields from
private void RemoveFields(SoftwareList softwareList)
{
+ if (DatItemFields.Contains(DatItemField.Tag))
+ softwareList.Tag = null;
+
if (DatItemFields.Contains(DatItemField.SoftwareListStatus))
softwareList.Status = SoftwareListStatus.NULL;
diff --git a/SabreTools.Filtering/Replacer.cs b/SabreTools.Filtering/Replacer.cs
index f26741ac..14f49812 100644
--- a/SabreTools.Filtering/Replacer.cs
+++ b/SabreTools.Filtering/Replacer.cs
@@ -1060,6 +1060,9 @@ namespace SabreTools.Filtering
/// List of fields representing what should be updated
private static void ReplaceFields(SoftwareList softwareList, SoftwareList newItem, List datItemFields)
{
+ if (datItemFields.Contains(DatItemField.Tag))
+ softwareList.Tag = newItem.Tag;
+
if (datItemFields.Contains(DatItemField.SoftwareListStatus))
softwareList.Status = newItem.Status;