diff --git a/Filtration.Common/Converters/BooleanInverterConverter.cs b/Filtration.Common/Converters/BooleanInverterConverter.cs index 31ea68e..2471679 100644 --- a/Filtration.Common/Converters/BooleanInverterConverter.cs +++ b/Filtration.Common/Converters/BooleanInverterConverter.cs @@ -4,7 +4,7 @@ using System.Windows.Data; namespace Filtration.Common.Converters { - internal class BoolInverterConverter : IValueConverter + public class BooleanInverterConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) diff --git a/Filtration.Common/Styles/SharedResourcesDictionary.xaml b/Filtration.Common/Styles/SharedResourcesDictionary.xaml index f748b13..1af033f 100644 --- a/Filtration.Common/Styles/SharedResourcesDictionary.xaml +++ b/Filtration.Common/Styles/SharedResourcesDictionary.xaml @@ -38,7 +38,7 @@ - + diff --git a/Filtration.ObjectModel/BlockItemBaseTypes/ActionBlockItem.cs b/Filtration.ObjectModel/BlockItemBaseTypes/ActionBlockItem.cs index e4d600c..d920d50 100644 --- a/Filtration.ObjectModel/BlockItemBaseTypes/ActionBlockItem.cs +++ b/Filtration.ObjectModel/BlockItemBaseTypes/ActionBlockItem.cs @@ -7,7 +7,6 @@ namespace Filtration.ObjectModel.BlockItemBaseTypes public sealed class ActionBlockItem : BlockItemBase { private BlockAction _action; - private bool _isDirty; public ActionBlockItem(BlockAction action) { @@ -24,7 +23,7 @@ namespace Filtration.ObjectModel.BlockItemBaseTypes OnPropertyChanged(); OnPropertyChanged(nameof(SummaryText)); OnPropertyChanged(nameof(SummaryBackgroundColor)); - OnPropertyChanged(nameof(SummaryText)); + OnPropertyChanged(nameof(SummaryTextColor)); } } @@ -43,17 +42,7 @@ namespace Filtration.ObjectModel.BlockItemBaseTypes public override Color SummaryTextColor => Action == BlockAction.Show ? Colors.Black : Colors.White; public override int SortOrder => 0; - - public override bool IsDirty - { - get { return _isDirty; } - protected set - { - _isDirty = value; - OnPropertyChanged(); - } - } - + public void ToggleAction() { Action = Action == BlockAction.Show ? BlockAction.Hide : BlockAction.Show; diff --git a/Filtration.ObjectModel/BlockItemBaseTypes/BlockItembase.cs b/Filtration.ObjectModel/BlockItemBaseTypes/BlockItembase.cs index 9e31481..b6ce2d9 100644 --- a/Filtration.ObjectModel/BlockItemBaseTypes/BlockItembase.cs +++ b/Filtration.ObjectModel/BlockItemBaseTypes/BlockItembase.cs @@ -7,6 +7,8 @@ namespace Filtration.ObjectModel.BlockItemBaseTypes { public abstract class BlockItemBase : IItemFilterBlockItem { + private bool _isDirty; + public abstract string PrefixText { get; } public abstract string OutputText { get; } public abstract int MaximumAllowed { get; } @@ -15,7 +17,16 @@ namespace Filtration.ObjectModel.BlockItemBaseTypes public abstract Color SummaryBackgroundColor { get; } public abstract Color SummaryTextColor { get; } public abstract int SortOrder { get; } - public abstract bool IsDirty { get; protected set; } + + public bool IsDirty + { + get { return _isDirty; } + protected set + { + _isDirty = value; + OnPropertyChanged(); + } + } public event PropertyChangedEventHandler PropertyChanged; diff --git a/Filtration.ObjectModel/BlockItemBaseTypes/BooleanBlockItem.cs b/Filtration.ObjectModel/BlockItemBaseTypes/BooleanBlockItem.cs new file mode 100644 index 0000000..780ea13 --- /dev/null +++ b/Filtration.ObjectModel/BlockItemBaseTypes/BooleanBlockItem.cs @@ -0,0 +1,38 @@ +namespace Filtration.ObjectModel.BlockItemBaseTypes +{ + public abstract class BooleanBlockItem : BlockItemBase + { + private bool _booleanValue; + + protected BooleanBlockItem() + { + + } + + protected BooleanBlockItem(bool booleanValue) + { + BooleanValue = booleanValue; + } + + public bool BooleanValue + { + get { return _booleanValue; } + set + { + _booleanValue = value; + IsDirty = true; + OnPropertyChanged(); + OnPropertyChanged(nameof(SummaryText)); + } + } + + public override string OutputText => PrefixText + " " + BooleanValue; + public override string SummaryText => PrefixText + " = " + BooleanValue; + public override int MaximumAllowed => 1; + + public void ToggleValue() + { + BooleanValue = !BooleanValue; + } + } +} \ No newline at end of file diff --git a/Filtration.ObjectModel/BlockItemBaseTypes/ColorBlockItem.cs b/Filtration.ObjectModel/BlockItemBaseTypes/ColorBlockItem.cs index 6059d40..f955782 100644 --- a/Filtration.ObjectModel/BlockItemBaseTypes/ColorBlockItem.cs +++ b/Filtration.ObjectModel/BlockItemBaseTypes/ColorBlockItem.cs @@ -24,8 +24,6 @@ namespace Filtration.ObjectModel.BlockItemBaseTypes public override string SummaryText => string.Empty; - public override bool IsDirty { get; protected set; } - public ThemeComponent ThemeComponent { get { return _themeComponent; } diff --git a/Filtration.ObjectModel/BlockItemBaseTypes/DualIntegerBlockItem.cs b/Filtration.ObjectModel/BlockItemBaseTypes/DualIntegerBlockItem.cs index 81c0a8d..5313447 100644 --- a/Filtration.ObjectModel/BlockItemBaseTypes/DualIntegerBlockItem.cs +++ b/Filtration.ObjectModel/BlockItemBaseTypes/DualIntegerBlockItem.cs @@ -23,8 +23,6 @@ namespace Filtration.ObjectModel.BlockItemBaseTypes public override Color SummaryBackgroundColor => Colors.Transparent; public override Color SummaryTextColor => Colors.Transparent; - public override bool IsDirty { get; protected set; } - public int Value { get { return _value; } diff --git a/Filtration.ObjectModel/BlockItemBaseTypes/IntegerBlockItem.cs b/Filtration.ObjectModel/BlockItemBaseTypes/IntegerBlockItem.cs index c16aabf..6beb767 100644 --- a/Filtration.ObjectModel/BlockItemBaseTypes/IntegerBlockItem.cs +++ b/Filtration.ObjectModel/BlockItemBaseTypes/IntegerBlockItem.cs @@ -24,8 +24,6 @@ namespace Filtration.ObjectModel.BlockItemBaseTypes public abstract int Minimum { get; } public abstract int Maximum { get; } - public override bool IsDirty { get; protected set; } - public int Value { get { return _value; } diff --git a/Filtration.ObjectModel/BlockItemBaseTypes/NumericFilterPredicateBlockItem.cs b/Filtration.ObjectModel/BlockItemBaseTypes/NumericFilterPredicateBlockItem.cs index 2b88698..e5d38f5 100644 --- a/Filtration.ObjectModel/BlockItemBaseTypes/NumericFilterPredicateBlockItem.cs +++ b/Filtration.ObjectModel/BlockItemBaseTypes/NumericFilterPredicateBlockItem.cs @@ -25,9 +25,7 @@ namespace Filtration.ObjectModel.BlockItemBaseTypes public abstract int Minimum { get; } public abstract int Maximum { get; } - - public override bool IsDirty { get; protected set; } - + public NumericFilterPredicate FilterPredicate { get { return _filterPredicate; } diff --git a/Filtration.ObjectModel/BlockItemBaseTypes/StringListBlockItem.cs b/Filtration.ObjectModel/BlockItemBaseTypes/StringListBlockItem.cs index dd33bbf..2bc001b 100644 --- a/Filtration.ObjectModel/BlockItemBaseTypes/StringListBlockItem.cs +++ b/Filtration.ObjectModel/BlockItemBaseTypes/StringListBlockItem.cs @@ -30,8 +30,6 @@ namespace Filtration.ObjectModel.BlockItemBaseTypes public ObservableCollection Items { get; protected set; } - public override bool IsDirty { get; protected set; } - private void OnItemsCollectionChanged(object sender, NotifyCollectionChangedEventArgs e) { IsDirty = true; diff --git a/Filtration.ObjectModel/BlockItemTypes/BackgroundColorBlockItem.cs b/Filtration.ObjectModel/BlockItemTypes/BackgroundColorBlockItem.cs index 992c617..1bcc0bf 100644 --- a/Filtration.ObjectModel/BlockItemTypes/BackgroundColorBlockItem.cs +++ b/Filtration.ObjectModel/BlockItemTypes/BackgroundColorBlockItem.cs @@ -16,6 +16,6 @@ namespace Filtration.ObjectModel.BlockItemTypes public override string PrefixText => "SetBackgroundColor"; public override int MaximumAllowed => 1; public override string DisplayHeading => "Background Color"; - public override int SortOrder => 13; + public override int SortOrder => 15; } } diff --git a/Filtration.ObjectModel/BlockItemTypes/BorderColorBlockItem.cs b/Filtration.ObjectModel/BlockItemTypes/BorderColorBlockItem.cs index 950a97f..4da4384 100644 --- a/Filtration.ObjectModel/BlockItemTypes/BorderColorBlockItem.cs +++ b/Filtration.ObjectModel/BlockItemTypes/BorderColorBlockItem.cs @@ -16,6 +16,6 @@ namespace Filtration.ObjectModel.BlockItemTypes public override string PrefixText => "SetBorderColor"; public override int MaximumAllowed => 1; public override string DisplayHeading => "Border Color"; - public override int SortOrder => 14; + public override int SortOrder => 16; } } diff --git a/Filtration.ObjectModel/BlockItemTypes/CorruptedBlockItem.cs b/Filtration.ObjectModel/BlockItemTypes/CorruptedBlockItem.cs new file mode 100644 index 0000000..02ba979 --- /dev/null +++ b/Filtration.ObjectModel/BlockItemTypes/CorruptedBlockItem.cs @@ -0,0 +1,23 @@ +using System.Windows.Media; +using Filtration.ObjectModel.BlockItemBaseTypes; + +namespace Filtration.ObjectModel.BlockItemTypes +{ + public sealed class CorruptedBlockItem : BooleanBlockItem + { + public CorruptedBlockItem() + { + } + + public CorruptedBlockItem(bool booleanValue) : base(booleanValue) + { + } + + public override string PrefixText => "Corrupted"; + public override string DisplayHeading => "Corrupted"; + public override Color SummaryBackgroundColor => Colors.DarkRed; + public override Color SummaryTextColor => Colors.White; + public override int SortOrder => 5; + + } +} \ No newline at end of file diff --git a/Filtration.ObjectModel/BlockItemTypes/DropLevelBlockItem.cs b/Filtration.ObjectModel/BlockItemTypes/DropLevelBlockItem.cs index 3374e7f..adf1ab2 100644 --- a/Filtration.ObjectModel/BlockItemTypes/DropLevelBlockItem.cs +++ b/Filtration.ObjectModel/BlockItemTypes/DropLevelBlockItem.cs @@ -21,7 +21,7 @@ namespace Filtration.ObjectModel.BlockItemTypes public override string SummaryText => "Drop Level " + FilterPredicate; public override Color SummaryBackgroundColor => Colors.DodgerBlue; public override Color SummaryTextColor => Colors.White; - public override int SortOrder => 2; + public override int SortOrder => 9; public override int Minimum => 0; public override int Maximum => 100; } diff --git a/Filtration.ObjectModel/BlockItemTypes/FontSizeBlockItem.cs b/Filtration.ObjectModel/BlockItemTypes/FontSizeBlockItem.cs index 7f509be..ffbf68a 100644 --- a/Filtration.ObjectModel/BlockItemTypes/FontSizeBlockItem.cs +++ b/Filtration.ObjectModel/BlockItemTypes/FontSizeBlockItem.cs @@ -16,7 +16,7 @@ namespace Filtration.ObjectModel.BlockItemTypes public override string PrefixText => "SetFontSize"; public override int MaximumAllowed => 1; public override string DisplayHeading => "Font Size"; - public override int SortOrder => 15; + public override int SortOrder => 17; public override int Minimum => 11; public override int Maximum => 45; } diff --git a/Filtration.ObjectModel/BlockItemTypes/HeightBlockItem.cs b/Filtration.ObjectModel/BlockItemTypes/HeightBlockItem.cs index 9b7b3a7..ccc9727 100644 --- a/Filtration.ObjectModel/BlockItemTypes/HeightBlockItem.cs +++ b/Filtration.ObjectModel/BlockItemTypes/HeightBlockItem.cs @@ -21,7 +21,7 @@ namespace Filtration.ObjectModel.BlockItemTypes public override string SummaryText => "Height " + FilterPredicate; public override Color SummaryBackgroundColor => Colors.LightBlue; public override Color SummaryTextColor => Colors.Black; - public override int SortOrder => 8; + public override int SortOrder => 7; public override int Minimum => 0; public override int Maximum => 6; } diff --git a/Filtration.ObjectModel/BlockItemTypes/IdentifiedBlockItem.cs b/Filtration.ObjectModel/BlockItemTypes/IdentifiedBlockItem.cs new file mode 100644 index 0000000..48f10a2 --- /dev/null +++ b/Filtration.ObjectModel/BlockItemTypes/IdentifiedBlockItem.cs @@ -0,0 +1,23 @@ +using System.Windows.Media; +using Filtration.ObjectModel.BlockItemBaseTypes; + +namespace Filtration.ObjectModel.BlockItemTypes +{ + public sealed class IdentifiedBlockItem : BooleanBlockItem + { + public IdentifiedBlockItem() + { + } + + public IdentifiedBlockItem(bool booleanValue) : base(booleanValue) + { + } + + public override string PrefixText => "Identified"; + public override string DisplayHeading => "Identified"; + public override Color SummaryBackgroundColor => Colors.DarkSlateGray; + public override Color SummaryTextColor => Colors.White; + public override int SortOrder => 4; + + } +} \ No newline at end of file diff --git a/Filtration.ObjectModel/BlockItemTypes/ItemLevelBlockItem.cs b/Filtration.ObjectModel/BlockItemTypes/ItemLevelBlockItem.cs index de772bc..638d6d2 100644 --- a/Filtration.ObjectModel/BlockItemTypes/ItemLevelBlockItem.cs +++ b/Filtration.ObjectModel/BlockItemTypes/ItemLevelBlockItem.cs @@ -20,7 +20,7 @@ namespace Filtration.ObjectModel.BlockItemTypes public override string SummaryText => "Item Level " + FilterPredicate; public override Color SummaryBackgroundColor => Colors.DarkSlateGray; public override Color SummaryTextColor => Colors.White; - public override int SortOrder => 1; + public override int SortOrder => 13; public override int Minimum => 0; public override int Maximum => 100; } diff --git a/Filtration.ObjectModel/BlockItemTypes/LinkedSocketsBlockItem.cs b/Filtration.ObjectModel/BlockItemTypes/LinkedSocketsBlockItem.cs index beaebd2..7763f0b 100644 --- a/Filtration.ObjectModel/BlockItemTypes/LinkedSocketsBlockItem.cs +++ b/Filtration.ObjectModel/BlockItemTypes/LinkedSocketsBlockItem.cs @@ -21,7 +21,7 @@ namespace Filtration.ObjectModel.BlockItemTypes public override string SummaryText => "Linked Sockets " + FilterPredicate; public override Color SummaryBackgroundColor => Colors.Gold; public override Color SummaryTextColor => Colors.Black; - public override int SortOrder => 6; + public override int SortOrder => 0; public override int Minimum => 0; public override int Maximum => 6; } diff --git a/Filtration.ObjectModel/BlockItemTypes/RarityBlockItem.cs b/Filtration.ObjectModel/BlockItemTypes/RarityBlockItem.cs index 284e5a6..7bd2af0 100644 --- a/Filtration.ObjectModel/BlockItemTypes/RarityBlockItem.cs +++ b/Filtration.ObjectModel/BlockItemTypes/RarityBlockItem.cs @@ -30,7 +30,7 @@ namespace Filtration.ObjectModel.BlockItemTypes ((ItemRarity) FilterPredicate.PredicateOperand).GetAttributeDescription(); public override Color SummaryBackgroundColor => Colors.LightCoral; public override Color SummaryTextColor => Colors.White; - public override int SortOrder => 4; + public override int SortOrder => 12; public override int Minimum => 0; public override int Maximum => (int)ItemRarity.Unique; } diff --git a/Filtration.ObjectModel/BlockItemTypes/SocketGroupBlockItem.cs b/Filtration.ObjectModel/BlockItemTypes/SocketGroupBlockItem.cs index 932d264..185ee99 100644 --- a/Filtration.ObjectModel/BlockItemTypes/SocketGroupBlockItem.cs +++ b/Filtration.ObjectModel/BlockItemTypes/SocketGroupBlockItem.cs @@ -39,7 +39,7 @@ namespace Filtration.ObjectModel.BlockItemTypes public override Color SummaryBackgroundColor => Colors.GhostWhite; public override Color SummaryTextColor => Colors.Black; - public override int SortOrder => 9; + public override int SortOrder => 6; private SocketColor StringToSocketColor(char socketColorString) { diff --git a/Filtration.ObjectModel/BlockItemTypes/SocketsBlockItem.cs b/Filtration.ObjectModel/BlockItemTypes/SocketsBlockItem.cs index e9bae54..0386be1 100644 --- a/Filtration.ObjectModel/BlockItemTypes/SocketsBlockItem.cs +++ b/Filtration.ObjectModel/BlockItemTypes/SocketsBlockItem.cs @@ -21,7 +21,7 @@ namespace Filtration.ObjectModel.BlockItemTypes public override string SummaryText => "Sockets " + FilterPredicate; public override Color SummaryBackgroundColor => Colors.LightGray; public override Color SummaryTextColor => Colors.Black; - public override int SortOrder => 5; + public override int SortOrder => 2; public override int Minimum => 0; public override int Maximum => 6; } diff --git a/Filtration.ObjectModel/BlockItemTypes/SoundBlockItem.cs b/Filtration.ObjectModel/BlockItemTypes/SoundBlockItem.cs index e117b37..a972a0a 100644 --- a/Filtration.ObjectModel/BlockItemTypes/SoundBlockItem.cs +++ b/Filtration.ObjectModel/BlockItemTypes/SoundBlockItem.cs @@ -17,6 +17,6 @@ namespace Filtration.ObjectModel.BlockItemTypes public override string PrefixText => "PlayAlertSound"; public override int MaximumAllowed => 1; public override string DisplayHeading => "Play Alert Sound"; - public override int SortOrder => 16; + public override int SortOrder => 18; } } diff --git a/Filtration.ObjectModel/BlockItemTypes/TextColorBlockItem.cs b/Filtration.ObjectModel/BlockItemTypes/TextColorBlockItem.cs index fe2ed6e..1cb6ba9 100644 --- a/Filtration.ObjectModel/BlockItemTypes/TextColorBlockItem.cs +++ b/Filtration.ObjectModel/BlockItemTypes/TextColorBlockItem.cs @@ -16,6 +16,6 @@ namespace Filtration.ObjectModel.BlockItemTypes public override string PrefixText => "SetTextColor"; public override int MaximumAllowed => 1; public override string DisplayHeading => "Text Color"; - public override int SortOrder => 12; + public override int SortOrder => 14; } } diff --git a/Filtration.ObjectModel/BlockItemTypes/WidthBlockItem.cs b/Filtration.ObjectModel/BlockItemTypes/WidthBlockItem.cs index 5211b0b..2fa7102 100644 --- a/Filtration.ObjectModel/BlockItemTypes/WidthBlockItem.cs +++ b/Filtration.ObjectModel/BlockItemTypes/WidthBlockItem.cs @@ -21,7 +21,7 @@ namespace Filtration.ObjectModel.BlockItemTypes public override string SummaryText => "Width " + FilterPredicate; public override Color SummaryBackgroundColor => Colors.MediumPurple; public override Color SummaryTextColor => Colors.White; - public override int SortOrder => 7; + public override int SortOrder => 8; public override int Minimum => 0; public override int Maximum => 2; } diff --git a/Filtration.ObjectModel/Filtration.ObjectModel.csproj b/Filtration.ObjectModel/Filtration.ObjectModel.csproj index 93d023e..476cae3 100644 --- a/Filtration.ObjectModel/Filtration.ObjectModel.csproj +++ b/Filtration.ObjectModel/Filtration.ObjectModel.csproj @@ -43,7 +43,8 @@ - + + @@ -53,9 +54,11 @@ + + diff --git a/Filtration.Parser.Tests/Resources/Issue39TestFilter.txt b/Filtration.Parser.Tests/Resources/Issue39TestFilter.txt new file mode 100644 index 0000000..950515a --- /dev/null +++ b/Filtration.Parser.Tests/Resources/Issue39TestFilter.txt @@ -0,0 +1,13 @@ +Hide # $flask, lvl + ItemLevel > 68 + Quality < 15 + Class "Life Flask" "Mana Flask" "Hybrid Flask" + BaseType "Flask" + SetFontSize 20 + +Show # $flask, lvl + ItemLevel >= 35 + Class "Life Flask" "Mana Flask" + BaseType "Flask" + BaseType "Small" "Medium" "Large" "Greater" "Grand" + SetFontSize 20 \ No newline at end of file diff --git a/Filtration.Parser.Tests/Services/TestItemFilterBlockTranslator.cs b/Filtration.Parser.Tests/Services/TestItemFilterBlockTranslator.cs index 16040ff..0ee32fb 100644 --- a/Filtration.Parser.Tests/Services/TestItemFilterBlockTranslator.cs +++ b/Filtration.Parser.Tests/Services/TestItemFilterBlockTranslator.cs @@ -233,6 +233,40 @@ namespace Filtration.Parser.Tests.Services Assert.AreEqual(FilterPredicateOperator.Equal, blockItem.FilterPredicate.PredicateOperator); } + [Test] + public void TranslateStringToItemFilterBlock_Corrupted_ReturnsCorrectObject() + { + // Arrange + var inputString = "Show" + Environment.NewLine + + " Corrupted True"; + + // Act + var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, null); + + // Assert + + Assert.AreEqual(1, result.BlockItems.Count(b => b is CorruptedBlockItem)); + var blockItem = result.BlockItems.OfType().First(); + Assert.IsTrue(blockItem.BooleanValue); + } + + [Test] + public void TranslateStringToItemFilterBlock_Identified_ReturnsCorrectObject() + { + // Arrange + var inputString = "Show" + Environment.NewLine + + " Identified True"; + + // Act + var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, null); + + // Assert + + Assert.AreEqual(1, result.BlockItems.Count(b => b is IdentifiedBlockItem)); + var blockItem = result.BlockItems.OfType().First(); + Assert.IsTrue(blockItem.BooleanValue); + } + [Test] public void TranslateStringToItemFilterBlock_Quality_ReturnsCorrectObject() { @@ -624,6 +658,8 @@ namespace Filtration.Parser.Tests.Services " DropLevel < 70" + Environment.NewLine + " Quality = 15" + Environment.NewLine + " Rarity <= Unique" + Environment.NewLine + + " Identified True" + Environment.NewLine + + " Corrupted false" + Environment.NewLine + @" Class ""My Item Class"" AnotherClass ""AndAnotherClass""" + Environment.NewLine + @" BaseType MyBaseType ""Another BaseType""" + Environment.NewLine + " JunkLine Let's ignore this one!" + Environment.NewLine + @@ -646,6 +682,12 @@ namespace Filtration.Parser.Tests.Services Assert.AreEqual(FilterPredicateOperator.GreaterThanOrEqual, itemLevelblockItem.FilterPredicate.PredicateOperator); Assert.AreEqual(50, itemLevelblockItem.FilterPredicate.PredicateOperand); + var corruptedBlockItem = result.BlockItems.OfType().First(); + Assert.IsFalse(corruptedBlockItem.BooleanValue); + + var identifiedBlockItem = result.BlockItems.OfType().First(); + Assert.IsTrue(identifiedBlockItem.BooleanValue); + var dropLevelblockItem = result.BlockItems.OfType().First(); Assert.AreEqual(FilterPredicateOperator.LessThan, dropLevelblockItem.FilterPredicate.PredicateOperator); Assert.AreEqual(70, dropLevelblockItem.FilterPredicate.PredicateOperand); @@ -1027,6 +1069,70 @@ namespace Filtration.Parser.Tests.Services Assert.AreEqual(expectedResult, result); } + [Test] + public void TranslateItemFilterBlockToString_IdentifiedTrue_ReturnsCorrectString() + { + // Arrange + var expectedResult = "Show" + Environment.NewLine + + " Identified True"; + + _testUtility.TestBlock.BlockItems.Add(new IdentifiedBlockItem(true)); + + // Act + var result = _testUtility.Translator.TranslateItemFilterBlockToString(_testUtility.TestBlock); + + // Assert + Assert.AreEqual(expectedResult, result); + } + + [Test] + public void TranslateItemFilterBlockToString_IdentifiedFalse_ReturnsCorrectString() + { + // Arrange + var expectedResult = "Show" + Environment.NewLine + + " Identified False"; + + _testUtility.TestBlock.BlockItems.Add(new IdentifiedBlockItem(false)); + + // Act + var result = _testUtility.Translator.TranslateItemFilterBlockToString(_testUtility.TestBlock); + + // Assert + Assert.AreEqual(expectedResult, result); + } + + [Test] + public void TranslateItemFilterBlockToString_CorruptedTrue_ReturnsCorrectString() + { + // Arrange + var expectedResult = "Show" + Environment.NewLine + + " Corrupted True"; + + _testUtility.TestBlock.BlockItems.Add(new CorruptedBlockItem(true)); + + // Act + var result = _testUtility.Translator.TranslateItemFilterBlockToString(_testUtility.TestBlock); + + // Assert + Assert.AreEqual(expectedResult, result); + } + + [Test] + public void TranslateItemFilterBlockToString_CorruptedFalse_ReturnsCorrectString() + { + // Arrange + var expectedResult = "Show" + Environment.NewLine + + " Corrupted False"; + + _testUtility.TestBlock.BlockItems.Add(new CorruptedBlockItem(false)); + + // Act + var result = _testUtility.Translator.TranslateItemFilterBlockToString(_testUtility.TestBlock); + + // Assert + Assert.AreEqual(expectedResult, result); + } + [Test] public void TranslateItemFilterBlockToString_DropLevel_ReturnsCorrectString() { @@ -1417,25 +1523,30 @@ namespace Filtration.Parser.Tests.Services { // Arrange var expectedResult = "Show" + Environment.NewLine + - " ItemLevel > 70" + Environment.NewLine + - " ItemLevel <= 85" + Environment.NewLine + - " DropLevel > 56" + Environment.NewLine + - " Quality > 2" + Environment.NewLine + - " Rarity = Unique" + Environment.NewLine + - " Sockets <= 6" + Environment.NewLine + + " LinkedSockets >= 4" + Environment.NewLine + - " Width = 3" + Environment.NewLine + + " Sockets <= 6" + Environment.NewLine + + " Quality > 2" + Environment.NewLine + + " Identified True" + Environment.NewLine + + " Corrupted False" + Environment.NewLine + " Height <= 6" + Environment.NewLine + " Height >= 2" + Environment.NewLine + + " Width = 3" + Environment.NewLine + + " DropLevel > 56" + Environment.NewLine + " Class \"Body Armour\" \"Gloves\" \"Belt\" \"Two Hand Axes\"" + Environment.NewLine + - " BaseType \"Greater Life Flask\" \"Simple Robe\" \"Full Wyrmscale\"" + - Environment.NewLine + + " BaseType \"Greater Life Flask\" \"Simple Robe\" \"Full Wyrmscale\"" + Environment.NewLine + + " Rarity = Unique" + Environment.NewLine + + " ItemLevel > 70" + Environment.NewLine + + " ItemLevel <= 85" + Environment.NewLine + " SetTextColor 255 89 0 56" + Environment.NewLine + " SetBackgroundColor 0 0 0" + Environment.NewLine + " SetBorderColor 255 1 254" + Environment.NewLine + " SetFontSize 50" + Environment.NewLine + " PlayAlertSound 6 90"; + _testUtility.TestBlock.BlockItems.Add(new ActionBlockItem(BlockAction.Show)); + _testUtility.TestBlock.BlockItems.Add(new IdentifiedBlockItem(true)); + _testUtility.TestBlock.BlockItems.Add(new CorruptedBlockItem(false)); _testUtility.TestBlock.BlockItems.Add(new ActionBlockItem(BlockAction.Show)); _testUtility.TestBlock.BlockItems.Add(new ItemLevelBlockItem(FilterPredicateOperator.GreaterThan, 70)); _testUtility.TestBlock.BlockItems.Add(new ItemLevelBlockItem(FilterPredicateOperator.LessThanOrEqual, 85)); diff --git a/Filtration.Parser/Services/ItemFilterBlockTranslator.cs b/Filtration.Parser/Services/ItemFilterBlockTranslator.cs index 3ce3570..d2b9bcf 100644 --- a/Filtration.Parser/Services/ItemFilterBlockTranslator.cs +++ b/Filtration.Parser/Services/ItemFilterBlockTranslator.cs @@ -129,6 +129,16 @@ namespace Filtration.Parser.Services AddStringListItemToBlockItems(block, trimmedLine); break; } + case "Corrupted": + { + AddBooleanItemToBlockItems(block, trimmedLine); + break; + } + case "Identified": + { + AddBooleanItemToBlockItems(block, trimmedLine); + break; + } case "Sockets": { AddNumericFilterPredicateItemToBlockItems(block, trimmedLine); @@ -240,6 +250,17 @@ namespace Filtration.Parser.Services } } + private static void AddBooleanItemToBlockItems(IItemFilterBlock block, string inputString) where T : BooleanBlockItem + { + var blockItem = Activator.CreateInstance(); + var splitString = inputString.Split(' '); + if (splitString.Length == 2) + { + blockItem.BooleanValue = splitString[1].Trim().ToLowerInvariant() == "true"; + block.BlockItems.Add(blockItem); + } + } + private static void AddNumericFilterPredicateItemToBlockItems(IItemFilterBlock block, string inputString) where T : NumericFilterPredicateBlockItem { var blockItem = Activator.CreateInstance(); diff --git a/Filtration/UserControls/BlockItemControl.xaml b/Filtration/UserControls/BlockItemControl.xaml index 3935e21..dbb8e2e 100644 --- a/Filtration/UserControls/BlockItemControl.xaml +++ b/Filtration/UserControls/BlockItemControl.xaml @@ -4,6 +4,7 @@ xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:userControls="clr-namespace:Filtration.UserControls" + xmlns:commonConverters="clr-namespace:Filtration.Common.Converters;assembly=Filtration.Common" xmlns:blockItemBaseTypes="clr-namespace:Filtration.ObjectModel.BlockItemBaseTypes;assembly=Filtration.ObjectModel" xmlns:blockItemTypes="clr-namespace:Filtration.ObjectModel.BlockItemTypes;assembly=Filtration.ObjectModel" xmlns:extensions="clr-namespace:Filtration.Extensions" @@ -13,6 +14,9 @@ mc:Ignorable="d" d:DataContext="{d:DesignInstance Type=userControls:BlockItemControl}" d:DesignHeight="200" d:DesignWidth="160"> + + + @@ -34,6 +38,14 @@ Hide + + + + + True + False + + diff --git a/Filtration/ViewModels/ItemFilterBlockViewModel.cs b/Filtration/ViewModels/ItemFilterBlockViewModel.cs index dca443d..250e4d7 100644 --- a/Filtration/ViewModels/ItemFilterBlockViewModel.cs +++ b/Filtration/ViewModels/ItemFilterBlockViewModel.cs @@ -187,7 +187,9 @@ namespace Filtration.ViewModels typeof (HeightBlockItem), typeof (SocketGroupBlockItem), typeof (ClassBlockItem), - typeof (BaseTypeBlockItem) + typeof (BaseTypeBlockItem), + typeof (IdentifiedBlockItem), + typeof (CorruptedBlockItem) }; public List AudioVisualBlockItemTypesAvailable => new List