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 @@
-
-
-
+