diff --git a/Filtration.Parser/Services/ItemFilterBlockTranslator.cs b/Filtration.Parser/Services/ItemFilterBlockTranslator.cs index fba4077..1168731 100644 --- a/Filtration.Parser/Services/ItemFilterBlockTranslator.cs +++ b/Filtration.Parser/Services/ItemFilterBlockTranslator.cs @@ -471,11 +471,15 @@ namespace Filtration.Parser.Services public string TranslateItemFilterBlockBaseToString(IItemFilterBlockBase itemFilterBlockBase) { - var itemFilterBlock = itemFilterBlockBase as IItemFilterBlock; - if (itemFilterBlock != null) return TranslateItemFilterBlockToString(itemFilterBlock); + if (itemFilterBlockBase is IItemFilterBlock itemFilterBlock) + { + return TranslateItemFilterBlockToString(itemFilterBlock); + } - var itemFilterCommentBlock = itemFilterBlockBase as IItemFilterCommentBlock; - if (itemFilterCommentBlock != null) return TranslateItemFilterCommentBlockToString(itemFilterCommentBlock); + if (itemFilterBlockBase is IItemFilterCommentBlock itemFilterCommentBlock) + { + return TranslateItemFilterCommentBlockToString(itemFilterCommentBlock); + } throw new InvalidOperationException("Unable to translate unknown ItemFilterBlock type"); } @@ -483,10 +487,18 @@ namespace Filtration.Parser.Services // TODO: Private public string TranslateItemFilterCommentBlockToString(IItemFilterCommentBlock itemFilterCommentBlock) { - // TODO: Handle multi-line // TODO: Tests // TODO: # Section: text? - return $"#{itemFilterCommentBlock.Comment}"; + var commentWithHashes = string.Empty; + + // Add "# " to the beginning of each line of the comment before saving it + foreach (var line in new LineReader(() => new StringReader(itemFilterCommentBlock.Comment))) + { + commentWithHashes += $"# {line.TrimStart(' ')}{Environment.NewLine}"; + } + + // Remove trailing newline + return commentWithHashes.TrimEnd('\r', '\n'); } // This method converts an ItemFilterBlock object into a string. This is used for copying a ItemFilterBlock diff --git a/Filtration.Parser/Services/ItemFilterScriptTranslator.cs b/Filtration.Parser/Services/ItemFilterScriptTranslator.cs index 2c7d8b9..6c21e2b 100644 --- a/Filtration.Parser/Services/ItemFilterScriptTranslator.cs +++ b/Filtration.Parser/Services/ItemFilterScriptTranslator.cs @@ -126,7 +126,11 @@ namespace Filtration.Parser.Services // Process the script header for (var i = 0; i < conditionBoundaries.Skip(1).First().StartLine; i++) { - if (lines[i].StartsWith("#")) + if (lines[i].StartsWith("# EnableBlockGroups")) + { + script.ItemFilterScriptSettings.BlockGroupsEnabled = true; + } + else if (lines[i].StartsWith("#")) { script.Description += lines[i].Substring(1).Trim(' ') + Environment.NewLine; } @@ -235,6 +239,11 @@ namespace Filtration.Parser.Services outputString += "# Script edited with Filtration - https://github.com/ben-wallis/Filtration" + Environment.NewLine; + if (script.ItemFilterScriptSettings.BlockGroupsEnabled) + { + outputString += "# EnableBlockGroups" + Environment.NewLine; + } + if (!string.IsNullOrEmpty(script.Description)) { // ReSharper disable once LoopCanBeConvertedToQuery @@ -251,7 +260,7 @@ namespace Filtration.Parser.Services // ReSharper disable once LoopCanBeConvertedToQuery foreach (var block in script.ItemFilterBlocks) { - outputString += _blockTranslator.TranslateItemFilterBlockToString(block as ItemFilterBlock) + Environment.NewLine; + outputString += _blockTranslator.TranslateItemFilterBlockBaseToString(block) + Environment.NewLine; if (Settings.Default.ExtraLineBetweenBlocks) { diff --git a/Filtration/Filtration.csproj b/Filtration/Filtration.csproj index 6c9c7bb..4e0f402 100644 --- a/Filtration/Filtration.csproj +++ b/Filtration/Filtration.csproj @@ -536,6 +536,8 @@ PreserveNewest + + diff --git a/Filtration/Properties/AssemblyInfo.cs b/Filtration/Properties/AssemblyInfo.cs index 25e6d39..eb9613c 100644 --- a/Filtration/Properties/AssemblyInfo.cs +++ b/Filtration/Properties/AssemblyInfo.cs @@ -50,7 +50,7 @@ using System.Windows; // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("0.15")] +[assembly: AssemblyVersion("0.16")] [assembly: InternalsVisibleTo("Filtration.Tests")] [assembly: InternalsVisibleTo("Filtration.ItemFilterPreview.Tests")] diff --git a/Filtration/UserControls/AutoScrollingListBox.cs b/Filtration/UserControls/AutoScrollingListBox.cs index d258d2d..9cd931d 100644 --- a/Filtration/UserControls/AutoScrollingListBox.cs +++ b/Filtration/UserControls/AutoScrollingListBox.cs @@ -7,7 +7,10 @@ namespace Filtration.UserControls { protected override void OnSelectionChanged(SelectionChangedEventArgs e) { - ScrollIntoView(e.AddedItems[0]); + if (e.AddedItems.Count > 0) + { + ScrollIntoView(e.AddedItems[0]); + } base.OnSelectionChanged(e); } diff --git a/Filtration/Views/AboutWindow.xaml b/Filtration/Views/AboutWindow.xaml index 3767236..9b8c9ae 100644 --- a/Filtration/Views/AboutWindow.xaml +++ b/Filtration/Views/AboutWindow.xaml @@ -32,23 +32,29 @@ Filtration - Copyright © 2015 + Copyright © 2017 Created by Ben Wallis https://github.com/ben-wallis/Filtration/ - + As you may be able to tell from the MSPaint logo that I have expertly applied a lens flare to, I am not an artist. If you'd like to create a swanky logo for Filtration please get in touch via e-mail or IRC. - Contact - IRC: irc.freenode.net #filtration - E-mail: ben-wallis@users.noreply.github.com - In-Game: AtomYcX + + Contact + IRC: irc.freenode.net #filtration + E-mail: ben-wallis@users.noreply.github.com + In-Game: AtomYcX + + + Special Thanks + GlenCFL - Implemented support for the item filter 3.1 changes + diff --git a/Filtration/Views/MainWindow.xaml b/Filtration/Views/MainWindow.xaml index e914d0d..1d9aa46 100644 --- a/Filtration/Views/MainWindow.xaml +++ b/Filtration/Views/MainWindow.xaml @@ -19,10 +19,8 @@ - - - + + @@ -89,12 +87,10 @@ - - - +