diff --git a/Filtration/Extensions/EnumerationExtension.cs b/Filtration.Common/Extensions/EnumerationExtension.cs similarity index 94% rename from Filtration/Extensions/EnumerationExtension.cs rename to Filtration.Common/Extensions/EnumerationExtension.cs index 3498157..93630bd 100644 --- a/Filtration/Extensions/EnumerationExtension.cs +++ b/Filtration.Common/Extensions/EnumerationExtension.cs @@ -3,9 +3,9 @@ using System.ComponentModel; using System.Linq; using System.Windows.Markup; -namespace Filtration.Extensions +namespace Filtration.Common.Extensions { - internal class EnumerationExtension : MarkupExtension + public class EnumerationExtension : MarkupExtension { private Type _enumType; diff --git a/Filtration/Extensions/HyperlinkExtensions.cs b/Filtration.Common/Extensions/HyperlinkExtensions.cs similarity index 97% rename from Filtration/Extensions/HyperlinkExtensions.cs rename to Filtration.Common/Extensions/HyperlinkExtensions.cs index fd46841..140236c 100644 --- a/Filtration/Extensions/HyperlinkExtensions.cs +++ b/Filtration.Common/Extensions/HyperlinkExtensions.cs @@ -4,7 +4,7 @@ using System.Windows; using System.Windows.Documents; using System.Windows.Navigation; -namespace Filtration.Extensions +namespace Filtration.Common.Extensions { public static class HyperlinkExtensions { diff --git a/Filtration.Common/Filtration.Common.csproj b/Filtration.Common/Filtration.Common.csproj index 13f3165..38b47e8 100644 --- a/Filtration.Common/Filtration.Common.csproj +++ b/Filtration.Common/Filtration.Common.csproj @@ -75,6 +75,8 @@ + + diff --git a/Filtration.ObjectModel/BlockItemBaseTypes/EffectColorBlockItem.cs b/Filtration.ObjectModel/BlockItemBaseTypes/EffectColorBlockItem.cs new file mode 100644 index 0000000..df71499 --- /dev/null +++ b/Filtration.ObjectModel/BlockItemBaseTypes/EffectColorBlockItem.cs @@ -0,0 +1,90 @@ +using System; +using System.Windows.Media; +using Filtration.ObjectModel.Enums; +using Filtration.ObjectModel.Extensions; +using Filtration.ObjectModel.ThemeEditor; + +namespace Filtration.ObjectModel.BlockItemBaseTypes +{ + public abstract class EffectColorBlockItem : BlockItemBase, IAudioVisualBlockItem, IBlockItemWithTheme + { + private EffectColor _color; + private bool _temporary; + private ThemeComponent _themeComponent; + + protected EffectColorBlockItem() + { + } + + protected EffectColorBlockItem(EffectColor color, bool temporary) + { + Color = color; + Temporary = temporary; + } + + public override string OutputText => PrefixText + " " + Color.GetAttributeDescription() + + (Temporary ? " " + "Temp" : string.Empty) + + (ThemeComponent != null ? " # " + ThemeComponent.ComponentName : string.Empty); + + public override string SummaryText => string.Empty; + + public ThemeComponent ThemeComponent + { + get { return _themeComponent; } + set + { + if (_themeComponent == value) { return; } + + if (_themeComponent != null) + { + _themeComponent.ThemeComponentUpdated -= OnThemeComponentUpdated; + _themeComponent.ThemeComponentDeleted -= OnThemeComponentDeleted; + } + if (value != null) + { + value.ThemeComponentUpdated += OnThemeComponentUpdated; + value.ThemeComponentDeleted += OnThemeComponentDeleted; + } + + _themeComponent = value; + OnPropertyChanged(); + } + } + + public override Color SummaryBackgroundColor => Colors.Transparent; + public override Color SummaryTextColor => Colors.Transparent; + + public EffectColor Color + { + get { return _color; } + set + { + _color = value; + IsDirty = true; + OnPropertyChanged(); + } + } + + public bool Temporary + { + get { return _temporary; } + set + { + _temporary = value; + IsDirty = true; + OnPropertyChanged(); + } + } + + private void OnThemeComponentUpdated(object sender, EventArgs e) + { + Color = ((EffectColorThemeComponent)sender).EffectColor; + Temporary = ((EffectColorThemeComponent)sender).Temporary; + } + + private void OnThemeComponentDeleted(object sender, EventArgs e) + { + ThemeComponent = null; + } + } +} diff --git a/Filtration.ObjectModel/BlockItemBaseTypes/IconBlockItem.cs b/Filtration.ObjectModel/BlockItemBaseTypes/IconBlockItem.cs new file mode 100644 index 0000000..d6b92d5 --- /dev/null +++ b/Filtration.ObjectModel/BlockItemBaseTypes/IconBlockItem.cs @@ -0,0 +1,103 @@ +using System; +using System.Windows.Media; +using Filtration.ObjectModel.Enums; +using Filtration.ObjectModel.Extensions; +using Filtration.ObjectModel.ThemeEditor; + +namespace Filtration.ObjectModel.BlockItemBaseTypes +{ + public abstract class IconBlockItem : BlockItemBase, IAudioVisualBlockItem, IBlockItemWithTheme + { + private IconSize _size; + private IconColor _color; + private IconShape _shape; + private ThemeComponent _themeComponent; + + protected IconBlockItem() + { + } + + protected IconBlockItem(IconSize size, IconColor color, IconShape shape) + { + Size = size; + Color = color; + Shape = shape; + } + + public override string OutputText => PrefixText + " " + (int)Size + " " + Color.GetAttributeDescription() + " " + Shape.GetAttributeDescription() + + (ThemeComponent != null ? " # " + ThemeComponent.ComponentName : string.Empty); + + public override string SummaryText => string.Empty; + + public ThemeComponent ThemeComponent + { + get { return _themeComponent; } + set + { + if (_themeComponent == value) { return; } + + if (_themeComponent != null) + { + _themeComponent.ThemeComponentUpdated -= OnThemeComponentUpdated; + _themeComponent.ThemeComponentDeleted -= OnThemeComponentDeleted; + } + if (value != null) + { + value.ThemeComponentUpdated += OnThemeComponentUpdated; + value.ThemeComponentDeleted += OnThemeComponentDeleted; + } + + _themeComponent = value; + OnPropertyChanged(); + } + } + + public override Color SummaryBackgroundColor => Colors.Transparent; + public override Color SummaryTextColor => Colors.Transparent; + + public IconSize Size + { + get { return _size; } + set + { + _size = value; + IsDirty = true; + OnPropertyChanged(); + } + } + + public IconColor Color + { + get { return _color; } + set + { + _color = value; + IsDirty = true; + OnPropertyChanged(); + } + } + + public IconShape Shape + { + get { return _shape; } + set + { + _shape = value; + IsDirty = true; + OnPropertyChanged(); + } + } + + private void OnThemeComponentUpdated(object sender, EventArgs e) + { + Size = ((IconThemeComponent)sender).IconSize; + Color = ((IconThemeComponent)sender).IconColor; + Shape = ((IconThemeComponent)sender).IconShape; + } + + private void OnThemeComponentDeleted(object sender, EventArgs e) + { + ThemeComponent = null; + } + } +} diff --git a/Filtration.ObjectModel/BlockItemTypes/BackgroundColorBlockItem.cs b/Filtration.ObjectModel/BlockItemTypes/BackgroundColorBlockItem.cs index 3f3ea11..21b31cf 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 => 22; + public override int SortOrder => 23; } } diff --git a/Filtration.ObjectModel/BlockItemTypes/BaseTypeBlockItem.cs b/Filtration.ObjectModel/BlockItemTypes/BaseTypeBlockItem.cs index e51188b..1107f6d 100644 --- a/Filtration.ObjectModel/BlockItemTypes/BaseTypeBlockItem.cs +++ b/Filtration.ObjectModel/BlockItemTypes/BaseTypeBlockItem.cs @@ -33,6 +33,6 @@ namespace Filtration.ObjectModel.BlockItemTypes public override Color SummaryBackgroundColor => Colors.MediumTurquoise; public override Color SummaryTextColor => Colors.Black; - public override int SortOrder => 19; + public override int SortOrder => 20; } } diff --git a/Filtration.ObjectModel/BlockItemTypes/BeamBlockItem.cs b/Filtration.ObjectModel/BlockItemTypes/BeamBlockItem.cs deleted file mode 100644 index ea938cc..0000000 --- a/Filtration.ObjectModel/BlockItemTypes/BeamBlockItem.cs +++ /dev/null @@ -1,21 +0,0 @@ -using System.Windows.Media; -using Filtration.ObjectModel.BlockItemBaseTypes; - -namespace Filtration.ObjectModel.BlockItemTypes -{ - public class BeamBlockItem : ColorBooleanBlockItem - { - public BeamBlockItem() - { - } - - public BeamBlockItem(Color color, bool booleanValue) : base(color, booleanValue) - { - } - - public override string PrefixText => "BeamColor"; - public override int MaximumAllowed => 1; - public override string DisplayHeading => "Beam Color"; - public override int SortOrder => 29; - } -} diff --git a/Filtration.ObjectModel/BlockItemTypes/BorderColorBlockItem.cs b/Filtration.ObjectModel/BlockItemTypes/BorderColorBlockItem.cs index 842e37b..1b79136 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 => 23; + public override int SortOrder => 24; } } diff --git a/Filtration.ObjectModel/BlockItemTypes/ClassBlockItem.cs b/Filtration.ObjectModel/BlockItemTypes/ClassBlockItem.cs index e46882c..450c914 100644 --- a/Filtration.ObjectModel/BlockItemTypes/ClassBlockItem.cs +++ b/Filtration.ObjectModel/BlockItemTypes/ClassBlockItem.cs @@ -33,6 +33,6 @@ namespace Filtration.ObjectModel.BlockItemTypes public override Color SummaryBackgroundColor => Colors.MediumSeaGreen; public override Color SummaryTextColor => Colors.White; - public override int SortOrder => 18; + public override int SortOrder => 19; } } diff --git a/Filtration.ObjectModel/BlockItemTypes/CustomSoundBlockItem.cs b/Filtration.ObjectModel/BlockItemTypes/CustomSoundBlockItem.cs index 93768a8..7e60eb9 100644 --- a/Filtration.ObjectModel/BlockItemTypes/CustomSoundBlockItem.cs +++ b/Filtration.ObjectModel/BlockItemTypes/CustomSoundBlockItem.cs @@ -16,6 +16,6 @@ namespace Filtration.ObjectModel.BlockItemTypes public override string PrefixText => "CustomAlertSound"; public override int MaximumAllowed => 1; public override string DisplayHeading => "Custom Alert Sound"; - public override int SortOrder => 30; + public override int SortOrder => 31; } } diff --git a/Filtration.ObjectModel/BlockItemTypes/DisableDropSoundBlockItem.cs b/Filtration.ObjectModel/BlockItemTypes/DisableDropSoundBlockItem.cs index 73ed861..10a1fb5 100644 --- a/Filtration.ObjectModel/BlockItemTypes/DisableDropSoundBlockItem.cs +++ b/Filtration.ObjectModel/BlockItemTypes/DisableDropSoundBlockItem.cs @@ -17,7 +17,7 @@ namespace Filtration.ObjectModel.BlockItemTypes public override string DisplayHeading => "Disable Drop Sound"; public override Color SummaryBackgroundColor => Colors.Transparent; public override Color SummaryTextColor => Colors.Transparent; - public override int SortOrder => 27; + public override int SortOrder => 28; } } diff --git a/Filtration.ObjectModel/BlockItemTypes/DropLevelBlockItem.cs b/Filtration.ObjectModel/BlockItemTypes/DropLevelBlockItem.cs index a53108c..6701155 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 => 14; + public override int SortOrder => 15; public override int Minimum => 0; public override int Maximum => 100; } diff --git a/Filtration.ObjectModel/BlockItemTypes/ElderMapBlockItem.cs b/Filtration.ObjectModel/BlockItemTypes/ElderMapBlockItem.cs index a98cf6a..ec27b42 100644 --- a/Filtration.ObjectModel/BlockItemTypes/ElderMapBlockItem.cs +++ b/Filtration.ObjectModel/BlockItemTypes/ElderMapBlockItem.cs @@ -17,7 +17,7 @@ namespace Filtration.ObjectModel.BlockItemTypes public override string DisplayHeading => "Elder Map"; public override Color SummaryBackgroundColor => Colors.DarkGoldenrod; public override Color SummaryTextColor => Colors.White; - public override int SortOrder => 9; + public override int SortOrder => 10; } } diff --git a/Filtration.ObjectModel/BlockItemTypes/FontSizeBlockItem.cs b/Filtration.ObjectModel/BlockItemTypes/FontSizeBlockItem.cs index 2e3d9e0..cb90776 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 => 24; + public override int SortOrder => 25; public override int Minimum => 11; public override int Maximum => 45; } diff --git a/Filtration.ObjectModel/BlockItemTypes/GemLevelBlockItem.cs b/Filtration.ObjectModel/BlockItemTypes/GemLevelBlockItem.cs index f12136d..8825fb5 100644 --- a/Filtration.ObjectModel/BlockItemTypes/GemLevelBlockItem.cs +++ b/Filtration.ObjectModel/BlockItemTypes/GemLevelBlockItem.cs @@ -21,7 +21,7 @@ namespace Filtration.ObjectModel.BlockItemTypes public override string SummaryText => "Gem Level " + FilterPredicate; public override Color SummaryBackgroundColor => Colors.DarkSlateGray; public override Color SummaryTextColor => Colors.White; - public override int SortOrder => 15; + public override int SortOrder => 16; public override int Minimum => 0; public override int Maximum => 21; } diff --git a/Filtration.ObjectModel/BlockItemTypes/HasExplicitModBlockItem.cs b/Filtration.ObjectModel/BlockItemTypes/HasExplicitModBlockItem.cs index 9070f73..b47e29b 100644 --- a/Filtration.ObjectModel/BlockItemTypes/HasExplicitModBlockItem.cs +++ b/Filtration.ObjectModel/BlockItemTypes/HasExplicitModBlockItem.cs @@ -33,6 +33,6 @@ namespace Filtration.ObjectModel.BlockItemTypes public override Color SummaryBackgroundColor => Colors.MidnightBlue; public override Color SummaryTextColor => Colors.White; - public override int SortOrder => 20; + public override int SortOrder => 21; } } diff --git a/Filtration.ObjectModel/BlockItemTypes/HeightBlockItem.cs b/Filtration.ObjectModel/BlockItemTypes/HeightBlockItem.cs index 2f16a13..02c63e0 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 => 11; + public override int SortOrder => 12; public override int Minimum => 0; public override int Maximum => 6; } diff --git a/Filtration.ObjectModel/BlockItemTypes/IconBlockItem.cs b/Filtration.ObjectModel/BlockItemTypes/IconBlockItem.cs deleted file mode 100644 index 4d84203..0000000 --- a/Filtration.ObjectModel/BlockItemTypes/IconBlockItem.cs +++ /dev/null @@ -1,21 +0,0 @@ -using Filtration.ObjectModel.BlockItemBaseTypes; - -namespace Filtration.ObjectModel.BlockItemTypes -{ - public class IconBlockItem : StringBlockItem - { - public IconBlockItem() - { - Value = "Icon1"; - } - - public IconBlockItem(string value) : base(value) - { - } - - public override string PrefixText => "Icon"; - public override int MaximumAllowed => 1; - public override string DisplayHeading => "Drop Icon"; - public override int SortOrder => 28; - } -} diff --git a/Filtration.ObjectModel/BlockItemTypes/ItemLevelBlockItem.cs b/Filtration.ObjectModel/BlockItemTypes/ItemLevelBlockItem.cs index 638d6d2..c2faccb 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 => 13; + public override int SortOrder => 14; public override int Minimum => 0; public override int Maximum => 100; } diff --git a/Filtration.ObjectModel/BlockItemTypes/MapIconBlockItem.cs b/Filtration.ObjectModel/BlockItemTypes/MapIconBlockItem.cs new file mode 100644 index 0000000..a22f644 --- /dev/null +++ b/Filtration.ObjectModel/BlockItemTypes/MapIconBlockItem.cs @@ -0,0 +1,24 @@ +using Filtration.ObjectModel.BlockItemBaseTypes; +using Filtration.ObjectModel.Enums; + +namespace Filtration.ObjectModel.BlockItemTypes +{ + public class MapIconBlockItem : IconBlockItem + { + public MapIconBlockItem() + { + Size = IconSize.Largest; + Color = IconColor.Red; + Shape = IconShape.Circle; + } + + public MapIconBlockItem(IconSize size, IconColor iconColor, IconShape iconShape) : base(size, iconColor, iconShape) + { + } + + public override string PrefixText => "MinimapIcon"; + public override int MaximumAllowed => 1; + public override string DisplayHeading => "Minimap Icon"; + public override int SortOrder => 29; + } +} diff --git a/Filtration.ObjectModel/BlockItemTypes/MapTierBlockItem.cs b/Filtration.ObjectModel/BlockItemTypes/MapTierBlockItem.cs new file mode 100644 index 0000000..34e3837 --- /dev/null +++ b/Filtration.ObjectModel/BlockItemTypes/MapTierBlockItem.cs @@ -0,0 +1,18 @@ +using System.Windows.Media; +using Filtration.ObjectModel.BlockItemBaseTypes; + +namespace Filtration.ObjectModel.BlockItemTypes +{ + public class MapTierBlockItem : NumericFilterPredicateBlockItem + { + public override string PrefixText => "MapTier"; + public override int MaximumAllowed => 2; + public override string DisplayHeading => "Map Tier"; + public override string SummaryText => "Map Tier " + FilterPredicate; + public override Color SummaryBackgroundColor => Colors.DarkSlateGray; + public override Color SummaryTextColor => Colors.White; + public override int SortOrder => 8; + public override int Minimum => 1; + public override int Maximum => 16; + } +} diff --git a/Filtration.ObjectModel/BlockItemTypes/PlayEffectBlockItem.cs b/Filtration.ObjectModel/BlockItemTypes/PlayEffectBlockItem.cs new file mode 100644 index 0000000..6d5d00a --- /dev/null +++ b/Filtration.ObjectModel/BlockItemTypes/PlayEffectBlockItem.cs @@ -0,0 +1,23 @@ +using Filtration.ObjectModel.BlockItemBaseTypes; +using Filtration.ObjectModel.Enums; + +namespace Filtration.ObjectModel.BlockItemTypes +{ + public class PlayEffectBlockItem : EffectColorBlockItem + { + public PlayEffectBlockItem() + { + Color = EffectColor.Red; + Temporary = false; + } + + public PlayEffectBlockItem(EffectColor effectColor, bool temporary) : base(effectColor, temporary) + { + } + + public override string PrefixText => "PlayEffect"; + public override int MaximumAllowed => 1; + public override string DisplayHeading => "Play Effect"; + public override int SortOrder => 30; + } +} diff --git a/Filtration.ObjectModel/BlockItemTypes/PositionalSoundBlockItem.cs b/Filtration.ObjectModel/BlockItemTypes/PositionalSoundBlockItem.cs index 8c60200..4225f85 100644 --- a/Filtration.ObjectModel/BlockItemTypes/PositionalSoundBlockItem.cs +++ b/Filtration.ObjectModel/BlockItemTypes/PositionalSoundBlockItem.cs @@ -17,6 +17,6 @@ namespace Filtration.ObjectModel.BlockItemTypes public override string PrefixText => "PlayAlertSoundPositional"; public override int MaximumAllowed => 1; public override string DisplayHeading => "Play Positional Alert Sound"; - public override int SortOrder => 26; + public override int SortOrder => 27; } } diff --git a/Filtration.ObjectModel/BlockItemTypes/RarityBlockItem.cs b/Filtration.ObjectModel/BlockItemTypes/RarityBlockItem.cs index da72e69..4346739 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 => 17; + public override int SortOrder => 18; public override int Minimum => 0; public override int Maximum => (int)ItemRarity.Unique; } diff --git a/Filtration.ObjectModel/BlockItemTypes/ShapedMapBlockItem.cs b/Filtration.ObjectModel/BlockItemTypes/ShapedMapBlockItem.cs index 550a6da..05a20e8 100644 --- a/Filtration.ObjectModel/BlockItemTypes/ShapedMapBlockItem.cs +++ b/Filtration.ObjectModel/BlockItemTypes/ShapedMapBlockItem.cs @@ -17,7 +17,7 @@ namespace Filtration.ObjectModel.BlockItemTypes public override string DisplayHeading => "Shaped Map"; public override Color SummaryBackgroundColor => Colors.DarkGoldenrod; public override Color SummaryTextColor => Colors.White; - public override int SortOrder => 8; + public override int SortOrder => 9; } } diff --git a/Filtration.ObjectModel/BlockItemTypes/SocketGroupBlockItem.cs b/Filtration.ObjectModel/BlockItemTypes/SocketGroupBlockItem.cs index d654f34..36a6a5f 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 => 10; + public override int SortOrder => 11; private SocketColor StringToSocketColor(char socketColorString) { diff --git a/Filtration.ObjectModel/BlockItemTypes/SoundBlockItem.cs b/Filtration.ObjectModel/BlockItemTypes/SoundBlockItem.cs index 4642047..a8311f5 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 => 25; + public override int SortOrder => 26; } } diff --git a/Filtration.ObjectModel/BlockItemTypes/StackSizeBlockItem.cs b/Filtration.ObjectModel/BlockItemTypes/StackSizeBlockItem.cs index 9b15ea1..43b903a 100644 --- a/Filtration.ObjectModel/BlockItemTypes/StackSizeBlockItem.cs +++ b/Filtration.ObjectModel/BlockItemTypes/StackSizeBlockItem.cs @@ -21,7 +21,7 @@ namespace Filtration.ObjectModel.BlockItemTypes public override string SummaryText => "Stack Size " + FilterPredicate; public override Color SummaryBackgroundColor => Colors.DarkSlateGray; public override Color SummaryTextColor => Colors.White; - public override int SortOrder => 16; + public override int SortOrder => 17; public override int Minimum => 0; public override int Maximum => 1000; } diff --git a/Filtration.ObjectModel/BlockItemTypes/TextColorBlockItem.cs b/Filtration.ObjectModel/BlockItemTypes/TextColorBlockItem.cs index 3ac02c5..41161f8 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 => 21; + public override int SortOrder => 22; } } diff --git a/Filtration.ObjectModel/BlockItemTypes/WidthBlockItem.cs b/Filtration.ObjectModel/BlockItemTypes/WidthBlockItem.cs index 0bb960d..10b8a51 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 => 12; + public override int SortOrder => 13; public override int Minimum => 0; public override int Maximum => 2; } diff --git a/Filtration.ObjectModel/Enums/EffectColor.cs b/Filtration.ObjectModel/Enums/EffectColor.cs new file mode 100644 index 0000000..8247823 --- /dev/null +++ b/Filtration.ObjectModel/Enums/EffectColor.cs @@ -0,0 +1,20 @@ +using System.ComponentModel; + +namespace Filtration.ObjectModel.Enums +{ + public enum EffectColor + { + [Description("Red")] + Red, + [Description("Green")] + Green, + [Description("Blue")] + Blue, + [Description("Brown")] + Brown, + [Description("White")] + White, + [Description("Yellow")] + Yellow + } +} \ No newline at end of file diff --git a/Filtration.ObjectModel/Enums/IconColor.cs b/Filtration.ObjectModel/Enums/IconColor.cs new file mode 100644 index 0000000..7b143ba --- /dev/null +++ b/Filtration.ObjectModel/Enums/IconColor.cs @@ -0,0 +1,20 @@ +using System.ComponentModel; + +namespace Filtration.ObjectModel.Enums +{ + public enum IconColor + { + [Description("Red")] + Red, + [Description("Green")] + Green, + [Description("Blue")] + Blue, + [Description("Brown")] + Brown, + [Description("White")] + White, + [Description("Yellow")] + Yellow + } +} \ No newline at end of file diff --git a/Filtration.ObjectModel/Enums/IconShape.cs b/Filtration.ObjectModel/Enums/IconShape.cs new file mode 100644 index 0000000..9123d27 --- /dev/null +++ b/Filtration.ObjectModel/Enums/IconShape.cs @@ -0,0 +1,20 @@ +using System.ComponentModel; + +namespace Filtration.ObjectModel.Enums +{ + public enum IconShape + { + [Description("Circle")] + Circle, + [Description("Diamond")] + Diamond, + [Description("Hexagon")] + Hexagon, + [Description("Square")] + Square, + [Description("Star")] + Star, + [Description("Triangle")] + Triangle + } +} \ No newline at end of file diff --git a/Filtration.ObjectModel/Enums/IconSize.cs b/Filtration.ObjectModel/Enums/IconSize.cs new file mode 100644 index 0000000..5cb086b --- /dev/null +++ b/Filtration.ObjectModel/Enums/IconSize.cs @@ -0,0 +1,14 @@ +using System.ComponentModel; + +namespace Filtration.ObjectModel.Enums +{ + public enum IconSize + { + [Description("Largest")] + Largest, + [Description("Medium")] + Medium, + [Description("Small")] + Small + } +} diff --git a/Filtration.ObjectModel/Enums/ThemeComponentType.cs b/Filtration.ObjectModel/Enums/ThemeComponentType.cs index a48299c..74b2498 100644 --- a/Filtration.ObjectModel/Enums/ThemeComponentType.cs +++ b/Filtration.ObjectModel/Enums/ThemeComponentType.cs @@ -15,6 +15,10 @@ namespace Filtration.ObjectModel.Enums [Description("Alert Sound")] AlertSound, [Description("Custom Sound")] - CustomSound + CustomSound, + [Description("Icon")] + Icon, + [Description("Effect")] + Effect } } diff --git a/Filtration.ObjectModel/Filtration.ObjectModel.csproj b/Filtration.ObjectModel/Filtration.ObjectModel.csproj index 8022791..22514bc 100644 --- a/Filtration.ObjectModel/Filtration.ObjectModel.csproj +++ b/Filtration.ObjectModel/Filtration.ObjectModel.csproj @@ -70,6 +70,8 @@ + + @@ -77,7 +79,8 @@ - + + @@ -85,7 +88,7 @@ - + @@ -122,8 +125,12 @@ + + + + @@ -148,6 +155,8 @@ + + diff --git a/Filtration.ObjectModel/ItemFilterBlock.cs b/Filtration.ObjectModel/ItemFilterBlock.cs index 1209677..aa148d9 100644 --- a/Filtration.ObjectModel/ItemFilterBlock.cs +++ b/Filtration.ObjectModel/ItemFilterBlock.cs @@ -23,8 +23,10 @@ namespace Filtration.ObjectModel Color DisplayTextColor { get; } Color DisplayBorderColor { get; } double DisplayFontSize { get; } - string DisplayIcon { get; } - Color DisplayBeamColor { get; } + int DisplayIconSize { get; } + int DisplayIconColor { get; } + int DisplayIconShape { get; } + Color DisplayEffectColor { get; } bool HasBlockItemOfType(); bool HasBlockGroupInParentHierarchy(ItemFilterBlockGroup targetBlockGroup, ItemFilterBlockGroup startingBlockGroup); } @@ -263,21 +265,68 @@ namespace Filtration.ObjectModel } } - public string DisplayIcon + public int DisplayIconSize { get { - var displayIcon = BlockItems.OfType().FirstOrDefault(); - return (displayIcon != null) ? displayIcon.Value : ""; + var mapIconBlockItem = BlockItems.OfType().FirstOrDefault(); + if (mapIconBlockItem != null) + return (int)mapIconBlockItem.Size; + + return -1; } } - public Color DisplayBeamColor + public int DisplayIconColor { get { - var beamBlockItem = BlockItems.OfType().FirstOrDefault(); - return beamBlockItem?.Color ?? new Color { A = 0, R = 0, G = 0, B = 0 }; + var mapIconBlockItem = BlockItems.OfType().FirstOrDefault(); + if (mapIconBlockItem != null) + return (int)mapIconBlockItem.Color; + + return -1; + } + } + + public int DisplayIconShape + { + get + { + var mapIconBlockItem = BlockItems.OfType().FirstOrDefault(); + if (mapIconBlockItem != null) + return (int)mapIconBlockItem.Shape; + + return -1; + } + } + + public Color DisplayEffectColor + { + get + { + var beamBlockItem = BlockItems.OfType().FirstOrDefault(); + + if (beamBlockItem != null) + { + switch (beamBlockItem.Color) + { + case EffectColor.Red: + return Colors.Red; + case EffectColor.Green: + return Colors.Green; + case EffectColor.Blue: + return Colors.Blue; + case EffectColor.Brown: + return Colors.Brown; + case EffectColor.White: + return Colors.White; + case EffectColor.Yellow: + return Colors.Yellow; + } + } + + return Colors.Transparent; } } } diff --git a/Filtration.ObjectModel/ThemeEditor/EffectColorThemeComponent.cs b/Filtration.ObjectModel/ThemeEditor/EffectColorThemeComponent.cs new file mode 100644 index 0000000..ec99fc6 --- /dev/null +++ b/Filtration.ObjectModel/ThemeEditor/EffectColorThemeComponent.cs @@ -0,0 +1,47 @@ +using System; +using Filtration.ObjectModel.Enums; + +namespace Filtration.ObjectModel.ThemeEditor +{ + [Serializable] + public class EffectColorThemeComponent : ThemeComponent + { + private EffectColor _effectColor; + private bool _temporary; + + public EffectColorThemeComponent(ThemeComponentType componentType, string componentName, EffectColor componentEffectColor, bool componentTemporary) + { + if (componentName == null) + { + throw new ArgumentException("Null parameters not allowed in EffectColorThemeComponent constructor"); + } + + ComponentType = componentType; + ComponentName = componentName; + EffectColor = componentEffectColor; + Temporary = componentTemporary; + } + + public EffectColor EffectColor + { + get { return _effectColor; } + set + { + _effectColor = value; + OnPropertyChanged(); + _themeComponentUpdatedEventHandler?.Invoke(this, EventArgs.Empty); + } + } + + public bool Temporary + { + get { return _temporary; } + set + { + _temporary = value; + OnPropertyChanged(); + _themeComponentUpdatedEventHandler?.Invoke(this, EventArgs.Empty); + } + } + } +} diff --git a/Filtration.ObjectModel/ThemeEditor/IconThemeComponent.cs b/Filtration.ObjectModel/ThemeEditor/IconThemeComponent.cs new file mode 100644 index 0000000..fd7f082 --- /dev/null +++ b/Filtration.ObjectModel/ThemeEditor/IconThemeComponent.cs @@ -0,0 +1,60 @@ +using System; +using Filtration.ObjectModel.Enums; + +namespace Filtration.ObjectModel.ThemeEditor +{ + [Serializable] + public class IconThemeComponent : ThemeComponent + { + private IconSize _iconSize; + private IconColor _iconColor; + private IconShape _iconShape; + + public IconThemeComponent(ThemeComponentType componentType, string componentName, IconSize componentIconSize, IconColor componentIconColor, IconShape componentIconShape) + { + if (componentName == null) + { + throw new ArgumentException("Null parameters not allowed in IconThemeComponent constructor"); + } + + ComponentType = componentType; + ComponentName = componentName; + IconSize = componentIconSize; + IconColor = componentIconColor; + IconShape = componentIconShape; + } + + public IconSize IconSize + { + get { return _iconSize; } + set + { + _iconSize = value; + OnPropertyChanged(); + _themeComponentUpdatedEventHandler?.Invoke(this, EventArgs.Empty); + } + } + + public IconColor IconColor + { + get { return _iconColor; } + set + { + _iconColor = value; + OnPropertyChanged(); + _themeComponentUpdatedEventHandler?.Invoke(this, EventArgs.Empty); + } + } + + public IconShape IconShape + { + get { return _iconShape; } + set + { + _iconShape = value; + OnPropertyChanged(); + _themeComponentUpdatedEventHandler?.Invoke(this, EventArgs.Empty); + } + } + } +} diff --git a/Filtration.ObjectModel/ThemeEditor/ThemeComponentCollection.cs b/Filtration.ObjectModel/ThemeEditor/ThemeComponentCollection.cs index 1cdbccc..ef41379 100644 --- a/Filtration.ObjectModel/ThemeEditor/ThemeComponentCollection.cs +++ b/Filtration.ObjectModel/ThemeEditor/ThemeComponentCollection.cs @@ -61,6 +61,32 @@ namespace Filtration.ObjectModel.ThemeEditor return component; } + public ThemeComponent AddComponent(ThemeComponentType componentType, string componentName, IconSize componentIconSize, IconColor componentIconColor, IconShape componentIconShape) + { + if (ComponentExists(componentType, componentName)) + { + return Items.FirstOrDefault(t => t.ComponentName == componentName && t.ComponentType == componentType); + } + + var component = new IconThemeComponent(componentType, componentName, componentIconSize, componentIconColor, componentIconShape); + Items.Add(component); + + return component; + } + + public ThemeComponent AddComponent(ThemeComponentType componentType, string componentName, EffectColor componentEffectColor, bool componentTemporary) + { + if (ComponentExists(componentType, componentName)) + { + return Items.FirstOrDefault(t => t.ComponentName == componentName && t.ComponentType == componentType); + } + + var component = new EffectColorThemeComponent(componentType, componentName, componentEffectColor, componentTemporary); + Items.Add(component); + + return component; + } + private bool ComponentExists(ThemeComponentType componentType, string componentName) { var componentCount = diff --git a/Filtration.Parser.Tests/Services/TestItemFilterBlockTranslator.cs b/Filtration.Parser.Tests/Services/TestItemFilterBlockTranslator.cs index cd3a9ae..ca849fe 100644 --- a/Filtration.Parser.Tests/Services/TestItemFilterBlockTranslator.cs +++ b/Filtration.Parser.Tests/Services/TestItemFilterBlockTranslator.cs @@ -890,42 +890,6 @@ namespace Filtration.Parser.Tests.Services Assert.AreEqual(1, result.BlockItems.Count(b => b is DisableDropSoundBlockItem)); var blockItem = result.BlockItems.OfType().First(); Assert.IsTrue(blockItem.BooleanValue); - } - - [Test] - public void TranslateStringToItemFilterBlock_DropIcon_ReturnsCorrectObject() - { - // Arrange - var inputString = "Show" + Environment.NewLine + - " Icon Icon1"; - - // Act - var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, _testUtility.MockItemFilterScript); - - // Assert - - Assert.AreEqual(1, result.BlockItems.Count(b => b is IconBlockItem)); - var blockItem = result.BlockItems.OfType().First(); - Assert.AreEqual("Icon1", blockItem.Value); - } - - [Test] - public void TranslateStringToItemFilterBlock_BeamColor_ReturnsCorrectObject() - { - // Arrange - var inputString = "Show" + Environment.NewLine + - " BeamColor 255 20 100 True"; - - // Act - var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, _testUtility.MockItemFilterScript); - - // Assert - Assert.AreEqual(1, result.BlockItems.Count(b => b is BeamBlockItem)); - var blockItem = result.BlockItems.OfType().First(); - Assert.AreEqual(255, blockItem.Color.R); - Assert.AreEqual(20, blockItem.Color.G); - Assert.AreEqual(100, blockItem.Color.B); - Assert.IsTrue(blockItem.BooleanValue); } [Test] @@ -961,9 +925,7 @@ namespace Filtration.Parser.Tests.Services " SetBorderColor 0 0 0" + Environment.NewLine + " SetFontSize 50" + Environment.NewLine + " PlayAlertSound 3" + Environment.NewLine + - " DisableDropSound False" + Environment.NewLine + - " Icon Icon2" + Environment.NewLine + - " BeamColor 255 100 5 false" + Environment.NewLine; + " DisableDropSound False" + Environment.NewLine; // Act var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, _testUtility.MockItemFilterScript); @@ -1068,15 +1030,6 @@ namespace Filtration.Parser.Tests.Services var disableDropSoundBlockItem = result.BlockItems.OfType().First(); Assert.IsFalse(disableDropSoundBlockItem.BooleanValue); - - var iconBlockItem = result.BlockItems.OfType().First(); - Assert.AreEqual("Icon2", iconBlockItem.Value); - - var beamBlockItem = result.BlockItems.OfType().First(); - Assert.AreEqual(255, beamBlockItem.Color.R); - Assert.AreEqual(100, beamBlockItem.Color.G); - Assert.AreEqual(5, beamBlockItem.Color.B); - Assert.IsFalse(beamBlockItem.BooleanValue); } [Test] @@ -1903,23 +1856,6 @@ namespace Filtration.Parser.Tests.Services Assert.AreEqual(expectedResult, result); } - [Ignore("Ignore until the new block type is fully implemented")] - [Test] - public void TranslateItemFilterBlockToString_DropIcon_ReturnsCorrectString() - { - // Arrange - var expectedResult = "Show" + Environment.NewLine + - " Icon Icon3"; - - _testUtility.TestBlock.BlockItems.Add(new IconBlockItem("Icon3")); - - // Act - var result = _testUtility.Translator.TranslateItemFilterBlockToString(_testUtility.TestBlock); - - // Assert - Assert.AreEqual(expectedResult, result); - } - [Test] public void TranslateItemFilterBlockToString_Everything_ReturnsCorrectString() { @@ -1951,9 +1887,7 @@ namespace Filtration.Parser.Tests.Services " SetBorderColor 255 1 254" + Environment.NewLine + " SetFontSize 50" + Environment.NewLine + " PlayAlertSound 6 90" + Environment.NewLine + - " DisableDropSound True";/* + Environment.NewLine + - " Icon Icon4"; - " BeamColor 120 130 140 False";*/ + " DisableDropSound True"; _testUtility.TestBlock.BlockItems.Add(new ActionBlockItem(BlockAction.Show)); _testUtility.TestBlock.BlockItems.Add(new IdentifiedBlockItem(true)); @@ -1997,8 +1931,6 @@ namespace Filtration.Parser.Tests.Services _testUtility.TestBlock.BlockItems.Add(new ShapedMapBlockItem(true)); _testUtility.TestBlock.BlockItems.Add(new ElderMapBlockItem(true)); _testUtility.TestBlock.BlockItems.Add(new DisableDropSoundBlockItem(true)); - _testUtility.TestBlock.BlockItems.Add(new IconBlockItem("Icon4")); - _testUtility.TestBlock.BlockItems.Add(new BeamBlockItem(new Color { A = 255, R = 120, G = 130, B = 140 }, false)); // Act var result = _testUtility.Translator.TranslateItemFilterBlockToString(_testUtility.TestBlock); diff --git a/Filtration.Parser/Services/ItemFilterBlockTranslator.cs b/Filtration.Parser/Services/ItemFilterBlockTranslator.cs index e5b0fb7..aecb295 100644 --- a/Filtration.Parser/Services/ItemFilterBlockTranslator.cs +++ b/Filtration.Parser/Services/ItemFilterBlockTranslator.cs @@ -310,36 +310,59 @@ namespace Filtration.Parser.Services AddBooleanItemToBlockItems(block, trimmedLine); break; } - case "Icon": + case "MinimapIcon": { // Only ever use the last Icon item encountered as multiples aren't valid. - RemoveExistingBlockItemsOfType(block); - - var match = Regex.Match(trimmedLine, @"\S+\s+""(\S+)"""); + RemoveExistingBlockItemsOfType(block); + + // TODO: Get size, color, shape values programmatically + var match = Regex.Match(trimmedLine, + @"\S+\s+(0|1|2)\s+(Red|Green|Blue|Brown|White|Yellow)\s+(Circle|Diamond|Hexagon|Square|Star|Triangle)\s*([#]?)(.*)", + RegexOptions.IgnoreCase); if (match.Success) { - var blockItemValue = new IconBlockItem + var blockItemValue = new MapIconBlockItem { - Value = match.Groups[1].Value - }; + Size = (IconSize)Int16.Parse(match.Groups[1].Value), + Color = EnumHelper.GetEnumValueFromDescription(match.Groups[2].Value), + Shape = EnumHelper.GetEnumValueFromDescription(match.Groups[3].Value) + }; + + if(match.Groups[4].Value == "#" && !string.IsNullOrWhiteSpace(match.Groups[5].Value)) + { + ThemeComponent themeComponent = _masterComponentCollection.AddComponent(ThemeComponentType.Icon, match.Groups[5].Value.Trim(), + blockItemValue.Size, blockItemValue.Color, blockItemValue.Shape); + blockItemValue.ThemeComponent = themeComponent; + } block.BlockItems.Add(blockItemValue); } break; } - case "BeamColor": + case "PlayEffect": { // Only ever use the last BeamColor item encountered as multiples aren't valid. - RemoveExistingBlockItemsOfType(block); + RemoveExistingBlockItemsOfType(block); - var result = Regex.Matches(trimmedLine, @"([\w\s]*)(True|False)[#]?(.*)", RegexOptions.IgnoreCase); - var color = GetColorFromString(result[0].Groups[1].Value); - var beamBlockItem = new BeamBlockItem + // TODO: Get colors programmatically + var match = Regex.Match(trimmedLine, @"\S+\s+(Red|Green|Blue|Brown|White|Yellow)\s+(Temp)?\s*([#]?)(.*)", RegexOptions.IgnoreCase); + + if (match.Success) { - Color = GetColorFromString(result[0].Groups[1].Value), - BooleanValue = result[0].Groups[2].Value.Trim().ToLowerInvariant() == "true" - }; - block.BlockItems.Add(beamBlockItem); + var blockItemValue = new PlayEffectBlockItem + { + Color = EnumHelper.GetEnumValueFromDescription(match.Groups[1].Value), + Temporary = match.Groups[2].Value.Trim().ToLower() == "temp" + }; + + if(match.Groups[3].Value == "#" && !string.IsNullOrWhiteSpace(match.Groups[4].Value)) + { + ThemeComponent themeComponent = _masterComponentCollection.AddComponent(ThemeComponentType.Effect, match.Groups[4].Value.Trim(), + blockItemValue.Color, blockItemValue.Temporary); + blockItemValue.ThemeComponent = themeComponent; + } + block.BlockItems.Add(blockItemValue); + } break; } case "CustomAlertSound": @@ -367,6 +390,11 @@ namespace Filtration.Parser.Services } break; } + case "MapTier": + { + AddNumericFilterPredicateItemToBlockItems(block, trimmedLine); + break; + } } } @@ -640,12 +668,6 @@ namespace Filtration.Parser.Services // ReSharper disable once LoopCanBeConvertedToQuery foreach (var blockItem in block.BlockItems.Where(b => b.GetType() != typeof(ActionBlockItem)).OrderBy(b => b.SortOrder)) { - // Do not save temporary blocks until the new features are fully implemented - if (blockItem is IconBlockItem || blockItem is BeamBlockItem) - { - continue; - } - if (blockItem.OutputText != string.Empty) { outputString += (!block.Enabled ? _disabledNewLine : _newLine) + blockItem.OutputText; diff --git a/Filtration.ThemeEditor/Filtration.ThemeEditor.csproj b/Filtration.ThemeEditor/Filtration.ThemeEditor.csproj index a32ef1f..20cd268 100644 --- a/Filtration.ThemeEditor/Filtration.ThemeEditor.csproj +++ b/Filtration.ThemeEditor/Filtration.ThemeEditor.csproj @@ -109,6 +109,8 @@ + + diff --git a/Filtration.ThemeEditor/ViewModels/EffectColorThemeComponentViewModel.cs b/Filtration.ThemeEditor/ViewModels/EffectColorThemeComponentViewModel.cs new file mode 100644 index 0000000..07d64cf --- /dev/null +++ b/Filtration.ThemeEditor/ViewModels/EffectColorThemeComponentViewModel.cs @@ -0,0 +1,10 @@ +using Filtration.ObjectModel.Enums; + +namespace Filtration.ThemeEditor.ViewModels +{ + public class EffectColorThemeComponentViewModel : ThemeComponentViewModel + { + public EffectColor EffectColor { get; set; } + public bool Temporary { get; set; } + } +} diff --git a/Filtration.ThemeEditor/ViewModels/IconThemeComponentViewModel.cs b/Filtration.ThemeEditor/ViewModels/IconThemeComponentViewModel.cs new file mode 100644 index 0000000..0a61f1f --- /dev/null +++ b/Filtration.ThemeEditor/ViewModels/IconThemeComponentViewModel.cs @@ -0,0 +1,11 @@ +using Filtration.ObjectModel.Enums; + +namespace Filtration.ThemeEditor.ViewModels +{ + public class IconThemeComponentViewModel : ThemeComponentViewModel + { + public IconSize IconSize { get; set; } + public IconColor IconColor { get; set; } + public IconShape IconShape { get; set; } + } +} diff --git a/Filtration.ThemeEditor/ViewModels/ThemeEditorViewModel.cs b/Filtration.ThemeEditor/ViewModels/ThemeEditorViewModel.cs index d67c8ac..c18a8c9 100644 --- a/Filtration.ThemeEditor/ViewModels/ThemeEditorViewModel.cs +++ b/Filtration.ThemeEditor/ViewModels/ThemeEditorViewModel.cs @@ -211,6 +211,12 @@ namespace Filtration.ThemeEditor.ViewModels case ThemeComponentType.CustomSound: Components.Add(new StringThemeComponent(themeComponentType, "Untitled Component", "placeholder.mp3")); break; + case ThemeComponentType.Icon: + Components.Add(new IconThemeComponent(themeComponentType, "Untitled Component", IconSize.Largest, IconColor.Red, IconShape.Circle)); + break; + case ThemeComponentType.Effect: + Components.Add(new EffectColorThemeComponent(themeComponentType, "Untitled Component", EffectColor.Red, false)); + break; } } diff --git a/Filtration.ThemeEditor/Views/ThemeComponentControl.xaml b/Filtration.ThemeEditor/Views/ThemeComponentControl.xaml index 5d06641..2130c90 100644 --- a/Filtration.ThemeEditor/Views/ThemeComponentControl.xaml +++ b/Filtration.ThemeEditor/Views/ThemeComponentControl.xaml @@ -7,7 +7,8 @@ xmlns:commonConverters="clr-namespace:Filtration.Common.Converters;assembly=Filtration.Common" xmlns:themeEditor="clr-namespace:Filtration.ObjectModel.ThemeEditor;assembly=Filtration.ObjectModel" xmlns:views="clr-namespace:Filtration.ThemeEditor.Views" - xmlns:viewModels="clr-namespace:Filtration.ThemeEditor.ViewModels" + xmlns:extensions="clr-namespace:Filtration.Common.Extensions;assembly=Filtration.Common" + xmlns:enums="clr-namespace:Filtration.ObjectModel.Enums;assembly=Filtration.ObjectModel" mc:Ignorable="d" d:DataContext="{d:DesignInstance Type=themeEditor:ThemeComponent}" d:DesignHeight="100" d:DesignWidth="200"> @@ -18,7 +19,7 @@ - + @@ -99,6 +100,38 @@ + + + + + + + + + + + + + + + Permanent + Temporary + + + + diff --git a/Filtration/App.xaml.cs b/Filtration/App.xaml.cs index a123909..624f22e 100644 --- a/Filtration/App.xaml.cs +++ b/Filtration/App.xaml.cs @@ -50,6 +50,8 @@ namespace Filtration cfg.CreateMap().ReverseMap(); cfg.CreateMap().ReverseMap(); cfg.CreateMap().ReverseMap(); + cfg.CreateMap().ReverseMap(); + cfg.CreateMap().ReverseMap(); cfg.CreateMap(); }); diff --git a/Filtration/Converters/AvailableThemeComponentsConverter.cs b/Filtration/Converters/AvailableThemeComponentsConverter.cs index 77a6803..e4c5d61 100644 --- a/Filtration/Converters/AvailableThemeComponentsConverter.cs +++ b/Filtration/Converters/AvailableThemeComponentsConverter.cs @@ -45,6 +45,14 @@ namespace Filtration.Converters { themeComponentType = ThemeComponentType.CustomSound; } + else if (blockItem.GetType() == typeof(MapIconBlockItem)) + { + themeComponentType = ThemeComponentType.Icon; + } + else if (blockItem.GetType() == typeof(PlayEffectBlockItem)) + { + themeComponentType = ThemeComponentType.Effect; + } else { return null; diff --git a/Filtration/Converters/DropIconConverter.cs b/Filtration/Converters/IconShapeToSourceConverter.cs similarity index 61% rename from Filtration/Converters/DropIconConverter.cs rename to Filtration/Converters/IconShapeToSourceConverter.cs index 4caeffa..c727045 100644 --- a/Filtration/Converters/DropIconConverter.cs +++ b/Filtration/Converters/IconShapeToSourceConverter.cs @@ -1,28 +1,29 @@ -using System; +using Filtration.ObjectModel.Enums; +using System; using System.Globalization; using System.Windows.Data; namespace Filtration.Converters { - internal class DropIconConverter : IValueConverter + internal class IconShapeToSourceConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { - var iconString = (string)value; - switch(iconString) + var iconShape = (IconShape)(int)value; + switch (iconShape) { - case "Icon1": - return "/Filtration;component/Resources/DropIcons/Icon1.png"; - case "Icon2": - return "/Filtration;component/Resources/DropIcons/Icon2.png"; - case "Icon3": - return "/Filtration;component/Resources/DropIcons/Icon3.png"; - case "Icon4": - return "/Filtration;component/Resources/DropIcons/Icon4.png"; - case "Icon5": - return "/Filtration;component/Resources/DropIcons/Icon5.png"; - case "Icon6": - return "/Filtration;component/Resources/DropIcons/Icon6.png"; + case IconShape.Circle: + return "/Filtration;component/Resources/DropIcons/Circle.png"; + case IconShape.Diamond: + return "/Filtration;component/Resources/DropIcons/Diamond.png"; + case IconShape.Hexagon: + return "/Filtration;component/Resources/DropIcons/Hexagon.png"; + case IconShape.Square: + return "/Filtration;component/Resources/DropIcons/Square.png"; + case IconShape.Star: + return "/Filtration;component/Resources/DropIcons/Star.png"; + case IconShape.Triangle: + return "/Filtration;component/Resources/DropIcons/Triangle.png"; } return "/Filtration;component/Resources/DropIcons/NoIcon.png"; diff --git a/Filtration/Converters/SizeColorToRectConverter.cs b/Filtration/Converters/SizeColorToRectConverter.cs new file mode 100644 index 0000000..0be1814 --- /dev/null +++ b/Filtration/Converters/SizeColorToRectConverter.cs @@ -0,0 +1,33 @@ +using Filtration.ObjectModel.Enums; +using System; +using System.Globalization; +using System.Windows; +using System.Windows.Data; + +namespace Filtration.Converters +{ + internal class SizeColorToRectConverter : IMultiValueConverter + { + public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) + { + var size = (int)(values[0]); + var color = (int)(values[1]); + + if (size < 0 || color < 0) + return new Rect(0, 0, 0, 0); + + Rect cropArea = new Rect(); + cropArea.Width = 64; + cropArea.Height = 64; + cropArea.X = 0 + size * 64; + cropArea.Y = 0 + color * 64; + + return cropArea; + } + + public object[] ConvertBack(object value, Type[] targetType, object parameter, CultureInfo culture) + { + throw new NotImplementedException(); + } + } +} \ No newline at end of file diff --git a/Filtration/Filtration.csproj b/Filtration/Filtration.csproj index 9b35e47..6a1ac98 100644 --- a/Filtration/Filtration.csproj +++ b/Filtration/Filtration.csproj @@ -167,12 +167,11 @@ - + + - - @@ -546,13 +545,13 @@ - - - - - - + + + + + + diff --git a/Filtration/Resources/DropIcons/Circle.png b/Filtration/Resources/DropIcons/Circle.png new file mode 100644 index 0000000..7b59891 Binary files /dev/null and b/Filtration/Resources/DropIcons/Circle.png differ diff --git a/Filtration/Resources/DropIcons/Diamond.png b/Filtration/Resources/DropIcons/Diamond.png new file mode 100644 index 0000000..ab917dd Binary files /dev/null and b/Filtration/Resources/DropIcons/Diamond.png differ diff --git a/Filtration/Resources/DropIcons/Hexagon.png b/Filtration/Resources/DropIcons/Hexagon.png new file mode 100644 index 0000000..549fa94 Binary files /dev/null and b/Filtration/Resources/DropIcons/Hexagon.png differ diff --git a/Filtration/Resources/DropIcons/Icon1.png b/Filtration/Resources/DropIcons/Icon1.png deleted file mode 100644 index 38a4314..0000000 Binary files a/Filtration/Resources/DropIcons/Icon1.png and /dev/null differ diff --git a/Filtration/Resources/DropIcons/Icon2.png b/Filtration/Resources/DropIcons/Icon2.png deleted file mode 100644 index 8d10d5d..0000000 Binary files a/Filtration/Resources/DropIcons/Icon2.png and /dev/null differ diff --git a/Filtration/Resources/DropIcons/Icon3.png b/Filtration/Resources/DropIcons/Icon3.png deleted file mode 100644 index 2ef3b30..0000000 Binary files a/Filtration/Resources/DropIcons/Icon3.png and /dev/null differ diff --git a/Filtration/Resources/DropIcons/Icon4.png b/Filtration/Resources/DropIcons/Icon4.png deleted file mode 100644 index b471723..0000000 Binary files a/Filtration/Resources/DropIcons/Icon4.png and /dev/null differ diff --git a/Filtration/Resources/DropIcons/Icon5.png b/Filtration/Resources/DropIcons/Icon5.png deleted file mode 100644 index ad3709f..0000000 Binary files a/Filtration/Resources/DropIcons/Icon5.png and /dev/null differ diff --git a/Filtration/Resources/DropIcons/Icon6.png b/Filtration/Resources/DropIcons/Icon6.png deleted file mode 100644 index 8febb46..0000000 Binary files a/Filtration/Resources/DropIcons/Icon6.png and /dev/null differ diff --git a/Filtration/Resources/DropIcons/Square.png b/Filtration/Resources/DropIcons/Square.png new file mode 100644 index 0000000..9e143cf Binary files /dev/null and b/Filtration/Resources/DropIcons/Square.png differ diff --git a/Filtration/Resources/DropIcons/Star.png b/Filtration/Resources/DropIcons/Star.png new file mode 100644 index 0000000..9158e90 Binary files /dev/null and b/Filtration/Resources/DropIcons/Star.png differ diff --git a/Filtration/Resources/DropIcons/Triangle.png b/Filtration/Resources/DropIcons/Triangle.png new file mode 100644 index 0000000..3d8d6d9 Binary files /dev/null and b/Filtration/Resources/DropIcons/Triangle.png differ diff --git a/Filtration/Resources/ItemBaseTypes.txt b/Filtration/Resources/ItemBaseTypes.txt index cc1a744..c978d72 100644 --- a/Filtration/Resources/ItemBaseTypes.txt +++ b/Filtration/Resources/ItemBaseTypes.txt @@ -1,5 +1,6 @@ A Mother's Parting Gift Abandoned Wealth +Aberrant Fossil Abyssal Axe Abyssal Cry Abyssal Sceptre @@ -10,6 +11,7 @@ Added Cold Damage Support Added Fire Damage Support Added Lightning Damage Support Additional Accuracy Support +Aetheric Fossil Agate Amulet Albino Rhoa Feather Alchemy Shard @@ -111,6 +113,7 @@ Battle Sword Bazaar Map Beach Map Bear Trap +Beauty Through Death Behemoth Mace Belfry Map Bestel's Manuscript @@ -148,6 +151,7 @@ Blood Raiment Blood Sceptre Bloodlines Leaguestone Bloodlust Support +Bloodstained Fossil Blue Pearl Amulet Blunt Arrow Quiver Boarding Axe @@ -161,9 +165,11 @@ Bone Helmet Bone Offering Bone Spirit Shield Bonespire Talisman +Boon of the First Ones Boot Blade Boot Knife Bottled Storm +Bound Fossil Boundless Realms Bowyer's Dream Branded Kite Shield @@ -293,6 +299,7 @@ Conjurer Boots Conjurer Gloves Conjurer's Vestment Conquest Chainmail +Consecrated Path Conservatory Map Contagion Controlled Destruction Support @@ -309,6 +316,7 @@ Core Map Coronal Leather Coronal Maul Corroded Blade +Corroded Fossil Corroded Tower Shield Corrugated Buckler Corsair Sword @@ -388,6 +396,7 @@ Defiled Cathedral Map Deicide Mask Demon Dagger Demon's Horn +Dense Fossil Desecrate Desert Brigandine Desert Map @@ -463,6 +472,8 @@ Emperor of Purity Emperor's Luck Empower Support Enameled Buckler +Enchanted Fossil +Encrusted Fossil Endurance Charge on Melee Stun Support Enduring Cry Enfeeble @@ -508,6 +519,7 @@ Ezomyte Dagger Ezomyte Spiked Shield Ezomyte Staff Ezomyte Tower Shield +Faceted Fossil Factory Map Fancy Foil Fangjaw Talisman @@ -552,6 +564,7 @@ Fork Support Fortify Support Fossilised Spirit Shield Foul Staff +Fractured Fossil Fragment of the Chimera Fragment of the Hydra Fragment of the Minotaur @@ -561,6 +574,7 @@ Freezing Pulse Frenzy Fright Claw Fright Maul +Frigid Fossil Frontier Leather Frost Blades Frost Bomb @@ -590,6 +604,7 @@ Giant Mana Flask Gift of the Gemling Queen Gilded Axe Gilded Buckler +Gilded Fossil Gilded Sallet Girded Tower Shield Glacial Cascade @@ -602,6 +617,7 @@ Glassblower's Bauble Glimmer of Hope Glorious Leather Glorious Plate +Glyphic Fossil Gnarled Branch Goat's Horn Goathide Boots @@ -675,8 +691,10 @@ Heavy Quiver Heavy Strike Hellion's Paw Her Mask +Herald of Agony Herald of Ash Herald of Ice +Herald of Purity Herald of Thunder Heterochromia Hexclaw Talisman @@ -684,6 +702,7 @@ Highborn Bow Highborn Staff Highland Blade Hinekora's Hair +Hollow Fossil Holy Chainmail Hook Sword Hope @@ -759,6 +778,7 @@ Jade Chopper Jade Flask Jade Hatchet Jagged Foil +Jagged Fossil Jagged Maul Jasper Axe Jasper Chopper @@ -843,6 +863,7 @@ Lordly Plate Loricated Ringmail Lost Worlds Loyalty +Lucent Fossil Lucky Connections Lucky Deck Lunaris Circlet @@ -884,6 +905,7 @@ Merciless Armament Mesa Map Mesh Boots Mesh Gloves +Metallic Fossil Miasmeter Midnight Blade Might is Right @@ -995,13 +1017,13 @@ Penetrating Arrow Quiver Peninsula Map Perandus Coin Perandus Leaguestone +Perfect Fossil Perfection Pernarch Petrified Club Phantasmagoria Map Phantom Mace Phase Run -Physical Projectile Attack Damage Support Physical to Lightning Support Pier Map Pierce Support @@ -1031,19 +1053,29 @@ Port Map Portal Portal Scroll Portal Shredder +Potent Alchemical Resonator +Potent Chaotic Resonator Power Charge On Critical Support Power Siphon +Powerful Alchemical Resonator +Powerful Chaotic Resonator Praetor Crown Precinct Map Prehistoric Claw Pride Before the Fall Primal Skull Talisman +Prime Alchemical Resonator +Prime Chaotic Resonator Primeval Rapier +Primitive Alchemical Resonator +Primitive Chaotic Resonator Primitive Staff Primordial Pool Map Primordial Staff +Prismatic Fossil Prismatic Jewel Prismatic Ring +Pristine Fossil Profane Wand Projectile Weakness Promenade Map @@ -1157,6 +1189,7 @@ Sambar Sceptre Samite Gloves Samite Helmet Samite Slippers +Sanctified Fossil Sanctified Life Flask Sanctified Mana Flask Sand of Eternity @@ -1173,7 +1206,9 @@ Scarlet Round Shield Scholar Boots Scholar of the Seas Scholar's Robe +Scorched Fossil Scorching Ray +Scourge Arrow Screaming Essence Screaming Essence of Anger Screaming Essence of Anguish @@ -1212,6 +1247,7 @@ Serpentscale Boots Serpentscale Gauntlets Serrated Arrow Quiver Serrated Foil +Serrated Fossil Shabby Jerkin Shackled Boots Shadow Axe @@ -1221,7 +1257,6 @@ Shagreen Gloves Shagreen Tower Shield Shaper's Orb Shaper's Orb (Tier 1) -Shaper's Orb (Tier 10) Shaper's Orb (Tier 2) Shaper's Orb (Tier 3) Shaper's Orb (Tier 4) @@ -1230,6 +1265,7 @@ Shaper's Orb (Tier 6) Shaper's Orb (Tier 7) Shaper's Orb (Tier 8) Shaper's Orb (Tier 9) +Shaper's Orb (Tier 10) Shard of Fate Sharkskin Boots Sharkskin Gloves @@ -1265,6 +1301,7 @@ Shrieking Essence of Woe Shrieking Essence of Wrath Shrieking Essence of Zeal Shrine Map +Shuddering Fossil Siege Axe Siege Ballista Siege Helmet @@ -1299,6 +1336,7 @@ Small Hybrid Flask Small Life Flask Small Mana Flask Smallsword +Smite Smoke Mine Sniper Bow Solar Maul @@ -1385,6 +1423,7 @@ Sulphur Vents Map Summit Map Summon Chaos Golem Summon Flame Golem +Summon Holy Relic Summon Ice Golem Summon Lightning Golem Summon Phantasm on Kill Support @@ -1402,6 +1441,7 @@ Sweep Swift Affliction Support Talisman Leaguestone Talon Axe +Tangled Fossil Tarnished Spirit Shield Teak Round Shield Tectonic Slam @@ -1431,6 +1471,7 @@ The Blazing Fire The Body The Breach The Brittle Emperor +The Cacophony The Calling The Carrion Crow The Cartographer @@ -1456,6 +1497,7 @@ The Dreamer The Dreamland The Drunken Aristocrat The Encroaching Darkness +The Endless Darkness The Endurance The Enlightened The Ethereal @@ -1483,6 +1525,7 @@ The Hoarder The Hunger The Immortal The Incantation +The Innocent The Inoculated The Insatiable The Inventor @@ -1512,6 +1555,7 @@ The Penitent The Poet The Polymath The Porcupine +The Price of Protection The Professor The Puzzle The Queen @@ -1548,6 +1592,7 @@ The Throne The Tower The Traitor The Trial +The Twilight Moon The Twins The Tyrant The Undaunted @@ -1562,6 +1607,7 @@ The Warden The Warlord The Watcher The Web +The Wilted Rose The Wind The Witch The Wolf @@ -1589,6 +1635,7 @@ Tiger's Paw Timber Axe Time-Lost Relic Timeworn Claw +Timeworn Reliquary Key Titan Gauntlets Titan Greaves Titanium Spirit Shield @@ -1604,6 +1651,7 @@ Torture Chamber Map Totemic Maul Tower Key Tower Map +Toxic Rain Toxic Sewer Map Tranquillity Transmutation Shard @@ -1644,6 +1692,7 @@ Unset Ring Unshaping Orb Ursine Pelt Uul-Netol's Breachstone +Vaal Ancestral Warchief Vaal Arc Vaal Axe Vaal Blade @@ -1713,6 +1762,7 @@ Vial of Summoning Vial of the Ghost Vial of the Ritual Vial of Transcendence +Vicious Projectiles Support Vigilant Strike Vile Staff Vile Toxins Support @@ -1790,6 +1840,7 @@ Wild Leather Wild Strike Wings of Vastiri Wither +Withering Touch Support Wolf Pelt Woodful Staff Woodsplitter diff --git a/Filtration/Resources/ItemClasses.txt b/Filtration/Resources/ItemClasses.txt index 0554a03..d38526b 100644 --- a/Filtration/Resources/ItemClasses.txt +++ b/Filtration/Resources/ItemClasses.txt @@ -9,6 +9,7 @@ Bows Claws Currency Daggers +Delve Stackable Currency Divination Card Fishing Rods Flasks diff --git a/Filtration/UserControls/BlockItemControl.xaml b/Filtration/UserControls/BlockItemControl.xaml index b8d42a4..1a0d699 100644 --- a/Filtration/UserControls/BlockItemControl.xaml +++ b/Filtration/UserControls/BlockItemControl.xaml @@ -7,7 +7,7 @@ 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" + xmlns:extensions="clr-namespace:Filtration.Common.Extensions;assembly=Filtration.Common" xmlns:enums="clr-namespace:Filtration.ObjectModel.Enums;assembly=Filtration.ObjectModel" xmlns:xctk="http://schemas.xceed.com/wpf/xaml/toolkit" xmlns:views="clr-namespace:Filtration.Views" @@ -86,14 +86,25 @@ - - + + - Permanent - Temporary + Permanent + Temporary - + + + + + + + + + @@ -171,11 +182,30 @@ - - - - - + + + + + + + + + + + + + + + diff --git a/Filtration/UserControls/BlockItemControl.xaml.cs b/Filtration/UserControls/BlockItemControl.xaml.cs index 7679d1f..db0909c 100644 --- a/Filtration/UserControls/BlockItemControl.xaml.cs +++ b/Filtration/UserControls/BlockItemControl.xaml.cs @@ -90,10 +90,6 @@ namespace Filtration.UserControls "ShFusing", "ShRegal", "ShVaal" }; - public List IconsAvailable => new List { - "Icon1", "Icon2", "Icon3", "Icon4", "Icon5", "Icon6" - }; - private void OnSetBlockValueCommmand() { var blockItemWithTheme = BlockItem as IBlockItemWithTheme; @@ -121,6 +117,17 @@ namespace Filtration.UserControls var stringBlockItem = BlockItem as StringBlockItem; stringBlockItem.Value = ((StringThemeComponent)stringBlockItem.ThemeComponent).Value; break; + case ThemeComponentType.Icon: + var iconBlockItem = BlockItem as IconBlockItem; + iconBlockItem.Size = ((IconThemeComponent)iconBlockItem.ThemeComponent).IconSize; + iconBlockItem.Color = ((IconThemeComponent)iconBlockItem.ThemeComponent).IconColor; + iconBlockItem.Shape = ((IconThemeComponent)iconBlockItem.ThemeComponent).IconShape; + break; + case ThemeComponentType.Effect: + var effectColorBlockItem = BlockItem as EffectColorBlockItem; + effectColorBlockItem.Color = ((EffectColorThemeComponent)effectColorBlockItem.ThemeComponent).EffectColor; + effectColorBlockItem.Temporary = ((EffectColorThemeComponent)effectColorBlockItem.ThemeComponent).Temporary; + break; } } diff --git a/Filtration/UserControls/ImageComboBoxControl.xaml b/Filtration/UserControls/ImageComboBoxControl.xaml index 1494353..88b1726 100644 --- a/Filtration/UserControls/ImageComboBoxControl.xaml +++ b/Filtration/UserControls/ImageComboBoxControl.xaml @@ -8,7 +8,7 @@ mc:Ignorable="d"> - + diff --git a/Filtration/UserControls/ItemPreviewControl.xaml b/Filtration/UserControls/ItemPreviewControl.xaml index f9232fe..0ba9de4 100644 --- a/Filtration/UserControls/ItemPreviewControl.xaml +++ b/Filtration/UserControls/ItemPreviewControl.xaml @@ -8,7 +8,7 @@ d:DataContext="{d:DesignInstance Type=userControls:ItemPreviewControl}" d:DesignHeight="35" d:DesignWidth="170"> - + diff --git a/Filtration/UserControls/NumericFilterPredicateControl.xaml b/Filtration/UserControls/NumericFilterPredicateControl.xaml index 32ce079..8d8d03f 100644 --- a/Filtration/UserControls/NumericFilterPredicateControl.xaml +++ b/Filtration/UserControls/NumericFilterPredicateControl.xaml @@ -5,7 +5,7 @@ xmlns:xctk="http://schemas.xceed.com/wpf/xaml/toolkit" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" - xmlns:extensions="clr-namespace:Filtration.Extensions" + xmlns:extensions="clr-namespace:Filtration.Common.Extensions;assembly=Filtration.Common" xmlns:userControls="clr-namespace:Filtration.UserControls" xmlns:enums="clr-namespace:Filtration.ObjectModel.Enums;assembly=Filtration.ObjectModel" mc:Ignorable="d" diff --git a/Filtration/UserControls/ThemeComponentSelectionControl.xaml b/Filtration/UserControls/ThemeComponentSelectionControl.xaml index bd68cac..ae2f094 100644 --- a/Filtration/UserControls/ThemeComponentSelectionControl.xaml +++ b/Filtration/UserControls/ThemeComponentSelectionControl.xaml @@ -67,6 +67,14 @@ + + + + + + + + diff --git a/Filtration/ViewModels/ItemFilterBlockViewModel.cs b/Filtration/ViewModels/ItemFilterBlockViewModel.cs index 7284af5..ac2411a 100644 --- a/Filtration/ViewModels/ItemFilterBlockViewModel.cs +++ b/Filtration/ViewModels/ItemFilterBlockViewModel.cs @@ -8,6 +8,7 @@ using System.Windows.Media; using Filtration.ObjectModel; using Filtration.ObjectModel.BlockItemBaseTypes; using Filtration.ObjectModel.BlockItemTypes; +using Filtration.ObjectModel.Enums; using Filtration.Services; using Filtration.Views; using GalaSoft.MvvmLight.CommandWpf; @@ -181,6 +182,7 @@ namespace Filtration.ViewModels typeof (CorruptedBlockItem), typeof (ElderItemBlockItem), typeof (ShaperItemBlockItem), + typeof (MapTierBlockItem), typeof (ShapedMapBlockItem), typeof (ElderMapBlockItem), typeof (GemLevelBlockItem), @@ -197,8 +199,8 @@ namespace Filtration.ViewModels typeof (SoundBlockItem), typeof (PositionalSoundBlockItem), typeof (DisableDropSoundBlockItem), - typeof (IconBlockItem), - typeof (BeamBlockItem), + typeof (MapIconBlockItem), + typeof (PlayEffectBlockItem), typeof (CustomSoundBlockItem) }; @@ -241,8 +243,10 @@ namespace Filtration.ViewModels public Color DisplayBackgroundColor => Block.DisplayBackgroundColor; public Color DisplayBorderColor => Block.DisplayBorderColor; public double DisplayFontSize => Block.DisplayFontSize/1.8; - public string DisplayIcon => Block.DisplayIcon; - public Color DisplayBeamColor => Block.DisplayBeamColor; + public int DisplayIconSize => Block.DisplayIconSize; + public int DisplayIconColor => Block.DisplayIconColor; + public int DisplayIconShape => Block.DisplayIconShape; + public Color DisplayEffectColor => Block.DisplayEffectColor; public bool HasSound => Block.HasBlockItemOfType(); public bool HasPositionalSound => Block.HasBlockItemOfType(); @@ -476,8 +480,10 @@ namespace Filtration.ViewModels RaisePropertyChanged(nameof(DisplayBackgroundColor)); RaisePropertyChanged(nameof(DisplayBorderColor)); RaisePropertyChanged(nameof(DisplayFontSize)); - RaisePropertyChanged(nameof(DisplayIcon)); - RaisePropertyChanged(nameof(DisplayBeamColor)); + RaisePropertyChanged(nameof(DisplayIconSize)); + RaisePropertyChanged(nameof(DisplayIconColor)); + RaisePropertyChanged(nameof(DisplayIconShape)); + RaisePropertyChanged(nameof(DisplayEffectColor)); RaisePropertyChanged(nameof(HasSound)); RaisePropertyChanged(nameof(HasPositionalSound)); RaisePropertyChanged(nameof(HasCustomSound)); diff --git a/Filtration/ViewModels/MainWindowViewModel.cs b/Filtration/ViewModels/MainWindowViewModel.cs index 8651c46..74e6534 100644 --- a/Filtration/ViewModels/MainWindowViewModel.cs +++ b/Filtration/ViewModels/MainWindowViewModel.cs @@ -117,6 +117,8 @@ namespace Filtration.ViewModels AddFontSizeThemeComponentCommand = new RelayCommand(OnAddFontSizeThemeComponentCommand, () => ActiveDocumentIsTheme && ActiveThemeIsEditable); AddAlertSoundThemeComponentCommand = new RelayCommand(OnAddAlertSoundThemeComponentCommand, () => ActiveDocumentIsTheme && ActiveThemeIsEditable); AddCustomSoundThemeComponentCommand = new RelayCommand(OnAddCustomSoundThemeComponentCommand, () => ActiveDocumentIsTheme && ActiveThemeIsEditable); + AddIconThemeComponentCommand = new RelayCommand(OnAddIconThemeComponentCommand, () => ActiveDocumentIsTheme && ActiveThemeIsEditable); + AddEffectColorThemeComponentCommand = new RelayCommand(OnAddEffectColorThemeComponentCommand, () => ActiveDocumentIsTheme && ActiveThemeIsEditable); DeleteThemeComponentCommand = new RelayCommand(OnDeleteThemeComponentCommand, () => ActiveDocumentIsTheme && ActiveThemeIsEditable && _avalonDockWorkspaceViewModel.ActiveThemeViewModel.SelectedThemeComponent != null); ExpandAllBlocksCommand = new RelayCommand(OnExpandAllBlocksCommand, () => ActiveDocumentIsScript); @@ -219,6 +221,8 @@ namespace Filtration.ViewModels public RelayCommand AddFontSizeThemeComponentCommand { get; } public RelayCommand AddAlertSoundThemeComponentCommand { get; } public RelayCommand AddCustomSoundThemeComponentCommand { get; } + public RelayCommand AddIconThemeComponentCommand { get; } + public RelayCommand AddEffectColorThemeComponentCommand { get; } public RelayCommand DeleteThemeComponentCommand { get; } public RelayCommand AddBlockCommand { get; } @@ -698,6 +702,16 @@ namespace Filtration.ViewModels _avalonDockWorkspaceViewModel.ActiveThemeViewModel.AddThemeComponentCommand.Execute(ThemeComponentType.CustomSound); } + private void OnAddIconThemeComponentCommand() + { + _avalonDockWorkspaceViewModel.ActiveThemeViewModel.AddThemeComponentCommand.Execute(ThemeComponentType.Icon); + } + + private void OnAddEffectColorThemeComponentCommand() + { + _avalonDockWorkspaceViewModel.ActiveThemeViewModel.AddThemeComponentCommand.Execute(ThemeComponentType.Effect); + } + private void OnDeleteThemeComponentCommand() { _avalonDockWorkspaceViewModel.ActiveThemeViewModel.DeleteThemeComponentCommand.Execute( diff --git a/Filtration/Views/AboutWindow.xaml b/Filtration/Views/AboutWindow.xaml index 9b8c9ae..9862989 100644 --- a/Filtration/Views/AboutWindow.xaml +++ b/Filtration/Views/AboutWindow.xaml @@ -1,7 +1,7 @@  - + +