Add new filter fuatures
|
@ -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;
|
||||
|
|
@ -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
|
||||
{
|
|
@ -75,6 +75,8 @@
|
|||
<Compile Include="Converters\ColorToSolidColorBrushConverter.cs" />
|
||||
<Compile Include="Converters\InverseBooleanVisibilityConverter.cs" />
|
||||
<Compile Include="Converters\StringToVisibilityConverter.cs" />
|
||||
<Compile Include="Extensions\EnumerationExtension.cs" />
|
||||
<Compile Include="Extensions\HyperlinkExtensions.cs" />
|
||||
<Compile Include="Messages\ThemeClosedMessage.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="Services\FileSystemService.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;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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
|
||||
}
|
||||
}
|
|
@ -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
|
||||
}
|
||||
}
|
|
@ -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
|
||||
}
|
||||
}
|
|
@ -0,0 +1,14 @@
|
|||
using System.ComponentModel;
|
||||
|
||||
namespace Filtration.ObjectModel.Enums
|
||||
{
|
||||
public enum IconSize
|
||||
{
|
||||
[Description("Largest")]
|
||||
Largest,
|
||||
[Description("Medium")]
|
||||
Medium,
|
||||
[Description("Small")]
|
||||
Small
|
||||
}
|
||||
}
|
|
@ -15,6 +15,10 @@ namespace Filtration.ObjectModel.Enums
|
|||
[Description("Alert Sound")]
|
||||
AlertSound,
|
||||
[Description("Custom Sound")]
|
||||
CustomSound
|
||||
CustomSound,
|
||||
[Description("Icon")]
|
||||
Icon,
|
||||
[Description("Effect")]
|
||||
Effect
|
||||
}
|
||||
}
|
||||
|
|
|
@ -70,6 +70,8 @@
|
|||
<Compile Include="BlockItemBaseTypes\ColorBlockItem.cs" />
|
||||
<Compile Include="BlockItemBaseTypes\ColorBooleanBlockItem.cs" />
|
||||
<Compile Include="BlockItemBaseTypes\DualIntegerBlockItem.cs" />
|
||||
<Compile Include="BlockItemBaseTypes\EffectColorBlockItem.cs" />
|
||||
<Compile Include="BlockItemBaseTypes\IconBlockItem.cs" />
|
||||
<Compile Include="BlockItemBaseTypes\StringBlockItem.cs" />
|
||||
<Compile Include="BlockItemBaseTypes\StrIntBlockItem.cs" />
|
||||
<Compile Include="BlockItemBaseTypes\IntegerBlockItem.cs" />
|
||||
|
@ -77,7 +79,8 @@
|
|||
<Compile Include="BlockItemBaseTypes\StringListBlockItem.cs" />
|
||||
<Compile Include="BlockItemTypes\BackgroundColorBlockItem.cs" />
|
||||
<Compile Include="BlockItemTypes\BaseTypeBlockItem.cs" />
|
||||
<Compile Include="BlockItemTypes\BeamBlockItem.cs" />
|
||||
<Compile Include="BlockItemTypes\MapTierBlockItem.cs" />
|
||||
<Compile Include="BlockItemTypes\PlayEffectBlockItem.cs" />
|
||||
<Compile Include="BlockItemTypes\BorderColorBlockItem.cs" />
|
||||
<Compile Include="BlockItemTypes\ClassBlockItem.cs" />
|
||||
<Compile Include="BlockItemTypes\CustomSoundBlockItem.cs" />
|
||||
|
@ -85,7 +88,7 @@
|
|||
<Compile Include="BlockItemTypes\ElderMapBlockItem.cs" />
|
||||
<Compile Include="BlockItemTypes\GemLevelBlockItem.cs" />
|
||||
<Compile Include="BlockItemTypes\HasExplicitModBlockItem.cs" />
|
||||
<Compile Include="BlockItemTypes\IconBlockItem.cs" />
|
||||
<Compile Include="BlockItemTypes\MapIconBlockItem.cs" />
|
||||
<Compile Include="BlockItemTypes\ShapedMapBlockItem.cs" />
|
||||
<Compile Include="BlockItemTypes\ShaperItemBlockItem.cs" />
|
||||
<Compile Include="BlockItemTypes\ElderItemBlockItem.cs" />
|
||||
|
@ -122,8 +125,12 @@
|
|||
<Compile Include="Commands\IUndoableCommand.cs" />
|
||||
<Compile Include="Enums\BlockAction.cs" />
|
||||
<Compile Include="Enums\BlockItemType.cs" />
|
||||
<Compile Include="Enums\EffectColor.cs" />
|
||||
<Compile Include="Enums\FilterPredicateOperator.cs" />
|
||||
<Compile Include="Enums\FilterType.cs" />
|
||||
<Compile Include="Enums\IconColor.cs" />
|
||||
<Compile Include="Enums\IconShape.cs" />
|
||||
<Compile Include="Enums\IconSize.cs" />
|
||||
<Compile Include="Enums\ItemRarity.cs" />
|
||||
<Compile Include="Enums\SocketColor.cs" />
|
||||
<Compile Include="Enums\ThemeComponentType.cs" />
|
||||
|
@ -148,6 +155,8 @@
|
|||
<Compile Include="ReplaceColorsParameterSet.cs" />
|
||||
<Compile Include="Socket.cs" />
|
||||
<Compile Include="SocketGroup.cs" />
|
||||
<Compile Include="ThemeEditor\EffectColorThemeComponent.cs" />
|
||||
<Compile Include="ThemeEditor\IconThemeComponent.cs" />
|
||||
<Compile Include="ThemeEditor\StringThemeComponent.cs" />
|
||||
<Compile Include="ThemeEditor\StrIntThemeComponent.cs" />
|
||||
<Compile Include="ThemeEditor\IntegerThemeComponent.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<T>();
|
||||
bool HasBlockGroupInParentHierarchy(ItemFilterBlockGroup targetBlockGroup, ItemFilterBlockGroup startingBlockGroup);
|
||||
}
|
||||
|
@ -263,21 +265,68 @@ namespace Filtration.ObjectModel
|
|||
}
|
||||
}
|
||||
|
||||
public string DisplayIcon
|
||||
public int DisplayIconSize
|
||||
{
|
||||
get
|
||||
{
|
||||
var displayIcon = BlockItems.OfType<IconBlockItem>().FirstOrDefault();
|
||||
return (displayIcon != null) ? displayIcon.Value : "";
|
||||
var mapIconBlockItem = BlockItems.OfType<MapIconBlockItem>().FirstOrDefault();
|
||||
if (mapIconBlockItem != null)
|
||||
return (int)mapIconBlockItem.Size;
|
||||
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
public Color DisplayBeamColor
|
||||
public int DisplayIconColor
|
||||
{
|
||||
get
|
||||
{
|
||||
var beamBlockItem = BlockItems.OfType<BeamBlockItem>().FirstOrDefault();
|
||||
return beamBlockItem?.Color ?? new Color { A = 0, R = 0, G = 0, B = 0 };
|
||||
var mapIconBlockItem = BlockItems.OfType<MapIconBlockItem>().FirstOrDefault();
|
||||
if (mapIconBlockItem != null)
|
||||
return (int)mapIconBlockItem.Color;
|
||||
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
public int DisplayIconShape
|
||||
{
|
||||
get
|
||||
{
|
||||
var mapIconBlockItem = BlockItems.OfType<MapIconBlockItem>().FirstOrDefault();
|
||||
if (mapIconBlockItem != null)
|
||||
return (int)mapIconBlockItem.Shape;
|
||||
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
public Color DisplayEffectColor
|
||||
{
|
||||
get
|
||||
{
|
||||
var beamBlockItem = BlockItems.OfType<PlayEffectBlockItem>().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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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 =
|
||||
|
|
|
@ -892,42 +892,6 @@ namespace Filtration.Parser.Tests.Services
|
|||
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<IconBlockItem>().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<BeamBlockItem>().First();
|
||||
Assert.AreEqual(255, blockItem.Color.R);
|
||||
Assert.AreEqual(20, blockItem.Color.G);
|
||||
Assert.AreEqual(100, blockItem.Color.B);
|
||||
Assert.IsTrue(blockItem.BooleanValue);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void TranslateStringToItemFilterBlock_Everything_ReturnsCorrectObject()
|
||||
{
|
||||
|
@ -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<DisableDropSoundBlockItem>().First();
|
||||
Assert.IsFalse(disableDropSoundBlockItem.BooleanValue);
|
||||
|
||||
var iconBlockItem = result.BlockItems.OfType<IconBlockItem>().First();
|
||||
Assert.AreEqual("Icon2", iconBlockItem.Value);
|
||||
|
||||
var beamBlockItem = result.BlockItems.OfType<BeamBlockItem>().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);
|
||||
|
|
|
@ -310,36 +310,59 @@ namespace Filtration.Parser.Services
|
|||
AddBooleanItemToBlockItems<DisableDropSoundBlockItem>(block, trimmedLine);
|
||||
break;
|
||||
}
|
||||
case "Icon":
|
||||
case "MinimapIcon":
|
||||
{
|
||||
// Only ever use the last Icon item encountered as multiples aren't valid.
|
||||
RemoveExistingBlockItemsOfType<IconBlockItem>(block);
|
||||
RemoveExistingBlockItemsOfType<MapIconBlockItem>(block);
|
||||
|
||||
var match = Regex.Match(trimmedLine, @"\S+\s+""(\S+)""");
|
||||
// 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<IconColor>(match.Groups[2].Value),
|
||||
Shape = EnumHelper.GetEnumValueFromDescription<IconShape>(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<BeamBlockItem>(block);
|
||||
RemoveExistingBlockItemsOfType<PlayEffectBlockItem>(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<EffectColor>(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<MapTierBlockItem>(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;
|
||||
|
|
|
@ -109,6 +109,8 @@
|
|||
<Compile Include="Services\ThemePersistenceService.cs" />
|
||||
<Compile Include="Services\ThemeService.cs" />
|
||||
<Compile Include="ViewModels\ColorThemeComponentViewModel.cs" />
|
||||
<Compile Include="ViewModels\EffectColorThemeComponentViewModel.cs" />
|
||||
<Compile Include="ViewModels\IconThemeComponentViewModel.cs" />
|
||||
<Compile Include="ViewModels\StringThemeComponentViewModel.cs" />
|
||||
<Compile Include="ViewModels\StrIntThemeComponentViewModel.cs" />
|
||||
<Compile Include="ViewModels\IntegerThemeComponentViewModel.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; }
|
||||
}
|
||||
}
|
|
@ -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; }
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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 @@
|
|||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto" />
|
||||
<RowDefinition Height="Auto" />
|
||||
<RowDefinition Height="25" />
|
||||
<RowDefinition Height="*" />
|
||||
</Grid.RowDefinitions>
|
||||
<Grid.Resources>
|
||||
<DataTemplate x:Key="EditableComponentNameTemplate">
|
||||
|
@ -99,6 +100,38 @@
|
|||
</Button>
|
||||
</Grid>
|
||||
</DataTemplate>
|
||||
|
||||
<!--Icon Theme Template-->
|
||||
<DataTemplate DataType="{x:Type themeEditor:IconThemeComponent}">
|
||||
<StackPanel Orientation="Vertical" Margin="5,5,5,5">
|
||||
<ComboBox ItemsSource="{Binding Source={extensions:Enumeration {x:Type enums:IconSize}}}" Style="{StaticResource MetroComboBox}"
|
||||
DisplayMemberPath="Description"
|
||||
SelectedValue="{Binding IconSize}"
|
||||
SelectedValuePath="Value" />
|
||||
<ComboBox ItemsSource="{Binding Source={extensions:Enumeration {x:Type enums:IconColor}}}" Style="{StaticResource MetroComboBox}"
|
||||
DisplayMemberPath="Description"
|
||||
SelectedValue="{Binding IconColor}"
|
||||
SelectedValuePath="Value" />
|
||||
<ComboBox ItemsSource="{Binding Source={extensions:Enumeration {x:Type enums:IconShape}}}" Style="{StaticResource MetroComboBox}"
|
||||
DisplayMemberPath="Description"
|
||||
SelectedValue="{Binding IconShape}"
|
||||
SelectedValuePath="Value" />
|
||||
</StackPanel>
|
||||
</DataTemplate>
|
||||
|
||||
<!--Effect Color Theme Template-->
|
||||
<DataTemplate DataType="{x:Type themeEditor:EffectColorThemeComponent}">
|
||||
<StackPanel>
|
||||
<WrapPanel VerticalAlignment="Center" Margin="5,5,5,5">
|
||||
<RadioButton IsChecked="{Binding Temporary, Converter={StaticResource BoolInverterConverter}}" Margin="0,0,10,0">Permanent</RadioButton>
|
||||
<RadioButton IsChecked="{Binding Temporary}" >Temporary</RadioButton>
|
||||
</WrapPanel>
|
||||
<ComboBox ItemsSource="{Binding Source={extensions:Enumeration {x:Type enums:EffectColor}}}" Style="{StaticResource MetroComboBox}"
|
||||
DisplayMemberPath="Description"
|
||||
SelectedValue="{Binding EffectColor}"
|
||||
SelectedValuePath="Value" />
|
||||
</StackPanel>
|
||||
</DataTemplate>
|
||||
</ContentControl.Resources>
|
||||
</ContentControl>
|
||||
</Grid>
|
||||
|
|
|
@ -50,6 +50,8 @@ namespace Filtration
|
|||
cfg.CreateMap<IntegerThemeComponent, IntegerThemeComponentViewModel>().ReverseMap();
|
||||
cfg.CreateMap<StrIntThemeComponent, StrIntThemeComponentViewModel>().ReverseMap();
|
||||
cfg.CreateMap<StringThemeComponent, StringThemeComponentViewModel>().ReverseMap();
|
||||
cfg.CreateMap<IconThemeComponent, IconThemeComponentViewModel>().ReverseMap();
|
||||
cfg.CreateMap<EffectColorThemeComponent, EffectColorThemeComponentViewModel>().ReverseMap();
|
||||
cfg.CreateMap<IThemeEditorViewModel, Theme>();
|
||||
});
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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";
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -167,12 +167,11 @@
|
|||
<Compile Include="Converters\BooleanToBlockActionInverseConverter.cs" />
|
||||
<Compile Include="Converters\BooleanToBlockActionConverter.cs" />
|
||||
<Compile Include="Converters\BlockItemToRemoveEnabledVisibilityConverter.cs" />
|
||||
<Compile Include="Converters\DropIconConverter.cs" />
|
||||
<Compile Include="Converters\SizeColorToRectConverter.cs" />
|
||||
<Compile Include="Converters\HashSignRemovalConverter.cs" />
|
||||
<Compile Include="Converters\IconShapeToSourceConverter.cs" />
|
||||
<Compile Include="Converters\ItemRarityConverter.cs" />
|
||||
<Compile Include="Converters\TreeViewMarginConverter.cs" />
|
||||
<Compile Include="Extensions\EnumerationExtension.cs" />
|
||||
<Compile Include="Extensions\HyperlinkExtensions.cs" />
|
||||
<Compile Include="Models\UpdateData.cs" />
|
||||
<Compile Include="Properties\Annotations.cs" />
|
||||
<Compile Include="Repositories\ItemFilterScriptRepository.cs" />
|
||||
|
@ -546,13 +545,13 @@
|
|||
</None>
|
||||
<Resource Include="Resources\Icons\redo_icon.png" />
|
||||
<Resource Include="Resources\Icons\undo_icon.png" />
|
||||
<Resource Include="Resources\DropIcons\Icon1.png" />
|
||||
<Resource Include="Resources\DropIcons\Icon2.png" />
|
||||
<Resource Include="Resources\DropIcons\Icon3.png" />
|
||||
<Resource Include="Resources\DropIcons\Icon4.png" />
|
||||
<Resource Include="Resources\DropIcons\Icon5.png" />
|
||||
<Resource Include="Resources\DropIcons\Icon6.png" />
|
||||
<Resource Include="Resources\DropIcons\NoIcon.png" />
|
||||
<Resource Include="Resources\DropIcons\Circle.png" />
|
||||
<Resource Include="Resources\DropIcons\Diamond.png" />
|
||||
<Resource Include="Resources\DropIcons\Hexagon.png" />
|
||||
<Resource Include="Resources\DropIcons\Square.png" />
|
||||
<Resource Include="Resources\DropIcons\Star.png" />
|
||||
<Resource Include="Resources\DropIcons\Triangle.png" />
|
||||
<Content Include="Resources\ItemBaseTypes.txt" />
|
||||
<Content Include="Resources\ItemClasses.txt" />
|
||||
</ItemGroup>
|
||||
|
|
After Width: | Height: | Size: 100 KiB |
After Width: | Height: | Size: 80 KiB |
After Width: | Height: | Size: 99 KiB |
Before Width: | Height: | Size: 9.2 KiB |
Before Width: | Height: | Size: 7.8 KiB |
Before Width: | Height: | Size: 6.3 KiB |
Before Width: | Height: | Size: 7.3 KiB |
Before Width: | Height: | Size: 6.0 KiB |
Before Width: | Height: | Size: 8.7 KiB |
After Width: | Height: | Size: 85 KiB |
After Width: | Height: | Size: 80 KiB |
After Width: | Height: | Size: 75 KiB |
|
@ -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
|
||||
|
|
|
@ -9,6 +9,7 @@ Bows
|
|||
Claws
|
||||
Currency
|
||||
Daggers
|
||||
Delve Stackable Currency
|
||||
Divination Card
|
||||
Fishing Rods
|
||||
Flasks
|
||||
|
|
|
@ -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 @@
|
|||
<userControls:EditableListBoxControl Margin="5,5,5,5" ItemsSource="{Binding Items}" />
|
||||
</DataTemplate>
|
||||
|
||||
<!-- Beam Block Template -->
|
||||
<DataTemplate DataType="{x:Type blockItemTypes:BeamBlockItem}">
|
||||
<!-- Play Effect Block Template -->
|
||||
<DataTemplate DataType="{x:Type blockItemTypes:PlayEffectBlockItem}">
|
||||
<StackPanel>
|
||||
<WrapPanel VerticalAlignment="Center" Margin="5,5,5,5">
|
||||
<RadioButton IsChecked="{Binding BooleanValue}" Margin="0,0,10,0">Permanent</RadioButton>
|
||||
<RadioButton IsChecked="{Binding BooleanValue, Converter={StaticResource BoolInverterConverter}}" >Temporary</RadioButton>
|
||||
<RadioButton IsChecked="{Binding Temporary, Converter={StaticResource BoolInverterConverter}}" Margin="0,0,10,0">Permanent</RadioButton>
|
||||
<RadioButton IsChecked="{Binding Temporary}" >Temporary</RadioButton>
|
||||
</WrapPanel>
|
||||
<xctk:ColorPicker SelectedColor="{Binding Color}" AvailableColors="{Binding ElementName=BlockItemContentControl, Path=DataContext.AvailableColors }" ShowAvailableColors="True" AvailableColorsHeader="Path of Exile Colors"/>
|
||||
<ComboBox ItemsSource="{Binding Source={extensions:Enumeration {x:Type enums:EffectColor}}}" Style="{StaticResource MetroComboBox}"
|
||||
DisplayMemberPath="Description"
|
||||
SelectedValue="{Binding Color}"
|
||||
SelectedValuePath="Value" />
|
||||
<userControls:ThemeComponentSelectionControl ThemeComponent="{Binding ThemeComponent}" Margin="0,2,0,0">
|
||||
<userControls:ThemeComponentSelectionControl.AvailableThemeComponents>
|
||||
<MultiBinding Converter="{StaticResource AvailableThemeComponentsConverter}">
|
||||
<Binding Path="DataContext.Script.ThemeComponents" RelativeSource="{RelativeSource AncestorType={x:Type views:ItemFilterScriptView}}"/>
|
||||
<Binding Path="." />
|
||||
</MultiBinding>
|
||||
</userControls:ThemeComponentSelectionControl.AvailableThemeComponents>
|
||||
</userControls:ThemeComponentSelectionControl>
|
||||
</StackPanel>
|
||||
</DataTemplate>
|
||||
|
||||
|
@ -171,11 +182,30 @@
|
|||
</WrapPanel>
|
||||
</DataTemplate>
|
||||
|
||||
<!-- Drop Icon Template -->
|
||||
<DataTemplate DataType="{x:Type blockItemTypes:IconBlockItem}">
|
||||
<WrapPanel HorizontalAlignment="Left">
|
||||
<userControls:ImageComboBoxControl/>
|
||||
</WrapPanel>
|
||||
<!-- Map Icon Template -->
|
||||
<DataTemplate DataType="{x:Type blockItemTypes:MapIconBlockItem}">
|
||||
<StackPanel Orientation="Vertical" Margin="5,5,5,5">
|
||||
<ComboBox ItemsSource="{Binding Source={extensions:Enumeration {x:Type enums:IconSize}}}" Style="{StaticResource MetroComboBox}"
|
||||
DisplayMemberPath="Description"
|
||||
SelectedValue="{Binding Size}"
|
||||
SelectedValuePath="Value" />
|
||||
<ComboBox ItemsSource="{Binding Source={extensions:Enumeration {x:Type enums:IconColor}}}" Style="{StaticResource MetroComboBox}"
|
||||
DisplayMemberPath="Description"
|
||||
SelectedValue="{Binding Color}"
|
||||
SelectedValuePath="Value" />
|
||||
<ComboBox ItemsSource="{Binding Source={extensions:Enumeration {x:Type enums:IconShape}}}" Style="{StaticResource MetroComboBox}"
|
||||
DisplayMemberPath="Description"
|
||||
SelectedValue="{Binding Shape}"
|
||||
SelectedValuePath="Value" />
|
||||
<userControls:ThemeComponentSelectionControl ThemeComponent="{Binding ThemeComponent}" Margin="0,2,0,0">
|
||||
<userControls:ThemeComponentSelectionControl.AvailableThemeComponents>
|
||||
<MultiBinding Converter="{StaticResource AvailableThemeComponentsConverter}">
|
||||
<Binding Path="DataContext.Script.ThemeComponents" RelativeSource="{RelativeSource AncestorType={x:Type views:ItemFilterScriptView}}"/>
|
||||
<Binding Path="." />
|
||||
</MultiBinding>
|
||||
</userControls:ThemeComponentSelectionControl.AvailableThemeComponents>
|
||||
</userControls:ThemeComponentSelectionControl>
|
||||
</StackPanel>
|
||||
</DataTemplate>
|
||||
|
||||
<!-- Custom Sound Template -->
|
||||
|
|
|
@ -90,10 +90,6 @@ namespace Filtration.UserControls
|
|||
"ShFusing", "ShRegal", "ShVaal"
|
||||
};
|
||||
|
||||
public List<string> IconsAvailable => new List<string> {
|
||||
"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;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
mc:Ignorable="d">
|
||||
|
||||
<UserControl.Resources>
|
||||
<Converters:DropIconConverter x:Key="DropIconConverter"/>
|
||||
<Converters:SizeColorToRectConverter x:Key="DropIconConverter"/>
|
||||
</UserControl.Resources>
|
||||
|
||||
<Grid>
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
d:DataContext="{d:DesignInstance Type=userControls:ItemPreviewControl}"
|
||||
d:DesignHeight="35" d:DesignWidth="170">
|
||||
<Border BorderBrush="Black" BorderThickness="1">
|
||||
<Grid Width="166" Height="39">
|
||||
<Grid Width="200" Height="39">
|
||||
<Image Source="pack://application:,,,/resources/groundtile.png" Stretch="Fill" />
|
||||
<Grid>
|
||||
<Grid.RowDefinitions>
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -67,6 +67,14 @@
|
|||
<DataTemplate DataType="{x:Type themeEditor:StringThemeComponent}">
|
||||
<!--TODO: How to show theese?-->
|
||||
</DataTemplate>
|
||||
|
||||
<DataTemplate DataType="{x:Type themeEditor:IconThemeComponent}">
|
||||
<!--TODO: How to show theese?-->
|
||||
</DataTemplate>
|
||||
|
||||
<DataTemplate DataType="{x:Type themeEditor:EffectColorThemeComponent}">
|
||||
<!--TODO: How to show theese?-->
|
||||
</DataTemplate>
|
||||
</ContentControl.Resources>
|
||||
</ContentControl>
|
||||
</Grid>
|
||||
|
|
|
@ -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<SoundBlockItem>();
|
||||
public bool HasPositionalSound => Block.HasBlockItemOfType<PositionalSoundBlockItem>();
|
||||
|
@ -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));
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<Window x:Class="Filtration.Views.AboutWindow"
|
||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:extensions="clr-namespace:Filtration.Extensions"
|
||||
xmlns:extensions="clr-namespace:Filtration.Common.Extensions;assembly=Filtration.Common"
|
||||
Title="About Filtration"
|
||||
Height="360"
|
||||
Width="580"
|
||||
|
|
|
@ -18,7 +18,8 @@
|
|||
<ResourceDictionary>
|
||||
<views:BindingProxy x:Key="Proxy" Data="{Binding}" />
|
||||
<converters:BlockGroupAdvancedFillColorConverter x:Key="BlockGroupAdvancedFillColorConverter" />
|
||||
<converters:DropIconConverter x:Key="DropIconConverter"/>
|
||||
<converters:IconShapeToSourceConverter x:Key="IconShapeToSourceConverter"/>
|
||||
<converters:SizeColorToRectConverter x:Key="SizeColorToRectConverter"/>
|
||||
<Style TargetType="{x:Type ContentPresenter}" x:Key="BlockItemFadeInStyle">
|
||||
<Setter Property="LayoutTransform">
|
||||
<Setter.Value>
|
||||
|
@ -131,12 +132,19 @@
|
|||
|
||||
<!-- Item Preview Box -->
|
||||
<WrapPanel Grid.Row="0" Grid.Column="2" VerticalAlignment="Center">
|
||||
<Image Source="{Binding DisplayIcon, Converter={StaticResource DropIconConverter}, Mode=OneWay}" Width="30" Height="30" Margin="0,0,10,0" />
|
||||
<Line Y2="41" StrokeThickness="2" Stroke="{Binding DisplayBeamColor, Converter={StaticResource ColorToSolidColorBrushConverter}, Mode=OneWay}" Margin="0,2,10,0" >
|
||||
<Line.Effect>
|
||||
<DropShadowEffect BlurRadius="5" ShadowDepth="0" Color="{Binding DisplayBeamColor, Mode=OneWay}" Direction="0"/>
|
||||
</Line.Effect>
|
||||
</Line>
|
||||
<Rectangle Height="40" Width="40" Margin="0,0,10,0">
|
||||
<Rectangle.Fill>
|
||||
<ImageBrush ImageSource="{Binding DisplayIconShape, Converter={StaticResource IconShapeToSourceConverter}, Mode=OneWay}"
|
||||
ViewboxUnits="Absolute" Stretch="Fill">
|
||||
<ImageBrush.Viewbox>
|
||||
<MultiBinding Converter="{StaticResource SizeColorToRectConverter}">
|
||||
<Binding Path="DisplayIconSize"/>
|
||||
<Binding Path="DisplayIconColor"/>
|
||||
</MultiBinding>
|
||||
</ImageBrush.Viewbox>
|
||||
</ImageBrush>
|
||||
</Rectangle.Fill>
|
||||
</Rectangle>
|
||||
<Button Command="{Binding PlaySoundCommand}"
|
||||
Width="25"
|
||||
Height="25"
|
||||
|
@ -173,7 +181,14 @@
|
|||
ToolTip="Click to preview drop sound">
|
||||
<Image Source="/Filtration;component/Resources/Icons/speaker_icon.png" VerticalAlignment="Center" HorizontalAlignment="Center" />
|
||||
</Button>
|
||||
<ToggleButton Margin="0,2,2,2"
|
||||
<Line Y1="5" Y2="38" StrokeThickness="2" Panel.ZIndex="999"
|
||||
Stroke="{Binding DisplayEffectColor, Converter={StaticResource ColorToSolidColorBrushConverter}, Mode=OneWay}"
|
||||
Margin="10,2,0,0" >
|
||||
<Line.Effect>
|
||||
<DropShadowEffect BlurRadius="5" ShadowDepth="0" Color="{Binding DisplayEffectColor, Mode=OneWay}" Direction="0"/>
|
||||
</Line.Effect>
|
||||
</Line>
|
||||
<ToggleButton Margin="-10,2,2,2"
|
||||
Style="{StaticResource ChromelessToggleButton}"
|
||||
x:Name="ItemPreviewButton"
|
||||
IsChecked="{Binding AudioVisualBlockItemsGridVisible}"
|
||||
|
|
|
@ -132,6 +132,8 @@
|
|||
<fluent:Button SizeDefinition="Middle" Header="Add Font Size" Icon="{StaticResource AddIcon}" Command="{Binding AddFontSizeThemeComponentCommand}" />
|
||||
<fluent:Button SizeDefinition="Middle" Header="Add Alert Sound" Icon="{StaticResource AddIcon}" Command="{Binding AddAlertSoundThemeComponentCommand}" />
|
||||
<fluent:Button SizeDefinition="Middle" Header="Add Custom Sound" Icon="{StaticResource AddIcon}" Command="{Binding AddCustomSoundThemeComponentCommand}" />
|
||||
<fluent:Button SizeDefinition="Middle" Header="Add Icon" Icon="{StaticResource AddIcon}" Command="{Binding AddIconThemeComponentCommand}" />
|
||||
<fluent:Button SizeDefinition="Middle" Header="Add Effect Color" Icon="{StaticResource AddIcon}" Command="{Binding AddEffectColorThemeComponentCommand}" />
|
||||
</fluent:RibbonGroupBox>
|
||||
<fluent:RibbonGroupBox Header="Delete">
|
||||
<fluent:Button Header="Delete Theme Component" Icon="{StaticResource ThemeComponentDeleteIcon}" LargeIcon="{StaticResource ThemeComponentDeleteIcon}" Command="{Binding DeleteThemeComponentCommand}" />
|
||||
|
|