diff --git a/SabreTools.Library/DatFiles/Listxml.cs b/SabreTools.Library/DatFiles/Listxml.cs index 4bf23797..40bdddc3 100644 --- a/SabreTools.Library/DatFiles/Listxml.cs +++ b/SabreTools.Library/DatFiles/Listxml.cs @@ -362,7 +362,6 @@ namespace SabreTools.Library.DatFiles Tag = reader.GetAttribute("tag"), DisplayType = reader.GetAttribute("type").AsDisplayType(), FlipX = reader.GetAttribute("flipx").AsYesNo(), - Refresh = reader.GetAttribute("refresh"), Source = new Source { @@ -392,6 +391,13 @@ namespace SabreTools.Library.DatFiles display.Height = height; } + // Set the refresh + if (reader.GetAttribute("refresh") != null) + { + if (Double.TryParse(reader.GetAttribute("refresh"), out double refresh)) + display.Refresh = refresh; + } + // Set the pixclock if (reader.GetAttribute("pixclock") != null) { @@ -1597,7 +1603,7 @@ namespace SabreTools.Library.DatFiles xtw.WriteOptionalAttributeString("flipx", display.FlipX.FromYesNo()); xtw.WriteOptionalAttributeString("width", display.Width?.ToString()); xtw.WriteOptionalAttributeString("height", display.Height?.ToString()); - xtw.WriteOptionalAttributeString("refresh", display.Refresh); + xtw.WriteOptionalAttributeString("refresh", display.Refresh?.ToString("N6")); xtw.WriteOptionalAttributeString("pixclock", display.PixClock?.ToString()); xtw.WriteOptionalAttributeString("htotal", display.HTotal?.ToString()); xtw.WriteOptionalAttributeString("hbend", display.HBEnd?.ToString()); diff --git a/SabreTools.Library/DatFiles/SabreDat.cs b/SabreTools.Library/DatFiles/SabreDat.cs index b727991a..a4c45155 100644 --- a/SabreTools.Library/DatFiles/SabreDat.cs +++ b/SabreTools.Library/DatFiles/SabreDat.cs @@ -1441,7 +1441,7 @@ namespace SabreTools.Library.DatFiles xtw.WriteOptionalAttributeString("flipx", display.FlipX.FromYesNo()); xtw.WriteOptionalAttributeString("width", display.Width?.ToString()); xtw.WriteOptionalAttributeString("height", display.Height?.ToString()); - xtw.WriteOptionalAttributeString("refresh", display.Refresh); + xtw.WriteOptionalAttributeString("refresh", display.Refresh?.ToString("N6")); xtw.WriteOptionalAttributeString("pixclock", display.PixClock?.ToString()); xtw.WriteOptionalAttributeString("htotal", display.HTotal?.ToString()); xtw.WriteOptionalAttributeString("hbend", display.HBEnd?.ToString()); diff --git a/SabreTools.Library/DatItems/Display.cs b/SabreTools.Library/DatItems/Display.cs index c7dbed57..294d133c 100644 --- a/SabreTools.Library/DatItems/Display.cs +++ b/SabreTools.Library/DatItems/Display.cs @@ -58,7 +58,7 @@ namespace SabreTools.Library.DatItems /// Refresh rate /// [JsonProperty("refresh", DefaultValueHandling = DefaultValueHandling.Ignore)] - public string Refresh { get; set; } // TODO: Float? + public double? Refresh { get; set; } /// /// Pixel clock timer @@ -144,7 +144,10 @@ namespace SabreTools.Library.DatItems } if (mappings.Keys.Contains(Field.DatItem_Refresh)) - Refresh = mappings[Field.DatItem_Refresh]; + { + if (Double.TryParse(mappings[Field.DatItem_Refresh], out double refresh)) + Refresh = refresh; + } if (mappings.Keys.Contains(Field.DatItem_PixClock)) { @@ -313,9 +316,9 @@ namespace SabreTools.Library.DatItems return false; // Filter on refresh - if (filter.DatItem_Refresh.MatchesPositiveSet(Refresh) == false) + if (filter.DatItem_Refresh.MatchesPositive(null, Refresh) == false) return false; - if (filter.DatItem_Refresh.MatchesNegativeSet(Refresh) == true) + if (filter.DatItem_Refresh.MatchesNegative(null, Refresh) == true) return false; // Filter on pixclock diff --git a/SabreTools.Library/Filtering/Filter.cs b/SabreTools.Library/Filtering/Filter.cs index 161bf09a..08093981 100644 --- a/SabreTools.Library/Filtering/Filter.cs +++ b/SabreTools.Library/Filtering/Filter.cs @@ -201,7 +201,7 @@ namespace SabreTools.Library.Filtering public FilterItem DatItem_FlipX { get; private set; } = new FilterItem() { Neutral = null }; public FilterItem DatItem_Width { get; private set; } = new FilterItem() { Positive = null, Negative = null, Neutral = null }; public FilterItem DatItem_Height { get; private set; } = new FilterItem() { Positive = null, Negative = null, Neutral = null }; - public FilterItem DatItem_Refresh { get; private set; } = new FilterItem(); + public FilterItem DatItem_Refresh { get; private set; } = new FilterItem() { Positive = null, Negative = null, Neutral = null }; public FilterItem DatItem_PixClock { get; private set; } = new FilterItem() { Positive = null, Negative = null, Neutral = null }; public FilterItem DatItem_HTotal { get; private set; } = new FilterItem() { Positive = null, Negative = null, Neutral = null }; public FilterItem DatItem_HBEnd { get; private set; } = new FilterItem() { Positive = null, Negative = null, Neutral = null }; @@ -855,7 +855,7 @@ namespace SabreTools.Library.Filtering break; case Field.DatItem_Refresh: - SetStringFilter(DatItem_Refresh, value, negate); + SetDoubleFilter(DatItem_Refresh, value, negate); break; case Field.DatItem_PixClock: @@ -1056,6 +1056,64 @@ namespace SabreTools.Library.Filtering filterItem.Neutral = true; } + /// + /// Set a long? filter + /// + /// FilterItem to populate + /// String value to add + /// True to set negative filter, false otherwise + private void SetDoubleFilter(FilterItem filterItem, string value, bool negate) + { + bool? operation = null; + if (value.StartsWith(">")) + operation = true; + else if (value.StartsWith("<")) + operation = false; + else if (value.StartsWith("=")) + operation = null; + + string valueString = value.TrimStart('>', '<', '='); + if (!Double.TryParse(valueString, out double valueDouble)) + return; + + // Equal + if (operation == null && !negate) + { + filterItem.Neutral = valueDouble; + } + + // Not Equal + else if (operation == null && negate) + { + filterItem.Negative = valueDouble - 1; + filterItem.Positive = valueDouble + 1; + } + + // Greater Than or Equal + else if (operation == true && !negate) + { + filterItem.Positive = valueDouble; + } + + // Strictly Less Than + else if (operation == true && negate) + { + filterItem.Negative = valueDouble - 1; + } + + // Less Than or Equal + else if (operation == false && !negate) + { + filterItem.Negative = valueDouble; + } + + // Strictly Greater Than + else if (operation == false && negate) + { + filterItem.Positive = valueDouble + 1; + } + } + /// /// Set a long filter ///