21 Commits

Author SHA1 Message Date
Ben Wallis
042e5b41f9 Removed test projects from SquirrelReleasify build config 2018-12-05 12:42:47 +00:00
Ben Wallis
5fc260dbb2 Bumped version to 1.1.0-beta5 2018-12-05 12:42:01 +00:00
Ben Wallis
3de33e9447 Added .log as excluded filetype for installer 2018-12-05 12:33:34 +00:00
Ben Wallis
37ad9ac42e Fixed AlertSounds not being included in installer 2018-12-05 12:32:28 +00:00
Glen M
fbd02702b0 Add enable/disable DropSound buttons. (#112)
* Add enable/disable DropSound buttons.

* Add undo/redo support for the DisableSound commands.
2018-12-05 12:31:47 +00:00
Ben Wallis
a20c988380 Bumped version to 1.1.0-beta4 2018-12-05 07:04:35 +00:00
Glen M
7ce5aaa861 Support for Path of Exile 3.5 and Betrayal league. (#108)
* Fix #107 by pulling SortOrder form an enum.
* Add initial support for the Prophecy block item.
* Update the static data.
* Hook Prophecy data into the static data service.
* Fill out the initial prophecy data.
2018-12-05 06:59:10 +00:00
Glen M
4b6cee9d94 Add a few missing item classes. (#106) 2018-12-04 19:30:25 +00:00
Ben Wallis
6fb0ec8084 Fixed EditableListBoxControl mouse wheel scrolling 2018-12-03 17:41:44 +00:00
Ben Wallis
a13dc44a7d Added comments 2018-12-03 16:31:19 +00:00
Ben Wallis
05b729edf8 Fixed ScrollViewer in ItemFilterBlockView handling mouse wheel events (#105) 2018-12-03 16:28:22 +00:00
Ben Wallis
876e98437e Shortened/fixed SummaryText for several block items 2018-12-02 21:51:19 +00:00
Ben Wallis
30e76e333c * Bumped version to 1.1.0-beta3
* Fixed Switch to Appearance/Regular Block Items text overlapping block item controls
* Added Enable/Disable toggle button to Appearance block items control
* Added horizontal scrollbar to block items view
* Moved Enable/Disable toggle button to separate user control(previously it was only visible when viewing Regular block items)
* Added DesignTimeItemFilterBlockViewModel
2018-12-02 21:36:01 +00:00
Glen M
f840fb69ad Throttle selections to improve Select All performance. (#104)
Throttle selections to improve Select All performance in ItemFilterScriptViewModel.
2018-12-02 16:30:50 +00:00
Ben Wallis
ae98c2d5de Bumped version to 1.1.0-beta2 2018-11-28 22:29:52 +00:00
Ben Wallis
ba6d50cf45 * Added auto-expand sections on open setting
* Changed all sections to be expanded unless the new setting is disabled
* Tidied up some casting in ItemFilterScriptViewModel by using pattern matching
2018-11-28 22:28:21 +00:00
Ben Wallis
6838cb12a8 Fixed a crash when loading filters with custom sounds 2018-11-28 22:03:27 +00:00
Ben Wallis
fd2023598b #83 - Fixed theme serialization 2018-11-28 21:50:42 +00:00
Ben Wallis
e3b1a5dba7 Updated nuspec release notes 2018-11-27 21:56:20 +00:00
Ben Wallis
25c25c2a1d * Removed incorrect use of async method in MainWindowViewModel constructor
* Moved script/theme loading code to new ScriptLoadingService class
2018-11-27 21:48:36 +00:00
Ben Wallis
e5386132c3 Updated Squirrel from 1.8.0 to 1.9.0 2018-11-27 21:34:58 +00:00
91 changed files with 2298 additions and 1186 deletions

View File

@@ -1,39 +1,39 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Xceed.Wpf.AvalonDock" publicKeyToken="3e4669d2f30244f4" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-3.4.0.0" newVersion="3.4.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="ControlzEx" publicKeyToken="f08b075e934b7045" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.2.0.4" newVersion="2.2.0.4" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Xceed.Wpf.Toolkit" publicKeyToken="3e4669d2f30244f4" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.9.0.0" newVersion="2.9.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.ValueTuple" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.3.0" newVersion="4.0.3.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Threading.Tasks.Extensions" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.2.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="CommonServiceLocator" publicKeyToken="489b6accfaf20ef0" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.0.4.0" newVersion="2.0.4.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.4.1" newVersion="4.0.4.1" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Windows.Interactivity" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.5.0.0" newVersion="4.5.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Xceed.Wpf.AvalonDock" publicKeyToken="3e4669d2f30244f4" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-3.4.0.0" newVersion="3.4.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="ControlzEx" publicKeyToken="f08b075e934b7045" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.2.0.4" newVersion="2.2.0.4" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Xceed.Wpf.Toolkit" publicKeyToken="3e4669d2f30244f4" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.9.0.0" newVersion="2.9.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.ValueTuple" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.3.0" newVersion="4.0.3.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Threading.Tasks.Extensions" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.2.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="CommonServiceLocator" publicKeyToken="489b6accfaf20ef0" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.0.4.0" newVersion="2.0.4.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.4.1" newVersion="4.0.4.1" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Windows.Interactivity" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.5.0.0" newVersion="4.5.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>

View File

@@ -41,8 +41,8 @@ namespace Filtration.ObjectModel.BlockItemBaseTypes
public override Color SummaryTextColor => Action == BlockAction.Show ? Colors.Black : Colors.White;
public override int SortOrder => 0;
public override BlockItemOrdering SortOrder => BlockItemOrdering.Action;
public void ToggleAction()
{
Action = Action == BlockAction.Show ? BlockAction.Hide : BlockAction.Show;

View File

@@ -2,6 +2,7 @@
using System.Runtime.CompilerServices;
using System.Windows.Media;
using Filtration.ObjectModel.Annotations;
using Filtration.ObjectModel.Enums;
namespace Filtration.ObjectModel.BlockItemBaseTypes
{
@@ -16,7 +17,7 @@ namespace Filtration.ObjectModel.BlockItemBaseTypes
public abstract string SummaryText { get; }
public abstract Color SummaryBackgroundColor { get; }
public abstract Color SummaryTextColor { get; }
public abstract int SortOrder { get; }
public abstract BlockItemOrdering SortOrder { get; }
public string Comment { get; set; }
public bool IsDirty
@@ -30,7 +31,7 @@ namespace Filtration.ObjectModel.BlockItemBaseTypes
}
public event PropertyChangedEventHandler PropertyChanged;
[NotifyPropertyChangedInvocator]
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{

View File

@@ -27,7 +27,7 @@
}
public override string OutputText => PrefixText + " " + BooleanValue;
public override string SummaryText => PrefixText + " = " + BooleanValue;
public override string SummaryText => DisplayHeading + " = " + BooleanValue;
public override int MaximumAllowed => 1;
public void ToggleValue()

View File

@@ -1,4 +1,5 @@
using System.Windows.Media;
using Filtration.ObjectModel.Enums;
using Filtration.ObjectModel.BlockItemBaseTypes;
namespace Filtration.ObjectModel.BlockItemTypes
@@ -17,6 +18,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 => 23;
public override BlockItemOrdering SortOrder => BlockItemOrdering.SetBackgroundColor;
}
}

View File

@@ -1,6 +1,7 @@
using System.Linq;
using System.Windows.Media;
using Filtration.ObjectModel.BlockItemBaseTypes;
using Filtration.ObjectModel.Enums;
namespace Filtration.ObjectModel.BlockItemTypes
{
@@ -16,23 +17,23 @@ namespace Filtration.ObjectModel.BlockItemTypes
{
if (Items.Count > 0 && Items.Count < 4)
{
return "Item Base Types: " +
return "Base Types: " +
Items.Aggregate(string.Empty, (current, i) => current + i + ", ").TrimEnd(' ').TrimEnd(',');
}
if (Items.Count >= 4)
{
var remaining = Items.Count - 3;
return "Item Base Types: " + Items.Take(3)
return "Base Types: " + Items.Take(3)
.Aggregate(string.Empty, (current, i) => current + i + ", ")
.TrimEnd(' ')
.TrimEnd(',') + " (+" + remaining + " more)";
}
return "Item Base Types: (none)";
return "Base Types: (none)";
}
}
public override Color SummaryBackgroundColor => Colors.MediumTurquoise;
public override Color SummaryTextColor => Colors.Black;
public override int SortOrder => 20;
public override BlockItemOrdering SortOrder => BlockItemOrdering.BaseType;
}
}

View File

@@ -1,5 +1,6 @@
using System.Windows.Media;
using Filtration.ObjectModel.BlockItemBaseTypes;
using Filtration.ObjectModel.Enums;
namespace Filtration.ObjectModel.BlockItemTypes
{
@@ -17,6 +18,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 => 24;
public override BlockItemOrdering SortOrder => BlockItemOrdering.SetBorderColor;
}
}

View File

@@ -1,6 +1,7 @@
using System.Linq;
using System.Windows.Media;
using Filtration.ObjectModel.BlockItemBaseTypes;
using Filtration.ObjectModel.Enums;
namespace Filtration.ObjectModel.BlockItemTypes
{
@@ -16,23 +17,23 @@ namespace Filtration.ObjectModel.BlockItemTypes
{
if (Items.Count > 0 && Items.Count < 4)
{
return "Item Classes: " +
return "Classes: " +
Items.Aggregate(string.Empty, (current, i) => current + i + ", ").TrimEnd(' ').TrimEnd(',');
}
if (Items.Count >= 4)
{
var remaining = Items.Count - 3;
return "Item Classes: " + Items.Take(3)
return "Classes: " + Items.Take(3)
.Aggregate(string.Empty, (current, i) => current + i + ", ")
.TrimEnd(' ')
.TrimEnd(',') + " (+" + remaining + " more)";
}
return "Item Classes: (none)";
return "Classes: (none)";
}
}
public override Color SummaryBackgroundColor => Colors.MediumSeaGreen;
public override Color SummaryTextColor => Colors.White;
public override int SortOrder => 19;
public override BlockItemOrdering SortOrder => BlockItemOrdering.Class;
}
}

View File

@@ -1,5 +1,6 @@
using System.Windows.Media;
using Filtration.ObjectModel.BlockItemBaseTypes;
using Filtration.ObjectModel.Enums;
namespace Filtration.ObjectModel.BlockItemTypes
{
@@ -17,7 +18,6 @@ namespace Filtration.ObjectModel.BlockItemTypes
public override string DisplayHeading => "Corrupted";
public override Color SummaryBackgroundColor => Colors.DarkRed;
public override Color SummaryTextColor => Colors.White;
public override int SortOrder => 5;
public override BlockItemOrdering SortOrder => BlockItemOrdering.Corrupted;
}
}

View File

@@ -1,4 +1,5 @@
using Filtration.ObjectModel.BlockItemBaseTypes;
using Filtration.ObjectModel.Enums;
namespace Filtration.ObjectModel.BlockItemTypes
{
@@ -16,6 +17,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 => 31;
public override BlockItemOrdering SortOrder => BlockItemOrdering.CustomAlertSound;
}
}

View File

@@ -1,5 +1,6 @@
using System.Windows.Media;
using Filtration.ObjectModel.BlockItemBaseTypes;
using Filtration.ObjectModel.Enums;
namespace Filtration.ObjectModel.BlockItemTypes
{
@@ -17,7 +18,6 @@ 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 => 28;
public override BlockItemOrdering SortOrder => BlockItemOrdering.DisableDropSound;
}
}

View File

@@ -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 => 15;
public override BlockItemOrdering SortOrder => BlockItemOrdering.DropLevel;
public override int Minimum => 0;
public override int Maximum => 100;
}

View File

@@ -1,5 +1,6 @@
using System.Windows.Media;
using Filtration.ObjectModel.BlockItemBaseTypes;
using Filtration.ObjectModel.Enums;
namespace Filtration.ObjectModel.BlockItemTypes
{
@@ -17,7 +18,6 @@ namespace Filtration.ObjectModel.BlockItemTypes
public override string DisplayHeading => "Elder Item";
public override Color SummaryBackgroundColor => Colors.DarkGray;
public override Color SummaryTextColor => Colors.White;
public override int SortOrder => 6;
public override BlockItemOrdering SortOrder => BlockItemOrdering.ElderItem;
}
}

View File

@@ -1,5 +1,6 @@
using System.Windows.Media;
using Filtration.ObjectModel.BlockItemBaseTypes;
using Filtration.ObjectModel.Enums;
namespace Filtration.ObjectModel.BlockItemTypes
{
@@ -17,7 +18,6 @@ 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 => 10;
public override BlockItemOrdering SortOrder => BlockItemOrdering.ElderMap;
}
}

View File

@@ -1,4 +1,5 @@
using Filtration.ObjectModel.BlockItemBaseTypes;
using Filtration.ObjectModel.Enums;
namespace Filtration.ObjectModel.BlockItemTypes
{
@@ -16,7 +17,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 => 25;
public override BlockItemOrdering SortOrder => BlockItemOrdering.SetFontSize;
public override int Minimum => 11;
public override int Maximum => 45;
}

View File

@@ -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 => 16;
public override BlockItemOrdering SortOrder => BlockItemOrdering.GemLevel;
public override int Minimum => 0;
public override int Maximum => 21;
}

View File

@@ -1,6 +1,7 @@
using System.Linq;
using System.Windows.Media;
using Filtration.ObjectModel.BlockItemBaseTypes;
using Filtration.ObjectModel.Enums;
namespace Filtration.ObjectModel.BlockItemTypes
{
@@ -16,23 +17,23 @@ namespace Filtration.ObjectModel.BlockItemTypes
{
if (Items.Count > 0 && Items.Count < 4)
{
return "Item Explicit Mods: " +
return "Explicit Mods: " +
Items.Aggregate(string.Empty, (current, i) => current + i + ", ").TrimEnd(' ').TrimEnd(',');
}
if (Items.Count >= 4)
{
var remaining = Items.Count - 3;
return "Item Explicit Mods: " + Items.Take(3)
return "Explicit Mods: " + Items.Take(3)
.Aggregate(string.Empty, (current, i) => current + i + ", ")
.TrimEnd(' ')
.TrimEnd(',') + " (+" + remaining + " more)";
}
return "Item Explicit Mods: (none)";
return "Explicit Mods: (none)";
}
}
public override Color SummaryBackgroundColor => Colors.MidnightBlue;
public override Color SummaryTextColor => Colors.White;
public override int SortOrder => 21;
public override BlockItemOrdering SortOrder => BlockItemOrdering.HasExplicitMod;
}
}

View File

@@ -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 => 12;
public override BlockItemOrdering SortOrder => BlockItemOrdering.Height;
public override int Minimum => 0;
public override int Maximum => 6;
}

View File

@@ -1,5 +1,6 @@
using System.Windows.Media;
using Filtration.ObjectModel.BlockItemBaseTypes;
using Filtration.ObjectModel.Enums;
namespace Filtration.ObjectModel.BlockItemTypes
{
@@ -17,7 +18,6 @@ namespace Filtration.ObjectModel.BlockItemTypes
public override string DisplayHeading => "Identified";
public override Color SummaryBackgroundColor => Colors.DarkSlateGray;
public override Color SummaryTextColor => Colors.White;
public override int SortOrder => 4;
public override BlockItemOrdering SortOrder => BlockItemOrdering.Identified;
}
}

View File

@@ -13,14 +13,14 @@ namespace Filtration.ObjectModel.BlockItemTypes
public ItemLevelBlockItem(FilterPredicateOperator predicateOperator, int predicateOperand) : base (predicateOperator, predicateOperand)
{
}
public override string PrefixText => "ItemLevel";
public override int MaximumAllowed => 2;
public override string DisplayHeading => "Item Level";
public override string SummaryText => "Item Level " + FilterPredicate;
public override Color SummaryBackgroundColor => Colors.DarkSlateGray;
public override Color SummaryTextColor => Colors.White;
public override int SortOrder => 14;
public override BlockItemOrdering SortOrder => BlockItemOrdering.ItemLevel;
public override int Minimum => 0;
public override int Maximum => 100;
}

View File

@@ -21,7 +21,7 @@ namespace Filtration.ObjectModel.BlockItemTypes
public override string SummaryText => "Linked Sockets " + FilterPredicate;
public override Color SummaryBackgroundColor => Colors.Gold;
public override Color SummaryTextColor => Colors.Black;
public override int SortOrder => 1;
public override BlockItemOrdering SortOrder => BlockItemOrdering.LinkedSockets;
public override int Minimum => 0;
public override int Maximum => 6;
}

View File

@@ -19,6 +19,6 @@ namespace Filtration.ObjectModel.BlockItemTypes
public override string PrefixText => "MinimapIcon";
public override int MaximumAllowed => 1;
public override string DisplayHeading => "Minimap Icon";
public override int SortOrder => 29;
public override BlockItemOrdering SortOrder => BlockItemOrdering.MinimapIcon;
}
}

View File

@@ -21,7 +21,7 @@ namespace Filtration.ObjectModel.BlockItemTypes
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 BlockItemOrdering SortOrder => BlockItemOrdering.MapTier;
public override int Minimum => 1;
public override int Maximum => 16;
}

View File

@@ -18,6 +18,6 @@ namespace Filtration.ObjectModel.BlockItemTypes
public override string PrefixText => "PlayEffect";
public override int MaximumAllowed => 1;
public override string DisplayHeading => "Play Effect";
public override int SortOrder => 30;
public override BlockItemOrdering SortOrder => BlockItemOrdering.PlayEffect;
}
}

View File

@@ -1,4 +1,5 @@
using Filtration.ObjectModel.BlockItemBaseTypes;
using Filtration.ObjectModel.Enums;
namespace Filtration.ObjectModel.BlockItemTypes
{
@@ -17,6 +18,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 => 27;
public override BlockItemOrdering SortOrder => BlockItemOrdering.PlayAlertSoundPositional;
}
}

View File

@@ -0,0 +1,39 @@
using System.Linq;
using System.Windows.Media;
using Filtration.ObjectModel.BlockItemBaseTypes;
using Filtration.ObjectModel.Enums;
namespace Filtration.ObjectModel.BlockItemTypes
{
public class ProphecyBlockItem : StringListBlockItem
{
public override string PrefixText => "Prophecy";
public override int MaximumAllowed => 1;
public override string DisplayHeading => "Prophecy";
public override string SummaryText
{
get
{
if (Items.Count > 0 && Items.Count < 4)
{
return "Prophecies: " +
Items.Aggregate(string.Empty, (current, i) => current + i + ", ").TrimEnd(' ').TrimEnd(',');
}
if (Items.Count >= 4)
{
var remaining = Items.Count - 3;
return "Prophecies: " + Items.Take(3)
.Aggregate(string.Empty, (current, i) => current + i + ", ")
.TrimEnd(' ')
.TrimEnd(',') + " (+" + remaining + " more)";
}
return "Prophecies: (none)";
}
}
public override Color SummaryBackgroundColor => Colors.DarkMagenta;
public override Color SummaryTextColor => Colors.White;
public override BlockItemOrdering SortOrder => BlockItemOrdering.Prophecy;
}
}

View File

@@ -9,7 +9,7 @@ namespace Filtration.ObjectModel.BlockItemTypes
public QualityBlockItem()
{
}
public QualityBlockItem(FilterPredicateOperator predicateOperator, int predicateOperand)
: base(predicateOperator, predicateOperand)
{
@@ -21,7 +21,7 @@ namespace Filtration.ObjectModel.BlockItemTypes
public override string SummaryText => "Quality " + FilterPredicate;
public override Color SummaryBackgroundColor => Colors.DarkOrange;
public override Color SummaryTextColor => Colors.White;
public override int SortOrder => 3;
public override BlockItemOrdering SortOrder => BlockItemOrdering.Quality;
public override int Minimum => 0;
public override int Maximum => 30;
}

View File

@@ -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 => 18;
public override BlockItemOrdering SortOrder => BlockItemOrdering.Rarity;
public override int Minimum => 0;
public override int Maximum => (int)ItemRarity.Unique;
}

View File

@@ -1,5 +1,6 @@
using System.Windows.Media;
using Filtration.ObjectModel.BlockItemBaseTypes;
using Filtration.ObjectModel.Enums;
namespace Filtration.ObjectModel.BlockItemTypes
{
@@ -17,7 +18,6 @@ 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 => 9;
public override BlockItemOrdering SortOrder => BlockItemOrdering.ShapedMap;
}
}

View File

@@ -1,5 +1,6 @@
using System.Windows.Media;
using Filtration.ObjectModel.BlockItemBaseTypes;
using Filtration.ObjectModel.Enums;
namespace Filtration.ObjectModel.BlockItemTypes
{
@@ -17,7 +18,6 @@ namespace Filtration.ObjectModel.BlockItemTypes
public override string DisplayHeading => "Shaper Item";
public override Color SummaryBackgroundColor => Colors.DimGray;
public override Color SummaryTextColor => Colors.White;
public override int SortOrder => 7;
public override BlockItemOrdering SortOrder => BlockItemOrdering.ShaperItem;
}
}

View File

@@ -11,7 +11,7 @@ namespace Filtration.ObjectModel.BlockItemTypes
{
public SocketGroupBlockItem()
{
}
public override string PrefixText => "SocketGroup";
@@ -39,7 +39,7 @@ namespace Filtration.ObjectModel.BlockItemTypes
public override Color SummaryBackgroundColor => Colors.GhostWhite;
public override Color SummaryTextColor => Colors.Black;
public override int SortOrder => 11;
public override BlockItemOrdering SortOrder => BlockItemOrdering.SocketGroup;
private SocketColor StringToSocketColor(char socketColorString)
{

View File

@@ -21,7 +21,7 @@ namespace Filtration.ObjectModel.BlockItemTypes
public override string SummaryText => "Sockets " + FilterPredicate;
public override Color SummaryBackgroundColor => Colors.LightGray;
public override Color SummaryTextColor => Colors.Black;
public override int SortOrder => 2;
public override BlockItemOrdering SortOrder => BlockItemOrdering.Sockets;
public override int Minimum => 0;
public override int Maximum => 6;
}

View File

@@ -1,4 +1,5 @@
using Filtration.ObjectModel.BlockItemBaseTypes;
using Filtration.ObjectModel.Enums;
namespace Filtration.ObjectModel.BlockItemTypes
{
@@ -17,6 +18,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 => 26;
public override BlockItemOrdering SortOrder => BlockItemOrdering.PlayAlertSound;
}
}

View File

@@ -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 => 17;
public override BlockItemOrdering SortOrder => BlockItemOrdering.StackSize;
public override int Minimum => 0;
public override int Maximum => 1000;
}

View File

@@ -18,6 +18,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 => 22;
public override BlockItemOrdering SortOrder => BlockItemOrdering.SetTextColor;
}
}

View File

@@ -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 => 13;
public override BlockItemOrdering SortOrder => BlockItemOrdering.Width;
public override int Minimum => 0;
public override int Maximum => 2;
}

View File

@@ -0,0 +1,42 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Collections.ObjectModel;
namespace Filtration.ObjectModel.Commands.ItemFilterScript
{
public class AddBlockItemToBlocksCommand : IUndoableCommand
{
private readonly List<Tuple<ObservableCollection<IItemFilterBlockItem>, IItemFilterBlockItem>> _input;
public AddBlockItemToBlocksCommand(List<Tuple<ObservableCollection<IItemFilterBlockItem>, IItemFilterBlockItem>> input)
{
_input = input;
}
public void Execute()
{
foreach (var v in _input)
{
var blockItems = v.Item1;
var item = v.Item2;
blockItems.Add(item);
}
}
public void Undo()
{
foreach (var v in _input)
{
var blockItems = v.Item1;
var item = v.Item2;
blockItems.Remove(item);
}
}
public void Redo() => Execute();
}
}

View File

@@ -0,0 +1,48 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Collections.ObjectModel;
namespace Filtration.ObjectModel.Commands.ItemFilterScript
{
public class RemoveBlockItemFromBlocksCommand : IUndoableCommand
{
private readonly List<Tuple<ObservableCollection<IItemFilterBlockItem>, IItemFilterBlockItem>> _input;
public RemoveBlockItemFromBlocksCommand(List<Tuple<ObservableCollection<IItemFilterBlockItem>, IItemFilterBlockItem>> input)
{
_input = input;
}
public void Execute()
{
foreach (var pair in _input)
{
var blockItems = pair.Item1;
var blockItem = pair.Item2;
for (var i = 0; i < blockItems.Count; i++)
{
if (blockItems[i] == blockItem)
{
blockItems.RemoveAt(i--);
}
}
}
}
public void Undo()
{
foreach (var pair in _input)
{
var blockItems = pair.Item1;
var blockItem = pair.Item2;
blockItems.Add(blockItem);
}
}
public void Redo() => Execute();
}
}

View File

@@ -0,0 +1,41 @@
using System.ComponentModel;
namespace Filtration.ObjectModel.Enums
{
public enum BlockItemOrdering
{
Action,
LinkedSockets,
Sockets,
Quality,
Identified,
Corrupted,
ElderItem,
ShaperItem,
MapTier,
ShapedMap,
ElderMap,
SocketGroup,
Height,
Width,
ItemLevel,
DropLevel,
GemLevel,
StackSize,
Rarity,
Class,
BaseType,
Prophecy,
HasExplicitMod,
SetTextColor,
SetBackgroundColor,
SetBorderColor,
SetFontSize,
PlayAlertSound,
PlayAlertSoundPositional,
DisableDropSound,
MinimapIcon,
PlayEffect,
CustomAlertSound
}
}

View File

@@ -8,6 +8,7 @@
Rarity,
Class,
BaseType,
Prophecy,
Sockets,
LinkedSockets,
SocketGroup,

View File

@@ -92,6 +92,7 @@
<Compile Include="BlockItemTypes\GemLevelBlockItem.cs" />
<Compile Include="BlockItemTypes\HasExplicitModBlockItem.cs" />
<Compile Include="BlockItemTypes\MapIconBlockItem.cs" />
<Compile Include="BlockItemTypes\ProphecyBlockItem.cs" />
<Compile Include="BlockItemTypes\ShapedMapBlockItem.cs" />
<Compile Include="BlockItemTypes\ShaperItemBlockItem.cs" />
<Compile Include="BlockItemTypes\ElderItemBlockItem.cs" />
@@ -113,16 +114,19 @@
<Compile Include="BlockItemTypes\WidthBlockItem.cs" />
<Compile Include="Commands\CommandManager.cs" />
<Compile Include="Commands\ICommand.cs" />
<Compile Include="Commands\ItemFilterScript\AddBlockItemToBlocksCommand.cs" />
<Compile Include="Commands\ItemFilterScript\MoveBlocksToIndexCommand.cs" />
<Compile Include="Commands\ItemFilterScript\MoveBlocksToBottomCommand.cs" />
<Compile Include="Commands\ItemFilterScript\AddCommentBlockCommand.cs" />
<Compile Include="Commands\ItemFilterScript\MoveBlocksToTopCommand.cs" />
<Compile Include="Commands\ItemFilterScript\PasteBlocksCommand.cs" />
<Compile Include="Commands\ItemFilterScript\RemoveBlockItemFromBlocksCommand.cs" />
<Compile Include="Commands\ItemFilterScript\RemoveBlocksCommand.cs" />
<Compile Include="Commands\ItemFilterScript\SetScriptDescriptionCommand.cs" />
<Compile Include="Commands\ItemFilterScript\AddBlockCommand.cs" />
<Compile Include="Commands\IUndoableCommand.cs" />
<Compile Include="Enums\BlockAction.cs" />
<Compile Include="Enums\BlockItemOrdering.cs" />
<Compile Include="Enums\BlockItemType.cs" />
<Compile Include="Enums\EffectColor.cs" />
<Compile Include="Enums\FilterPredicateOperator.cs" />

View File

@@ -1,5 +1,6 @@
using System.ComponentModel;
using System.Windows.Media;
using Filtration.ObjectModel.Enums;
namespace Filtration.ObjectModel
{
@@ -12,7 +13,7 @@ namespace Filtration.ObjectModel
Color SummaryBackgroundColor { get; }
Color SummaryTextColor { get; }
int MaximumAllowed { get; }
int SortOrder { get; }
BlockItemOrdering SortOrder { get; }
bool IsDirty { get; }
string Comment { get; set; }
}

View File

@@ -9,6 +9,10 @@ namespace Filtration.ObjectModel.ThemeEditor
{
private Color _color;
private ColorThemeComponent()
{
}
public ColorThemeComponent(ThemeComponentType componentType, string componentName, Color componentColor)
{
if (componentName == null || componentColor == null)
@@ -23,7 +27,7 @@ namespace Filtration.ObjectModel.ThemeEditor
public Color Color
{
get { return _color; }
get => _color;
set
{
_color = value;

View File

@@ -9,22 +9,21 @@ namespace Filtration.ObjectModel.ThemeEditor
private EffectColor _effectColor;
private bool _temporary;
private EffectColorThemeComponent()
{
}
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;
ComponentName = componentName ?? throw new ArgumentException("Null parameters not allowed in EffectColorThemeComponent constructor");
EffectColor = componentEffectColor;
Temporary = componentTemporary;
}
public EffectColor EffectColor
{
get { return _effectColor; }
get => _effectColor;
set
{
_effectColor = value;
@@ -35,7 +34,7 @@ namespace Filtration.ObjectModel.ThemeEditor
public bool Temporary
{
get { return _temporary; }
get => _temporary;
set
{
_temporary = value;

View File

@@ -10,6 +10,10 @@ namespace Filtration.ObjectModel.ThemeEditor
private IconColor _iconColor;
private IconShape _iconShape;
private IconThemeComponent()
{
}
public IconThemeComponent(ThemeComponentType componentType, string componentName, IconSize componentIconSize, IconColor componentIconColor, IconShape componentIconShape)
{
if (componentName == null)
@@ -26,7 +30,7 @@ namespace Filtration.ObjectModel.ThemeEditor
public IconSize IconSize
{
get { return _iconSize; }
get => _iconSize;
set
{
_iconSize = value;
@@ -37,7 +41,7 @@ namespace Filtration.ObjectModel.ThemeEditor
public IconColor IconColor
{
get { return _iconColor; }
get => _iconColor;
set
{
_iconColor = value;
@@ -48,7 +52,7 @@ namespace Filtration.ObjectModel.ThemeEditor
public IconShape IconShape
{
get { return _iconShape; }
get => _iconShape;
set
{
_iconShape = value;

View File

@@ -9,6 +9,10 @@ namespace Filtration.ObjectModel.ThemeEditor
{
private int _value;
private IntegerThemeComponent()
{
}
public IntegerThemeComponent(ThemeComponentType componentType, string componentName, int componentValue)
{
if (componentName == null)
@@ -23,7 +27,7 @@ namespace Filtration.ObjectModel.ThemeEditor
public int Value
{
get { return _value; }
get => _value;
set
{
_value = value;

View File

@@ -9,6 +9,10 @@ namespace Filtration.ObjectModel.ThemeEditor
private string _value;
private int _secondValue;
private StrIntThemeComponent()
{
}
public StrIntThemeComponent(ThemeComponentType componentType, string componentName, string componentValue, int componentSecondValue)
{
if (componentName == null || componentValue == null)
@@ -24,7 +28,7 @@ namespace Filtration.ObjectModel.ThemeEditor
public string Value
{
get { return _value; }
get => _value;
set
{
_value = value;
@@ -35,7 +39,7 @@ namespace Filtration.ObjectModel.ThemeEditor
public int SecondValue
{
get { return _secondValue; }
get => _secondValue;
set
{
_secondValue = value;

View File

@@ -1,6 +1,7 @@
using System;
using System.Collections.ObjectModel;
using System.Linq;
using System.Xml.Serialization;
using Filtration.ObjectModel.Enums;
using GalaSoft.MvvmLight.Command;
using Microsoft.Win32;
@@ -13,6 +14,10 @@ namespace Filtration.ObjectModel.ThemeEditor
private string _value;
public static ObservableCollection<string> _customSoundsAvailable;
private StringThemeComponent()
{
}
public StringThemeComponent(ThemeComponentType componentType, string componentName, string componentValue)
{
if (componentName == null || componentValue == null)
@@ -61,13 +66,14 @@ namespace Filtration.ObjectModel.ThemeEditor
CustomSoundFileDialogCommand = new RelayCommand(OnCustomSoundFileDialog);
}
[XmlIgnore]
public RelayCommand CustomSoundFileDialogCommand { get; set; }
public ObservableCollection<string> CustomSoundsAvailable => _customSoundsAvailable;
public string Value
{
get { return _value; }
get => _value;
set
{
_value = value;
@@ -78,12 +84,11 @@ namespace Filtration.ObjectModel.ThemeEditor
private void OnCustomSoundFileDialog()
{
OpenFileDialog fileDialog = new OpenFileDialog();
fileDialog.DefaultExt = ".mp3";
var poePath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments).ToString() + @"\My Games\Path of Exile\";
OpenFileDialog fileDialog = new OpenFileDialog {DefaultExt = ".mp3"};
var poePath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + @"\My Games\Path of Exile\";
fileDialog.InitialDirectory = poePath;
Nullable<bool> result = fileDialog.ShowDialog();
bool? result = fileDialog.ShowDialog();
if (result == true)
{
var fileName = fileDialog.FileName;

View File

@@ -7,13 +7,17 @@ using Filtration.ObjectModel.Enums;
namespace Filtration.ObjectModel.ThemeEditor
{
[Serializable]
[XmlInclude(typeof(ColorThemeComponent))]
[XmlInclude(typeof(EffectColorThemeComponent))]
[XmlInclude(typeof(IconThemeComponent))]
[XmlInclude(typeof(IntegerThemeComponent))]
[XmlInclude(typeof(StringThemeComponent))]
[XmlInclude(typeof(StrIntThemeComponent))]
public class Theme
{
private readonly ThemeComponentCollection _components;
public Theme()
{
_components = new ThemeComponentCollection { IsMasterCollection = false};
Components = new ThemeComponentCollection { IsMasterCollection = false};
}
public string Name { get; set; }
@@ -21,28 +25,28 @@ namespace Filtration.ObjectModel.ThemeEditor
[XmlIgnore]
public string FilePath { get; set; }
public ThemeComponentCollection Components => _components;
public ThemeComponentCollection Components { get; set; }
public bool ComponentExists(ThemeComponentType componentType, string componentName)
{
var componentCount =
_components.Count(c => c.ComponentName == componentName && c.ComponentType == componentType);
Components.Count(c => c.ComponentName == componentName && c.ComponentType == componentType);
return componentCount > 0;
}
public void AddComponent(ThemeComponentType componentType, string componentName, Color componentColor)
{
_components.Add(new ColorThemeComponent(componentType, componentName, componentColor));
Components.Add(new ColorThemeComponent(componentType, componentName, componentColor));
}
public void AddComponent(ThemeComponentType componentType, string componentName, int componentValue)
{
_components.Add(new IntegerThemeComponent(componentType, componentName, componentValue));
Components.Add(new IntegerThemeComponent(componentType, componentName, componentValue));
}
public void AddComponent(ThemeComponentType componentType, string componentName, string componentValue, int componentSecondValue)
{
_components.Add(new StrIntThemeComponent(componentType, componentName, componentValue, componentSecondValue));
Components.Add(new StrIntThemeComponent(componentType, componentName, componentValue, componentSecondValue));
}
}
}

View File

@@ -119,8 +119,8 @@ namespace Filtration.Parser.Tests.Services
var blockItem = result.BlockItems.OfType<ItemLevelBlockItem>().First();
Assert.AreEqual(55, blockItem.FilterPredicate.PredicateOperand);
Assert.AreEqual(FilterPredicateOperator.GreaterThanOrEqual, blockItem.FilterPredicate.PredicateOperator);
}
}
[Ignore("Update required, ItemFilterBlockTranslator does not set IsShowChecked anymore")]
[Test]
public void TranslateStringToItemFilterBlock_BlockGroupsEnabled_ShowBlock_SetsBlockGroupIsCheckedCorrectly()
@@ -567,6 +567,25 @@ namespace Filtration.Parser.Tests.Services
Assert.Contains("Test BaseType 2", blockItem.Items);
}
[Test]
public void TranslateStringToItemFilterBlock_Prophecy_ReturnsCorrectObject()
{
// Arrange
var inputString = "Show" + Environment.NewLine +
@" Prophecy ""Test Prophecy 1"" ""TestOneWordProphecyInQuotes"" TestOneWordProphecyNotInQuotes ""Test Prophecy 2""";
// Act
var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, _testUtility.MockItemFilterScript);
// Assert
Assert.AreEqual(1, result.BlockItems.Count(b => b is ProphecyBlockItem));
var blockItem = result.BlockItems.OfType<ProphecyBlockItem>().First();
Assert.Contains("Test Prophecy 1", blockItem.Items);
Assert.Contains("TestOneWordProphecyInQuotes", blockItem.Items);
Assert.Contains("TestOneWordProphecyNotInQuotes", blockItem.Items);
Assert.Contains("Test Prophecy 2", blockItem.Items);
}
[Test]
public void TranslateStringToItemFilterBlock_HasExplicitMod_ReturnsCorrectObject()
{
@@ -934,6 +953,7 @@ namespace Filtration.Parser.Tests.Services
" ElderMap False" + Environment.NewLine +
@" Class ""My Item Class"" AnotherClass ""AndAnotherClass""" + Environment.NewLine +
@" BaseType MyBaseType ""Another BaseType""" + Environment.NewLine +
@" Prophecy MyProphecy ""Another Prophecy""" + Environment.NewLine +
@" HasExplicitMod MyMod ""Another Mod""" + Environment.NewLine +
" JunkLine Let's ignore this one!" + Environment.NewLine +
" #Quality Commented out quality line" + Environment.NewLine +
@@ -1008,6 +1028,11 @@ namespace Filtration.Parser.Tests.Services
Assert.Contains("MyBaseType", baseTypeblockItem.Items);
Assert.Contains("Another BaseType", baseTypeblockItem.Items);
var prophecyblockItem = result.BlockItems.OfType<ProphecyBlockItem>().First();
Assert.AreEqual(2, prophecyblockItem.Items.Count);
Assert.Contains("MyProphecy", prophecyblockItem.Items);
Assert.Contains("Another Prophecy", prophecyblockItem.Items);
var hasExplicitModBlockItem = result.BlockItems.OfType<HasExplicitModBlockItem>().First();
Assert.AreEqual(2, hasExplicitModBlockItem.Items.Count);
Assert.Contains("MyMod", hasExplicitModBlockItem.Items);
@@ -1707,6 +1732,26 @@ namespace Filtration.Parser.Tests.Services
Assert.AreEqual(expectedResult, result);
}
[Test]
public void TranslateItemFilterBlockToString_Prophecies_ReturnsCorrectString()
{
// Arrange
var expectedResult = "Show" + Environment.NewLine +
" Prophecy \"Test Prophecy\" \"Another Prophecy\" \"Yet Another Prophecy\"";
var prophecyBlockItem = new ProphecyBlockItem();
prophecyBlockItem.Items.Add("Test Prophecy");
prophecyBlockItem.Items.Add("Another Prophecy");
prophecyBlockItem.Items.Add("Yet Another Prophecy");
_testUtility.TestBlock.BlockItems.Add(prophecyBlockItem);
// Act
var result = _testUtility.Translator.TranslateItemFilterBlockToString(_testUtility.TestBlock);
// Assert
Assert.AreEqual(expectedResult, result);
}
[Test]
public void TranslateItemFilterBlockToString_HasExplicitMod_ReturnsCorrectString()
{
@@ -2013,6 +2058,7 @@ namespace Filtration.Parser.Tests.Services
" Rarity = Unique" + Environment.NewLine +
" Class \"Body Armour\" \"Gloves\" \"Belt\" \"Two Hand Axes\"" + Environment.NewLine +
" BaseType \"Greater Life Flask\" \"Simple Robe\" \"Full Wyrmscale\"" + Environment.NewLine +
" Prophecy \"The Cursed Choir\" \"A Valuable Combination\" \"The Beautiful Guide\"" + Environment.NewLine +
" HasExplicitMod \"Guatelitzi's\" \"of Tacati\" \"Tyrannical\"" + Environment.NewLine +
" SetTextColor 255 89 0 56" + Environment.NewLine +
" SetBackgroundColor 0 0 0" + Environment.NewLine +
@@ -2046,6 +2092,11 @@ namespace Filtration.Parser.Tests.Services
baseTypeItemblockItem.Items.Add("Simple Robe");
baseTypeItemblockItem.Items.Add("Full Wyrmscale");
_testUtility.TestBlock.BlockItems.Add(baseTypeItemblockItem);
var prophecyItemblockItem = new ProphecyBlockItem();
prophecyItemblockItem.Items.Add("The Cursed Choir");
prophecyItemblockItem.Items.Add("A Valuable Combination");
prophecyItemblockItem.Items.Add("The Beautiful Guide");
_testUtility.TestBlock.BlockItems.Add(prophecyItemblockItem);
var hasExplicitModBlockItem = new HasExplicitModBlockItem();
hasExplicitModBlockItem.Items.Add("Guatelitzi's");
hasExplicitModBlockItem.Items.Add("of Tacati");

View File

@@ -46,7 +46,7 @@ namespace Filtration.Parser.Services
return itemFilterCommentBlock;
}
// This method converts a string into a ItemFilterBlock. This is used for pasting ItemFilterBlocks
// This method converts a string into a ItemFilterBlock. This is used for pasting ItemFilterBlocks
// and reading ItemFilterScripts from a file.
public IItemFilterBlock TranslateStringToItemFilterBlock(string inputString, IItemFilterScript parentItemFilterScript, string originalString = "", bool initialiseBlockGroupHierarchyBuilder = false)
{
@@ -159,6 +159,11 @@ namespace Filtration.Parser.Services
AddStringListItemToBlockItems<BaseTypeBlockItem>(block, trimmedLine);
break;
}
case "Prophecy":
{
AddStringListItemToBlockItems<ProphecyBlockItem>(block, trimmedLine);
break;
}
case "Corrupted":
{
AddBooleanItemToBlockItems<CorruptedBlockItem>(block, trimmedLine);
@@ -268,7 +273,7 @@ namespace Filtration.Parser.Services
RemoveExistingBlockItemsOfType<CustomSoundBlockItem>(block);
var match = Regex.Match(trimmedLine, @"\S+\s+(\S+)\s?(\d+)?");
if (match.Success)
{
string firstValue = match.Groups[1].Value;
@@ -329,12 +334,12 @@ namespace Filtration.Parser.Services
{
// Only ever use the last Icon item encountered as multiples aren't valid.
RemoveExistingBlockItemsOfType<MapIconBlockItem>(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 MapIconBlockItem
@@ -359,10 +364,10 @@ namespace Filtration.Parser.Services
{
// Only ever use the last BeamColor item encountered as multiples aren't valid.
RemoveExistingBlockItemsOfType<PlayEffectBlockItem>(block);
// TODO: Get colors programmatically
var match = Regex.Match(trimmedLine, @"\S+\s+(Red|Green|Blue|Brown|White|Yellow)\s*(Temp)?", RegexOptions.IgnoreCase);
if (match.Success)
{
var blockItemValue = new PlayEffectBlockItem
@@ -383,7 +388,7 @@ namespace Filtration.Parser.Services
RemoveExistingBlockItemsOfType<PositionalSoundBlockItem>(block);
var match = Regex.Match(trimmedLine, @"\S+\s+""([^\*\<\>\?|]+)""");
if (match.Success)
{
var blockItemValue = new CustomSoundBlockItem
@@ -510,7 +515,7 @@ namespace Filtration.Parser.Services
private static void AddNumericFilterPredicateItemToBlockItems<T>(IItemFilterBlock block, string inputString) where T : NumericFilterPredicateBlockItem
{
var blockItem = Activator.CreateInstance<T>();
SetNumericFilterPredicateFromString(blockItem.FilterPredicate, inputString);
block.BlockItems.Add(blockItem);
}
@@ -637,10 +642,10 @@ namespace Filtration.Parser.Services
blockItems.Add(blockItem);
break;
}
}
}
}
}
private void AddBlockGroupToBlock(IItemFilterBlock block, string inputString)
{
var blockGroupText = GetTextAfterFirstComment(inputString);
@@ -725,7 +730,7 @@ namespace Filtration.Parser.Services
// Remove trailing newline
return commentWithHashes.TrimEnd('\r', '\n');
}
// This method converts an ItemFilterBlock object into a string. This is used for copying a ItemFilterBlock
// to the clipboard, and when saving a ItemFilterScript.
// TODO: Private

View File

@@ -40,7 +40,12 @@
<Reference Include="FluentAssertions, Version=5.5.3.0, Culture=neutral, PublicKeyToken=33f2691a05b67b6a, processorArchitecture=MSIL">
<HintPath>..\packages\FluentAssertions.5.5.3\lib\net45\FluentAssertions.dll</HintPath>
</Reference>
<Reference Include="Microsoft.WindowsAPICodePack.Shell, Version=1.1.0.0, Culture=neutral, PublicKeyToken=null" />
<Reference Include="Microsoft.WindowsAPICodePack, Version=1.1.2.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\WindowsAPICodePack-Core.1.1.2\lib\Microsoft.WindowsAPICodePack.dll</HintPath>
</Reference>
<Reference Include="Microsoft.WindowsAPICodePack.Shell, Version=1.1.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\WindowsAPICodePack-Shell.1.1.1\lib\Microsoft.WindowsAPICodePack.Shell.dll</HintPath>
</Reference>
<Reference Include="Moq, Version=4.10.0.0, Culture=neutral, PublicKeyToken=69f491c39445e920, processorArchitecture=MSIL">
<HintPath>..\packages\Moq.4.10.0\lib\net45\Moq.dll</HintPath>
</Reference>

View File

@@ -1,9 +1,4 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Filtration.Common.Services;
using Filtration.Common.Services;
using Filtration.Services;
using Microsoft.WindowsAPICodePack.Dialogs;
using Moq;

View File

@@ -1,43 +1,43 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Xceed.Wpf.AvalonDock" publicKeyToken="3e4669d2f30244f4" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-3.4.0.0" newVersion="3.4.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="ControlzEx" publicKeyToken="f08b075e934b7045" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.2.0.4" newVersion="2.2.0.4" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Castle.Core" publicKeyToken="407dd0808d44fbdc" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Xceed.Wpf.Toolkit" publicKeyToken="3e4669d2f30244f4" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.9.0.0" newVersion="2.9.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="CommonServiceLocator" publicKeyToken="489b6accfaf20ef0" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.0.4.0" newVersion="2.0.4.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.ValueTuple" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.3.0" newVersion="4.0.3.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Threading.Tasks.Extensions" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.2.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.4.1" newVersion="4.0.4.1" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Windows.Interactivity" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.5.0.0" newVersion="4.5.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" /></startup></configuration>
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Xceed.Wpf.AvalonDock" publicKeyToken="3e4669d2f30244f4" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-3.4.0.0" newVersion="3.4.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="ControlzEx" publicKeyToken="f08b075e934b7045" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.2.0.4" newVersion="2.2.0.4" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Castle.Core" publicKeyToken="407dd0808d44fbdc" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Xceed.Wpf.Toolkit" publicKeyToken="3e4669d2f30244f4" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.9.0.0" newVersion="2.9.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="CommonServiceLocator" publicKeyToken="489b6accfaf20ef0" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.0.4.0" newVersion="2.0.4.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.ValueTuple" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.3.0" newVersion="4.0.3.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Threading.Tasks.Extensions" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.2.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.4.1" newVersion="4.0.4.1" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Windows.Interactivity" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.5.0.0" newVersion="4.5.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" /></startup></configuration>

View File

@@ -7,4 +7,6 @@
<package id="System.Runtime.CompilerServices.Unsafe" version="4.5.2" targetFramework="net461" />
<package id="System.Threading.Tasks.Extensions" version="4.5.1" targetFramework="net461" />
<package id="System.ValueTuple" version="4.5.0" targetFramework="net461" />
<package id="WindowsAPICodePack-Core" version="1.1.2" targetFramework="net461" />
<package id="WindowsAPICodePack-Shell" version="1.1.1" targetFramework="net461" />
</packages>

View File

@@ -1,445 +1,438 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.1
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Filtration", "Filtration\Filtration.csproj", "{55E0A34C-E039-43D7-A024-A4045401CDDA}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Filtration.Tests", "Filtration.Tests\Filtration.Tests.csproj", "{E0693972-72C5-4E05-A9C5-A5943E4015C6}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Filtration.ObjectModel", "Filtration.ObjectModel\Filtration.ObjectModel.csproj", "{4AAC3BEB-1DC1-483E-9D11-0E9334E80227}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Filtration.ObjectModel.Tests", "Filtration.ObjectModel.Tests\Filtration.ObjectModel.Tests.csproj", "{537BE676-2FF6-4995-B05B-9CFACE852EC9}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Filtration.ThemeEditor", "Filtration.ThemeEditor\Filtration.ThemeEditor.csproj", "{41B8F5C2-65AA-42F0-A20B-6F95B13A9F48}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Filtration.ThemeEditor.Tests", "Filtration.ThemeEditor.Tests\Filtration.ThemeEditor.Tests.csproj", "{450AC313-BF25-4BFD-A066-9F39F026FDCF}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Filtration.Interface", "Filtration.Interface\Filtration.Interface.csproj", "{0F333344-7695-47B2-B0E6-172E4DE74819}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Filtration.Common", "Filtration.Common\Filtration.Common.csproj", "{8CB44F28-2956-4C2A-9314-72727262EDD4}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Filtration.Common.Tests", "Filtration.Common.Tests\Filtration.Common.Tests.csproj", "{1E42A658-45C4-4DD9-83C5-2A10728DBDFA}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Filtration.ItemFilterPreview", "Filtration.ItemFilterPreview\Filtration.ItemFilterPreview.csproj", "{3AB98B6E-05DB-44FA-9DAD-584AA88F0739}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Filtration.ItemFilterPreview.Tests", "Filtration.ItemFilterPreview.Tests\Filtration.ItemFilterPreview.Tests.csproj", "{58CD3B9C-EBBA-4527-A81C-78B7EA9CA298}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Filtration.Parser", "Filtration.Parser\Filtration.Parser.csproj", "{10A7C2BC-EC6F-4A38-BDDA-E35935004C02}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Filtration.Parser.Interface", "Filtration.Parser.Interface\Filtration.Parser.Interface.csproj", "{46383F20-02DF-48B4-B092-9088FA4ACD5A}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Filtration.Parser.Tests", "Filtration.Parser.Tests\Filtration.Parser.Tests.csproj", "{1F30CF6D-A5BF-4777-B8BA-E34F439FE8E5}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Filtration.ItemFilterPreview.Data", "Filtration.ItemFilterPreview.Data\Filtration.ItemFilterPreview.Data.csproj", "{855B38CC-EEF2-471D-BBBC-EB3E2FF3D387}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Filtration.ItemFilterPreview.Data.Tests", "Filtration.ItemFilterPreview.Data.Tests\Filtration.ItemFilterPreview.Data.Tests.csproj", "{7A5720DE-A41B-47EA-AAAB-7C5608FF0C1F}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Debug|ARM = Debug|ARM
Debug|x64 = Debug|x64
Debug|x86 = Debug|x86
Release|Any CPU = Release|Any CPU
Release|ARM = Release|ARM
Release|x64 = Release|x64
Release|x86 = Release|x86
SquirrelReleasify|Any CPU = SquirrelReleasify|Any CPU
SquirrelReleasify|ARM = SquirrelReleasify|ARM
SquirrelReleasify|x64 = SquirrelReleasify|x64
SquirrelReleasify|x86 = SquirrelReleasify|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{55E0A34C-E039-43D7-A024-A4045401CDDA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{55E0A34C-E039-43D7-A024-A4045401CDDA}.Debug|Any CPU.Build.0 = Debug|Any CPU
{55E0A34C-E039-43D7-A024-A4045401CDDA}.Debug|ARM.ActiveCfg = Debug|Any CPU
{55E0A34C-E039-43D7-A024-A4045401CDDA}.Debug|ARM.Build.0 = Debug|Any CPU
{55E0A34C-E039-43D7-A024-A4045401CDDA}.Debug|x64.ActiveCfg = Debug|Any CPU
{55E0A34C-E039-43D7-A024-A4045401CDDA}.Debug|x64.Build.0 = Debug|Any CPU
{55E0A34C-E039-43D7-A024-A4045401CDDA}.Debug|x86.ActiveCfg = Debug|Any CPU
{55E0A34C-E039-43D7-A024-A4045401CDDA}.Debug|x86.Build.0 = Debug|Any CPU
{55E0A34C-E039-43D7-A024-A4045401CDDA}.Release|Any CPU.ActiveCfg = Release|Any CPU
{55E0A34C-E039-43D7-A024-A4045401CDDA}.Release|Any CPU.Build.0 = Release|Any CPU
{55E0A34C-E039-43D7-A024-A4045401CDDA}.Release|ARM.ActiveCfg = Release|Any CPU
{55E0A34C-E039-43D7-A024-A4045401CDDA}.Release|ARM.Build.0 = Release|Any CPU
{55E0A34C-E039-43D7-A024-A4045401CDDA}.Release|x64.ActiveCfg = Release|Any CPU
{55E0A34C-E039-43D7-A024-A4045401CDDA}.Release|x64.Build.0 = Release|Any CPU
{55E0A34C-E039-43D7-A024-A4045401CDDA}.Release|x86.ActiveCfg = Release|Any CPU
{55E0A34C-E039-43D7-A024-A4045401CDDA}.Release|x86.Build.0 = Release|Any CPU
{55E0A34C-E039-43D7-A024-A4045401CDDA}.SquirrelReleasify|Any CPU.ActiveCfg = Releasify|Any CPU
{55E0A34C-E039-43D7-A024-A4045401CDDA}.SquirrelReleasify|Any CPU.Build.0 = Releasify|Any CPU
{55E0A34C-E039-43D7-A024-A4045401CDDA}.SquirrelReleasify|ARM.ActiveCfg = Release|Any CPU
{55E0A34C-E039-43D7-A024-A4045401CDDA}.SquirrelReleasify|ARM.Build.0 = Release|Any CPU
{55E0A34C-E039-43D7-A024-A4045401CDDA}.SquirrelReleasify|x64.ActiveCfg = Release|Any CPU
{55E0A34C-E039-43D7-A024-A4045401CDDA}.SquirrelReleasify|x64.Build.0 = Release|Any CPU
{55E0A34C-E039-43D7-A024-A4045401CDDA}.SquirrelReleasify|x86.ActiveCfg = Release|Any CPU
{55E0A34C-E039-43D7-A024-A4045401CDDA}.SquirrelReleasify|x86.Build.0 = Release|Any CPU
{E0693972-72C5-4E05-A9C5-A5943E4015C6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E0693972-72C5-4E05-A9C5-A5943E4015C6}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E0693972-72C5-4E05-A9C5-A5943E4015C6}.Debug|ARM.ActiveCfg = Debug|Any CPU
{E0693972-72C5-4E05-A9C5-A5943E4015C6}.Debug|ARM.Build.0 = Debug|Any CPU
{E0693972-72C5-4E05-A9C5-A5943E4015C6}.Debug|x64.ActiveCfg = Debug|Any CPU
{E0693972-72C5-4E05-A9C5-A5943E4015C6}.Debug|x64.Build.0 = Debug|Any CPU
{E0693972-72C5-4E05-A9C5-A5943E4015C6}.Debug|x86.ActiveCfg = Debug|Any CPU
{E0693972-72C5-4E05-A9C5-A5943E4015C6}.Debug|x86.Build.0 = Debug|Any CPU
{E0693972-72C5-4E05-A9C5-A5943E4015C6}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E0693972-72C5-4E05-A9C5-A5943E4015C6}.Release|Any CPU.Build.0 = Release|Any CPU
{E0693972-72C5-4E05-A9C5-A5943E4015C6}.Release|ARM.ActiveCfg = Release|Any CPU
{E0693972-72C5-4E05-A9C5-A5943E4015C6}.Release|ARM.Build.0 = Release|Any CPU
{E0693972-72C5-4E05-A9C5-A5943E4015C6}.Release|x64.ActiveCfg = Release|Any CPU
{E0693972-72C5-4E05-A9C5-A5943E4015C6}.Release|x64.Build.0 = Release|Any CPU
{E0693972-72C5-4E05-A9C5-A5943E4015C6}.Release|x86.ActiveCfg = Release|Any CPU
{E0693972-72C5-4E05-A9C5-A5943E4015C6}.Release|x86.Build.0 = Release|Any CPU
{E0693972-72C5-4E05-A9C5-A5943E4015C6}.SquirrelReleasify|Any CPU.ActiveCfg = Release|Any CPU
{E0693972-72C5-4E05-A9C5-A5943E4015C6}.SquirrelReleasify|Any CPU.Build.0 = Release|Any CPU
{E0693972-72C5-4E05-A9C5-A5943E4015C6}.SquirrelReleasify|ARM.ActiveCfg = Release|Any CPU
{E0693972-72C5-4E05-A9C5-A5943E4015C6}.SquirrelReleasify|ARM.Build.0 = Release|Any CPU
{E0693972-72C5-4E05-A9C5-A5943E4015C6}.SquirrelReleasify|x64.ActiveCfg = Release|Any CPU
{E0693972-72C5-4E05-A9C5-A5943E4015C6}.SquirrelReleasify|x64.Build.0 = Release|Any CPU
{E0693972-72C5-4E05-A9C5-A5943E4015C6}.SquirrelReleasify|x86.ActiveCfg = Release|Any CPU
{E0693972-72C5-4E05-A9C5-A5943E4015C6}.SquirrelReleasify|x86.Build.0 = Release|Any CPU
{4AAC3BEB-1DC1-483E-9D11-0E9334E80227}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{4AAC3BEB-1DC1-483E-9D11-0E9334E80227}.Debug|Any CPU.Build.0 = Debug|Any CPU
{4AAC3BEB-1DC1-483E-9D11-0E9334E80227}.Debug|ARM.ActiveCfg = Debug|Any CPU
{4AAC3BEB-1DC1-483E-9D11-0E9334E80227}.Debug|ARM.Build.0 = Debug|Any CPU
{4AAC3BEB-1DC1-483E-9D11-0E9334E80227}.Debug|x64.ActiveCfg = Debug|Any CPU
{4AAC3BEB-1DC1-483E-9D11-0E9334E80227}.Debug|x64.Build.0 = Debug|Any CPU
{4AAC3BEB-1DC1-483E-9D11-0E9334E80227}.Debug|x86.ActiveCfg = Debug|Any CPU
{4AAC3BEB-1DC1-483E-9D11-0E9334E80227}.Debug|x86.Build.0 = Debug|Any CPU
{4AAC3BEB-1DC1-483E-9D11-0E9334E80227}.Release|Any CPU.ActiveCfg = Release|Any CPU
{4AAC3BEB-1DC1-483E-9D11-0E9334E80227}.Release|Any CPU.Build.0 = Release|Any CPU
{4AAC3BEB-1DC1-483E-9D11-0E9334E80227}.Release|ARM.ActiveCfg = Release|Any CPU
{4AAC3BEB-1DC1-483E-9D11-0E9334E80227}.Release|ARM.Build.0 = Release|Any CPU
{4AAC3BEB-1DC1-483E-9D11-0E9334E80227}.Release|x64.ActiveCfg = Release|Any CPU
{4AAC3BEB-1DC1-483E-9D11-0E9334E80227}.Release|x64.Build.0 = Release|Any CPU
{4AAC3BEB-1DC1-483E-9D11-0E9334E80227}.Release|x86.ActiveCfg = Release|Any CPU
{4AAC3BEB-1DC1-483E-9D11-0E9334E80227}.Release|x86.Build.0 = Release|Any CPU
{4AAC3BEB-1DC1-483E-9D11-0E9334E80227}.SquirrelReleasify|Any CPU.ActiveCfg = Release|Any CPU
{4AAC3BEB-1DC1-483E-9D11-0E9334E80227}.SquirrelReleasify|Any CPU.Build.0 = Release|Any CPU
{4AAC3BEB-1DC1-483E-9D11-0E9334E80227}.SquirrelReleasify|ARM.ActiveCfg = Release|Any CPU
{4AAC3BEB-1DC1-483E-9D11-0E9334E80227}.SquirrelReleasify|ARM.Build.0 = Release|Any CPU
{4AAC3BEB-1DC1-483E-9D11-0E9334E80227}.SquirrelReleasify|x64.ActiveCfg = Release|Any CPU
{4AAC3BEB-1DC1-483E-9D11-0E9334E80227}.SquirrelReleasify|x64.Build.0 = Release|Any CPU
{4AAC3BEB-1DC1-483E-9D11-0E9334E80227}.SquirrelReleasify|x86.ActiveCfg = Release|Any CPU
{4AAC3BEB-1DC1-483E-9D11-0E9334E80227}.SquirrelReleasify|x86.Build.0 = Release|Any CPU
{537BE676-2FF6-4995-B05B-9CFACE852EC9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{537BE676-2FF6-4995-B05B-9CFACE852EC9}.Debug|Any CPU.Build.0 = Debug|Any CPU
{537BE676-2FF6-4995-B05B-9CFACE852EC9}.Debug|ARM.ActiveCfg = Debug|Any CPU
{537BE676-2FF6-4995-B05B-9CFACE852EC9}.Debug|ARM.Build.0 = Debug|Any CPU
{537BE676-2FF6-4995-B05B-9CFACE852EC9}.Debug|x64.ActiveCfg = Debug|Any CPU
{537BE676-2FF6-4995-B05B-9CFACE852EC9}.Debug|x64.Build.0 = Debug|Any CPU
{537BE676-2FF6-4995-B05B-9CFACE852EC9}.Debug|x86.ActiveCfg = Debug|Any CPU
{537BE676-2FF6-4995-B05B-9CFACE852EC9}.Debug|x86.Build.0 = Debug|Any CPU
{537BE676-2FF6-4995-B05B-9CFACE852EC9}.Release|Any CPU.ActiveCfg = Release|Any CPU
{537BE676-2FF6-4995-B05B-9CFACE852EC9}.Release|Any CPU.Build.0 = Release|Any CPU
{537BE676-2FF6-4995-B05B-9CFACE852EC9}.Release|ARM.ActiveCfg = Release|Any CPU
{537BE676-2FF6-4995-B05B-9CFACE852EC9}.Release|ARM.Build.0 = Release|Any CPU
{537BE676-2FF6-4995-B05B-9CFACE852EC9}.Release|x64.ActiveCfg = Release|Any CPU
{537BE676-2FF6-4995-B05B-9CFACE852EC9}.Release|x64.Build.0 = Release|Any CPU
{537BE676-2FF6-4995-B05B-9CFACE852EC9}.Release|x86.ActiveCfg = Release|Any CPU
{537BE676-2FF6-4995-B05B-9CFACE852EC9}.Release|x86.Build.0 = Release|Any CPU
{537BE676-2FF6-4995-B05B-9CFACE852EC9}.SquirrelReleasify|Any CPU.ActiveCfg = Release|Any CPU
{537BE676-2FF6-4995-B05B-9CFACE852EC9}.SquirrelReleasify|Any CPU.Build.0 = Release|Any CPU
{537BE676-2FF6-4995-B05B-9CFACE852EC9}.SquirrelReleasify|ARM.ActiveCfg = Release|Any CPU
{537BE676-2FF6-4995-B05B-9CFACE852EC9}.SquirrelReleasify|ARM.Build.0 = Release|Any CPU
{537BE676-2FF6-4995-B05B-9CFACE852EC9}.SquirrelReleasify|x64.ActiveCfg = Release|Any CPU
{537BE676-2FF6-4995-B05B-9CFACE852EC9}.SquirrelReleasify|x64.Build.0 = Release|Any CPU
{537BE676-2FF6-4995-B05B-9CFACE852EC9}.SquirrelReleasify|x86.ActiveCfg = Release|Any CPU
{537BE676-2FF6-4995-B05B-9CFACE852EC9}.SquirrelReleasify|x86.Build.0 = Release|Any CPU
{41B8F5C2-65AA-42F0-A20B-6F95B13A9F48}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{41B8F5C2-65AA-42F0-A20B-6F95B13A9F48}.Debug|Any CPU.Build.0 = Debug|Any CPU
{41B8F5C2-65AA-42F0-A20B-6F95B13A9F48}.Debug|ARM.ActiveCfg = Debug|Any CPU
{41B8F5C2-65AA-42F0-A20B-6F95B13A9F48}.Debug|ARM.Build.0 = Debug|Any CPU
{41B8F5C2-65AA-42F0-A20B-6F95B13A9F48}.Debug|x64.ActiveCfg = Debug|Any CPU
{41B8F5C2-65AA-42F0-A20B-6F95B13A9F48}.Debug|x64.Build.0 = Debug|Any CPU
{41B8F5C2-65AA-42F0-A20B-6F95B13A9F48}.Debug|x86.ActiveCfg = Debug|Any CPU
{41B8F5C2-65AA-42F0-A20B-6F95B13A9F48}.Debug|x86.Build.0 = Debug|Any CPU
{41B8F5C2-65AA-42F0-A20B-6F95B13A9F48}.Release|Any CPU.ActiveCfg = Release|Any CPU
{41B8F5C2-65AA-42F0-A20B-6F95B13A9F48}.Release|Any CPU.Build.0 = Release|Any CPU
{41B8F5C2-65AA-42F0-A20B-6F95B13A9F48}.Release|ARM.ActiveCfg = Release|Any CPU
{41B8F5C2-65AA-42F0-A20B-6F95B13A9F48}.Release|ARM.Build.0 = Release|Any CPU
{41B8F5C2-65AA-42F0-A20B-6F95B13A9F48}.Release|x64.ActiveCfg = Release|Any CPU
{41B8F5C2-65AA-42F0-A20B-6F95B13A9F48}.Release|x64.Build.0 = Release|Any CPU
{41B8F5C2-65AA-42F0-A20B-6F95B13A9F48}.Release|x86.ActiveCfg = Release|Any CPU
{41B8F5C2-65AA-42F0-A20B-6F95B13A9F48}.Release|x86.Build.0 = Release|Any CPU
{41B8F5C2-65AA-42F0-A20B-6F95B13A9F48}.SquirrelReleasify|Any CPU.ActiveCfg = Release|Any CPU
{41B8F5C2-65AA-42F0-A20B-6F95B13A9F48}.SquirrelReleasify|Any CPU.Build.0 = Release|Any CPU
{41B8F5C2-65AA-42F0-A20B-6F95B13A9F48}.SquirrelReleasify|ARM.ActiveCfg = Release|Any CPU
{41B8F5C2-65AA-42F0-A20B-6F95B13A9F48}.SquirrelReleasify|ARM.Build.0 = Release|Any CPU
{41B8F5C2-65AA-42F0-A20B-6F95B13A9F48}.SquirrelReleasify|x64.ActiveCfg = Release|Any CPU
{41B8F5C2-65AA-42F0-A20B-6F95B13A9F48}.SquirrelReleasify|x64.Build.0 = Release|Any CPU
{41B8F5C2-65AA-42F0-A20B-6F95B13A9F48}.SquirrelReleasify|x86.ActiveCfg = Release|Any CPU
{41B8F5C2-65AA-42F0-A20B-6F95B13A9F48}.SquirrelReleasify|x86.Build.0 = Release|Any CPU
{450AC313-BF25-4BFD-A066-9F39F026FDCF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{450AC313-BF25-4BFD-A066-9F39F026FDCF}.Debug|Any CPU.Build.0 = Debug|Any CPU
{450AC313-BF25-4BFD-A066-9F39F026FDCF}.Debug|ARM.ActiveCfg = Debug|Any CPU
{450AC313-BF25-4BFD-A066-9F39F026FDCF}.Debug|ARM.Build.0 = Debug|Any CPU
{450AC313-BF25-4BFD-A066-9F39F026FDCF}.Debug|x64.ActiveCfg = Debug|Any CPU
{450AC313-BF25-4BFD-A066-9F39F026FDCF}.Debug|x64.Build.0 = Debug|Any CPU
{450AC313-BF25-4BFD-A066-9F39F026FDCF}.Debug|x86.ActiveCfg = Debug|Any CPU
{450AC313-BF25-4BFD-A066-9F39F026FDCF}.Debug|x86.Build.0 = Debug|Any CPU
{450AC313-BF25-4BFD-A066-9F39F026FDCF}.Release|Any CPU.ActiveCfg = Release|Any CPU
{450AC313-BF25-4BFD-A066-9F39F026FDCF}.Release|Any CPU.Build.0 = Release|Any CPU
{450AC313-BF25-4BFD-A066-9F39F026FDCF}.Release|ARM.ActiveCfg = Release|Any CPU
{450AC313-BF25-4BFD-A066-9F39F026FDCF}.Release|ARM.Build.0 = Release|Any CPU
{450AC313-BF25-4BFD-A066-9F39F026FDCF}.Release|x64.ActiveCfg = Release|Any CPU
{450AC313-BF25-4BFD-A066-9F39F026FDCF}.Release|x64.Build.0 = Release|Any CPU
{450AC313-BF25-4BFD-A066-9F39F026FDCF}.Release|x86.ActiveCfg = Release|Any CPU
{450AC313-BF25-4BFD-A066-9F39F026FDCF}.Release|x86.Build.0 = Release|Any CPU
{450AC313-BF25-4BFD-A066-9F39F026FDCF}.SquirrelReleasify|Any CPU.ActiveCfg = Release|Any CPU
{450AC313-BF25-4BFD-A066-9F39F026FDCF}.SquirrelReleasify|Any CPU.Build.0 = Release|Any CPU
{450AC313-BF25-4BFD-A066-9F39F026FDCF}.SquirrelReleasify|ARM.ActiveCfg = Release|Any CPU
{450AC313-BF25-4BFD-A066-9F39F026FDCF}.SquirrelReleasify|ARM.Build.0 = Release|Any CPU
{450AC313-BF25-4BFD-A066-9F39F026FDCF}.SquirrelReleasify|x64.ActiveCfg = Release|Any CPU
{450AC313-BF25-4BFD-A066-9F39F026FDCF}.SquirrelReleasify|x64.Build.0 = Release|Any CPU
{450AC313-BF25-4BFD-A066-9F39F026FDCF}.SquirrelReleasify|x86.ActiveCfg = Release|Any CPU
{450AC313-BF25-4BFD-A066-9F39F026FDCF}.SquirrelReleasify|x86.Build.0 = Release|Any CPU
{0F333344-7695-47B2-B0E6-172E4DE74819}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{0F333344-7695-47B2-B0E6-172E4DE74819}.Debug|Any CPU.Build.0 = Debug|Any CPU
{0F333344-7695-47B2-B0E6-172E4DE74819}.Debug|ARM.ActiveCfg = Debug|Any CPU
{0F333344-7695-47B2-B0E6-172E4DE74819}.Debug|ARM.Build.0 = Debug|Any CPU
{0F333344-7695-47B2-B0E6-172E4DE74819}.Debug|x64.ActiveCfg = Debug|Any CPU
{0F333344-7695-47B2-B0E6-172E4DE74819}.Debug|x64.Build.0 = Debug|Any CPU
{0F333344-7695-47B2-B0E6-172E4DE74819}.Debug|x86.ActiveCfg = Debug|Any CPU
{0F333344-7695-47B2-B0E6-172E4DE74819}.Debug|x86.Build.0 = Debug|Any CPU
{0F333344-7695-47B2-B0E6-172E4DE74819}.Release|Any CPU.ActiveCfg = Release|Any CPU
{0F333344-7695-47B2-B0E6-172E4DE74819}.Release|Any CPU.Build.0 = Release|Any CPU
{0F333344-7695-47B2-B0E6-172E4DE74819}.Release|ARM.ActiveCfg = Release|Any CPU
{0F333344-7695-47B2-B0E6-172E4DE74819}.Release|ARM.Build.0 = Release|Any CPU
{0F333344-7695-47B2-B0E6-172E4DE74819}.Release|x64.ActiveCfg = Release|Any CPU
{0F333344-7695-47B2-B0E6-172E4DE74819}.Release|x64.Build.0 = Release|Any CPU
{0F333344-7695-47B2-B0E6-172E4DE74819}.Release|x86.ActiveCfg = Release|Any CPU
{0F333344-7695-47B2-B0E6-172E4DE74819}.Release|x86.Build.0 = Release|Any CPU
{0F333344-7695-47B2-B0E6-172E4DE74819}.SquirrelReleasify|Any CPU.ActiveCfg = Release|Any CPU
{0F333344-7695-47B2-B0E6-172E4DE74819}.SquirrelReleasify|Any CPU.Build.0 = Release|Any CPU
{0F333344-7695-47B2-B0E6-172E4DE74819}.SquirrelReleasify|ARM.ActiveCfg = Release|Any CPU
{0F333344-7695-47B2-B0E6-172E4DE74819}.SquirrelReleasify|ARM.Build.0 = Release|Any CPU
{0F333344-7695-47B2-B0E6-172E4DE74819}.SquirrelReleasify|x64.ActiveCfg = Release|Any CPU
{0F333344-7695-47B2-B0E6-172E4DE74819}.SquirrelReleasify|x64.Build.0 = Release|Any CPU
{0F333344-7695-47B2-B0E6-172E4DE74819}.SquirrelReleasify|x86.ActiveCfg = Release|Any CPU
{0F333344-7695-47B2-B0E6-172E4DE74819}.SquirrelReleasify|x86.Build.0 = Release|Any CPU
{8CB44F28-2956-4C2A-9314-72727262EDD4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{8CB44F28-2956-4C2A-9314-72727262EDD4}.Debug|Any CPU.Build.0 = Debug|Any CPU
{8CB44F28-2956-4C2A-9314-72727262EDD4}.Debug|ARM.ActiveCfg = Debug|Any CPU
{8CB44F28-2956-4C2A-9314-72727262EDD4}.Debug|ARM.Build.0 = Debug|Any CPU
{8CB44F28-2956-4C2A-9314-72727262EDD4}.Debug|x64.ActiveCfg = Debug|Any CPU
{8CB44F28-2956-4C2A-9314-72727262EDD4}.Debug|x64.Build.0 = Debug|Any CPU
{8CB44F28-2956-4C2A-9314-72727262EDD4}.Debug|x86.ActiveCfg = Debug|Any CPU
{8CB44F28-2956-4C2A-9314-72727262EDD4}.Debug|x86.Build.0 = Debug|Any CPU
{8CB44F28-2956-4C2A-9314-72727262EDD4}.Release|Any CPU.ActiveCfg = Release|Any CPU
{8CB44F28-2956-4C2A-9314-72727262EDD4}.Release|Any CPU.Build.0 = Release|Any CPU
{8CB44F28-2956-4C2A-9314-72727262EDD4}.Release|ARM.ActiveCfg = Release|Any CPU
{8CB44F28-2956-4C2A-9314-72727262EDD4}.Release|ARM.Build.0 = Release|Any CPU
{8CB44F28-2956-4C2A-9314-72727262EDD4}.Release|x64.ActiveCfg = Release|Any CPU
{8CB44F28-2956-4C2A-9314-72727262EDD4}.Release|x64.Build.0 = Release|Any CPU
{8CB44F28-2956-4C2A-9314-72727262EDD4}.Release|x86.ActiveCfg = Release|Any CPU
{8CB44F28-2956-4C2A-9314-72727262EDD4}.Release|x86.Build.0 = Release|Any CPU
{8CB44F28-2956-4C2A-9314-72727262EDD4}.SquirrelReleasify|Any CPU.ActiveCfg = Release|Any CPU
{8CB44F28-2956-4C2A-9314-72727262EDD4}.SquirrelReleasify|Any CPU.Build.0 = Release|Any CPU
{8CB44F28-2956-4C2A-9314-72727262EDD4}.SquirrelReleasify|ARM.ActiveCfg = Release|Any CPU
{8CB44F28-2956-4C2A-9314-72727262EDD4}.SquirrelReleasify|ARM.Build.0 = Release|Any CPU
{8CB44F28-2956-4C2A-9314-72727262EDD4}.SquirrelReleasify|x64.ActiveCfg = Release|Any CPU
{8CB44F28-2956-4C2A-9314-72727262EDD4}.SquirrelReleasify|x64.Build.0 = Release|Any CPU
{8CB44F28-2956-4C2A-9314-72727262EDD4}.SquirrelReleasify|x86.ActiveCfg = Release|Any CPU
{8CB44F28-2956-4C2A-9314-72727262EDD4}.SquirrelReleasify|x86.Build.0 = Release|Any CPU
{1E42A658-45C4-4DD9-83C5-2A10728DBDFA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1E42A658-45C4-4DD9-83C5-2A10728DBDFA}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1E42A658-45C4-4DD9-83C5-2A10728DBDFA}.Debug|ARM.ActiveCfg = Debug|Any CPU
{1E42A658-45C4-4DD9-83C5-2A10728DBDFA}.Debug|ARM.Build.0 = Debug|Any CPU
{1E42A658-45C4-4DD9-83C5-2A10728DBDFA}.Debug|x64.ActiveCfg = Debug|Any CPU
{1E42A658-45C4-4DD9-83C5-2A10728DBDFA}.Debug|x64.Build.0 = Debug|Any CPU
{1E42A658-45C4-4DD9-83C5-2A10728DBDFA}.Debug|x86.ActiveCfg = Debug|Any CPU
{1E42A658-45C4-4DD9-83C5-2A10728DBDFA}.Debug|x86.Build.0 = Debug|Any CPU
{1E42A658-45C4-4DD9-83C5-2A10728DBDFA}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1E42A658-45C4-4DD9-83C5-2A10728DBDFA}.Release|Any CPU.Build.0 = Release|Any CPU
{1E42A658-45C4-4DD9-83C5-2A10728DBDFA}.Release|ARM.ActiveCfg = Release|Any CPU
{1E42A658-45C4-4DD9-83C5-2A10728DBDFA}.Release|ARM.Build.0 = Release|Any CPU
{1E42A658-45C4-4DD9-83C5-2A10728DBDFA}.Release|x64.ActiveCfg = Release|Any CPU
{1E42A658-45C4-4DD9-83C5-2A10728DBDFA}.Release|x64.Build.0 = Release|Any CPU
{1E42A658-45C4-4DD9-83C5-2A10728DBDFA}.Release|x86.ActiveCfg = Release|Any CPU
{1E42A658-45C4-4DD9-83C5-2A10728DBDFA}.Release|x86.Build.0 = Release|Any CPU
{1E42A658-45C4-4DD9-83C5-2A10728DBDFA}.SquirrelReleasify|Any CPU.ActiveCfg = Release|Any CPU
{1E42A658-45C4-4DD9-83C5-2A10728DBDFA}.SquirrelReleasify|Any CPU.Build.0 = Release|Any CPU
{1E42A658-45C4-4DD9-83C5-2A10728DBDFA}.SquirrelReleasify|ARM.ActiveCfg = Release|Any CPU
{1E42A658-45C4-4DD9-83C5-2A10728DBDFA}.SquirrelReleasify|ARM.Build.0 = Release|Any CPU
{1E42A658-45C4-4DD9-83C5-2A10728DBDFA}.SquirrelReleasify|x64.ActiveCfg = Release|Any CPU
{1E42A658-45C4-4DD9-83C5-2A10728DBDFA}.SquirrelReleasify|x64.Build.0 = Release|Any CPU
{1E42A658-45C4-4DD9-83C5-2A10728DBDFA}.SquirrelReleasify|x86.ActiveCfg = Release|Any CPU
{1E42A658-45C4-4DD9-83C5-2A10728DBDFA}.SquirrelReleasify|x86.Build.0 = Release|Any CPU
{3AB98B6E-05DB-44FA-9DAD-584AA88F0739}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{3AB98B6E-05DB-44FA-9DAD-584AA88F0739}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3AB98B6E-05DB-44FA-9DAD-584AA88F0739}.Debug|ARM.ActiveCfg = Debug|Any CPU
{3AB98B6E-05DB-44FA-9DAD-584AA88F0739}.Debug|ARM.Build.0 = Debug|Any CPU
{3AB98B6E-05DB-44FA-9DAD-584AA88F0739}.Debug|x64.ActiveCfg = Debug|Any CPU
{3AB98B6E-05DB-44FA-9DAD-584AA88F0739}.Debug|x64.Build.0 = Debug|Any CPU
{3AB98B6E-05DB-44FA-9DAD-584AA88F0739}.Debug|x86.ActiveCfg = Debug|Any CPU
{3AB98B6E-05DB-44FA-9DAD-584AA88F0739}.Debug|x86.Build.0 = Debug|Any CPU
{3AB98B6E-05DB-44FA-9DAD-584AA88F0739}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3AB98B6E-05DB-44FA-9DAD-584AA88F0739}.Release|Any CPU.Build.0 = Release|Any CPU
{3AB98B6E-05DB-44FA-9DAD-584AA88F0739}.Release|ARM.ActiveCfg = Release|Any CPU
{3AB98B6E-05DB-44FA-9DAD-584AA88F0739}.Release|ARM.Build.0 = Release|Any CPU
{3AB98B6E-05DB-44FA-9DAD-584AA88F0739}.Release|x64.ActiveCfg = Release|Any CPU
{3AB98B6E-05DB-44FA-9DAD-584AA88F0739}.Release|x64.Build.0 = Release|Any CPU
{3AB98B6E-05DB-44FA-9DAD-584AA88F0739}.Release|x86.ActiveCfg = Release|Any CPU
{3AB98B6E-05DB-44FA-9DAD-584AA88F0739}.Release|x86.Build.0 = Release|Any CPU
{3AB98B6E-05DB-44FA-9DAD-584AA88F0739}.SquirrelReleasify|Any CPU.ActiveCfg = Release|Any CPU
{3AB98B6E-05DB-44FA-9DAD-584AA88F0739}.SquirrelReleasify|Any CPU.Build.0 = Release|Any CPU
{3AB98B6E-05DB-44FA-9DAD-584AA88F0739}.SquirrelReleasify|ARM.ActiveCfg = Release|Any CPU
{3AB98B6E-05DB-44FA-9DAD-584AA88F0739}.SquirrelReleasify|ARM.Build.0 = Release|Any CPU
{3AB98B6E-05DB-44FA-9DAD-584AA88F0739}.SquirrelReleasify|x64.ActiveCfg = Release|Any CPU
{3AB98B6E-05DB-44FA-9DAD-584AA88F0739}.SquirrelReleasify|x64.Build.0 = Release|Any CPU
{3AB98B6E-05DB-44FA-9DAD-584AA88F0739}.SquirrelReleasify|x86.ActiveCfg = Release|Any CPU
{3AB98B6E-05DB-44FA-9DAD-584AA88F0739}.SquirrelReleasify|x86.Build.0 = Release|Any CPU
{58CD3B9C-EBBA-4527-A81C-78B7EA9CA298}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{58CD3B9C-EBBA-4527-A81C-78B7EA9CA298}.Debug|Any CPU.Build.0 = Debug|Any CPU
{58CD3B9C-EBBA-4527-A81C-78B7EA9CA298}.Debug|ARM.ActiveCfg = Debug|Any CPU
{58CD3B9C-EBBA-4527-A81C-78B7EA9CA298}.Debug|ARM.Build.0 = Debug|Any CPU
{58CD3B9C-EBBA-4527-A81C-78B7EA9CA298}.Debug|x64.ActiveCfg = Debug|Any CPU
{58CD3B9C-EBBA-4527-A81C-78B7EA9CA298}.Debug|x64.Build.0 = Debug|Any CPU
{58CD3B9C-EBBA-4527-A81C-78B7EA9CA298}.Debug|x86.ActiveCfg = Debug|Any CPU
{58CD3B9C-EBBA-4527-A81C-78B7EA9CA298}.Debug|x86.Build.0 = Debug|Any CPU
{58CD3B9C-EBBA-4527-A81C-78B7EA9CA298}.Release|Any CPU.ActiveCfg = Release|Any CPU
{58CD3B9C-EBBA-4527-A81C-78B7EA9CA298}.Release|Any CPU.Build.0 = Release|Any CPU
{58CD3B9C-EBBA-4527-A81C-78B7EA9CA298}.Release|ARM.ActiveCfg = Release|Any CPU
{58CD3B9C-EBBA-4527-A81C-78B7EA9CA298}.Release|ARM.Build.0 = Release|Any CPU
{58CD3B9C-EBBA-4527-A81C-78B7EA9CA298}.Release|x64.ActiveCfg = Release|Any CPU
{58CD3B9C-EBBA-4527-A81C-78B7EA9CA298}.Release|x64.Build.0 = Release|Any CPU
{58CD3B9C-EBBA-4527-A81C-78B7EA9CA298}.Release|x86.ActiveCfg = Release|Any CPU
{58CD3B9C-EBBA-4527-A81C-78B7EA9CA298}.Release|x86.Build.0 = Release|Any CPU
{58CD3B9C-EBBA-4527-A81C-78B7EA9CA298}.SquirrelReleasify|Any CPU.ActiveCfg = Release|Any CPU
{58CD3B9C-EBBA-4527-A81C-78B7EA9CA298}.SquirrelReleasify|Any CPU.Build.0 = Release|Any CPU
{58CD3B9C-EBBA-4527-A81C-78B7EA9CA298}.SquirrelReleasify|ARM.ActiveCfg = Release|Any CPU
{58CD3B9C-EBBA-4527-A81C-78B7EA9CA298}.SquirrelReleasify|ARM.Build.0 = Release|Any CPU
{58CD3B9C-EBBA-4527-A81C-78B7EA9CA298}.SquirrelReleasify|x64.ActiveCfg = Release|Any CPU
{58CD3B9C-EBBA-4527-A81C-78B7EA9CA298}.SquirrelReleasify|x64.Build.0 = Release|Any CPU
{58CD3B9C-EBBA-4527-A81C-78B7EA9CA298}.SquirrelReleasify|x86.ActiveCfg = Release|Any CPU
{58CD3B9C-EBBA-4527-A81C-78B7EA9CA298}.SquirrelReleasify|x86.Build.0 = Release|Any CPU
{10A7C2BC-EC6F-4A38-BDDA-E35935004C02}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{10A7C2BC-EC6F-4A38-BDDA-E35935004C02}.Debug|Any CPU.Build.0 = Debug|Any CPU
{10A7C2BC-EC6F-4A38-BDDA-E35935004C02}.Debug|ARM.ActiveCfg = Debug|Any CPU
{10A7C2BC-EC6F-4A38-BDDA-E35935004C02}.Debug|ARM.Build.0 = Debug|Any CPU
{10A7C2BC-EC6F-4A38-BDDA-E35935004C02}.Debug|x64.ActiveCfg = Debug|Any CPU
{10A7C2BC-EC6F-4A38-BDDA-E35935004C02}.Debug|x64.Build.0 = Debug|Any CPU
{10A7C2BC-EC6F-4A38-BDDA-E35935004C02}.Debug|x86.ActiveCfg = Debug|Any CPU
{10A7C2BC-EC6F-4A38-BDDA-E35935004C02}.Debug|x86.Build.0 = Debug|Any CPU
{10A7C2BC-EC6F-4A38-BDDA-E35935004C02}.Release|Any CPU.ActiveCfg = Release|Any CPU
{10A7C2BC-EC6F-4A38-BDDA-E35935004C02}.Release|Any CPU.Build.0 = Release|Any CPU
{10A7C2BC-EC6F-4A38-BDDA-E35935004C02}.Release|ARM.ActiveCfg = Release|Any CPU
{10A7C2BC-EC6F-4A38-BDDA-E35935004C02}.Release|ARM.Build.0 = Release|Any CPU
{10A7C2BC-EC6F-4A38-BDDA-E35935004C02}.Release|x64.ActiveCfg = Release|Any CPU
{10A7C2BC-EC6F-4A38-BDDA-E35935004C02}.Release|x64.Build.0 = Release|Any CPU
{10A7C2BC-EC6F-4A38-BDDA-E35935004C02}.Release|x86.ActiveCfg = Release|Any CPU
{10A7C2BC-EC6F-4A38-BDDA-E35935004C02}.Release|x86.Build.0 = Release|Any CPU
{10A7C2BC-EC6F-4A38-BDDA-E35935004C02}.SquirrelReleasify|Any CPU.ActiveCfg = Release|Any CPU
{10A7C2BC-EC6F-4A38-BDDA-E35935004C02}.SquirrelReleasify|Any CPU.Build.0 = Release|Any CPU
{10A7C2BC-EC6F-4A38-BDDA-E35935004C02}.SquirrelReleasify|ARM.ActiveCfg = Release|Any CPU
{10A7C2BC-EC6F-4A38-BDDA-E35935004C02}.SquirrelReleasify|ARM.Build.0 = Release|Any CPU
{10A7C2BC-EC6F-4A38-BDDA-E35935004C02}.SquirrelReleasify|x64.ActiveCfg = Release|Any CPU
{10A7C2BC-EC6F-4A38-BDDA-E35935004C02}.SquirrelReleasify|x64.Build.0 = Release|Any CPU
{10A7C2BC-EC6F-4A38-BDDA-E35935004C02}.SquirrelReleasify|x86.ActiveCfg = Release|Any CPU
{10A7C2BC-EC6F-4A38-BDDA-E35935004C02}.SquirrelReleasify|x86.Build.0 = Release|Any CPU
{46383F20-02DF-48B4-B092-9088FA4ACD5A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{46383F20-02DF-48B4-B092-9088FA4ACD5A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{46383F20-02DF-48B4-B092-9088FA4ACD5A}.Debug|ARM.ActiveCfg = Debug|Any CPU
{46383F20-02DF-48B4-B092-9088FA4ACD5A}.Debug|ARM.Build.0 = Debug|Any CPU
{46383F20-02DF-48B4-B092-9088FA4ACD5A}.Debug|x64.ActiveCfg = Debug|Any CPU
{46383F20-02DF-48B4-B092-9088FA4ACD5A}.Debug|x64.Build.0 = Debug|Any CPU
{46383F20-02DF-48B4-B092-9088FA4ACD5A}.Debug|x86.ActiveCfg = Debug|Any CPU
{46383F20-02DF-48B4-B092-9088FA4ACD5A}.Debug|x86.Build.0 = Debug|Any CPU
{46383F20-02DF-48B4-B092-9088FA4ACD5A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{46383F20-02DF-48B4-B092-9088FA4ACD5A}.Release|Any CPU.Build.0 = Release|Any CPU
{46383F20-02DF-48B4-B092-9088FA4ACD5A}.Release|ARM.ActiveCfg = Release|Any CPU
{46383F20-02DF-48B4-B092-9088FA4ACD5A}.Release|ARM.Build.0 = Release|Any CPU
{46383F20-02DF-48B4-B092-9088FA4ACD5A}.Release|x64.ActiveCfg = Release|Any CPU
{46383F20-02DF-48B4-B092-9088FA4ACD5A}.Release|x64.Build.0 = Release|Any CPU
{46383F20-02DF-48B4-B092-9088FA4ACD5A}.Release|x86.ActiveCfg = Release|Any CPU
{46383F20-02DF-48B4-B092-9088FA4ACD5A}.Release|x86.Build.0 = Release|Any CPU
{46383F20-02DF-48B4-B092-9088FA4ACD5A}.SquirrelReleasify|Any CPU.ActiveCfg = Release|Any CPU
{46383F20-02DF-48B4-B092-9088FA4ACD5A}.SquirrelReleasify|Any CPU.Build.0 = Release|Any CPU
{46383F20-02DF-48B4-B092-9088FA4ACD5A}.SquirrelReleasify|ARM.ActiveCfg = Release|Any CPU
{46383F20-02DF-48B4-B092-9088FA4ACD5A}.SquirrelReleasify|ARM.Build.0 = Release|Any CPU
{46383F20-02DF-48B4-B092-9088FA4ACD5A}.SquirrelReleasify|x64.ActiveCfg = Release|Any CPU
{46383F20-02DF-48B4-B092-9088FA4ACD5A}.SquirrelReleasify|x64.Build.0 = Release|Any CPU
{46383F20-02DF-48B4-B092-9088FA4ACD5A}.SquirrelReleasify|x86.ActiveCfg = Release|Any CPU
{46383F20-02DF-48B4-B092-9088FA4ACD5A}.SquirrelReleasify|x86.Build.0 = Release|Any CPU
{1F30CF6D-A5BF-4777-B8BA-E34F439FE8E5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1F30CF6D-A5BF-4777-B8BA-E34F439FE8E5}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1F30CF6D-A5BF-4777-B8BA-E34F439FE8E5}.Debug|ARM.ActiveCfg = Debug|Any CPU
{1F30CF6D-A5BF-4777-B8BA-E34F439FE8E5}.Debug|ARM.Build.0 = Debug|Any CPU
{1F30CF6D-A5BF-4777-B8BA-E34F439FE8E5}.Debug|x64.ActiveCfg = Debug|Any CPU
{1F30CF6D-A5BF-4777-B8BA-E34F439FE8E5}.Debug|x64.Build.0 = Debug|Any CPU
{1F30CF6D-A5BF-4777-B8BA-E34F439FE8E5}.Debug|x86.ActiveCfg = Debug|Any CPU
{1F30CF6D-A5BF-4777-B8BA-E34F439FE8E5}.Debug|x86.Build.0 = Debug|Any CPU
{1F30CF6D-A5BF-4777-B8BA-E34F439FE8E5}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1F30CF6D-A5BF-4777-B8BA-E34F439FE8E5}.Release|Any CPU.Build.0 = Release|Any CPU
{1F30CF6D-A5BF-4777-B8BA-E34F439FE8E5}.Release|ARM.ActiveCfg = Release|Any CPU
{1F30CF6D-A5BF-4777-B8BA-E34F439FE8E5}.Release|ARM.Build.0 = Release|Any CPU
{1F30CF6D-A5BF-4777-B8BA-E34F439FE8E5}.Release|x64.ActiveCfg = Release|Any CPU
{1F30CF6D-A5BF-4777-B8BA-E34F439FE8E5}.Release|x64.Build.0 = Release|Any CPU
{1F30CF6D-A5BF-4777-B8BA-E34F439FE8E5}.Release|x86.ActiveCfg = Release|Any CPU
{1F30CF6D-A5BF-4777-B8BA-E34F439FE8E5}.Release|x86.Build.0 = Release|Any CPU
{1F30CF6D-A5BF-4777-B8BA-E34F439FE8E5}.SquirrelReleasify|Any CPU.ActiveCfg = Release|Any CPU
{1F30CF6D-A5BF-4777-B8BA-E34F439FE8E5}.SquirrelReleasify|Any CPU.Build.0 = Release|Any CPU
{1F30CF6D-A5BF-4777-B8BA-E34F439FE8E5}.SquirrelReleasify|ARM.ActiveCfg = Release|Any CPU
{1F30CF6D-A5BF-4777-B8BA-E34F439FE8E5}.SquirrelReleasify|ARM.Build.0 = Release|Any CPU
{1F30CF6D-A5BF-4777-B8BA-E34F439FE8E5}.SquirrelReleasify|x64.ActiveCfg = Release|Any CPU
{1F30CF6D-A5BF-4777-B8BA-E34F439FE8E5}.SquirrelReleasify|x64.Build.0 = Release|Any CPU
{1F30CF6D-A5BF-4777-B8BA-E34F439FE8E5}.SquirrelReleasify|x86.ActiveCfg = Release|Any CPU
{1F30CF6D-A5BF-4777-B8BA-E34F439FE8E5}.SquirrelReleasify|x86.Build.0 = Release|Any CPU
{855B38CC-EEF2-471D-BBBC-EB3E2FF3D387}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{855B38CC-EEF2-471D-BBBC-EB3E2FF3D387}.Debug|Any CPU.Build.0 = Debug|Any CPU
{855B38CC-EEF2-471D-BBBC-EB3E2FF3D387}.Debug|ARM.ActiveCfg = Debug|Any CPU
{855B38CC-EEF2-471D-BBBC-EB3E2FF3D387}.Debug|ARM.Build.0 = Debug|Any CPU
{855B38CC-EEF2-471D-BBBC-EB3E2FF3D387}.Debug|x64.ActiveCfg = Debug|Any CPU
{855B38CC-EEF2-471D-BBBC-EB3E2FF3D387}.Debug|x64.Build.0 = Debug|Any CPU
{855B38CC-EEF2-471D-BBBC-EB3E2FF3D387}.Debug|x86.ActiveCfg = Debug|Any CPU
{855B38CC-EEF2-471D-BBBC-EB3E2FF3D387}.Debug|x86.Build.0 = Debug|Any CPU
{855B38CC-EEF2-471D-BBBC-EB3E2FF3D387}.Release|Any CPU.ActiveCfg = Release|Any CPU
{855B38CC-EEF2-471D-BBBC-EB3E2FF3D387}.Release|Any CPU.Build.0 = Release|Any CPU
{855B38CC-EEF2-471D-BBBC-EB3E2FF3D387}.Release|ARM.ActiveCfg = Release|Any CPU
{855B38CC-EEF2-471D-BBBC-EB3E2FF3D387}.Release|ARM.Build.0 = Release|Any CPU
{855B38CC-EEF2-471D-BBBC-EB3E2FF3D387}.Release|x64.ActiveCfg = Release|Any CPU
{855B38CC-EEF2-471D-BBBC-EB3E2FF3D387}.Release|x64.Build.0 = Release|Any CPU
{855B38CC-EEF2-471D-BBBC-EB3E2FF3D387}.Release|x86.ActiveCfg = Release|Any CPU
{855B38CC-EEF2-471D-BBBC-EB3E2FF3D387}.Release|x86.Build.0 = Release|Any CPU
{855B38CC-EEF2-471D-BBBC-EB3E2FF3D387}.SquirrelReleasify|Any CPU.ActiveCfg = Release|Any CPU
{855B38CC-EEF2-471D-BBBC-EB3E2FF3D387}.SquirrelReleasify|Any CPU.Build.0 = Release|Any CPU
{855B38CC-EEF2-471D-BBBC-EB3E2FF3D387}.SquirrelReleasify|ARM.ActiveCfg = Release|Any CPU
{855B38CC-EEF2-471D-BBBC-EB3E2FF3D387}.SquirrelReleasify|ARM.Build.0 = Release|Any CPU
{855B38CC-EEF2-471D-BBBC-EB3E2FF3D387}.SquirrelReleasify|x64.ActiveCfg = Release|Any CPU
{855B38CC-EEF2-471D-BBBC-EB3E2FF3D387}.SquirrelReleasify|x64.Build.0 = Release|Any CPU
{855B38CC-EEF2-471D-BBBC-EB3E2FF3D387}.SquirrelReleasify|x86.ActiveCfg = Release|Any CPU
{855B38CC-EEF2-471D-BBBC-EB3E2FF3D387}.SquirrelReleasify|x86.Build.0 = Release|Any CPU
{7A5720DE-A41B-47EA-AAAB-7C5608FF0C1F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{7A5720DE-A41B-47EA-AAAB-7C5608FF0C1F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7A5720DE-A41B-47EA-AAAB-7C5608FF0C1F}.Debug|ARM.ActiveCfg = Debug|Any CPU
{7A5720DE-A41B-47EA-AAAB-7C5608FF0C1F}.Debug|ARM.Build.0 = Debug|Any CPU
{7A5720DE-A41B-47EA-AAAB-7C5608FF0C1F}.Debug|x64.ActiveCfg = Debug|Any CPU
{7A5720DE-A41B-47EA-AAAB-7C5608FF0C1F}.Debug|x64.Build.0 = Debug|Any CPU
{7A5720DE-A41B-47EA-AAAB-7C5608FF0C1F}.Debug|x86.ActiveCfg = Debug|Any CPU
{7A5720DE-A41B-47EA-AAAB-7C5608FF0C1F}.Debug|x86.Build.0 = Debug|Any CPU
{7A5720DE-A41B-47EA-AAAB-7C5608FF0C1F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7A5720DE-A41B-47EA-AAAB-7C5608FF0C1F}.Release|Any CPU.Build.0 = Release|Any CPU
{7A5720DE-A41B-47EA-AAAB-7C5608FF0C1F}.Release|ARM.ActiveCfg = Release|Any CPU
{7A5720DE-A41B-47EA-AAAB-7C5608FF0C1F}.Release|ARM.Build.0 = Release|Any CPU
{7A5720DE-A41B-47EA-AAAB-7C5608FF0C1F}.Release|x64.ActiveCfg = Release|Any CPU
{7A5720DE-A41B-47EA-AAAB-7C5608FF0C1F}.Release|x64.Build.0 = Release|Any CPU
{7A5720DE-A41B-47EA-AAAB-7C5608FF0C1F}.Release|x86.ActiveCfg = Release|Any CPU
{7A5720DE-A41B-47EA-AAAB-7C5608FF0C1F}.Release|x86.Build.0 = Release|Any CPU
{7A5720DE-A41B-47EA-AAAB-7C5608FF0C1F}.SquirrelReleasify|Any CPU.ActiveCfg = Release|Any CPU
{7A5720DE-A41B-47EA-AAAB-7C5608FF0C1F}.SquirrelReleasify|Any CPU.Build.0 = Release|Any CPU
{7A5720DE-A41B-47EA-AAAB-7C5608FF0C1F}.SquirrelReleasify|ARM.ActiveCfg = Release|Any CPU
{7A5720DE-A41B-47EA-AAAB-7C5608FF0C1F}.SquirrelReleasify|ARM.Build.0 = Release|Any CPU
{7A5720DE-A41B-47EA-AAAB-7C5608FF0C1F}.SquirrelReleasify|x64.ActiveCfg = Release|Any CPU
{7A5720DE-A41B-47EA-AAAB-7C5608FF0C1F}.SquirrelReleasify|x64.Build.0 = Release|Any CPU
{7A5720DE-A41B-47EA-AAAB-7C5608FF0C1F}.SquirrelReleasify|x86.ActiveCfg = Release|Any CPU
{7A5720DE-A41B-47EA-AAAB-7C5608FF0C1F}.SquirrelReleasify|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {8A170BBA-F99C-4192-9467-A5669B1DE126}
EndGlobalSection
EndGlobal

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.1
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Filtration", "Filtration\Filtration.csproj", "{55E0A34C-E039-43D7-A024-A4045401CDDA}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Filtration.Tests", "Filtration.Tests\Filtration.Tests.csproj", "{E0693972-72C5-4E05-A9C5-A5943E4015C6}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Filtration.ObjectModel", "Filtration.ObjectModel\Filtration.ObjectModel.csproj", "{4AAC3BEB-1DC1-483E-9D11-0E9334E80227}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Filtration.ObjectModel.Tests", "Filtration.ObjectModel.Tests\Filtration.ObjectModel.Tests.csproj", "{537BE676-2FF6-4995-B05B-9CFACE852EC9}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Filtration.ThemeEditor", "Filtration.ThemeEditor\Filtration.ThemeEditor.csproj", "{41B8F5C2-65AA-42F0-A20B-6F95B13A9F48}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Filtration.ThemeEditor.Tests", "Filtration.ThemeEditor.Tests\Filtration.ThemeEditor.Tests.csproj", "{450AC313-BF25-4BFD-A066-9F39F026FDCF}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Filtration.Interface", "Filtration.Interface\Filtration.Interface.csproj", "{0F333344-7695-47B2-B0E6-172E4DE74819}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Filtration.Common", "Filtration.Common\Filtration.Common.csproj", "{8CB44F28-2956-4C2A-9314-72727262EDD4}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Filtration.Common.Tests", "Filtration.Common.Tests\Filtration.Common.Tests.csproj", "{1E42A658-45C4-4DD9-83C5-2A10728DBDFA}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Filtration.ItemFilterPreview", "Filtration.ItemFilterPreview\Filtration.ItemFilterPreview.csproj", "{3AB98B6E-05DB-44FA-9DAD-584AA88F0739}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Filtration.ItemFilterPreview.Tests", "Filtration.ItemFilterPreview.Tests\Filtration.ItemFilterPreview.Tests.csproj", "{58CD3B9C-EBBA-4527-A81C-78B7EA9CA298}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Filtration.Parser", "Filtration.Parser\Filtration.Parser.csproj", "{10A7C2BC-EC6F-4A38-BDDA-E35935004C02}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Filtration.Parser.Interface", "Filtration.Parser.Interface\Filtration.Parser.Interface.csproj", "{46383F20-02DF-48B4-B092-9088FA4ACD5A}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Filtration.Parser.Tests", "Filtration.Parser.Tests\Filtration.Parser.Tests.csproj", "{1F30CF6D-A5BF-4777-B8BA-E34F439FE8E5}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Filtration.ItemFilterPreview.Data", "Filtration.ItemFilterPreview.Data\Filtration.ItemFilterPreview.Data.csproj", "{855B38CC-EEF2-471D-BBBC-EB3E2FF3D387}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Filtration.ItemFilterPreview.Data.Tests", "Filtration.ItemFilterPreview.Data.Tests\Filtration.ItemFilterPreview.Data.Tests.csproj", "{7A5720DE-A41B-47EA-AAAB-7C5608FF0C1F}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Debug|ARM = Debug|ARM
Debug|x64 = Debug|x64
Debug|x86 = Debug|x86
Release|Any CPU = Release|Any CPU
Release|ARM = Release|ARM
Release|x64 = Release|x64
Release|x86 = Release|x86
SquirrelReleasify|Any CPU = SquirrelReleasify|Any CPU
SquirrelReleasify|ARM = SquirrelReleasify|ARM
SquirrelReleasify|x64 = SquirrelReleasify|x64
SquirrelReleasify|x86 = SquirrelReleasify|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{55E0A34C-E039-43D7-A024-A4045401CDDA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{55E0A34C-E039-43D7-A024-A4045401CDDA}.Debug|Any CPU.Build.0 = Debug|Any CPU
{55E0A34C-E039-43D7-A024-A4045401CDDA}.Debug|ARM.ActiveCfg = Debug|Any CPU
{55E0A34C-E039-43D7-A024-A4045401CDDA}.Debug|ARM.Build.0 = Debug|Any CPU
{55E0A34C-E039-43D7-A024-A4045401CDDA}.Debug|x64.ActiveCfg = Debug|Any CPU
{55E0A34C-E039-43D7-A024-A4045401CDDA}.Debug|x64.Build.0 = Debug|Any CPU
{55E0A34C-E039-43D7-A024-A4045401CDDA}.Debug|x86.ActiveCfg = Debug|Any CPU
{55E0A34C-E039-43D7-A024-A4045401CDDA}.Debug|x86.Build.0 = Debug|Any CPU
{55E0A34C-E039-43D7-A024-A4045401CDDA}.Release|Any CPU.ActiveCfg = Release|Any CPU
{55E0A34C-E039-43D7-A024-A4045401CDDA}.Release|Any CPU.Build.0 = Release|Any CPU
{55E0A34C-E039-43D7-A024-A4045401CDDA}.Release|ARM.ActiveCfg = Release|Any CPU
{55E0A34C-E039-43D7-A024-A4045401CDDA}.Release|ARM.Build.0 = Release|Any CPU
{55E0A34C-E039-43D7-A024-A4045401CDDA}.Release|x64.ActiveCfg = Release|Any CPU
{55E0A34C-E039-43D7-A024-A4045401CDDA}.Release|x64.Build.0 = Release|Any CPU
{55E0A34C-E039-43D7-A024-A4045401CDDA}.Release|x86.ActiveCfg = Release|Any CPU
{55E0A34C-E039-43D7-A024-A4045401CDDA}.Release|x86.Build.0 = Release|Any CPU
{55E0A34C-E039-43D7-A024-A4045401CDDA}.SquirrelReleasify|Any CPU.ActiveCfg = Releasify|Any CPU
{55E0A34C-E039-43D7-A024-A4045401CDDA}.SquirrelReleasify|Any CPU.Build.0 = Releasify|Any CPU
{55E0A34C-E039-43D7-A024-A4045401CDDA}.SquirrelReleasify|ARM.ActiveCfg = Release|Any CPU
{55E0A34C-E039-43D7-A024-A4045401CDDA}.SquirrelReleasify|ARM.Build.0 = Release|Any CPU
{55E0A34C-E039-43D7-A024-A4045401CDDA}.SquirrelReleasify|x64.ActiveCfg = Release|Any CPU
{55E0A34C-E039-43D7-A024-A4045401CDDA}.SquirrelReleasify|x64.Build.0 = Release|Any CPU
{55E0A34C-E039-43D7-A024-A4045401CDDA}.SquirrelReleasify|x86.ActiveCfg = Release|Any CPU
{55E0A34C-E039-43D7-A024-A4045401CDDA}.SquirrelReleasify|x86.Build.0 = Release|Any CPU
{E0693972-72C5-4E05-A9C5-A5943E4015C6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E0693972-72C5-4E05-A9C5-A5943E4015C6}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E0693972-72C5-4E05-A9C5-A5943E4015C6}.Debug|ARM.ActiveCfg = Debug|Any CPU
{E0693972-72C5-4E05-A9C5-A5943E4015C6}.Debug|ARM.Build.0 = Debug|Any CPU
{E0693972-72C5-4E05-A9C5-A5943E4015C6}.Debug|x64.ActiveCfg = Debug|Any CPU
{E0693972-72C5-4E05-A9C5-A5943E4015C6}.Debug|x64.Build.0 = Debug|Any CPU
{E0693972-72C5-4E05-A9C5-A5943E4015C6}.Debug|x86.ActiveCfg = Debug|Any CPU
{E0693972-72C5-4E05-A9C5-A5943E4015C6}.Debug|x86.Build.0 = Debug|Any CPU
{E0693972-72C5-4E05-A9C5-A5943E4015C6}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E0693972-72C5-4E05-A9C5-A5943E4015C6}.Release|Any CPU.Build.0 = Release|Any CPU
{E0693972-72C5-4E05-A9C5-A5943E4015C6}.Release|ARM.ActiveCfg = Release|Any CPU
{E0693972-72C5-4E05-A9C5-A5943E4015C6}.Release|ARM.Build.0 = Release|Any CPU
{E0693972-72C5-4E05-A9C5-A5943E4015C6}.Release|x64.ActiveCfg = Release|Any CPU
{E0693972-72C5-4E05-A9C5-A5943E4015C6}.Release|x64.Build.0 = Release|Any CPU
{E0693972-72C5-4E05-A9C5-A5943E4015C6}.Release|x86.ActiveCfg = Release|Any CPU
{E0693972-72C5-4E05-A9C5-A5943E4015C6}.Release|x86.Build.0 = Release|Any CPU
{E0693972-72C5-4E05-A9C5-A5943E4015C6}.SquirrelReleasify|Any CPU.ActiveCfg = Release|Any CPU
{E0693972-72C5-4E05-A9C5-A5943E4015C6}.SquirrelReleasify|ARM.ActiveCfg = Release|Any CPU
{E0693972-72C5-4E05-A9C5-A5943E4015C6}.SquirrelReleasify|ARM.Build.0 = Release|Any CPU
{E0693972-72C5-4E05-A9C5-A5943E4015C6}.SquirrelReleasify|x64.ActiveCfg = Release|Any CPU
{E0693972-72C5-4E05-A9C5-A5943E4015C6}.SquirrelReleasify|x64.Build.0 = Release|Any CPU
{E0693972-72C5-4E05-A9C5-A5943E4015C6}.SquirrelReleasify|x86.ActiveCfg = Release|Any CPU
{E0693972-72C5-4E05-A9C5-A5943E4015C6}.SquirrelReleasify|x86.Build.0 = Release|Any CPU
{4AAC3BEB-1DC1-483E-9D11-0E9334E80227}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{4AAC3BEB-1DC1-483E-9D11-0E9334E80227}.Debug|Any CPU.Build.0 = Debug|Any CPU
{4AAC3BEB-1DC1-483E-9D11-0E9334E80227}.Debug|ARM.ActiveCfg = Debug|Any CPU
{4AAC3BEB-1DC1-483E-9D11-0E9334E80227}.Debug|ARM.Build.0 = Debug|Any CPU
{4AAC3BEB-1DC1-483E-9D11-0E9334E80227}.Debug|x64.ActiveCfg = Debug|Any CPU
{4AAC3BEB-1DC1-483E-9D11-0E9334E80227}.Debug|x64.Build.0 = Debug|Any CPU
{4AAC3BEB-1DC1-483E-9D11-0E9334E80227}.Debug|x86.ActiveCfg = Debug|Any CPU
{4AAC3BEB-1DC1-483E-9D11-0E9334E80227}.Debug|x86.Build.0 = Debug|Any CPU
{4AAC3BEB-1DC1-483E-9D11-0E9334E80227}.Release|Any CPU.ActiveCfg = Release|Any CPU
{4AAC3BEB-1DC1-483E-9D11-0E9334E80227}.Release|Any CPU.Build.0 = Release|Any CPU
{4AAC3BEB-1DC1-483E-9D11-0E9334E80227}.Release|ARM.ActiveCfg = Release|Any CPU
{4AAC3BEB-1DC1-483E-9D11-0E9334E80227}.Release|ARM.Build.0 = Release|Any CPU
{4AAC3BEB-1DC1-483E-9D11-0E9334E80227}.Release|x64.ActiveCfg = Release|Any CPU
{4AAC3BEB-1DC1-483E-9D11-0E9334E80227}.Release|x64.Build.0 = Release|Any CPU
{4AAC3BEB-1DC1-483E-9D11-0E9334E80227}.Release|x86.ActiveCfg = Release|Any CPU
{4AAC3BEB-1DC1-483E-9D11-0E9334E80227}.Release|x86.Build.0 = Release|Any CPU
{4AAC3BEB-1DC1-483E-9D11-0E9334E80227}.SquirrelReleasify|Any CPU.ActiveCfg = Release|Any CPU
{4AAC3BEB-1DC1-483E-9D11-0E9334E80227}.SquirrelReleasify|Any CPU.Build.0 = Release|Any CPU
{4AAC3BEB-1DC1-483E-9D11-0E9334E80227}.SquirrelReleasify|ARM.ActiveCfg = Release|Any CPU
{4AAC3BEB-1DC1-483E-9D11-0E9334E80227}.SquirrelReleasify|ARM.Build.0 = Release|Any CPU
{4AAC3BEB-1DC1-483E-9D11-0E9334E80227}.SquirrelReleasify|x64.ActiveCfg = Release|Any CPU
{4AAC3BEB-1DC1-483E-9D11-0E9334E80227}.SquirrelReleasify|x64.Build.0 = Release|Any CPU
{4AAC3BEB-1DC1-483E-9D11-0E9334E80227}.SquirrelReleasify|x86.ActiveCfg = Release|Any CPU
{4AAC3BEB-1DC1-483E-9D11-0E9334E80227}.SquirrelReleasify|x86.Build.0 = Release|Any CPU
{537BE676-2FF6-4995-B05B-9CFACE852EC9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{537BE676-2FF6-4995-B05B-9CFACE852EC9}.Debug|Any CPU.Build.0 = Debug|Any CPU
{537BE676-2FF6-4995-B05B-9CFACE852EC9}.Debug|ARM.ActiveCfg = Debug|Any CPU
{537BE676-2FF6-4995-B05B-9CFACE852EC9}.Debug|ARM.Build.0 = Debug|Any CPU
{537BE676-2FF6-4995-B05B-9CFACE852EC9}.Debug|x64.ActiveCfg = Debug|Any CPU
{537BE676-2FF6-4995-B05B-9CFACE852EC9}.Debug|x64.Build.0 = Debug|Any CPU
{537BE676-2FF6-4995-B05B-9CFACE852EC9}.Debug|x86.ActiveCfg = Debug|Any CPU
{537BE676-2FF6-4995-B05B-9CFACE852EC9}.Debug|x86.Build.0 = Debug|Any CPU
{537BE676-2FF6-4995-B05B-9CFACE852EC9}.Release|Any CPU.ActiveCfg = Release|Any CPU
{537BE676-2FF6-4995-B05B-9CFACE852EC9}.Release|Any CPU.Build.0 = Release|Any CPU
{537BE676-2FF6-4995-B05B-9CFACE852EC9}.Release|ARM.ActiveCfg = Release|Any CPU
{537BE676-2FF6-4995-B05B-9CFACE852EC9}.Release|ARM.Build.0 = Release|Any CPU
{537BE676-2FF6-4995-B05B-9CFACE852EC9}.Release|x64.ActiveCfg = Release|Any CPU
{537BE676-2FF6-4995-B05B-9CFACE852EC9}.Release|x64.Build.0 = Release|Any CPU
{537BE676-2FF6-4995-B05B-9CFACE852EC9}.Release|x86.ActiveCfg = Release|Any CPU
{537BE676-2FF6-4995-B05B-9CFACE852EC9}.Release|x86.Build.0 = Release|Any CPU
{537BE676-2FF6-4995-B05B-9CFACE852EC9}.SquirrelReleasify|Any CPU.ActiveCfg = Release|Any CPU
{537BE676-2FF6-4995-B05B-9CFACE852EC9}.SquirrelReleasify|ARM.ActiveCfg = Release|Any CPU
{537BE676-2FF6-4995-B05B-9CFACE852EC9}.SquirrelReleasify|ARM.Build.0 = Release|Any CPU
{537BE676-2FF6-4995-B05B-9CFACE852EC9}.SquirrelReleasify|x64.ActiveCfg = Release|Any CPU
{537BE676-2FF6-4995-B05B-9CFACE852EC9}.SquirrelReleasify|x64.Build.0 = Release|Any CPU
{537BE676-2FF6-4995-B05B-9CFACE852EC9}.SquirrelReleasify|x86.ActiveCfg = Release|Any CPU
{537BE676-2FF6-4995-B05B-9CFACE852EC9}.SquirrelReleasify|x86.Build.0 = Release|Any CPU
{41B8F5C2-65AA-42F0-A20B-6F95B13A9F48}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{41B8F5C2-65AA-42F0-A20B-6F95B13A9F48}.Debug|Any CPU.Build.0 = Debug|Any CPU
{41B8F5C2-65AA-42F0-A20B-6F95B13A9F48}.Debug|ARM.ActiveCfg = Debug|Any CPU
{41B8F5C2-65AA-42F0-A20B-6F95B13A9F48}.Debug|ARM.Build.0 = Debug|Any CPU
{41B8F5C2-65AA-42F0-A20B-6F95B13A9F48}.Debug|x64.ActiveCfg = Debug|Any CPU
{41B8F5C2-65AA-42F0-A20B-6F95B13A9F48}.Debug|x64.Build.0 = Debug|Any CPU
{41B8F5C2-65AA-42F0-A20B-6F95B13A9F48}.Debug|x86.ActiveCfg = Debug|Any CPU
{41B8F5C2-65AA-42F0-A20B-6F95B13A9F48}.Debug|x86.Build.0 = Debug|Any CPU
{41B8F5C2-65AA-42F0-A20B-6F95B13A9F48}.Release|Any CPU.ActiveCfg = Release|Any CPU
{41B8F5C2-65AA-42F0-A20B-6F95B13A9F48}.Release|Any CPU.Build.0 = Release|Any CPU
{41B8F5C2-65AA-42F0-A20B-6F95B13A9F48}.Release|ARM.ActiveCfg = Release|Any CPU
{41B8F5C2-65AA-42F0-A20B-6F95B13A9F48}.Release|ARM.Build.0 = Release|Any CPU
{41B8F5C2-65AA-42F0-A20B-6F95B13A9F48}.Release|x64.ActiveCfg = Release|Any CPU
{41B8F5C2-65AA-42F0-A20B-6F95B13A9F48}.Release|x64.Build.0 = Release|Any CPU
{41B8F5C2-65AA-42F0-A20B-6F95B13A9F48}.Release|x86.ActiveCfg = Release|Any CPU
{41B8F5C2-65AA-42F0-A20B-6F95B13A9F48}.Release|x86.Build.0 = Release|Any CPU
{41B8F5C2-65AA-42F0-A20B-6F95B13A9F48}.SquirrelReleasify|Any CPU.ActiveCfg = Release|Any CPU
{41B8F5C2-65AA-42F0-A20B-6F95B13A9F48}.SquirrelReleasify|Any CPU.Build.0 = Release|Any CPU
{41B8F5C2-65AA-42F0-A20B-6F95B13A9F48}.SquirrelReleasify|ARM.ActiveCfg = Release|Any CPU
{41B8F5C2-65AA-42F0-A20B-6F95B13A9F48}.SquirrelReleasify|ARM.Build.0 = Release|Any CPU
{41B8F5C2-65AA-42F0-A20B-6F95B13A9F48}.SquirrelReleasify|x64.ActiveCfg = Release|Any CPU
{41B8F5C2-65AA-42F0-A20B-6F95B13A9F48}.SquirrelReleasify|x64.Build.0 = Release|Any CPU
{41B8F5C2-65AA-42F0-A20B-6F95B13A9F48}.SquirrelReleasify|x86.ActiveCfg = Release|Any CPU
{41B8F5C2-65AA-42F0-A20B-6F95B13A9F48}.SquirrelReleasify|x86.Build.0 = Release|Any CPU
{450AC313-BF25-4BFD-A066-9F39F026FDCF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{450AC313-BF25-4BFD-A066-9F39F026FDCF}.Debug|Any CPU.Build.0 = Debug|Any CPU
{450AC313-BF25-4BFD-A066-9F39F026FDCF}.Debug|ARM.ActiveCfg = Debug|Any CPU
{450AC313-BF25-4BFD-A066-9F39F026FDCF}.Debug|ARM.Build.0 = Debug|Any CPU
{450AC313-BF25-4BFD-A066-9F39F026FDCF}.Debug|x64.ActiveCfg = Debug|Any CPU
{450AC313-BF25-4BFD-A066-9F39F026FDCF}.Debug|x64.Build.0 = Debug|Any CPU
{450AC313-BF25-4BFD-A066-9F39F026FDCF}.Debug|x86.ActiveCfg = Debug|Any CPU
{450AC313-BF25-4BFD-A066-9F39F026FDCF}.Debug|x86.Build.0 = Debug|Any CPU
{450AC313-BF25-4BFD-A066-9F39F026FDCF}.Release|Any CPU.ActiveCfg = Release|Any CPU
{450AC313-BF25-4BFD-A066-9F39F026FDCF}.Release|Any CPU.Build.0 = Release|Any CPU
{450AC313-BF25-4BFD-A066-9F39F026FDCF}.Release|ARM.ActiveCfg = Release|Any CPU
{450AC313-BF25-4BFD-A066-9F39F026FDCF}.Release|ARM.Build.0 = Release|Any CPU
{450AC313-BF25-4BFD-A066-9F39F026FDCF}.Release|x64.ActiveCfg = Release|Any CPU
{450AC313-BF25-4BFD-A066-9F39F026FDCF}.Release|x64.Build.0 = Release|Any CPU
{450AC313-BF25-4BFD-A066-9F39F026FDCF}.Release|x86.ActiveCfg = Release|Any CPU
{450AC313-BF25-4BFD-A066-9F39F026FDCF}.Release|x86.Build.0 = Release|Any CPU
{450AC313-BF25-4BFD-A066-9F39F026FDCF}.SquirrelReleasify|Any CPU.ActiveCfg = Release|Any CPU
{450AC313-BF25-4BFD-A066-9F39F026FDCF}.SquirrelReleasify|ARM.ActiveCfg = Release|Any CPU
{450AC313-BF25-4BFD-A066-9F39F026FDCF}.SquirrelReleasify|ARM.Build.0 = Release|Any CPU
{450AC313-BF25-4BFD-A066-9F39F026FDCF}.SquirrelReleasify|x64.ActiveCfg = Release|Any CPU
{450AC313-BF25-4BFD-A066-9F39F026FDCF}.SquirrelReleasify|x64.Build.0 = Release|Any CPU
{450AC313-BF25-4BFD-A066-9F39F026FDCF}.SquirrelReleasify|x86.ActiveCfg = Release|Any CPU
{450AC313-BF25-4BFD-A066-9F39F026FDCF}.SquirrelReleasify|x86.Build.0 = Release|Any CPU
{0F333344-7695-47B2-B0E6-172E4DE74819}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{0F333344-7695-47B2-B0E6-172E4DE74819}.Debug|Any CPU.Build.0 = Debug|Any CPU
{0F333344-7695-47B2-B0E6-172E4DE74819}.Debug|ARM.ActiveCfg = Debug|Any CPU
{0F333344-7695-47B2-B0E6-172E4DE74819}.Debug|ARM.Build.0 = Debug|Any CPU
{0F333344-7695-47B2-B0E6-172E4DE74819}.Debug|x64.ActiveCfg = Debug|Any CPU
{0F333344-7695-47B2-B0E6-172E4DE74819}.Debug|x64.Build.0 = Debug|Any CPU
{0F333344-7695-47B2-B0E6-172E4DE74819}.Debug|x86.ActiveCfg = Debug|Any CPU
{0F333344-7695-47B2-B0E6-172E4DE74819}.Debug|x86.Build.0 = Debug|Any CPU
{0F333344-7695-47B2-B0E6-172E4DE74819}.Release|Any CPU.ActiveCfg = Release|Any CPU
{0F333344-7695-47B2-B0E6-172E4DE74819}.Release|Any CPU.Build.0 = Release|Any CPU
{0F333344-7695-47B2-B0E6-172E4DE74819}.Release|ARM.ActiveCfg = Release|Any CPU
{0F333344-7695-47B2-B0E6-172E4DE74819}.Release|ARM.Build.0 = Release|Any CPU
{0F333344-7695-47B2-B0E6-172E4DE74819}.Release|x64.ActiveCfg = Release|Any CPU
{0F333344-7695-47B2-B0E6-172E4DE74819}.Release|x64.Build.0 = Release|Any CPU
{0F333344-7695-47B2-B0E6-172E4DE74819}.Release|x86.ActiveCfg = Release|Any CPU
{0F333344-7695-47B2-B0E6-172E4DE74819}.Release|x86.Build.0 = Release|Any CPU
{0F333344-7695-47B2-B0E6-172E4DE74819}.SquirrelReleasify|Any CPU.ActiveCfg = Release|Any CPU
{0F333344-7695-47B2-B0E6-172E4DE74819}.SquirrelReleasify|Any CPU.Build.0 = Release|Any CPU
{0F333344-7695-47B2-B0E6-172E4DE74819}.SquirrelReleasify|ARM.ActiveCfg = Release|Any CPU
{0F333344-7695-47B2-B0E6-172E4DE74819}.SquirrelReleasify|ARM.Build.0 = Release|Any CPU
{0F333344-7695-47B2-B0E6-172E4DE74819}.SquirrelReleasify|x64.ActiveCfg = Release|Any CPU
{0F333344-7695-47B2-B0E6-172E4DE74819}.SquirrelReleasify|x64.Build.0 = Release|Any CPU
{0F333344-7695-47B2-B0E6-172E4DE74819}.SquirrelReleasify|x86.ActiveCfg = Release|Any CPU
{0F333344-7695-47B2-B0E6-172E4DE74819}.SquirrelReleasify|x86.Build.0 = Release|Any CPU
{8CB44F28-2956-4C2A-9314-72727262EDD4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{8CB44F28-2956-4C2A-9314-72727262EDD4}.Debug|Any CPU.Build.0 = Debug|Any CPU
{8CB44F28-2956-4C2A-9314-72727262EDD4}.Debug|ARM.ActiveCfg = Debug|Any CPU
{8CB44F28-2956-4C2A-9314-72727262EDD4}.Debug|ARM.Build.0 = Debug|Any CPU
{8CB44F28-2956-4C2A-9314-72727262EDD4}.Debug|x64.ActiveCfg = Debug|Any CPU
{8CB44F28-2956-4C2A-9314-72727262EDD4}.Debug|x64.Build.0 = Debug|Any CPU
{8CB44F28-2956-4C2A-9314-72727262EDD4}.Debug|x86.ActiveCfg = Debug|Any CPU
{8CB44F28-2956-4C2A-9314-72727262EDD4}.Debug|x86.Build.0 = Debug|Any CPU
{8CB44F28-2956-4C2A-9314-72727262EDD4}.Release|Any CPU.ActiveCfg = Release|Any CPU
{8CB44F28-2956-4C2A-9314-72727262EDD4}.Release|Any CPU.Build.0 = Release|Any CPU
{8CB44F28-2956-4C2A-9314-72727262EDD4}.Release|ARM.ActiveCfg = Release|Any CPU
{8CB44F28-2956-4C2A-9314-72727262EDD4}.Release|ARM.Build.0 = Release|Any CPU
{8CB44F28-2956-4C2A-9314-72727262EDD4}.Release|x64.ActiveCfg = Release|Any CPU
{8CB44F28-2956-4C2A-9314-72727262EDD4}.Release|x64.Build.0 = Release|Any CPU
{8CB44F28-2956-4C2A-9314-72727262EDD4}.Release|x86.ActiveCfg = Release|Any CPU
{8CB44F28-2956-4C2A-9314-72727262EDD4}.Release|x86.Build.0 = Release|Any CPU
{8CB44F28-2956-4C2A-9314-72727262EDD4}.SquirrelReleasify|Any CPU.ActiveCfg = Release|Any CPU
{8CB44F28-2956-4C2A-9314-72727262EDD4}.SquirrelReleasify|Any CPU.Build.0 = Release|Any CPU
{8CB44F28-2956-4C2A-9314-72727262EDD4}.SquirrelReleasify|ARM.ActiveCfg = Release|Any CPU
{8CB44F28-2956-4C2A-9314-72727262EDD4}.SquirrelReleasify|ARM.Build.0 = Release|Any CPU
{8CB44F28-2956-4C2A-9314-72727262EDD4}.SquirrelReleasify|x64.ActiveCfg = Release|Any CPU
{8CB44F28-2956-4C2A-9314-72727262EDD4}.SquirrelReleasify|x64.Build.0 = Release|Any CPU
{8CB44F28-2956-4C2A-9314-72727262EDD4}.SquirrelReleasify|x86.ActiveCfg = Release|Any CPU
{8CB44F28-2956-4C2A-9314-72727262EDD4}.SquirrelReleasify|x86.Build.0 = Release|Any CPU
{1E42A658-45C4-4DD9-83C5-2A10728DBDFA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1E42A658-45C4-4DD9-83C5-2A10728DBDFA}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1E42A658-45C4-4DD9-83C5-2A10728DBDFA}.Debug|ARM.ActiveCfg = Debug|Any CPU
{1E42A658-45C4-4DD9-83C5-2A10728DBDFA}.Debug|ARM.Build.0 = Debug|Any CPU
{1E42A658-45C4-4DD9-83C5-2A10728DBDFA}.Debug|x64.ActiveCfg = Debug|Any CPU
{1E42A658-45C4-4DD9-83C5-2A10728DBDFA}.Debug|x64.Build.0 = Debug|Any CPU
{1E42A658-45C4-4DD9-83C5-2A10728DBDFA}.Debug|x86.ActiveCfg = Debug|Any CPU
{1E42A658-45C4-4DD9-83C5-2A10728DBDFA}.Debug|x86.Build.0 = Debug|Any CPU
{1E42A658-45C4-4DD9-83C5-2A10728DBDFA}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1E42A658-45C4-4DD9-83C5-2A10728DBDFA}.Release|Any CPU.Build.0 = Release|Any CPU
{1E42A658-45C4-4DD9-83C5-2A10728DBDFA}.Release|ARM.ActiveCfg = Release|Any CPU
{1E42A658-45C4-4DD9-83C5-2A10728DBDFA}.Release|ARM.Build.0 = Release|Any CPU
{1E42A658-45C4-4DD9-83C5-2A10728DBDFA}.Release|x64.ActiveCfg = Release|Any CPU
{1E42A658-45C4-4DD9-83C5-2A10728DBDFA}.Release|x64.Build.0 = Release|Any CPU
{1E42A658-45C4-4DD9-83C5-2A10728DBDFA}.Release|x86.ActiveCfg = Release|Any CPU
{1E42A658-45C4-4DD9-83C5-2A10728DBDFA}.Release|x86.Build.0 = Release|Any CPU
{1E42A658-45C4-4DD9-83C5-2A10728DBDFA}.SquirrelReleasify|Any CPU.ActiveCfg = Release|Any CPU
{1E42A658-45C4-4DD9-83C5-2A10728DBDFA}.SquirrelReleasify|ARM.ActiveCfg = Release|Any CPU
{1E42A658-45C4-4DD9-83C5-2A10728DBDFA}.SquirrelReleasify|ARM.Build.0 = Release|Any CPU
{1E42A658-45C4-4DD9-83C5-2A10728DBDFA}.SquirrelReleasify|x64.ActiveCfg = Release|Any CPU
{1E42A658-45C4-4DD9-83C5-2A10728DBDFA}.SquirrelReleasify|x64.Build.0 = Release|Any CPU
{1E42A658-45C4-4DD9-83C5-2A10728DBDFA}.SquirrelReleasify|x86.ActiveCfg = Release|Any CPU
{1E42A658-45C4-4DD9-83C5-2A10728DBDFA}.SquirrelReleasify|x86.Build.0 = Release|Any CPU
{3AB98B6E-05DB-44FA-9DAD-584AA88F0739}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{3AB98B6E-05DB-44FA-9DAD-584AA88F0739}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3AB98B6E-05DB-44FA-9DAD-584AA88F0739}.Debug|ARM.ActiveCfg = Debug|Any CPU
{3AB98B6E-05DB-44FA-9DAD-584AA88F0739}.Debug|ARM.Build.0 = Debug|Any CPU
{3AB98B6E-05DB-44FA-9DAD-584AA88F0739}.Debug|x64.ActiveCfg = Debug|Any CPU
{3AB98B6E-05DB-44FA-9DAD-584AA88F0739}.Debug|x64.Build.0 = Debug|Any CPU
{3AB98B6E-05DB-44FA-9DAD-584AA88F0739}.Debug|x86.ActiveCfg = Debug|Any CPU
{3AB98B6E-05DB-44FA-9DAD-584AA88F0739}.Debug|x86.Build.0 = Debug|Any CPU
{3AB98B6E-05DB-44FA-9DAD-584AA88F0739}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3AB98B6E-05DB-44FA-9DAD-584AA88F0739}.Release|Any CPU.Build.0 = Release|Any CPU
{3AB98B6E-05DB-44FA-9DAD-584AA88F0739}.Release|ARM.ActiveCfg = Release|Any CPU
{3AB98B6E-05DB-44FA-9DAD-584AA88F0739}.Release|ARM.Build.0 = Release|Any CPU
{3AB98B6E-05DB-44FA-9DAD-584AA88F0739}.Release|x64.ActiveCfg = Release|Any CPU
{3AB98B6E-05DB-44FA-9DAD-584AA88F0739}.Release|x64.Build.0 = Release|Any CPU
{3AB98B6E-05DB-44FA-9DAD-584AA88F0739}.Release|x86.ActiveCfg = Release|Any CPU
{3AB98B6E-05DB-44FA-9DAD-584AA88F0739}.Release|x86.Build.0 = Release|Any CPU
{3AB98B6E-05DB-44FA-9DAD-584AA88F0739}.SquirrelReleasify|Any CPU.ActiveCfg = Release|Any CPU
{3AB98B6E-05DB-44FA-9DAD-584AA88F0739}.SquirrelReleasify|Any CPU.Build.0 = Release|Any CPU
{3AB98B6E-05DB-44FA-9DAD-584AA88F0739}.SquirrelReleasify|ARM.ActiveCfg = Release|Any CPU
{3AB98B6E-05DB-44FA-9DAD-584AA88F0739}.SquirrelReleasify|ARM.Build.0 = Release|Any CPU
{3AB98B6E-05DB-44FA-9DAD-584AA88F0739}.SquirrelReleasify|x64.ActiveCfg = Release|Any CPU
{3AB98B6E-05DB-44FA-9DAD-584AA88F0739}.SquirrelReleasify|x64.Build.0 = Release|Any CPU
{3AB98B6E-05DB-44FA-9DAD-584AA88F0739}.SquirrelReleasify|x86.ActiveCfg = Release|Any CPU
{3AB98B6E-05DB-44FA-9DAD-584AA88F0739}.SquirrelReleasify|x86.Build.0 = Release|Any CPU
{58CD3B9C-EBBA-4527-A81C-78B7EA9CA298}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{58CD3B9C-EBBA-4527-A81C-78B7EA9CA298}.Debug|Any CPU.Build.0 = Debug|Any CPU
{58CD3B9C-EBBA-4527-A81C-78B7EA9CA298}.Debug|ARM.ActiveCfg = Debug|Any CPU
{58CD3B9C-EBBA-4527-A81C-78B7EA9CA298}.Debug|ARM.Build.0 = Debug|Any CPU
{58CD3B9C-EBBA-4527-A81C-78B7EA9CA298}.Debug|x64.ActiveCfg = Debug|Any CPU
{58CD3B9C-EBBA-4527-A81C-78B7EA9CA298}.Debug|x64.Build.0 = Debug|Any CPU
{58CD3B9C-EBBA-4527-A81C-78B7EA9CA298}.Debug|x86.ActiveCfg = Debug|Any CPU
{58CD3B9C-EBBA-4527-A81C-78B7EA9CA298}.Debug|x86.Build.0 = Debug|Any CPU
{58CD3B9C-EBBA-4527-A81C-78B7EA9CA298}.Release|Any CPU.ActiveCfg = Release|Any CPU
{58CD3B9C-EBBA-4527-A81C-78B7EA9CA298}.Release|Any CPU.Build.0 = Release|Any CPU
{58CD3B9C-EBBA-4527-A81C-78B7EA9CA298}.Release|ARM.ActiveCfg = Release|Any CPU
{58CD3B9C-EBBA-4527-A81C-78B7EA9CA298}.Release|ARM.Build.0 = Release|Any CPU
{58CD3B9C-EBBA-4527-A81C-78B7EA9CA298}.Release|x64.ActiveCfg = Release|Any CPU
{58CD3B9C-EBBA-4527-A81C-78B7EA9CA298}.Release|x64.Build.0 = Release|Any CPU
{58CD3B9C-EBBA-4527-A81C-78B7EA9CA298}.Release|x86.ActiveCfg = Release|Any CPU
{58CD3B9C-EBBA-4527-A81C-78B7EA9CA298}.Release|x86.Build.0 = Release|Any CPU
{58CD3B9C-EBBA-4527-A81C-78B7EA9CA298}.SquirrelReleasify|Any CPU.ActiveCfg = Release|Any CPU
{58CD3B9C-EBBA-4527-A81C-78B7EA9CA298}.SquirrelReleasify|ARM.ActiveCfg = Release|Any CPU
{58CD3B9C-EBBA-4527-A81C-78B7EA9CA298}.SquirrelReleasify|ARM.Build.0 = Release|Any CPU
{58CD3B9C-EBBA-4527-A81C-78B7EA9CA298}.SquirrelReleasify|x64.ActiveCfg = Release|Any CPU
{58CD3B9C-EBBA-4527-A81C-78B7EA9CA298}.SquirrelReleasify|x64.Build.0 = Release|Any CPU
{58CD3B9C-EBBA-4527-A81C-78B7EA9CA298}.SquirrelReleasify|x86.ActiveCfg = Release|Any CPU
{58CD3B9C-EBBA-4527-A81C-78B7EA9CA298}.SquirrelReleasify|x86.Build.0 = Release|Any CPU
{10A7C2BC-EC6F-4A38-BDDA-E35935004C02}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{10A7C2BC-EC6F-4A38-BDDA-E35935004C02}.Debug|Any CPU.Build.0 = Debug|Any CPU
{10A7C2BC-EC6F-4A38-BDDA-E35935004C02}.Debug|ARM.ActiveCfg = Debug|Any CPU
{10A7C2BC-EC6F-4A38-BDDA-E35935004C02}.Debug|ARM.Build.0 = Debug|Any CPU
{10A7C2BC-EC6F-4A38-BDDA-E35935004C02}.Debug|x64.ActiveCfg = Debug|Any CPU
{10A7C2BC-EC6F-4A38-BDDA-E35935004C02}.Debug|x64.Build.0 = Debug|Any CPU
{10A7C2BC-EC6F-4A38-BDDA-E35935004C02}.Debug|x86.ActiveCfg = Debug|Any CPU
{10A7C2BC-EC6F-4A38-BDDA-E35935004C02}.Debug|x86.Build.0 = Debug|Any CPU
{10A7C2BC-EC6F-4A38-BDDA-E35935004C02}.Release|Any CPU.ActiveCfg = Release|Any CPU
{10A7C2BC-EC6F-4A38-BDDA-E35935004C02}.Release|Any CPU.Build.0 = Release|Any CPU
{10A7C2BC-EC6F-4A38-BDDA-E35935004C02}.Release|ARM.ActiveCfg = Release|Any CPU
{10A7C2BC-EC6F-4A38-BDDA-E35935004C02}.Release|ARM.Build.0 = Release|Any CPU
{10A7C2BC-EC6F-4A38-BDDA-E35935004C02}.Release|x64.ActiveCfg = Release|Any CPU
{10A7C2BC-EC6F-4A38-BDDA-E35935004C02}.Release|x64.Build.0 = Release|Any CPU
{10A7C2BC-EC6F-4A38-BDDA-E35935004C02}.Release|x86.ActiveCfg = Release|Any CPU
{10A7C2BC-EC6F-4A38-BDDA-E35935004C02}.Release|x86.Build.0 = Release|Any CPU
{10A7C2BC-EC6F-4A38-BDDA-E35935004C02}.SquirrelReleasify|Any CPU.ActiveCfg = Release|Any CPU
{10A7C2BC-EC6F-4A38-BDDA-E35935004C02}.SquirrelReleasify|Any CPU.Build.0 = Release|Any CPU
{10A7C2BC-EC6F-4A38-BDDA-E35935004C02}.SquirrelReleasify|ARM.ActiveCfg = Release|Any CPU
{10A7C2BC-EC6F-4A38-BDDA-E35935004C02}.SquirrelReleasify|ARM.Build.0 = Release|Any CPU
{10A7C2BC-EC6F-4A38-BDDA-E35935004C02}.SquirrelReleasify|x64.ActiveCfg = Release|Any CPU
{10A7C2BC-EC6F-4A38-BDDA-E35935004C02}.SquirrelReleasify|x64.Build.0 = Release|Any CPU
{10A7C2BC-EC6F-4A38-BDDA-E35935004C02}.SquirrelReleasify|x86.ActiveCfg = Release|Any CPU
{10A7C2BC-EC6F-4A38-BDDA-E35935004C02}.SquirrelReleasify|x86.Build.0 = Release|Any CPU
{46383F20-02DF-48B4-B092-9088FA4ACD5A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{46383F20-02DF-48B4-B092-9088FA4ACD5A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{46383F20-02DF-48B4-B092-9088FA4ACD5A}.Debug|ARM.ActiveCfg = Debug|Any CPU
{46383F20-02DF-48B4-B092-9088FA4ACD5A}.Debug|ARM.Build.0 = Debug|Any CPU
{46383F20-02DF-48B4-B092-9088FA4ACD5A}.Debug|x64.ActiveCfg = Debug|Any CPU
{46383F20-02DF-48B4-B092-9088FA4ACD5A}.Debug|x64.Build.0 = Debug|Any CPU
{46383F20-02DF-48B4-B092-9088FA4ACD5A}.Debug|x86.ActiveCfg = Debug|Any CPU
{46383F20-02DF-48B4-B092-9088FA4ACD5A}.Debug|x86.Build.0 = Debug|Any CPU
{46383F20-02DF-48B4-B092-9088FA4ACD5A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{46383F20-02DF-48B4-B092-9088FA4ACD5A}.Release|Any CPU.Build.0 = Release|Any CPU
{46383F20-02DF-48B4-B092-9088FA4ACD5A}.Release|ARM.ActiveCfg = Release|Any CPU
{46383F20-02DF-48B4-B092-9088FA4ACD5A}.Release|ARM.Build.0 = Release|Any CPU
{46383F20-02DF-48B4-B092-9088FA4ACD5A}.Release|x64.ActiveCfg = Release|Any CPU
{46383F20-02DF-48B4-B092-9088FA4ACD5A}.Release|x64.Build.0 = Release|Any CPU
{46383F20-02DF-48B4-B092-9088FA4ACD5A}.Release|x86.ActiveCfg = Release|Any CPU
{46383F20-02DF-48B4-B092-9088FA4ACD5A}.Release|x86.Build.0 = Release|Any CPU
{46383F20-02DF-48B4-B092-9088FA4ACD5A}.SquirrelReleasify|Any CPU.ActiveCfg = Release|Any CPU
{46383F20-02DF-48B4-B092-9088FA4ACD5A}.SquirrelReleasify|Any CPU.Build.0 = Release|Any CPU
{46383F20-02DF-48B4-B092-9088FA4ACD5A}.SquirrelReleasify|ARM.ActiveCfg = Release|Any CPU
{46383F20-02DF-48B4-B092-9088FA4ACD5A}.SquirrelReleasify|ARM.Build.0 = Release|Any CPU
{46383F20-02DF-48B4-B092-9088FA4ACD5A}.SquirrelReleasify|x64.ActiveCfg = Release|Any CPU
{46383F20-02DF-48B4-B092-9088FA4ACD5A}.SquirrelReleasify|x64.Build.0 = Release|Any CPU
{46383F20-02DF-48B4-B092-9088FA4ACD5A}.SquirrelReleasify|x86.ActiveCfg = Release|Any CPU
{46383F20-02DF-48B4-B092-9088FA4ACD5A}.SquirrelReleasify|x86.Build.0 = Release|Any CPU
{1F30CF6D-A5BF-4777-B8BA-E34F439FE8E5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1F30CF6D-A5BF-4777-B8BA-E34F439FE8E5}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1F30CF6D-A5BF-4777-B8BA-E34F439FE8E5}.Debug|ARM.ActiveCfg = Debug|Any CPU
{1F30CF6D-A5BF-4777-B8BA-E34F439FE8E5}.Debug|ARM.Build.0 = Debug|Any CPU
{1F30CF6D-A5BF-4777-B8BA-E34F439FE8E5}.Debug|x64.ActiveCfg = Debug|Any CPU
{1F30CF6D-A5BF-4777-B8BA-E34F439FE8E5}.Debug|x64.Build.0 = Debug|Any CPU
{1F30CF6D-A5BF-4777-B8BA-E34F439FE8E5}.Debug|x86.ActiveCfg = Debug|Any CPU
{1F30CF6D-A5BF-4777-B8BA-E34F439FE8E5}.Debug|x86.Build.0 = Debug|Any CPU
{1F30CF6D-A5BF-4777-B8BA-E34F439FE8E5}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1F30CF6D-A5BF-4777-B8BA-E34F439FE8E5}.Release|Any CPU.Build.0 = Release|Any CPU
{1F30CF6D-A5BF-4777-B8BA-E34F439FE8E5}.Release|ARM.ActiveCfg = Release|Any CPU
{1F30CF6D-A5BF-4777-B8BA-E34F439FE8E5}.Release|ARM.Build.0 = Release|Any CPU
{1F30CF6D-A5BF-4777-B8BA-E34F439FE8E5}.Release|x64.ActiveCfg = Release|Any CPU
{1F30CF6D-A5BF-4777-B8BA-E34F439FE8E5}.Release|x64.Build.0 = Release|Any CPU
{1F30CF6D-A5BF-4777-B8BA-E34F439FE8E5}.Release|x86.ActiveCfg = Release|Any CPU
{1F30CF6D-A5BF-4777-B8BA-E34F439FE8E5}.Release|x86.Build.0 = Release|Any CPU
{1F30CF6D-A5BF-4777-B8BA-E34F439FE8E5}.SquirrelReleasify|Any CPU.ActiveCfg = Release|Any CPU
{1F30CF6D-A5BF-4777-B8BA-E34F439FE8E5}.SquirrelReleasify|ARM.ActiveCfg = Release|Any CPU
{1F30CF6D-A5BF-4777-B8BA-E34F439FE8E5}.SquirrelReleasify|ARM.Build.0 = Release|Any CPU
{1F30CF6D-A5BF-4777-B8BA-E34F439FE8E5}.SquirrelReleasify|x64.ActiveCfg = Release|Any CPU
{1F30CF6D-A5BF-4777-B8BA-E34F439FE8E5}.SquirrelReleasify|x64.Build.0 = Release|Any CPU
{1F30CF6D-A5BF-4777-B8BA-E34F439FE8E5}.SquirrelReleasify|x86.ActiveCfg = Release|Any CPU
{1F30CF6D-A5BF-4777-B8BA-E34F439FE8E5}.SquirrelReleasify|x86.Build.0 = Release|Any CPU
{855B38CC-EEF2-471D-BBBC-EB3E2FF3D387}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{855B38CC-EEF2-471D-BBBC-EB3E2FF3D387}.Debug|Any CPU.Build.0 = Debug|Any CPU
{855B38CC-EEF2-471D-BBBC-EB3E2FF3D387}.Debug|ARM.ActiveCfg = Debug|Any CPU
{855B38CC-EEF2-471D-BBBC-EB3E2FF3D387}.Debug|ARM.Build.0 = Debug|Any CPU
{855B38CC-EEF2-471D-BBBC-EB3E2FF3D387}.Debug|x64.ActiveCfg = Debug|Any CPU
{855B38CC-EEF2-471D-BBBC-EB3E2FF3D387}.Debug|x64.Build.0 = Debug|Any CPU
{855B38CC-EEF2-471D-BBBC-EB3E2FF3D387}.Debug|x86.ActiveCfg = Debug|Any CPU
{855B38CC-EEF2-471D-BBBC-EB3E2FF3D387}.Debug|x86.Build.0 = Debug|Any CPU
{855B38CC-EEF2-471D-BBBC-EB3E2FF3D387}.Release|Any CPU.ActiveCfg = Release|Any CPU
{855B38CC-EEF2-471D-BBBC-EB3E2FF3D387}.Release|Any CPU.Build.0 = Release|Any CPU
{855B38CC-EEF2-471D-BBBC-EB3E2FF3D387}.Release|ARM.ActiveCfg = Release|Any CPU
{855B38CC-EEF2-471D-BBBC-EB3E2FF3D387}.Release|ARM.Build.0 = Release|Any CPU
{855B38CC-EEF2-471D-BBBC-EB3E2FF3D387}.Release|x64.ActiveCfg = Release|Any CPU
{855B38CC-EEF2-471D-BBBC-EB3E2FF3D387}.Release|x64.Build.0 = Release|Any CPU
{855B38CC-EEF2-471D-BBBC-EB3E2FF3D387}.Release|x86.ActiveCfg = Release|Any CPU
{855B38CC-EEF2-471D-BBBC-EB3E2FF3D387}.Release|x86.Build.0 = Release|Any CPU
{855B38CC-EEF2-471D-BBBC-EB3E2FF3D387}.SquirrelReleasify|Any CPU.ActiveCfg = Release|Any CPU
{855B38CC-EEF2-471D-BBBC-EB3E2FF3D387}.SquirrelReleasify|Any CPU.Build.0 = Release|Any CPU
{855B38CC-EEF2-471D-BBBC-EB3E2FF3D387}.SquirrelReleasify|ARM.ActiveCfg = Release|Any CPU
{855B38CC-EEF2-471D-BBBC-EB3E2FF3D387}.SquirrelReleasify|ARM.Build.0 = Release|Any CPU
{855B38CC-EEF2-471D-BBBC-EB3E2FF3D387}.SquirrelReleasify|x64.ActiveCfg = Release|Any CPU
{855B38CC-EEF2-471D-BBBC-EB3E2FF3D387}.SquirrelReleasify|x64.Build.0 = Release|Any CPU
{855B38CC-EEF2-471D-BBBC-EB3E2FF3D387}.SquirrelReleasify|x86.ActiveCfg = Release|Any CPU
{855B38CC-EEF2-471D-BBBC-EB3E2FF3D387}.SquirrelReleasify|x86.Build.0 = Release|Any CPU
{7A5720DE-A41B-47EA-AAAB-7C5608FF0C1F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{7A5720DE-A41B-47EA-AAAB-7C5608FF0C1F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7A5720DE-A41B-47EA-AAAB-7C5608FF0C1F}.Debug|ARM.ActiveCfg = Debug|Any CPU
{7A5720DE-A41B-47EA-AAAB-7C5608FF0C1F}.Debug|ARM.Build.0 = Debug|Any CPU
{7A5720DE-A41B-47EA-AAAB-7C5608FF0C1F}.Debug|x64.ActiveCfg = Debug|Any CPU
{7A5720DE-A41B-47EA-AAAB-7C5608FF0C1F}.Debug|x64.Build.0 = Debug|Any CPU
{7A5720DE-A41B-47EA-AAAB-7C5608FF0C1F}.Debug|x86.ActiveCfg = Debug|Any CPU
{7A5720DE-A41B-47EA-AAAB-7C5608FF0C1F}.Debug|x86.Build.0 = Debug|Any CPU
{7A5720DE-A41B-47EA-AAAB-7C5608FF0C1F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7A5720DE-A41B-47EA-AAAB-7C5608FF0C1F}.Release|Any CPU.Build.0 = Release|Any CPU
{7A5720DE-A41B-47EA-AAAB-7C5608FF0C1F}.Release|ARM.ActiveCfg = Release|Any CPU
{7A5720DE-A41B-47EA-AAAB-7C5608FF0C1F}.Release|ARM.Build.0 = Release|Any CPU
{7A5720DE-A41B-47EA-AAAB-7C5608FF0C1F}.Release|x64.ActiveCfg = Release|Any CPU
{7A5720DE-A41B-47EA-AAAB-7C5608FF0C1F}.Release|x64.Build.0 = Release|Any CPU
{7A5720DE-A41B-47EA-AAAB-7C5608FF0C1F}.Release|x86.ActiveCfg = Release|Any CPU
{7A5720DE-A41B-47EA-AAAB-7C5608FF0C1F}.Release|x86.Build.0 = Release|Any CPU
{7A5720DE-A41B-47EA-AAAB-7C5608FF0C1F}.SquirrelReleasify|Any CPU.ActiveCfg = Release|Any CPU
{7A5720DE-A41B-47EA-AAAB-7C5608FF0C1F}.SquirrelReleasify|ARM.ActiveCfg = Release|Any CPU
{7A5720DE-A41B-47EA-AAAB-7C5608FF0C1F}.SquirrelReleasify|ARM.Build.0 = Release|Any CPU
{7A5720DE-A41B-47EA-AAAB-7C5608FF0C1F}.SquirrelReleasify|x64.ActiveCfg = Release|Any CPU
{7A5720DE-A41B-47EA-AAAB-7C5608FF0C1F}.SquirrelReleasify|x64.Build.0 = Release|Any CPU
{7A5720DE-A41B-47EA-AAAB-7C5608FF0C1F}.SquirrelReleasify|x86.ActiveCfg = Release|Any CPU
{7A5720DE-A41B-47EA-AAAB-7C5608FF0C1F}.SquirrelReleasify|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {8A170BBA-F99C-4192-9467-A5669B1DE126}
EndGlobalSection
EndGlobal

View File

@@ -1,92 +1,95 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<section name="Filtration.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
</sectionGroup>
<sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<section name="Filtration.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</sectionGroup>
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
</startup>
<userSettings>
<Filtration.Properties.Settings>
<setting name="DefaultFilterDirectory" serializeAs="String">
<value />
</setting>
<setting name="ExtraLineBetweenBlocks" serializeAs="String">
<value>True</value>
</setting>
<setting name="SuppressUpdatesUpToVersionMajorPart" serializeAs="String">
<value>0</value>
</setting>
<setting name="SuppressUpdates" serializeAs="String">
<value>False</value>
</setting>
<setting name="SuppressUpdatesUpToVersionMinorPart" serializeAs="String">
<value>0</value>
</setting>
<setting name="StaticDataLastUpdated" serializeAs="String">
<value>2016-01-01</value>
</setting>
<setting name="DownloadPrereleaseUpdates" serializeAs="String">
<value>False</value>
</setting>
<setting name="ShowSectionBrowser" serializeAs="String">
<value>True</value>
</setting>
<setting name="ShowBlockGroupBrowser" serializeAs="String">
<value>True</value>
</setting>
<setting name="ShowBlockOutputPreview" serializeAs="String">
<value>True</value>
</setting>
<setting name="ShowAdvanced" serializeAs="String">
<value>False</value>
</setting>
<setting name="WindowState" serializeAs="String">
<value>Normal</value>
</setting>
<setting name="WindowWidth" serializeAs="String">
<value>1200</value>
</setting>
<setting name="WindowHeight" serializeAs="String">
<value>800</value>
</setting>
<setting name="LastActiveDocument" serializeAs="String">
<value />
</setting>
</Filtration.Properties.Settings>
</userSettings>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Xceed.Wpf.AvalonDock" publicKeyToken="3e4669d2f30244f4" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-3.4.0.0" newVersion="3.4.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="CommonServiceLocator" publicKeyToken="489b6accfaf20ef0" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.0.4.0" newVersion="2.0.4.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Windows.Interactivity" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
<applicationSettings>
<Filtration.Properties.Settings>
<setting name="ItemBaseTypesStaticDataUrl" serializeAs="String">
<value>http://ben-wallis.github.io/Filtration/ItemBaseTypes.txt</value>
</setting>
<setting name="ItemClassesStaticDataUrl" serializeAs="String">
<value>http://ben-wallis.github.io/Filtration/ItemClasses.txt</value>
</setting>
<setting name="UpdateDataUrl" serializeAs="String">
<value>http://ben-wallis.github.io/Filtration/filtration_version.xml</value>
</setting>
</Filtration.Properties.Settings>
</applicationSettings>
</configuration>
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<section name="Filtration.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
</sectionGroup>
<sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<section name="Filtration.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</sectionGroup>
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
</startup>
<userSettings>
<Filtration.Properties.Settings>
<setting name="DefaultFilterDirectory" serializeAs="String">
<value />
</setting>
<setting name="ExtraLineBetweenBlocks" serializeAs="String">
<value>True</value>
</setting>
<setting name="SuppressUpdatesUpToVersionMajorPart" serializeAs="String">
<value>0</value>
</setting>
<setting name="SuppressUpdates" serializeAs="String">
<value>False</value>
</setting>
<setting name="SuppressUpdatesUpToVersionMinorPart" serializeAs="String">
<value>0</value>
</setting>
<setting name="StaticDataLastUpdated" serializeAs="String">
<value>2016-01-01</value>
</setting>
<setting name="DownloadPrereleaseUpdates" serializeAs="String">
<value>False</value>
</setting>
<setting name="ShowSectionBrowser" serializeAs="String">
<value>True</value>
</setting>
<setting name="ShowBlockGroupBrowser" serializeAs="String">
<value>True</value>
</setting>
<setting name="ShowBlockOutputPreview" serializeAs="String">
<value>True</value>
</setting>
<setting name="ShowAdvanced" serializeAs="String">
<value>False</value>
</setting>
<setting name="WindowState" serializeAs="String">
<value>Normal</value>
</setting>
<setting name="WindowWidth" serializeAs="String">
<value>1200</value>
</setting>
<setting name="WindowHeight" serializeAs="String">
<value>800</value>
</setting>
<setting name="LastOpenScripts" serializeAs="String">
<value />
</setting>
<setting name="BlocksExpandedOnOpen" serializeAs="String">
<value>True</value>
</setting>
</Filtration.Properties.Settings>
</userSettings>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Xceed.Wpf.AvalonDock" publicKeyToken="3e4669d2f30244f4" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-3.4.0.0" newVersion="3.4.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="CommonServiceLocator" publicKeyToken="489b6accfaf20ef0" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.0.4.0" newVersion="2.0.4.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Windows.Interactivity" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
<applicationSettings>
<Filtration.Properties.Settings>
<setting name="ItemBaseTypesStaticDataUrl" serializeAs="String">
<value>http://ben-wallis.github.io/Filtration/ItemBaseTypes.txt</value>
</setting>
<setting name="ItemClassesStaticDataUrl" serializeAs="String">
<value>http://ben-wallis.github.io/Filtration/ItemClasses.txt</value>
</setting>
<setting name="UpdateDataUrl" serializeAs="String">
<value>http://ben-wallis.github.io/Filtration/filtration_version.xml</value>
</setting>
</Filtration.Properties.Settings>
</applicationSettings>
</configuration>

View File

@@ -43,7 +43,7 @@ namespace Filtration
cfg.CreateMap<StringThemeComponent, StringThemeComponentViewModel>().ReverseMap();
cfg.CreateMap<IconThemeComponent, IconThemeComponentViewModel>().ReverseMap();
cfg.CreateMap<EffectColorThemeComponent, EffectColorThemeComponentViewModel>().ReverseMap();
cfg.CreateMap<IThemeEditorViewModel, Theme>();
cfg.CreateMap<ThemeEditorViewModel, Theme>();
});
Mapper.AssertConfigurationIsValid();

View File

@@ -76,6 +76,9 @@
<Reference Include="DeltaCompressionDotNet.PatchApi, Version=1.1.0.0, Culture=neutral, PublicKeyToken=3e8888ee913ed789, processorArchitecture=MSIL">
<HintPath>..\packages\DeltaCompressionDotNet.1.1.0\lib\net20\DeltaCompressionDotNet.PatchApi.dll</HintPath>
</Reference>
<Reference Include="DynamicData, Version=6.7.0.2529, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\DynamicData.6.7.0.2529\lib\net46\DynamicData.dll</HintPath>
</Reference>
<Reference Include="Fluent, Version=6.1.0.326, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Fluent.Ribbon.6.1.0.326\lib\net45\Fluent.dll</HintPath>
</Reference>
@@ -114,7 +117,7 @@
<HintPath>..\packages\NLog.4.5.11\lib\net45\NLog.dll</HintPath>
</Reference>
<Reference Include="NuGet.Squirrel, Version=3.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\squirrel.windows.1.8.0\lib\Net45\NuGet.Squirrel.dll</HintPath>
<HintPath>..\packages\squirrel.windows.1.9.0\lib\Net45\NuGet.Squirrel.dll</HintPath>
</Reference>
<Reference Include="SharpCompress, Version=0.17.1.0, Culture=neutral, PublicKeyToken=afb0a02973931d96, processorArchitecture=MSIL">
<HintPath>..\packages\SharpCompress.0.17.1\lib\net45\SharpCompress.dll</HintPath>
@@ -122,14 +125,17 @@
<Reference Include="Splat, Version=1.6.2.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Splat.1.6.2\lib\Net45\Splat.dll</HintPath>
</Reference>
<Reference Include="Squirrel, Version=1.8.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\squirrel.windows.1.8.0\lib\Net45\Squirrel.dll</HintPath>
<Reference Include="Squirrel, Version=1.9.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\squirrel.windows.1.9.0\lib\Net45\Squirrel.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Configuration" />
<Reference Include="System.Data" />
<Reference Include="System.Drawing" />
<Reference Include="System.IO.Compression" />
<Reference Include="System.Reactive, Version=4.0.0.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL">
<HintPath>..\packages\System.Reactive.4.0.0\lib\net46\System.Reactive.dll</HintPath>
</Reference>
<Reference Include="System.Runtime.Remoting" />
<Reference Include="System.Runtime.Serialization" />
<Reference Include="System.ServiceModel" />
@@ -138,6 +144,7 @@
<HintPath>..\packages\System.ValueTuple.4.5.0\lib\net461\System.ValueTuple.dll</HintPath>
</Reference>
<Reference Include="System.Web" />
<Reference Include="System.Windows" />
<Reference Include="System.Windows.Controls.Input.Toolkit, Version=3.5.40128.1, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\packages\WPFToolkit.3.5.50211.1\lib\System.Windows.Controls.Input.Toolkit.dll</HintPath>
@@ -217,6 +224,7 @@
<Compile Include="Services\HTTPService.cs" />
<Compile Include="Services\ItemFilterPersistenceService.cs" />
<Compile Include="Services\ItemFilterScriptDirectoryService.cs" />
<Compile Include="Services\ScriptLoadingService.cs" />
<Compile Include="Services\SettingsService.cs" />
<Compile Include="Services\StaticDataService.cs" />
<Compile Include="Services\UpdateService.cs" />
@@ -230,12 +238,17 @@
<Compile Include="UserControls\EditableListBoxControl.xaml.cs">
<DependentUpon>EditableListBoxControl.xaml</DependentUpon>
</Compile>
<Compile Include="UserControls\EnableDisableToggleButton.xaml.cs">
<DependentUpon>EnableDisableToggleButton.xaml</DependentUpon>
</Compile>
<Compile Include="UserControls\ItemPreviewControl.xaml.cs">
<DependentUpon>ItemPreviewControl.xaml</DependentUpon>
</Compile>
<Compile Include="UserControls\ThemeComponentSelectionControl.xaml.cs">
<DependentUpon>ThemeComponentSelectionControl.xaml</DependentUpon>
</Compile>
<Compile Include="Utility\VisualTreeUtility.cs" />
<Compile Include="ViewModels\DesignTime\DesignTimeItemFilterBlockViewModel.cs" />
<Compile Include="ViewModels\DesignTime\DesignTimeSettingsPageViewModel.cs" />
<Compile Include="Views\AttachedProperties\SelectedItemsAttachedProperty.cs" />
<Compile Include="Utility\RoutedCommandHandler.cs" />
@@ -274,6 +287,10 @@
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="UserControls\EnableDisableToggleButton.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="UserControls\ThemeComponentSelectionControl.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
@@ -445,6 +462,7 @@
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
<EmbeddedResource Include="Resources\Prophecies.txt" />
<EmbeddedResource Include="Resources\ItemMods.txt" />
<Resource Include="Resources\loading_spinner.gif" />
<EmbeddedResource Include="Properties\Resources.resx">

View File

@@ -9,10 +9,24 @@
<description>A Path of Exile loot filter script editor</description>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<copyright>Copyright 2018</copyright>
<releaseNotes>* Fixed crash on exit</releaseNotes>
<releaseNotes>* Added support for new Prophecies block item type
* All open filter scripts are now remembered on exit and reopened when the application is started rather than just the last opened one (#95)
* Filter sections are once again now expanded by default when scripts are opened, unless the new "Auto-expand all sections when opening scripts" setting is disabled
* A new Clear Styles button has been added which removes all styles from the selected block (#96)
* New buttons for adding/removing DisableDropSound from selected blocks have been added (#110)
* The Enable/Disable Block toggle button is now visible on both the Regular Block Items and Appearance Block Items views
* When there are too many block items to fit horizontally in a block a horizontal scrollbar will now appear
* Fixed the application freezing for a long period of time when Ctrl+A (Select All) is performed
* Fixed the Switch to Appearance/Regular Block Items text overlapping block items
* Fixed theme saving (blank theme files were being saved) (#83)
* Fixed checkboxes in Block Group Browser (#97)
* Fixed the Select Path of Exile data directory dialog appearing after every upgrade (#94)
* Fixed an issue where custom sounds were only populated from the default Path of Exile data directory rather than the configured directory
* Clean installs no longer prompt to select the Path of Exile data directory if the default directory exists</releaseNotes>
<dependencies />
</metadata>
<files>
<file src="*.*" target="lib\net45\" exclude="*.pdb;*.nupkg;*.vshost.*;*.xml"/>
<file src="*.*" target="lib\net45\" exclude="*.pdb;*.nupkg;*.vshost.*;*.xml;*.log"/>
<file src="Resources\AlertSounds\*.mp3" target="lib\net45\Resources\AlertSounds\" />
</files>
</package>

View File

@@ -11,7 +11,7 @@ using System.Runtime.CompilerServices;
[assembly: AssemblyCulture("")]
[assembly: AssemblyVersion("1.1.0")]
[assembly: AssemblyInformationalVersion("1.1.0-beta1")]
[assembly: AssemblyInformationalVersion("1.1.0-beta5")]
[assembly: InternalsVisibleTo("Filtration.Tests")]
[assembly: InternalsVisibleTo("Filtration.ItemFilterPreview.Tests")]

View File

@@ -225,19 +225,21 @@ namespace Filtration.Properties {
}
/// <summary>
/// Looks up a localized string similar to A Mother&apos;s Parting Gift
/// Looks up a localized string similar to A Dab of Ink
///A Mother&apos;s Parting Gift
///Abandoned Wealth
///Aberrant Fossil
///Abyssal Axe
///Abyssal Cry
///Abyssal Sceptre
///Academy Map
///Acid Lakes Map
///Acid Caverns Map
///Added Chaos Damage Support
///Added Cold Damage Support
///Added Fire Damage Support
///Added Lightning Damage Support
///Additional Accuracy Support
///Advanced Traps Support
///Aetheric Fossil
///Agate Amulet
///Albino Rhoa Feather
@@ -251,10 +253,7 @@ namespace Filtration.Properties {
///Amber Amulet
///Ambush Boots
///Ambush Leaguestone
///Ambush Mitts
///Ambusher
///Amethyst Flask
///Amethyst [rest of string was truncated]&quot;;.
///Ambush [rest of string was truncated]&quot;;.
/// </summary>
internal static string ItemBaseTypes {
get {
@@ -266,7 +265,7 @@ namespace Filtration.Properties {
/// Looks up a localized string similar to Abyss Jewel
///Active Skill Gems
///Amulets
///Axe
///Axes
///Belts
///Body Armours
///Boots
@@ -288,12 +287,13 @@ namespace Filtration.Properties {
///Labyrinth Map Item
///Labyrinth Trinket
///Large Relics
///Leaguestone
///Leaguestones
///Life Flasks
///Mace
///Maces
///Mana Flasks
///Map Fragments
///Maps
///Medium Relics
///Misc Map Items
///One Hand Axes
///One Hand Maces
@@ -302,14 +302,12 @@ namespace Filtration.Properties {
///Piece
///Quest Items
///Quivers
///Relics
///Rings
///Sceptres
///Shields
///Stackable Currency
///Staves
///Support Skill Gems
///Sword
///T [rest of string was truncated]&quot;;.
///Small Relics
///Stackable Curre [rest of string was truncated]&quot;;.
/// </summary>
internal static string ItemClasses {
get {
@@ -382,6 +380,15 @@ namespace Filtration.Properties {
}
}
/// <summary>
/// Looks up a localized string similar to A Gracious Master.
/// </summary>
internal static string Prophecies {
get {
return ResourceManager.GetString("Prophecies", resourceCulture);
}
}
/// <summary>
/// Looks up a localized resource of type System.IO.UnmanagedMemoryStream similar to System.IO.MemoryStream.
/// </summary>

View File

@@ -211,4 +211,7 @@
<data name="ItemMods" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\ItemMods.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252</value>
</data>
<data name="Prophecies" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Prophecies.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252</value>
</data>
</root>

View File

@@ -12,7 +12,7 @@ namespace Filtration.Properties {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "15.8.0.0")]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "15.9.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
@@ -229,5 +229,17 @@ namespace Filtration.Properties {
this["LastOpenScripts"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("True")]
public bool BlocksExpandedOnOpen {
get {
return ((bool)(this["BlocksExpandedOnOpen"]));
}
set {
this["BlocksExpandedOnOpen"] = value;
}
}
}
}

View File

@@ -53,8 +53,11 @@
<Setting Name="WindowHeight" Type="System.Int32" Scope="User">
<Value Profile="(Default)">800</Value>
</Setting>
<Setting Name="LastActiveDocument" Type="System.String" Scope="User">
<Setting Name="LastOpenScripts" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="BlocksExpandedOnOpen" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">True</Value>
</Setting>
</Settings>
</SettingsFile>

View File

@@ -1,11 +1,12 @@
A Mother's Parting Gift
A Dab of Ink
A Mother's Parting Gift
Abandoned Wealth
Aberrant Fossil
Abyssal Axe
Abyssal Cry
Abyssal Sceptre
Academy Map
Acid Lakes Map
Acid Caverns Map
Added Chaos Damage Support
Added Cold Damage Support
Added Fire Damage Support
@@ -71,6 +72,7 @@ Arctic Breath
Arena Map
Arena Plate
Arid Lake Map
Armageddon Brand
Arming Axe
Armourer's Scrap
Armoury Map
@@ -168,6 +170,7 @@ Bone Crypt Map
Bone Helmet
Bone Offering
Bone Spirit Shield
Bonechill Support
Bonespire Talisman
Boon of the First Ones
Boot Blade
@@ -176,6 +179,7 @@ Bottled Storm
Bound Fossil
Boundless Realms
Bowyer's Dream
Brand Recall
Branded Kite Shield
Brass Maul
Brass Spirit Shield
@@ -352,6 +356,7 @@ Courthouse Map
Courtyard Map
Coves Map
Coveted Possession
Crater Map
Cremation
Crescent Staff
Crested Tower Shield
@@ -461,6 +466,7 @@ Dragonscale Boots
Dragonscale Doublet
Dragonscale Gauntlets
Dragoon Sword
Dread Banner
Dread Maul
Dream Mace
Driftwood Club
@@ -636,6 +642,7 @@ Full Plate
Full Ringmail
Full Scale Armour
Full Wyrmscale
Fungal Hollow Map
Gardens Map
Gavel
Gemcutter's Prism
@@ -650,13 +657,26 @@ Ghetto Map
Giant Life Flask
Giant Mana Flask
Gift of the Gemling Queen
Gilded Ambush Scarab
Gilded Axe
Gilded Bestiary Scarab
Gilded Breach Scarab
Gilded Buckler
Gilded Cartography Scarab
Gilded Divination Scarab
Gilded Elder Scarab
Gilded Fossil
Gilded Harbinger Scarab
Gilded Perandus Scarab
Gilded Reliquary Scarab
Gilded Sallet
Gilded Shaper Scarab
Gilded Sulphite Scarab
Gilded Torment Scarab
Girded Tower Shield
Glacial Cascade
Glacial Hammer
Glacier Map
Gladiator Helmet
Gladiator Plate
Gladius
@@ -689,7 +709,6 @@ Golden Plate
Golden Wreath
Goliath Gauntlets
Goliath Greaves
Gorge Map
Gouger
Grace
Graceful Sword
@@ -859,6 +878,7 @@ Lacquered Helmet
Lair Map
Lair of the Hydra Map
Laminated Kite Shield
Lancing Steel
Lantador's Lost Love
Lapis Amulet
Large Hybrid Flask
@@ -867,7 +887,7 @@ Large Mana Flask
Last Hope
Lathi
Latticed Ringmail
Lava Chamber Map
Lava Chambers Map
Lava Lake Map
Layered Kite Shield
Lead Sceptre
@@ -888,9 +908,9 @@ Lesser Poison Support
Leyline Map
Life Gain on Hit Support
Life Leech Support
Light and Truth
Light Brigandine
Light Quiver
Light and Truth
Lighthouse Map
Lightning Arrow
Lightning Penetration Support
@@ -975,14 +995,14 @@ Military Staff
Mind Cage
Minefield Support
Mineral Pools Map
Minion and Totem Elemental Resistance Support
Minion Damage Support
Minion Life Support
Minion Speed Support
Minion and Totem Elemental Resistance Support
Mirage Archer Support
Mirror Arrow
Mirror Shard
Mirror of Kalandra
Mirror Shard
Mirrored Spiked Shield
Mitts
Molten Shell
@@ -1000,6 +1020,7 @@ Mortal Ignorance
Mortal Rage
Mosaic Kite Shield
Mud Geyser Map
Multiple Totems Support
Multiple Traps Support
Multistrike Support
Murder Boots
@@ -1110,7 +1131,19 @@ Poignard
Point Blank Support
Poison Support
Poleaxe
Polished Ambush Scarab
Polished Bestiary Scarab
Polished Breach Scarab
Polished Cartography Scarab
Polished Divination Scarab
Polished Elder Scarab
Polished Harbinger Scarab
Polished Perandus Scarab
Polished Reliquary Scarab
Polished Shaper Scarab
Polished Spiked Shield
Polished Sulphite Scarab
Polished Torment Scarab
Port Map
Portal
Portal Scroll
@@ -1132,6 +1165,7 @@ Primeval Rapier
Primitive Alchemical Resonator
Primitive Chaotic Resonator
Primitive Staff
Primordial Blocks Map
Primordial Pool Map
Primordial Staff
Prismatic Fossil
@@ -1160,9 +1194,9 @@ Quartz Wand
Quicksilver Flask
Quilted Jacket
Racecourse Map
Rain Tempter
Rain of Arrows
Rain of Chaos
Rain Tempter
Raise Spectre
Raise Zombie
Rallying Cry
@@ -1226,10 +1260,22 @@ Ruby Flask
Ruby Ring
Rugged Quiver
Runic Hatchet
Rusted Ambush Scarab
Rusted Bestiary Scarab
Rusted Breach Scarab
Rusted Cartography Scarab
Rusted Coif
Rusted Divination Scarab
Rusted Elder Scarab
Rusted Harbinger Scarab
Rusted Hatchet
Rusted Perandus Scarab
Rusted Reliquary Scarab
Rusted Shaper Scarab
Rusted Spike
Rusted Sulphite Scarab
Rusted Sword
Rusted Torment Scarab
Rustic Sash
Ruthless Support
Sabre
@@ -1335,6 +1381,7 @@ Sharkskin Gloves
Sharkskin Tunic
Sharktooth Arrow Quiver
Sharktooth Claw
Shattering Steel
Shield Charge
Shipyard Map
Shock Nova
@@ -1445,7 +1492,6 @@ Splinter of Xoph
Splintered Tower Shield
Split Arrow
Splitnewt Talisman
Springs Map
Stacked Deck
Stag Sceptre
Static Strike
@@ -1467,6 +1513,7 @@ Stone Hammer
Stone of Passage
Storm Barrier Support
Storm Blade
Storm Brand
Storm Burst
Storm Call
Strand Map
@@ -1599,14 +1646,17 @@ The King's Blade
The King's Heart
The Last One Standing
The Lich
The Life Thief
The Lion
The Lord in Black
The Lover
The Lunaris Priestess
The Master
The Master Artisan
The Mayor
The Mercenary
The Metalsmith's Gift
The Nurse
The Oath
The Obscured
The Offering
@@ -1628,6 +1678,7 @@ The Risk
The Rite of Elements
The Road to Power
The Ruthless Ceinture
The Sacrifice
The Saint's Treasure
The Samurai's Eye
The Scarred Meadow
@@ -1711,7 +1762,6 @@ Torment Leaguestone
Tornado Shot
Tornado Wand
Torture Cage
Torture Chamber Map
Totemic Maul
Tower Key
Tower Map
@@ -1719,8 +1769,8 @@ Toxic Rain
Toxic Sewer Map
Tranquillity
Transmutation Shard
Trap Support
Trap and Mine Damage Support
Trap Support
Trapper Boots
Trapper Mitts
Trarthan Powder
@@ -1729,7 +1779,6 @@ Treasure Key
Tribal Circlet
Tribal Club
Tribal Maul
Tribunal Map
Tricorne
Trisula
Triumphant Lamellar
@@ -1815,16 +1864,16 @@ Vault Map
Velvet Gloves
Velvet Slippers
Vengeance
Vial Of Power
Vial of Awakening
Vial of Consequence
Vial of Dominance
Vial of Fate
Vial Of Power
Vial of Sacrifice
Vial of Summoning
Vial of Transcendence
Vial of the Ghost
Vial of the Ritual
Vial of Transcendence
Vicious Projectiles Support
Vigilant Strike
Vile Staff
@@ -1865,6 +1914,7 @@ Wailing Essence of Wrath
Wailing Essence of Zeal
Walnut Spirit Shield
War Axe
War Banner
War Buckler
War Hammer
War Plate
@@ -1902,6 +1952,7 @@ Widowsilk Robe
Wild Leather
Wild Strike
Wings of Vastiri
Winter Orb
Wither
Withering Touch Support
Wolf Pelt

View File

@@ -23,12 +23,13 @@ Labyrinth Item
Labyrinth Map Item
Labyrinth Trinket
Large Relics
Leaguestone
Leaguestones
Life Flasks
Maces
Mana Flasks
Map Fragments
Maps
Medium Relics
Misc Map Items
One Hand Axes
One Hand Maces
@@ -37,9 +38,11 @@ Pantheon Soul
Piece
Quest Items
Quivers
Relics
Rings
Sceptres
Shields
Small Relics
Stackable Currency
Staves
Support Skill Gems

View File

@@ -61,6 +61,7 @@ Carved
Caster's
Catalysed
Catalyzing
Catarina's Veiled
Caustic
Cauterising
Cautious
@@ -115,6 +116,7 @@ Duelist's
Eldritch
Electrocuting
Electromantic
Elreon's Veiled
Elephant's
Emanant
Emperor's
@@ -172,9 +174,12 @@ Glinting
Glittering
Glowing
Glyphic
Gravicius' Veiled
Gremlin's
Grounded
Guatelitzi's
Guff's Veiled
Haku's Veiled
Hailing
Hale
Halting
@@ -218,16 +223,19 @@ Instilled
Interpermeated
Interpolated
Ionising
It That Fled's Veiled
Jagged
Jinxing
Journeyman's
Judging
Korell's Veiled
Lacquered
Lamprey's
Lava Caller's
Layered
Leadership
Legend's
Leo's Veiled
Lethal
Lich's
Lively
@@ -306,6 +314,7 @@ Resonating
Resplendent
Rhino's
Ribbed
Rin's Veiled
Ripping
Robust
Rotund
@@ -384,6 +393,7 @@ Thundering
Thwarting
Titan's
Topotante's
Tora's Veiled
Trapping
Tul's
Turncoat's
@@ -399,8 +409,10 @@ Unwavering
Unworldly
Urchin's
Vaal
Vagan's Veiled
Vampire's
Vaporous
Veiled
Vicious
Victor's
Vigorous
@@ -410,6 +422,7 @@ Vivacious
Vivid
Volcanic
Volleying
Vorici's Veiled
Wailing
Warding
Warlock's
@@ -436,6 +449,7 @@ of Accuracy
of Adamantite Skin
of Adaption
of Adrenaline
of Aisling's Veil
of Amassment
of Anger
of Animation
@@ -459,6 +473,7 @@ of Bloodlines
of Burning
of Calamity
of Calm
of Cameria's Veil
of Celebration
of Champions
of Chilling
@@ -547,6 +562,7 @@ of Havoc
of Haze
of Heat
of Hemomancy
of Hillock's Veil
of Hindering
of Hoarding
of Hordes
@@ -563,6 +579,8 @@ of Intelligence
of Intercepting
of Ire
of Iron Skin
of Janus' Veil
of Jorgin's Veil
of Joy
of Legerdemain
of Light
@@ -621,6 +639,7 @@ of Resistance
of Restoration
of Retaliation
of Righteousness
of Riker's Veil
of Rime
of Ruin
of Runes
@@ -774,6 +793,7 @@ of the Titan
of the Troll
of the Underground
of the Universe
of the Veil
of the Virtuoso
of the Volcano
of the Wall

View File

@@ -0,0 +1,241 @@
A Call into the Void
A Dishonourable Death
A Firm Foothold
A Forest of False Idols
A Gracious Master
A Master Seeks Help
A Prodigious Hand
A Regal Death
A Rift in Time
A Valuable Combination
A Vision of Ice and Fire
A Whispered Prayer
Abnormal Effulgence
Against the Tide
Agony at Dusk
An Unseen Peril
Anarchy's End
Anarchy's End I
Anarchy's End II
Anarchy's End III
Anarchy's End IV
Ancient Doom
Baptism by Death
Battle Hardened
Beyond Sight
Beyond Sight I
Beyond Sight II
Beyond Sight III
Beyond Sight IV
Black Devotion
Blind Faith
Blinding Light
Blood in the Eyes
Blood of the Betrayed
Bountiful Traps
Burning Dread
Cleanser of Sins
Cold Blooded Fury
Cold Greed
Crimson Hues
Crushing Squall
Custodians of Silence
Dance of Steel
Dark Instincts
Darktongue's Shriek
Day of Sacrifice
Day of Sacrifice I
Day of Sacrifice II
Day of Sacrifice III
Day of Sacrifice IV
Deadly Rivalry
Deadly Rivalry I
Deadly Rivalry II
Deadly Rivalry III
Deadly Rivalry IV
Deadly Rivalry V
Deadly Twins
Defiled in the Sceptre
Dying Cry
Echoes of Witchcraft
End of the Light
Ending the Torment
Erased from Memory
Erasmus' Gift
Faith Exhumed
Fallow At Last
Fated Connections
Fear's Wide Reach
Fire and Brimstone
Fire and Ice
Fire from the Sky
Fire, Wood and Stone
Flesh of the Beast
Forceful Exorcism
From Death Springs Life
From The Void
Gilded Within
Golden Touch
Graceful Flames
Greed's Folly
Heart of the Fire
Heavy Blows
Hidden Reinforcements
Hidden Vaal Pathways
Holding the Bridge
Hunter's Lesson
Ice from Above
In the Grasp of Corruption
Kalandra's Craft
Last of the Wildmen
Lasting Impressions
Lightning Falls
Living Fires
Lost in the Pages
Monstrous Treasure
Mouth of Horrors
Mysterious Invaders
Nature's Resilience
Nemesis of Greed
Notched Flesh
Overflowing Riches
Path of Betrayal
Plague of Frogs
Plague of Rats
Pleasure and Pain
Pools of Wealth
Possessed Foe
Power Magnified
Rebirth
Reforged Bonds
Resistant to Change
Risen Blood
Roth's Legacy
Severed Limbs
Smothering Tendrils
Soil, Worms and Blood
Song of the Sekhema
Storm on the Horizon
Storm on the Reef
Strong as a Bull
Sun's Punishment
Thaumaturgical History
Thaumaturgical History I
Thaumaturgical History II
Thaumaturgical History III
Thaumaturgical History IV
The Alchemist
The Ambitious Bandit
The Ambitious Bandit I
The Ambitious Bandit II
The Ambitious Bandit III
The Apex Predator
The Beautiful Guide
The Beginning and the End
The Bishop's Legacy
The Bloody Flowers Redux
The Bowstring's Music
The Brothers of Necromancy
The Brutal Enforcer
The Child of Lunaris
The Corrupt
The Cursed Choir
The Dreaded Rhoa
The Dream Trial
The Dreamer's Dream
The Eagle's Cry
The Fall of an Empire
The Feral Lord
The Feral Lord I
The Feral Lord II
The Feral Lord III
The Feral Lord IV
The Feral Lord V
The Flayed Man
The Flow of Energy
The Forgotten Garrison
The Forgotten Soldiers
The Fortune Teller's Collection
The Four Feral Exiles
The God of Misfortune
The Great Leader of the North
The Great Mind of the North
The Hardened Armour
The Hollow Pledge
The Hungering Swarm
The Invader
The Jeweller's Touch
The Karui Rebellion
The King and the Brambles
The King's Path
The Lady in Black
The Last Watch
The Lost Maps
The Lost Undying
The Malevolent Witch
The Misunderstood Queen
The Mysterious Gift
The Nest
The Nightmare Awakens
The Petrified
The Plaguemaw
The Plaguemaw I
The Plaguemaw II
The Plaguemaw III
The Plaguemaw IV
The Plaguemaw V
The Prison Guard
The Prison Key
The Queen's Sacrifice
The Queen's Vaults
The Scout
The Servant's Heart
The Sharpened Blade
The Silverwood
The Singular Spirit
The Sinner's Stone
The Snuffed Flame
The Soulless Beast
The Stockkeeper
The Storm Spire
The Sword King's Passion
The Trembling Earth
The Twins
The Unbreathing Queen
The Unbreathing Queen I
The Unbreathing Queen II
The Unbreathing Queen III
The Unbreathing Queen IV
The Unbreathing Queen V
The Undead Brutes
The Undead Storm
The Vanguard
The Walking Mountain
The Ward's Ward
The Warmongers
The Warmongers I
The Warmongers II
The Warmongers III
The Warmongers IV
The Watcher's Watcher
The Wealthy Exile
Touched by the Wind
Trapped in the Tower
Trash to Treasure
Twice Enchanted
Unbearable Whispers
Unbearable Whispers I
Unbearable Whispers II
Unbearable Whispers III
Unbearable Whispers IV
Unbearable Whispers V
Undead Uprising
Unnatural Energy
Vaal Invasion
Vaal Winds
Visions of the Drowned
Vital Transformation
Waiting in Ambush
Weeping Death
Wind and Thunder
Winter's Mournful Melodies

View File

@@ -1,6 +1,7 @@
using System;
using System.Threading.Tasks;
using System.Windows;
using Filtration.Properties;
using Filtration.Views;
using NLog;
@@ -17,16 +18,19 @@ namespace Filtration.Services
private readonly IItemFilterScriptDirectoryService _itemFilterScriptDirectoryService;
private readonly IMainWindow _mainWindow;
private readonly IScriptLoadingService _scriptLoadingService;
private readonly ISettingsService _settingsService;
private readonly IUpdateService _updateService;
public Bootstrapper(IItemFilterScriptDirectoryService itemFilterScriptDirectoryService,
IMainWindow mainWindow,
IScriptLoadingService scriptLoadingService,
ISettingsService settingsService,
IUpdateService updateService)
{
_itemFilterScriptDirectoryService = itemFilterScriptDirectoryService;
_mainWindow = mainWindow;
_scriptLoadingService = scriptLoadingService;
_settingsService = settingsService;
_updateService = updateService;
}
@@ -44,6 +48,12 @@ namespace Filtration.Services
_mainWindow.Show();
// If there were scripts open the last time the application was closed, reopen them
if (!string.IsNullOrWhiteSpace(Settings.Default.LastOpenScripts))
{
await _scriptLoadingService.LoadScriptsAsync(Settings.Default.LastOpenScripts.Split(new[] { '|' }, StringSplitOptions.RemoveEmptyEntries));
}
await _updateService.CheckForUpdatesAsync();
}

View File

@@ -0,0 +1,98 @@
using System;
using System.IO;
using System.Threading.Tasks;
using System.Windows;
using Filtration.Common.Services;
using Filtration.Repositories;
using Filtration.ThemeEditor.Providers;
using Filtration.ThemeEditor.ViewModels;
using Filtration.ViewModels;
using GalaSoft.MvvmLight.Messaging;
using NLog;
namespace Filtration.Services
{
internal interface IScriptLoadingService
{
Task LoadScriptAsync(string scriptFilename);
Task LoadScriptsAsync(string[] files);
Task LoadThemeAsync(string themeFilename);
}
internal sealed class ScriptLoadingService : IScriptLoadingService
{
private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
private readonly IAvalonDockWorkspaceViewModel _avalonDockWorkspaceViewModel;
private readonly IMessageBoxService _messageBoxService;
private readonly IThemeProvider _themeProvider;
private readonly IItemFilterScriptRepository _itemFilterScriptRepository;
public ScriptLoadingService(IAvalonDockWorkspaceViewModel avalonDockWorkspaceViewModel,
IItemFilterScriptRepository itemFilterScriptRepository,
IMessageBoxService messageBoxService,
IThemeProvider themeProvider)
{
_avalonDockWorkspaceViewModel = avalonDockWorkspaceViewModel;
_messageBoxService = messageBoxService;
_themeProvider = themeProvider;
_itemFilterScriptRepository = itemFilterScriptRepository;
}
public async Task LoadScriptsAsync(string[] files)
{
foreach (var file in files)
{
if (File.Exists(file))
{
await LoadScriptAsync(file);
}
}
}
public async Task LoadScriptAsync(string scriptFilename)
{
IItemFilterScriptViewModel loadedViewModel;
Messenger.Default.Send(new NotificationMessage("ShowLoadingBanner"));
try
{
loadedViewModel = await _itemFilterScriptRepository.LoadScriptFromFileAsync(scriptFilename);
}
catch (Exception e)
{
Logger.Error(e);
_messageBoxService.Show("Script Load Error", "Error loading filter script - " + e.Message,
MessageBoxButton.OK,
MessageBoxImage.Error);
return;
}
finally
{
Messenger.Default.Send(new NotificationMessage("HideLoadingBanner"));
}
_avalonDockWorkspaceViewModel.AddDocument(loadedViewModel);
}
public async Task LoadThemeAsync(string themeFilename)
{
IThemeEditorViewModel loadedViewModel;
try
{
loadedViewModel = await _themeProvider.LoadThemeFromFile(themeFilename);
}
catch (Exception e)
{
Logger.Error(e);
_messageBoxService.Show("Theme Load Error", "Error loading filter theme - " + e.Message,
MessageBoxButton.OK,
MessageBoxImage.Error);
return;
}
_avalonDockWorkspaceViewModel.AddDocument(loadedViewModel);
}
}
}

View File

@@ -11,6 +11,7 @@ namespace Filtration.Services
IEnumerable<string> ItemBaseTypes { get; }
IEnumerable<string> ItemClasses { get; }
IEnumerable<string> ItemMods { get; }
IEnumerable<string> Prophecies { get; }
}
internal class StaticDataService : IStaticDataService
@@ -26,11 +27,14 @@ namespace Filtration.Services
public IEnumerable<string> ItemMods { get; private set; }
public IEnumerable<string> Prophecies { get; private set; }
private void PopulateStaticData()
{
ItemBaseTypes = new LineReader(() => new StringReader(Resources.ItemBaseTypes)).ToList();
ItemClasses = new LineReader(() => new StringReader(Resources.ItemClasses)).ToList();
ItemMods = new LineReader(() => new StringReader(Resources.ItemMods)).ToList();
Prophecies = new LineReader(() => new StringReader(Resources.Prophecies)).ToList();
}
}
}

View File

@@ -1,7 +1,7 @@
<UserControl x:Class="Filtration.UserControls.BlockItemControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:userControls="clr-namespace:Filtration.UserControls"
xmlns:commonConverters="clr-namespace:Filtration.Common.Converters;assembly=Filtration.Common"
@@ -11,7 +11,7 @@
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"
mc:Ignorable="d"
mc:Ignorable="d"
d:DataContext="{d:DesignInstance Type=userControls:BlockItemControl}"
d:DesignHeight="200" d:DesignWidth="190">
<UserControl.Resources>
@@ -46,12 +46,12 @@
<RadioButton IsChecked="{Binding BooleanValue, Converter={StaticResource BoolInverterConverter}}">False</RadioButton>
</WrapPanel>
</DataTemplate>
<!-- NumericFilterPredicate Template -->
<DataTemplate DataType="{x:Type blockItemBaseTypes:NumericFilterPredicateBlockItem}">
<userControls:NumericFilterPredicateControl Margin="5,5,5,5" NumericFilterPredicate="{Binding FilterPredicate}" Minimum="{Binding Minimum, Mode=OneTime}" Maximum="{Binding Maximum, Mode=OneTime}" />
</DataTemplate>
<!-- Rarity Template -->
<DataTemplate DataType="{x:Type blockItemTypes:RarityBlockItem}">
<StackPanel Orientation="Horizontal" Margin="5,5,5,5">
@@ -70,12 +70,17 @@
<DataTemplate DataType="{x:Type blockItemTypes:ClassBlockItem}">
<userControls:EditableListBoxControl Margin="5,5,5,5" ItemsSource="{Binding Items}" AutoCompleteItemsSource="{Binding ElementName=TopLevelGrid, Path=DataContext.AutoCompleteItemClasses}" />
</DataTemplate>
<!-- Base Type Template -->
<DataTemplate DataType="{x:Type blockItemTypes:BaseTypeBlockItem}">
<userControls:EditableListBoxControl Margin="5,5,5,5" ItemsSource="{Binding Items}" AutoCompleteItemsSource="{Binding ElementName=TopLevelGrid, Path=DataContext.AutoCompleteItemBaseTypes}" />
</DataTemplate>
<!-- Prophecy Template -->
<DataTemplate DataType="{x:Type blockItemTypes:ProphecyBlockItem}">
<userControls:EditableListBoxControl Margin="5,5,5,5" ItemsSource="{Binding Items}" AutoCompleteItemsSource="{Binding ElementName=TopLevelGrid, Path=DataContext.AutoCompleteProphecies}" />
</DataTemplate>
<!-- Explicit Mods Template -->
<DataTemplate DataType="{x:Type blockItemTypes:HasExplicitModBlockItem}">
<userControls:EditableListBoxControl Margin="5,5,5,5" ItemsSource="{Binding Items}" AutoCompleteItemsSource="{Binding ElementName=TopLevelGrid, Path=DataContext.AutocompleteItemMods}" />
@@ -114,12 +119,12 @@
<StackPanel>
<xctk:ColorPicker SelectedColor="{Binding Color}" AvailableColors="{Binding ElementName=BlockItemContentControl, Path=DataContext.AvailableColors }" ShowAvailableColors="True" AvailableColorsHeader="Path of Exile Colors"/>
<userControls:ThemeComponentSelectionControl ThemeComponent="{Binding ThemeComponent}"
Margin="0,2,0,2">
<userControls:ThemeComponentSelectionControl.AvailableThemeComponents>
<MultiBinding Converter="{StaticResource AvailableThemeComponentsConverter}">
<Binding Path="DataContext.Script.ThemeComponents" RelativeSource="{RelativeSource AncestorType={x:Type views:ItemFilterScriptView}}"/>
<Binding Path="." />
<Binding Path="." />
</MultiBinding>
</userControls:ThemeComponentSelectionControl.AvailableThemeComponents>
</userControls:ThemeComponentSelectionControl>
@@ -164,7 +169,7 @@
</userControls:ThemeComponentSelectionControl>
</WrapPanel>
</DataTemplate>
<!-- Positional Sound Template -->
<DataTemplate DataType="{x:Type blockItemTypes:PositionalSoundBlockItem}">
<WrapPanel HorizontalAlignment="Left">
@@ -225,7 +230,7 @@
<Button Grid.Column="0" Grid.Row="0" Command="{Binding Path=DataContext.PlayCustomSoundCommand, RelativeSource={RelativeSource AncestorType={x:Type views:ItemFilterBlockView}}}" Width="20" Height="20" Background="Transparent" BorderBrush="Transparent">
<Image Source="/Filtration;component/Resources/Icons/speaker_icon.png" VerticalAlignment="Center" HorizontalAlignment="Center" />
</Button>
<ComboBox Grid.Column="1" Grid.Row="0" ItemsSource="{Binding Path=DataContext.CustomSoundsAvailable, UpdateSourceTrigger=PropertyChanged, RelativeSource={RelativeSource AncestorType={x:Type views:ItemFilterScriptView}}}"
<ComboBox Grid.Column="1" Grid.Row="0" ItemsSource="{Binding Path=DataContext.CustomSoundsAvailable, UpdateSourceTrigger=PropertyChanged, RelativeSource={RelativeSource AncestorType={x:Type views:ItemFilterScriptView}}}"
SelectedValue="{Binding Value, UpdateSourceTrigger=PropertyChanged}" Style="{StaticResource MetroComboBox}"/>
<Button Grid.Column="1" Grid.Row="0" Command="{Binding Path=DataContext.CustomSoundFileDialogCommand, RelativeSource={RelativeSource AncestorType={x:Type views:ItemFilterBlockView}}}"
Width="20" Height="20" Background="Transparent" BorderBrush="Transparent" Margin="0,0,30,0" VerticalAlignment="Center" HorizontalAlignment="Right">

View File

@@ -0,0 +1,30 @@
<UserControl x:Class="Filtration.UserControls.EnableDisableToggleButton"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800">
<ToggleButton Style="{StaticResource ChromelessToggleButton}"
IsChecked="{Binding BlockEnabled}"
Margin="0,0,5,0"
ToolTip="Enable/Disable Block"
Cursor="Hand"
Width="25"
Height="25">
<Image RenderOptions.BitmapScalingMode="HighQuality">
<Image.Style>
<Style TargetType="{x:Type Image}">
<Style.Triggers>
<DataTrigger Binding="{Binding BlockEnabled}" Value="true">
<Setter Property="Source" Value="/Filtration;component/Resources/Icons/standby_enabled_icon.png"/>
</DataTrigger>
<DataTrigger Binding="{Binding BlockEnabled}" Value="false">
<Setter Property="Source" Value="/Filtration;component/Resources/Icons/standby_disabled_icon.png"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Image.Style>
</Image>
</ToggleButton>
</UserControl>

View File

@@ -0,0 +1,28 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace Filtration.UserControls
{
/// <summary>
/// Interaction logic for EnableDisableToggleButton.xaml
/// </summary>
public partial class EnableDisableToggleButton : UserControl
{
public EnableDisableToggleButton()
{
InitializeComponent();
}
}
}

View File

@@ -0,0 +1,26 @@
using System.Windows;
using System.Windows.Media;
namespace Filtration.Utility
{
public class VisualTreeUtility
{
public static T FindParent<T>(DependencyObject child)
where T : DependencyObject
{
//get parent item
var parentObject = VisualTreeHelper.GetParent(child);
//we've reached the end of the tree
if (parentObject == null) return null;
//check if the parent matches the type we're looking for
if (parentObject is T parent)
{
return parent;
}
return FindParent<T>(parentObject);
}
}
}

View File

@@ -0,0 +1,160 @@
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Windows.Media;
using Filtration.ObjectModel;
using Filtration.ObjectModel.BlockItemTypes;
using Filtration.ObjectModel.Commands;
using Filtration.ObjectModel.Enums;
using GalaSoft.MvvmLight.CommandWpf;
using Xceed.Wpf.Toolkit;
namespace Filtration.ViewModels.DesignTime
{
internal class FakeCommandManager : ICommandManagerInternal {
public void ExecuteCommand(ICommand command)
{
throw new NotImplementedException();
}
public void Undo(int undoLevels = 1)
{
throw new NotImplementedException();
}
public void Redo(int redoLevels = 1)
{
throw new NotImplementedException();
}
public void SetScript(IItemFilterScriptInternal layout)
{
}
}
internal class DesignTimeItemFilterBlockViewModel : IItemFilterBlockViewModel
{
private ItemFilterBlock itemFilterBlock;
public DesignTimeItemFilterBlockViewModel()
{
itemFilterBlock = new ItemFilterBlock(new ItemFilterScript(new FakeCommandManager()))
{
Action = BlockAction.Show,
Enabled = true
};
itemFilterBlock.BlockItems.Add(new RarityBlockItem(FilterPredicateOperator.Equal, ItemRarity.Rare));
itemFilterBlock.BlockItems.Add(new DropLevelBlockItem(FilterPredicateOperator.GreaterThan, 23));
itemFilterBlock.BlockItems.Add(new BaseTypeBlockItem());
itemFilterBlock.BlockItems.Add(new BaseTypeBlockItem());
itemFilterBlock.BlockItems.Add(new BaseTypeBlockItem());
}
public void Initialise(IItemFilterBlockBase itemFilterBlock, IItemFilterScriptViewModel itemFilterScriptViewModel)
{
//throw new NotImplementedException();
}
public IItemFilterBlockBase BaseBlock { get; }
public bool IsDirty { get; set; }
public bool IsVisible { get; set; }
public event EventHandler BlockBecameDirty;
public bool IsExpanded
{
get => true;
set { }
}
public IItemFilterBlock Block => itemFilterBlock;
public bool BlockEnabled
{
get => true;
set { }
}
public string BlockDescription { get; set; }
public RelayCommand CopyBlockStyleCommand { get; }
public RelayCommand PasteBlockStyleCommand { get; }
public RelayCommand ToggleBlockActionCommand { get; }
public RelayCommand ReplaceColorsCommand { get; }
public RelayCommand<Type> AddFilterBlockItemCommand { get; }
public RelayCommand<IItemFilterBlockItem> RemoveFilterBlockItemCommand { get; }
public RelayCommand PlaySoundCommand { get; }
public RelayCommand PlayPositionalSoundCommand { get; }
public RelayCommand SwitchBlockItemsViewCommand { get; }
public RelayCommand CustomSoundFileDialogCommand { get; }
public RelayCommand PlayCustomSoundCommand { get; }
public RelayCommand AddBlockGroupCommand { get; }
public RelayCommand DeleteBlockGroupCommand { get; }
public ObservableCollection<ItemFilterBlockGroup> BlockGroups { get; }
public ObservableCollection<string> BlockGroupSuggestions { get; }
public string BlockGroupSearch { get; set; }
public ObservableCollection<IItemFilterBlockItem> BlockItems => Block.BlockItems;
public IEnumerable<IItemFilterBlockItem> SummaryBlockItems
{
get { return Block.BlockItems.Where(b => !(b is IAudioVisualBlockItem)); }
}
public IEnumerable<IItemFilterBlockItem> RegularBlockItems
{
get { return Block.BlockItems.Where(b => !(b is IAudioVisualBlockItem)); }
}
public IEnumerable<IItemFilterBlockItem> AudioVisualBlockItems { get; }
public bool AdvancedBlockGroup { get; }
public bool AudioVisualBlockItemsGridVisible { get; set; }
public bool DisplaySettingsPopupOpen { get; set; }
public IEnumerable<string> AutoCompleteItemClasses { get; }
public IEnumerable<string> AutoCompleteItemBaseTypes { get; }
public IEnumerable<string> AutoCompleteProphecies { get; }
public IEnumerable<string> AutocompleteItemMods { get; }
public List<Type> BlockItemTypesAvailable => new List<Type>
{
typeof (ItemLevelBlockItem),
typeof (DropLevelBlockItem),
typeof (QualityBlockItem),
typeof (RarityBlockItem),
typeof (SocketsBlockItem),
typeof (LinkedSocketsBlockItem),
typeof (WidthBlockItem),
typeof (HeightBlockItem),
typeof (SocketGroupBlockItem),
typeof (ClassBlockItem),
typeof (BaseTypeBlockItem),
typeof (ProphecyBlockItem),
typeof (IdentifiedBlockItem),
typeof (CorruptedBlockItem),
typeof (ElderItemBlockItem),
typeof (ShaperItemBlockItem),
typeof (MapTierBlockItem),
typeof (ShapedMapBlockItem),
typeof (ElderMapBlockItem),
typeof (GemLevelBlockItem),
typeof (StackSizeBlockItem),
typeof (HasExplicitModBlockItem)
};
public List<Type> AudioVisualBlockItemTypesAvailable { get; }
public ObservableCollection<ColorItem> AvailableColors { get; }
public Color DisplayTextColor => Colors.Red;
public Color DisplayBackgroundColor => Colors.White;
public Color DisplayBorderColor => Colors.GreenYellow;
public double DisplayFontSize => 20;
public int DisplayIconSize { get; }
public int DisplayIconColor { get; }
public int DisplayIconShape { get; }
public Color DisplayEffectColor { get; }
public bool HasSound { get; }
public bool HasPositionalSound { get; }
public bool HasCustomSound { get; }
public bool HasAudioVisualBlockItems { get; }
public void RefreshBlockPreview()
{
throw new NotImplementedException();
}
}
}

View File

@@ -12,6 +12,8 @@ namespace Filtration.ViewModels.DesignTime
set { }
}
public bool BlocksExpandedOnOpen { get; set; }
public bool ExtraLineBetweenBlocks
{
get => true;

View File

@@ -25,6 +25,48 @@ namespace Filtration.ViewModels
IItemFilterBlock Block { get; }
bool BlockEnabled { get; set; }
string BlockDescription { get; set; }
RelayCommand CopyBlockStyleCommand { get; }
RelayCommand PasteBlockStyleCommand { get; }
RelayCommand ToggleBlockActionCommand { get; }
RelayCommand ReplaceColorsCommand { get; }
RelayCommand<Type> AddFilterBlockItemCommand { get; }
RelayCommand<IItemFilterBlockItem> RemoveFilterBlockItemCommand { get; }
RelayCommand PlaySoundCommand { get; }
RelayCommand PlayPositionalSoundCommand { get; }
RelayCommand SwitchBlockItemsViewCommand { get; }
RelayCommand CustomSoundFileDialogCommand { get; }
RelayCommand PlayCustomSoundCommand { get; }
RelayCommand AddBlockGroupCommand { get; }
RelayCommand DeleteBlockGroupCommand { get; }
ObservableCollection<ItemFilterBlockGroup> BlockGroups { get; }
ObservableCollection<string> BlockGroupSuggestions { get; }
string BlockGroupSearch { get; set; }
ObservableCollection<IItemFilterBlockItem> BlockItems { get; }
IEnumerable<IItemFilterBlockItem> SummaryBlockItems { get; }
IEnumerable<IItemFilterBlockItem> RegularBlockItems { get; }
IEnumerable<IItemFilterBlockItem> AudioVisualBlockItems { get; }
bool AdvancedBlockGroup { get; }
bool AudioVisualBlockItemsGridVisible { get; set; }
bool DisplaySettingsPopupOpen { get; set; }
IEnumerable<string> AutoCompleteItemClasses { get; }
IEnumerable<string> AutoCompleteItemBaseTypes { get; }
IEnumerable<string> AutoCompleteProphecies { get; }
IEnumerable<string> AutocompleteItemMods { get; }
List<Type> BlockItemTypesAvailable { get; }
List<Type> AudioVisualBlockItemTypesAvailable { get; }
ObservableCollection<ColorItem> AvailableColors { get; }
Color DisplayTextColor { get; }
Color DisplayBackgroundColor { get; }
Color DisplayBorderColor { get; }
double DisplayFontSize { get; }
int DisplayIconSize { get; }
int DisplayIconColor { get; }
int DisplayIconShape { get; }
Color DisplayEffectColor { get; }
bool HasSound { get; }
bool HasPositionalSound { get; }
bool HasCustomSound { get; }
bool HasAudioVisualBlockItems { get; }
void RefreshBlockPreview();
}
@@ -162,6 +204,8 @@ namespace Filtration.ViewModels
public IEnumerable<string> AutoCompleteItemBaseTypes => _staticDataService.ItemBaseTypes;
public IEnumerable<string> AutoCompleteProphecies => _staticDataService.Prophecies;
public IEnumerable<string> AutocompleteItemMods => _staticDataService.ItemMods;
public List<Type> BlockItemTypesAvailable => new List<Type>
@@ -177,6 +221,7 @@ namespace Filtration.ViewModels
typeof (SocketGroupBlockItem),
typeof (ClassBlockItem),
typeof (BaseTypeBlockItem),
typeof (ProphecyBlockItem),
typeof (IdentifiedBlockItem),
typeof (CorruptedBlockItem),
typeof (ElderItemBlockItem),

View File

@@ -7,7 +7,7 @@ namespace Filtration.ViewModels
{
internal interface IItemFilterBlockViewModelBase
{
void Initialise(IItemFilterBlockBase itemfilterBlock, IItemFilterScriptViewModel itemFilterScriptViewModel);
void Initialise(IItemFilterBlockBase itemFilterBlock, IItemFilterScriptViewModel itemFilterScriptViewModel);
IItemFilterBlockBase BaseBlock { get; }
bool IsDirty { get; set; }
bool IsVisible { get; set; }
@@ -25,9 +25,9 @@ namespace Filtration.ViewModels
}
public virtual void Initialise(IItemFilterBlockBase itemfilterBlock, IItemFilterScriptViewModel itemFilterScriptViewModel)
public virtual void Initialise(IItemFilterBlockBase itemFilterBlock, IItemFilterScriptViewModel itemFilterScriptViewModel)
{
BaseBlock = itemfilterBlock;
BaseBlock = itemFilterBlock;
_parentScriptViewModel = itemFilterScriptViewModel;
CopyBlockCommand = new RelayCommand(OnCopyBlockCommand);

View File

@@ -10,7 +10,8 @@ namespace Filtration.ViewModels
IItemFilterCommentBlock ItemFilterCommentBlock { get; }
string Comment { get; }
bool IsExpanded { get; set; }
bool HasVisibleChild { get; }
bool HasVisibleChild { get; }
int ChildCount { get; set; }
}
internal class ItemFilterCommentBlockViewModel : ItemFilterBlockViewModelBase, IItemFilterCommentBlockViewModel
@@ -28,13 +29,13 @@ namespace Filtration.ViewModels
ToggleSectionCommand = new RelayCommand(OnToggleSectionCommand);
}
public override void Initialise(IItemFilterBlockBase itemfilterBlock, IItemFilterScriptViewModel itemFilterScriptViewModel)
public override void Initialise(IItemFilterBlockBase itemFilterBlock, IItemFilterScriptViewModel itemFilterScriptViewModel)
{
_parentScriptViewModel = itemFilterScriptViewModel;
ItemFilterCommentBlock = itemfilterBlock as IItemFilterCommentBlock;
ItemFilterCommentBlock = itemFilterBlock as IItemFilterCommentBlock;
BaseBlock = ItemFilterCommentBlock;
base.Initialise(itemfilterBlock, itemFilterScriptViewModel);
base.Initialise(itemFilterBlock, itemFilterScriptViewModel);
}
public RelayCommand ToggleSectionCommand { get; }
@@ -43,10 +44,7 @@ namespace Filtration.ViewModels
public string Comment
{
get
{
return ItemFilterCommentBlock.Comment;
}
get => ItemFilterCommentBlock.Comment;
set
{
if (ItemFilterCommentBlock.Comment != value)

View File

@@ -6,11 +6,13 @@ using System.ComponentModel;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reactive.Linq;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Data;
using System.Windows.Forms;
using System.Windows.Media.Imaging;
using DynamicData.Binding;
using Filtration.Common.Services;
using Filtration.Common.ViewModels;
using Filtration.Interface;
@@ -37,11 +39,11 @@ namespace Filtration.ViewModels
IEnumerable<IItemFilterCommentBlockViewModel> ItemFilterCommentBlockViewModels { get; }
ObservableCollection<string> CustomSoundsAvailable { get; }
Predicate<IItemFilterBlockViewModel> BlockFilterPredicate { get; set; }
bool ShowAdvanced { get; }
string Description { get; set; }
string DisplayName { get; }
void Initialise(IItemFilterScript itemFilterScript, bool newScript);
void RemoveDirtyFlag();
void SetDirtyFlag();
@@ -63,7 +65,7 @@ namespace Filtration.ViewModels
RelayCommand MoveBlockUpCommand { get; }
RelayCommand MoveBlockDownCommand { get; }
RelayCommand MoveBlockToTopCommand { get; }
RelayCommand MoveBlockToBottomCommand { get;}
RelayCommand MoveBlockToBottomCommand { get; }
RelayCommand CopyBlockCommand { get; }
RelayCommand PasteBlockCommand { get; }
RelayCommand CopyBlockStyleCommand { get; }
@@ -75,6 +77,8 @@ namespace Filtration.ViewModels
RelayCommand<bool> ToggleShowAdvancedCommand { get; }
RelayCommand ClearFilterCommand { get; }
RelayCommand ClearStylesCommand { get; }
RelayCommand EnableDropSoundsCommand { get; }
RelayCommand DisableDropSoundsCommand { get; }
void AddCommentBlock(IItemFilterBlockViewModelBase targetBlockViewModelBase);
void AddBlock(IItemFilterBlockViewModelBase targetBlockViewModelBase);
@@ -105,17 +109,14 @@ namespace Filtration.ViewModels
private readonly IItemFilterPersistenceService _persistenceService;
private readonly IMessageBoxService _messageBoxService;
private readonly IClipboardService _clipboardService;
private readonly IBlockGroupHierarchyBuilder _blockGroupHierarchyBuilder;
private bool _isDirty;
private readonly ObservableCollection<IItemFilterBlockViewModelBase> _selectedBlockViewModels;
private IItemFilterCommentBlockViewModel _sectionBrowserSelectedBlockViewModel;
private readonly ObservableCollection<IItemFilterBlockViewModelBase> _itemFilterBlockViewModels;
private Predicate<IItemFilterBlockViewModel> _blockFilterPredicate;
private ICommandManager _scriptCommandManager;
private List<IDisposable> _subscriptions;
private ObservableCollection<string> _customSoundsAvailable;
private ListCollectionView _viewItemFilterBlockViewModels;
private readonly List<IItemFilterBlockViewModelBase> _lastAddedBlocks;
public ItemFilterScriptViewModel(IItemFilterBlockBaseViewModelFactory itemFilterBlockBaseViewModelFactory,
@@ -124,8 +125,7 @@ namespace Filtration.ViewModels
IAvalonDockWorkspaceViewModel avalonDockWorkspaceViewModel,
IItemFilterPersistenceService persistenceService,
IMessageBoxService messageBoxService,
IClipboardService clipboardService,
IBlockGroupHierarchyBuilder blockGroupHierarchyBuilder)
IClipboardService clipboardService)
{
_itemFilterBlockBaseViewModelFactory = itemFilterBlockBaseViewModelFactory;
_blockTranslator = blockTranslator;
@@ -135,15 +135,20 @@ namespace Filtration.ViewModels
_persistenceService = persistenceService;
_messageBoxService = messageBoxService;
_clipboardService = clipboardService;
_blockGroupHierarchyBuilder = blockGroupHierarchyBuilder;
_itemFilterBlockViewModels = new ObservableCollection<IItemFilterBlockViewModelBase>();
_selectedBlockViewModels = new ObservableCollection<IItemFilterBlockViewModelBase>();
_selectedBlockViewModels.CollectionChanged += (s, e) =>
{
RaisePropertyChanged(nameof(SelectedBlockViewModels));
RaisePropertyChanged(nameof(LastSelectedBlockViewModel));
Messenger.Default.Send(new NotificationMessage("LastSelectedBlockChanged"));
};
_subscriptions = new List<IDisposable>();
ItemFilterBlockViewModels = new ObservableCollection<IItemFilterBlockViewModelBase>();
SelectedBlockViewModels = new ObservableCollection<IItemFilterBlockViewModelBase>();
_subscriptions.Add(
SelectedBlockViewModels.ToObservableChangeSet()
.Throttle(TimeSpan.FromMilliseconds(30))
.Subscribe(x => {
RaisePropertyChanged(nameof(SelectedBlockViewModels));
RaisePropertyChanged(nameof(LastSelectedBlockViewModel));
Messenger.Default.Send(new NotificationMessage("LastSelectedBlockChanged"));
})
);
_lastAddedBlocks = new List<IItemFilterBlockViewModelBase>();
_showAdvanced = Settings.Default.ShowAdvanced;
@@ -154,9 +159,9 @@ namespace Filtration.ViewModels
ToggleShowAdvancedCommand = new RelayCommand<bool>(OnToggleShowAdvancedCommand);
ClearFilterCommand = new RelayCommand(OnClearFilterCommand, () => BlockFilterPredicate != null);
ClearStylesCommand = new RelayCommand(OnClearStylesCommand, () => SelectedBlockViewModels.OfType<IItemFilterBlockViewModel>().Count() > 0);
ClearStylesCommand = new RelayCommand(OnClearStylesCommand, () => SelectedBlockViewModels.OfType<IItemFilterBlockViewModel>().Any());
CloseCommand = new RelayCommand(async () => await OnCloseCommand());
DeleteBlockCommand = new RelayCommand(OnDeleteBlockCommand, () => CanModifySelectedBlocks());
DeleteBlockCommand = new RelayCommand(OnDeleteBlockCommand, CanModifySelectedBlocks);
MoveBlockToTopCommand = new RelayCommand(OnMoveBlockToTopCommand, () => SelectedBlockViewModels.Count > 0 && CanModifySelectedBlocks());
MoveBlockToBottomCommand = new RelayCommand(OnMoveBlockToBottomCommand, () => SelectedBlockViewModels.Count > 0 && CanModifySelectedBlocks());
MoveBlockUpCommand = new RelayCommand(OnMoveBlockUpCommand, () => SelectedBlockViewModels.Count == 1 && ViewItemFilterBlockViewModels.IndexOf(LastSelectedBlockViewModel) > 0);
@@ -177,6 +182,8 @@ namespace Filtration.ViewModels
CollapseAllBlocksCommand = new RelayCommand(OnCollapseAllBlocksCommand);
ExpandAllSectionsCommand = new RelayCommand(ExpandAllSections);
CollapseAllSectionsCommand = new RelayCommand(CollapseAllSections);
EnableDropSoundsCommand = new RelayCommand(OnEnableDropSoundsCommand, CanModifySelectedBlocks);
DisableDropSoundsCommand = new RelayCommand(OnDisableDropSoundsCommand, CanModifySelectedBlocks);
var icon = new BitmapImage();
icon.BeginInit();
@@ -191,6 +198,8 @@ namespace Filtration.ViewModels
Script = itemFilterScript;
_scriptCommandManager = Script.CommandManager;
InitialiseCustomSounds();
AddItemFilterBlockViewModels(Script.ItemFilterBlocks, -1);
UpdateChildCount();
@@ -206,8 +215,29 @@ namespace Filtration.ViewModels
}
}
}
Script.ItemFilterBlocks.CollectionChanged += ItemFilterBlocksOnCollectionChanged;
_filenameIsFake = newScript;
if (newScript)
{
Script.FilePath = "Untitled.filter";
}
Title = Filename;
ContentId = "ScriptContentId";
if (!Settings.Default.BlocksExpandedOnOpen)
{
CollapseAllSections();
}
}
private void InitialiseCustomSounds()
{
_customSoundsAvailable = new ObservableCollection<string>();
_customSoundsAvailable.CollectionChanged += CustomSoundsAvailableOnCollectionChanged;
var poeFolderFiles = Directory.GetFiles(_persistenceService.ItemFilterScriptDirectory + "\\").Where(
s => s.EndsWith(".mp3")
@@ -223,21 +253,6 @@ namespace Filtration.ViewModels
{
_customSoundsAvailable.Add(file.Replace(_persistenceService.ItemFilterScriptDirectory + "\\", ""));
}
Script.ItemFilterBlocks.CollectionChanged += ItemFilterBlocksOnCollectionChanged;
_customSoundsAvailable.CollectionChanged += CustomSoundsAvailableOnCollectionChanged;
_filenameIsFake = newScript;
if (newScript)
{
Script.FilePath = "Untitled.filter";
}
Title = Filename;
ContentId = "ScriptContentId";
CollapseAllSections();
}
private void ItemFilterBlocksOnCollectionChanged(object sender, NotifyCollectionChangedEventArgs notifyCollectionChangedEventArgs)
@@ -245,20 +260,20 @@ namespace Filtration.ViewModels
switch (notifyCollectionChangedEventArgs.Action)
{
case NotifyCollectionChangedAction.Add:
{
AddItemFilterBlockViewModels(notifyCollectionChangedEventArgs.NewItems.Cast<IItemFilterBlockBase>(), notifyCollectionChangedEventArgs.NewStartingIndex);
break;
}
{
AddItemFilterBlockViewModels(notifyCollectionChangedEventArgs.NewItems.Cast<IItemFilterBlockBase>(), notifyCollectionChangedEventArgs.NewStartingIndex);
break;
}
case NotifyCollectionChangedAction.Remove:
{
RemoveItemFilterBlockviewModels(notifyCollectionChangedEventArgs.OldItems.Cast<IItemFilterBlockBase>());
break;
}
{
RemoveItemFilterBlockViewModels(notifyCollectionChangedEventArgs.OldItems.Cast<IItemFilterBlockBase>());
break;
}
default:
{
Debugger.Break(); // Unhandled NotifyCollectionChangedAction
break;
}
{
Debugger.Break(); // Unhandled NotifyCollectionChangedAction
break;
}
}
UpdateChildCount();
@@ -289,8 +304,7 @@ namespace Filtration.ViewModels
_lastAddedBlocks.Add(vm);
var itemBlock = itemFilterBlock as IItemFilterBlock;
if (itemBlock != null)
if (itemFilterBlock is IItemFilterBlock itemBlock)
{
foreach (var customSoundBlockItem in itemBlock.BlockItems.OfType<CustomSoundBlockItem>())
{
@@ -303,7 +317,7 @@ namespace Filtration.ViewModels
}
}
private void RemoveItemFilterBlockviewModels(IEnumerable<IItemFilterBlockBase> itemFilterBlocks)
private void RemoveItemFilterBlockViewModels(IEnumerable<IItemFilterBlockBase> itemFilterBlocks)
{
foreach (var itemFilterBlock in itemFilterBlocks)
{
@@ -319,7 +333,7 @@ namespace Filtration.ViewModels
private void UpdateFilteredBlockList()
{
ICollectionView filteredBlocks = CollectionViewSource.GetDefaultView(_itemFilterBlockViewModels);
ICollectionView filteredBlocks = CollectionViewSource.GetDefaultView(ItemFilterBlockViewModels);
filteredBlocks.Filter = BlockFilter;
ItemFilterCommentBlockViewModel previousSection = new ItemFilterCommentBlockViewModel();
@@ -329,16 +343,16 @@ namespace Filtration.ViewModels
{
previousSection.VisibleChildCount++;
}
else if (block is ItemFilterCommentBlockViewModel)
else if (block is ItemFilterCommentBlockViewModel model)
{
previousSection = block as ItemFilterCommentBlockViewModel;
previousSection = model;
previousSection.VisibleChildCount = 0;
}
}
_viewItemFilterBlockViewModels = (ListCollectionView)CollectionViewSource.GetDefaultView(
ViewItemFilterBlockViewModels = (ListCollectionView)CollectionViewSource.GetDefaultView(
filteredBlocks.Cast<IItemFilterBlockViewModelBase>().ToList());
_viewItemFilterBlockViewModels.Filter = BlockVisibilityFilter;
ViewItemFilterBlockViewModels.Filter = BlockVisibilityFilter;
Messenger.Default.Send(new NotificationMessage("SectionsChanged"));
SelectedBlockViewModels.Clear();
@@ -355,24 +369,24 @@ namespace Filtration.ViewModels
previousSection.ChildCount++;
block.IsVisible = previousSection.IsExpanded;
}
else if (block is ItemFilterCommentBlockViewModel)
else if (block is ItemFilterCommentBlockViewModel model)
{
previousSection = block as ItemFilterCommentBlockViewModel;
previousSection = model;
previousSection.ChildCount = 0;
}
}
}
private List<IItemFilterBlockViewModelBase> getChildren(IItemFilterCommentBlockViewModel targetBlockViewModel)
private List<IItemFilterBlockViewModelBase> GetChildren(IItemFilterCommentBlockViewModel targetBlockViewModel)
{
return ItemFilterBlockViewModels.ToList().GetRange(ItemFilterBlockViewModels.IndexOf(targetBlockViewModel) + 1,
(targetBlockViewModel as ItemFilterCommentBlockViewModel).ChildCount);
targetBlockViewModel.ChildCount);
}
private List<int> getChildrenIndexes(IItemFilterCommentBlockViewModel targetBlockViewModel)
private List<int> GetChildrenIndexes(IItemFilterCommentBlockViewModel targetBlockViewModel)
{
return Enumerable.Range(ItemFilterBlockViewModels.IndexOf(targetBlockViewModel) + 1,
(targetBlockViewModel as ItemFilterCommentBlockViewModel).ChildCount).ToList();
targetBlockViewModel.ChildCount).ToList();
}
private void ValidateSelectedBlocks()
@@ -411,6 +425,8 @@ namespace Filtration.ViewModels
public RelayCommand CollapseAllBlocksCommand { get; }
public RelayCommand ExpandAllSectionsCommand { get; }
public RelayCommand CollapseAllSectionsCommand { get; }
public RelayCommand EnableDropSoundsCommand { get; }
public RelayCommand DisableDropSoundsCommand { get; }
public bool IsActiveDocument
{
@@ -427,25 +443,16 @@ namespace Filtration.ViewModels
public ObservableCollection<string> CustomSoundsAvailable
{
get => _customSoundsAvailable;
set
private set
{
_customSoundsAvailable = value;
RaisePropertyChanged();
}
}
public ListCollectionView ViewItemFilterBlockViewModels
{
get => _viewItemFilterBlockViewModels;
}
public ListCollectionView ViewItemFilterBlockViewModels { get; private set; }
public ObservableCollection<IItemFilterBlockViewModelBase> ItemFilterBlockViewModels
{
get
{
return _itemFilterBlockViewModels;
}
}
public ObservableCollection<IItemFilterBlockViewModelBase> ItemFilterBlockViewModels { get; }
private bool BlockFilter(object item)
{
@@ -550,7 +557,7 @@ namespace Filtration.ViewModels
public bool HasSelectedCommentBlock()
{
return SelectedBlockViewModels.OfType<IItemFilterCommentBlockViewModel>().Count() > 0;
return SelectedBlockViewModels.OfType<IItemFilterCommentBlockViewModel>().Any();
}
public bool CanModifySelectedBlocks()
@@ -581,18 +588,9 @@ namespace Filtration.ViewModels
return itemFilterCommentBlock.ChildCount == itemFilterCommentBlock.VisibleChildCount;
}
public ObservableCollection<IItemFilterBlockViewModelBase> SelectedBlockViewModels
{
get => _selectedBlockViewModels;
}
public ObservableCollection<IItemFilterBlockViewModelBase> SelectedBlockViewModels { get; }
public IItemFilterBlockViewModelBase LastSelectedBlockViewModel
{
get
{
return SelectedBlockViewModels.Count > 0 ? SelectedBlockViewModels.Last() : null;
}
}
public IItemFilterBlockViewModelBase LastSelectedBlockViewModel => SelectedBlockViewModels.Count > 0 ? SelectedBlockViewModels.Last() : null;
public IItemFilterCommentBlockViewModel CommentBlockBrowserBrowserSelectedBlockViewModel
{
@@ -652,7 +650,7 @@ namespace Filtration.ViewModels
private bool _filenameIsFake;
private bool _showAdvanced;
public async Task SaveAsync()
{
if (!ValidateScript()) return;
@@ -701,7 +699,7 @@ namespace Filtration.ViewModels
var result = saveDialog.ShowDialog();
if (result != DialogResult.OK) return;
Messenger.Default.Send(new NotificationMessage("ShowLoadingBanner"));
var previousFilePath = Script.FilePath;
@@ -797,7 +795,7 @@ namespace Filtration.ViewModels
{
await Close();
}
public async Task Close()
{
if (!IsDirty)
@@ -812,26 +810,33 @@ namespace Filtration.ViewModels
switch (result)
{
case MessageBoxResult.Yes:
{
await SaveAsync();
CloseScript();
break;
}
{
await SaveAsync();
CloseScript();
break;
}
case MessageBoxResult.No:
{
CloseScript();
break;
}
{
CloseScript();
break;
}
case MessageBoxResult.Cancel:
{
return;
}
{
return;
}
}
}
}
private void CloseScript()
{
foreach (var disposable in Enumerable.Reverse(_subscriptions))
{
disposable.Dispose();
}
_subscriptions.Clear();
var openMasterThemForScript =
_avalonDockWorkspaceViewModel.OpenMasterThemeForScript(this);
if (openMasterThemForScript != null)
@@ -877,9 +882,9 @@ namespace Filtration.ViewModels
foreach (var block in SelectedBlockViewModels.OfType<IItemFilterBlockViewModelBase>())
{
blocksToCopy.Add(block);
if (block is IItemFilterCommentBlockViewModel && !(block as IItemFilterCommentBlockViewModel).IsExpanded)
if (block is IItemFilterCommentBlockViewModel model && !model.IsExpanded)
{
blocksToCopy.AddRange(getChildren(block as IItemFilterCommentBlockViewModel));
blocksToCopy.AddRange(GetChildren(model));
}
}
@@ -896,14 +901,14 @@ namespace Filtration.ViewModels
else
{
var blocksToCopy = new List<IItemFilterBlockViewModelBase> { targetBlockViewModelBase };
blocksToCopy.AddRange(getChildren(targetBlockViewModelBase as IItemFilterCommentBlockViewModel));
blocksToCopy.AddRange(GetChildren((IItemFilterCommentBlockViewModel)targetBlockViewModelBase));
CopyBlocks(blocksToCopy);
}
}
public void CopyBlocks(IEnumerable<IItemFilterBlockViewModelBase> targetBlockViewModels)
{
if (targetBlockViewModels.Count() < 1)
if (!targetBlockViewModels.Any())
{
return;
}
@@ -926,8 +931,7 @@ namespace Filtration.ViewModels
private void OnCopyBlockStyleCommand()
{
var selectedBlockViewModel = LastSelectedBlockViewModel as IItemFilterBlockViewModel;
if (selectedBlockViewModel != null)
if (LastSelectedBlockViewModel is IItemFilterBlockViewModel selectedBlockViewModel)
{
CopyBlockStyle(selectedBlockViewModel);
}
@@ -958,8 +962,7 @@ namespace Filtration.ViewModels
private void OnPasteBlockStyleCommand()
{
var selectedBlockViewModel = LastSelectedBlockViewModel as IItemFilterBlockViewModel;
if (selectedBlockViewModel != null)
if (LastSelectedBlockViewModel is IItemFilterBlockViewModel selectedBlockViewModel)
{
PasteBlockStyle(selectedBlockViewModel);
}
@@ -988,7 +991,7 @@ namespace Filtration.ViewModels
if (commentBlock != null && !commentBlock.IsExpanded)
{
targetBlockViewModelBase = ItemFilterBlockViewModels[ItemFilterBlockViewModels.IndexOf(targetBlockViewModelBase) +
(commentBlock as ItemFilterCommentBlockViewModel).ChildCount];
commentBlock.ChildCount];
}
try
@@ -1046,12 +1049,12 @@ namespace Filtration.ViewModels
var indexToMove = ItemFilterBlockViewModels.IndexOf(
ViewItemFilterBlockViewModels.GetItemAt(blockIndex - 1) as IItemFilterBlockViewModelBase);
if (targetBlockViewModelBase is IItemFilterCommentBlockViewModel &&
!(targetBlockViewModelBase as IItemFilterCommentBlockViewModel).IsExpanded)
if (targetBlockViewModelBase is IItemFilterCommentBlockViewModel model &&
!model.IsExpanded)
{
ExecuteCommandAndSelectAdded(new MoveBlocksToIndexCommand(Script,
Enumerable.Range(ItemFilterBlockViewModels.IndexOf(targetBlockViewModelBase),
(targetBlockViewModelBase as ItemFilterCommentBlockViewModel).ChildCount + 1).ToList(), indexToMove));
Enumerable.Range(ItemFilterBlockViewModels.IndexOf(model),
model.ChildCount + 1).ToList(), indexToMove));
if (_lastAddedBlocks.Count > 0)
{
ToggleSection(_lastAddedBlocks[0] as IItemFilterCommentBlockViewModel);
@@ -1067,8 +1070,8 @@ namespace Filtration.ViewModels
ExecuteCommandAndSelectAdded(new MoveBlocksToIndexCommand(Script, targetBlockViewModelBase.BaseBlock, indexToMove));
}
SetDirtyFlag();
}
SetDirtyFlag();
}
private void OnMoveBlockDownCommand()
{
@@ -1088,13 +1091,13 @@ namespace Filtration.ViewModels
indexToMove += (belowBlock as ItemFilterCommentBlockViewModel).ChildCount;
}
if (targetBlockViewModelBase is IItemFilterCommentBlockViewModel &&
!(targetBlockViewModelBase as IItemFilterCommentBlockViewModel).IsExpanded)
if (targetBlockViewModelBase is IItemFilterCommentBlockViewModel model &&
!model.IsExpanded)
{
indexToMove -= (targetBlockViewModelBase as ItemFilterCommentBlockViewModel).ChildCount;
indexToMove -= model.ChildCount;
ExecuteCommandAndSelectAdded(new MoveBlocksToIndexCommand(Script,
Enumerable.Range(ItemFilterBlockViewModels.IndexOf(targetBlockViewModelBase),
(targetBlockViewModelBase as ItemFilterCommentBlockViewModel).ChildCount + 1).ToList(), indexToMove));
Enumerable.Range(ItemFilterBlockViewModels.IndexOf(model),
model.ChildCount + 1).ToList(), indexToMove));
if (_lastAddedBlocks.Count > 0)
{
ToggleSection(_lastAddedBlocks[0] as IItemFilterCommentBlockViewModel);
@@ -1119,15 +1122,14 @@ namespace Filtration.ViewModels
public void AddBlock(IItemFilterBlockViewModelBase targetBlockViewModelBase)
{
if (targetBlockViewModelBase is IItemFilterCommentBlockViewModel && !(targetBlockViewModelBase as IItemFilterCommentBlockViewModel).IsExpanded)
if (targetBlockViewModelBase is IItemFilterCommentBlockViewModel model && !model.IsExpanded)
{
ToggleSection(targetBlockViewModelBase as IItemFilterCommentBlockViewModel);
targetBlockViewModelBase = ItemFilterBlockViewModels[ItemFilterBlockViewModels.IndexOf(targetBlockViewModelBase) +
(targetBlockViewModelBase as ItemFilterCommentBlockViewModel).ChildCount];
ToggleSection(model);
targetBlockViewModelBase = ItemFilterBlockViewModels[ItemFilterBlockViewModels.IndexOf(targetBlockViewModelBase) + model.ChildCount];
}
ExecuteCommandAndSelectAdded(new AddBlockCommand(Script, targetBlockViewModelBase?.BaseBlock));
SetDirtyFlag();
SetDirtyFlag();
}
private void OnAddCommentBlockCommand()
@@ -1155,7 +1157,7 @@ namespace Filtration.ViewModels
blocksToDelete.Add(block);
if (block is IItemFilterCommentBlockViewModel && !(block as IItemFilterCommentBlockViewModel).IsExpanded)
{
blocksToDelete.AddRange(getChildren(block as IItemFilterCommentBlockViewModel));
blocksToDelete.AddRange(GetChildren(block as IItemFilterCommentBlockViewModel));
}
}
@@ -1211,8 +1213,8 @@ namespace Filtration.ViewModels
{
_scriptCommandManager.ExecuteCommand(new MoveBlocksToBottomCommand(Script, targetBlockViewModelBase.BaseBlock));
}
SetDirtyFlag();
SetDirtyFlag();
}
public void MoveBlocksToBottom(IEnumerable<IItemFilterBlockViewModelBase> targetCommentBlockViewModels)
@@ -1223,7 +1225,7 @@ namespace Filtration.ViewModels
sourceIndexes.Add(ItemFilterBlockViewModels.IndexOf(block));
if (block is IItemFilterCommentBlockViewModel && !(block as IItemFilterCommentBlockViewModel).IsExpanded)
{
sourceIndexes.AddRange(getChildrenIndexes(block as IItemFilterCommentBlockViewModel));
sourceIndexes.AddRange(GetChildrenIndexes(block as IItemFilterCommentBlockViewModel));
}
}
@@ -1246,11 +1248,11 @@ namespace Filtration.ViewModels
public void MoveBlockToTop(IItemFilterBlockViewModelBase targetBlockViewModelBase)
{
if (targetBlockViewModelBase is IItemFilterCommentBlockViewModel && !(targetBlockViewModelBase as IItemFilterCommentBlockViewModel).IsExpanded)
if (targetBlockViewModelBase is IItemFilterCommentBlockViewModel model && !model.IsExpanded)
{
ExecuteCommandAndSelectAdded(new MoveBlocksToTopCommand(Script,
Enumerable.Range(ItemFilterBlockViewModels.IndexOf(targetBlockViewModelBase),
(targetBlockViewModelBase as ItemFilterCommentBlockViewModel).ChildCount + 1).ToList()));
Enumerable.Range(ItemFilterBlockViewModels.IndexOf(model),
model.ChildCount + 1).ToList()));
if (_lastAddedBlocks.Count > 0)
{
ToggleSection(_lastAddedBlocks[0] as IItemFilterCommentBlockViewModel);
@@ -1270,23 +1272,80 @@ namespace Filtration.ViewModels
foreach (var block in targetCommentBlockViewModels)
{
sourceIndexes.Add(ItemFilterBlockViewModels.IndexOf(block));
if (block is IItemFilterCommentBlockViewModel && !(block as IItemFilterCommentBlockViewModel).IsExpanded)
if (block is IItemFilterCommentBlockViewModel model && !model.IsExpanded)
{
sourceIndexes.AddRange(getChildrenIndexes(block as IItemFilterCommentBlockViewModel));
sourceIndexes.AddRange(GetChildrenIndexes(model));
}
}
ExecuteCommandAndSelectAdded(new MoveBlocksToTopCommand(Script, sourceIndexes));
for (var i = 0; i < sourceIndexes.Count; i++)
{
if (ItemFilterBlockViewModels[i] as IItemFilterCommentBlockViewModel != null)
if (ItemFilterBlockViewModels[i] is IItemFilterCommentBlockViewModel model)
{
ToggleSection(ItemFilterBlockViewModels[i] as IItemFilterCommentBlockViewModel);
ToggleSection(model);
}
}
SetDirtyFlag();
}
}
public void OnEnableDropSoundsCommand()
{
ValidateSelectedBlocks();
var input = new List<Tuple<ObservableCollection<IItemFilterBlockItem>, IItemFilterBlockItem>>();
foreach (var block in SelectedBlockViewModels.OfType<IItemFilterBlockViewModel>())
{
var blockItems = block.Block.BlockItems;
for (var i = 0; i < blockItems.Count; i++)
{
var blockItem = blockItems[i];
if (blockItem is DisableDropSoundBlockItem)
{
input.Add(new Tuple<ObservableCollection<IItemFilterBlockItem>, IItemFilterBlockItem>(blockItems, blockItem));
}
}
}
if (input.Count > 0)
{
_scriptCommandManager.ExecuteCommand(new RemoveBlockItemFromBlocksCommand(input));
SetDirtyFlag();
}
}
public void OnDisableDropSoundsCommand()
{
ValidateSelectedBlocks();
var input = new List<Tuple<ObservableCollection<IItemFilterBlockItem>, IItemFilterBlockItem>>();
foreach (var block in SelectedBlockViewModels.OfType<IItemFilterBlockViewModel>())
{
var blockItems = block.Block.BlockItems;
var found = false;
foreach (var item in blockItems)
{
if (item is DisableDropSoundBlockItem)
{
found = true;
}
}
if (!found) {
var item = new DisableDropSoundBlockItem(true);
input.Add(new Tuple<ObservableCollection<IItemFilterBlockItem>, IItemFilterBlockItem>(blockItems, item));
}
}
if (input.Count > 0)
{
_scriptCommandManager.ExecuteCommand(new AddBlockItemToBlocksCommand(input));
SetDirtyFlag();
}
}
private void OnBlockBecameDirty(object sender, EventArgs e)
{
@@ -1313,11 +1372,11 @@ namespace Filtration.ViewModels
{
foreach (var block in SelectedBlockViewModels)
{
if (block is IItemFilterCommentBlockViewModel)
if (block is IItemFilterCommentBlockViewModel model)
{
if (!(block as IItemFilterCommentBlockViewModel).IsExpanded)
if (!model.IsExpanded)
{
foreach (var child in getChildren(block as IItemFilterCommentBlockViewModel))
foreach (var child in GetChildren(model))
{
((IItemFilterBlockViewModel)child).BlockEnabled = false;
}
@@ -1334,11 +1393,11 @@ namespace Filtration.ViewModels
{
foreach (var block in SelectedBlockViewModels)
{
if (block is IItemFilterCommentBlockViewModel)
if (block is IItemFilterCommentBlockViewModel model)
{
if (!(block as IItemFilterCommentBlockViewModel).IsExpanded)
if (!model.IsExpanded)
{
foreach (var child in getChildren(block as IItemFilterCommentBlockViewModel))
foreach (var child in GetChildren(model))
{
((IItemFilterBlockViewModel)child).BlockEnabled = true;
}
@@ -1355,7 +1414,7 @@ namespace Filtration.ViewModels
{
foreach (var block in SelectedBlockViewModels.OfType<IItemFilterCommentBlockViewModel>())
{
foreach (var child in getChildren(block as IItemFilterCommentBlockViewModel))
foreach (var child in GetChildren(block))
{
((IItemFilterBlockViewModel)child).BlockEnabled = false;
}
@@ -1366,7 +1425,7 @@ namespace Filtration.ViewModels
{
foreach (var block in SelectedBlockViewModels.OfType<IItemFilterCommentBlockViewModel>())
{
foreach (var child in getChildren(block as IItemFilterCommentBlockViewModel))
foreach (var child in GetChildren(block))
{
((IItemFilterBlockViewModel)child).BlockEnabled = true;
}
@@ -1399,7 +1458,7 @@ namespace Filtration.ViewModels
{
var newState = !targetCommentBlockViewModelBase.IsExpanded;
targetCommentBlockViewModelBase.IsExpanded = newState;
foreach (var child in getChildren(targetCommentBlockViewModelBase))
foreach (var child in GetChildren(targetCommentBlockViewModelBase))
{
child.IsVisible = newState;
}
@@ -1414,15 +1473,11 @@ namespace Filtration.ViewModels
private void CollapseAllSections()
{
for (int i = 0; i < ItemFilterBlockViewModels.Count; i++)
foreach (var model in ItemFilterBlockViewModels.OfType<IItemFilterCommentBlockViewModel>())
{
var block = ItemFilterBlockViewModels[i] as IItemFilterCommentBlockViewModel;
if (block != null)
if (model.IsExpanded)
{
if(block.IsExpanded)
{
ToggleSection(block, true);
}
ToggleSection(model, true);
}
}
@@ -1433,12 +1488,11 @@ namespace Filtration.ViewModels
private void ExpandAllSections()
{
for (int i = 0; i < ItemFilterBlockViewModels.Count; i++)
foreach (var model in ItemFilterBlockViewModels.OfType<IItemFilterCommentBlockViewModel>())
{
var block = ItemFilterBlockViewModels[i] as IItemFilterCommentBlockViewModel;
if (block != null && !block.IsExpanded)
if (!model.IsExpanded)
{
ToggleSection(block, true);
ToggleSection(model, true);
}
}

View File

@@ -49,6 +49,7 @@ namespace Filtration.ViewModels
private readonly IItemFilterScriptTranslator _itemFilterScriptTranslator;
private readonly IReplaceColorsViewModel _replaceColorsViewModel;
private readonly IAvalonDockWorkspaceViewModel _avalonDockWorkspaceViewModel;
private readonly IScriptLoadingService _scriptLoadingService;
private readonly IThemeProvider _themeProvider;
private readonly IThemeService _themeService;
private readonly IMessageBoxService _messageBoxService;
@@ -63,6 +64,7 @@ namespace Filtration.ViewModels
IItemFilterScriptTranslator itemFilterScriptTranslator,
IReplaceColorsViewModel replaceColorsViewModel,
IAvalonDockWorkspaceViewModel avalonDockWorkspaceViewModel,
IScriptLoadingService scriptLoadingService,
ISettingsPageViewModel settingsPageViewModel,
IThemeProvider themeProvider,
IThemeService themeService,
@@ -75,6 +77,7 @@ namespace Filtration.ViewModels
_itemFilterScriptTranslator = itemFilterScriptTranslator;
_replaceColorsViewModel = replaceColorsViewModel;
_avalonDockWorkspaceViewModel = avalonDockWorkspaceViewModel;
_scriptLoadingService = scriptLoadingService;
SettingsPageViewModel = settingsPageViewModel;
_themeProvider = themeProvider;
_themeService = themeService;
@@ -126,6 +129,9 @@ namespace Filtration.ViewModels
ApplyThemeToScriptCommand = new RelayCommand(async () => await OnApplyThemeToScriptCommandAsync(), () => ActiveDocumentIsScript);
EditMasterThemeCommand = new RelayCommand(OnEditMasterThemeCommand, () => ActiveDocumentIsScript);
EnableDropSoundsCommand = new RelayCommand(OnEnableDropSoundsCommand, () => ActiveDocumentIsScript && ActiveScriptHasSelectedBlock && ActiveScriptCanModifySelectedBlocks);
DisableDropSoundsCommand = new RelayCommand(OnDisableDropSoundsCommand, () => ActiveDocumentIsScript && ActiveScriptHasSelectedBlock && ActiveScriptCanModifySelectedBlocks);
AddTextColorThemeComponentCommand = new RelayCommand(OnAddTextColorThemeComponentCommand, () => ActiveDocumentIsTheme && ActiveThemeIsEditable);
AddBackgroundColorThemeComponentCommand = new RelayCommand(OnAddBackgroundColorThemeComponentCommand, () => ActiveDocumentIsTheme && ActiveThemeIsEditable);
AddBorderColorThemeComponentCommand = new RelayCommand(OnAddBorderColorThemeComponentCommand, () => ActiveDocumentIsTheme && ActiveThemeIsEditable);
@@ -204,10 +210,6 @@ namespace Filtration.ViewModels
}
});
if (!string.IsNullOrWhiteSpace(Settings.Default.LastOpenScripts))
{
LoadScriptsAsync(Settings.Default.LastOpenScripts.Split(new char[] { '|' }, StringSplitOptions.RemoveEmptyEntries));
}
}
public RelayCommand OpenScriptCommand { get; }
@@ -231,6 +233,9 @@ namespace Filtration.ViewModels
public RelayCommand CreateThemeCommand { get; }
public RelayCommand ApplyThemeToScriptCommand { get; }
public RelayCommand EnableDropSoundsCommand { get; }
public RelayCommand DisableDropSoundsCommand { get; }
public RelayCommand AddTextColorThemeComponentCommand { get; }
public RelayCommand AddBackgroundColorThemeComponentCommand { get; }
public RelayCommand AddBorderColorThemeComponentCommand { get; }
@@ -369,12 +374,12 @@ namespace Filtration.ViewModels
{
case ".FILTER":
{
await LoadScriptAsync(filename);
await _scriptLoadingService.LoadScriptAsync(filename);
break;
}
case ".FILTERTHEME":
{
await LoadThemeAsync(filename);
await _scriptLoadingService.LoadThemeAsync(filename);
break;
}
}
@@ -403,7 +408,7 @@ namespace Filtration.ViewModels
OpenTheme(themeViewModel);
}
}
private void OpenTheme(IThemeEditorViewModel themeEditorViewModel)
{
if (AvalonDockWorkspaceViewModel.OpenDocuments.Contains(themeEditorViewModel))
@@ -431,43 +436,7 @@ namespace Filtration.ViewModels
return;
}
await LoadScriptAsync(filePath); // TODO: fix crash
}
private async Task LoadScriptsAsync(string[] files)
{
foreach (var file in files)
{
if (File.Exists(file))
{
await LoadScriptAsync(file);
}
}
}
private async Task LoadScriptAsync(string scriptFilename)
{
IItemFilterScriptViewModel loadedViewModel;
Messenger.Default.Send(new NotificationMessage("ShowLoadingBanner"));
try
{
loadedViewModel = await _itemFilterScriptRepository.LoadScriptFromFileAsync(scriptFilename);
}
catch (Exception e)
{
Logger.Error(e);
_messageBoxService.Show("Script Load Error", "Error loading filter script - " + e.Message,
MessageBoxButton.OK,
MessageBoxImage.Error);
return;
}
finally
{
Messenger.Default.Send(new NotificationMessage("HideLoadingBanner"));
}
_avalonDockWorkspaceViewModel.AddDocument(loadedViewModel);
await _scriptLoadingService.LoadScriptAsync(filePath);
}
private async Task OnOpenThemeCommandAsync()
@@ -478,27 +447,7 @@ namespace Filtration.ViewModels
return;
}
await LoadThemeAsync(filePath);
}
private async Task LoadThemeAsync(string themeFilename)
{
IThemeEditorViewModel loadedViewModel;
try
{
loadedViewModel = await _themeProvider.LoadThemeFromFile(themeFilename);
}
catch (Exception e)
{
Logger.Error(e);
_messageBoxService.Show("Theme Load Error", "Error loading filter theme - " + e.Message,
MessageBoxButton.OK,
MessageBoxImage.Error);
return;
}
_avalonDockWorkspaceViewModel.AddDocument(loadedViewModel);
await _scriptLoadingService.LoadThemeAsync(filePath);
}
private async Task OnApplyThemeToScriptCommandAsync()
@@ -781,11 +730,37 @@ namespace Filtration.ViewModels
_avalonDockWorkspaceViewModel.ActiveThemeViewModel.SelectedThemeComponent);
}
private void OnEnableDropSoundsCommand()
{
var result = _messageBoxService.Show("Confirm",
"Are you sure you wish to enable drop sounds on all selected blocks?",
MessageBoxButton.YesNo, MessageBoxImage.Question);
if (result == MessageBoxResult.No)
{
return;
}
_avalonDockWorkspaceViewModel.ActiveScriptViewModel.EnableDropSoundsCommand.Execute(null);
}
private void OnDisableDropSoundsCommand()
{
var result = _messageBoxService.Show("Confirm",
"Are you sure you wish to disable drop sounds on all selected blocks?",
MessageBoxButton.YesNo, MessageBoxImage.Question);
if (result == MessageBoxResult.No)
{
return;
}
_avalonDockWorkspaceViewModel.ActiveScriptViewModel.DisableDropSoundsCommand.Execute(null);
}
public async Task<bool> CloseAllDocumentsAsync()
{
Settings.Default.LastOpenScripts = string.Join("|", _avalonDockWorkspaceViewModel.OpenDocuments.OfType<IItemFilterScriptViewModel>().Select(sc => sc.Script.FilePath));
var openDocuments = _avalonDockWorkspaceViewModel.OpenDocuments.OfType<IEditableDocument>().ToList();
foreach (var document in openDocuments)
{
if (!_avalonDockWorkspaceViewModel.OpenDocuments.Contains(document))

View File

@@ -10,8 +10,9 @@ namespace Filtration.ViewModels
RelayCommand SetItemFilterScriptDirectoryCommand { get; }
string DefaultFilterDirectory { get; }
bool ExtraLineBetweenBlocks { get; set; }
bool BlocksExpandedOnOpen { get; set; }
bool DownloadPrereleaseUpdates { get; set; }
bool ExtraLineBetweenBlocks { get; set; }
}
internal class SettingsPageViewModel : ViewModelBase, ISettingsPageViewModel
@@ -28,10 +29,10 @@ namespace Filtration.ViewModels
public string DefaultFilterDirectory => Settings.Default.DefaultFilterDirectory;
public bool ExtraLineBetweenBlocks
public bool BlocksExpandedOnOpen
{
get => Settings.Default.ExtraLineBetweenBlocks;
set => Settings.Default.ExtraLineBetweenBlocks = value;
get => Settings.Default.BlocksExpandedOnOpen;
set => Settings.Default.BlocksExpandedOnOpen = value;
}
public bool DownloadPrereleaseUpdates
@@ -40,6 +41,12 @@ namespace Filtration.ViewModels
set => Settings.Default.DownloadPrereleaseUpdates = value;
}
public bool ExtraLineBetweenBlocks
{
get => Settings.Default.ExtraLineBetweenBlocks;
set => Settings.Default.ExtraLineBetweenBlocks = value;
}
private void OnSetItemFilterScriptDirectoryCommand()
{
_itemFilterScriptDirectoryService.SetItemFilterScriptDirectory();

View File

@@ -35,4 +35,6 @@
<Image Source="/Filtration;component/Resources/Icons/ThemeComponentDelete.ico" x:Key="ThemeComponentDeleteIcon" x:Shared="False" />
<Image Source="/Filtration;component/Resources/Icons/standby_enabled_icon.png" x:Key="StandbyEnabledIcon" x:Shared="False" />
<Image Source="/Filtration;component/Resources/Icons/standby_disabled_icon.png" x:Key="StandbyDisabledIcon" x:Shared="False" />
<Image Source="/Filtration;component/Resources/Icons/standby_enabled_icon.png" x:Key="EnableDropSoundsIcon" x:Shared="False" />
<Image Source="/Filtration;component/Resources/Icons/standby_disabled_icon.png" x:Key="DisableDropSoundsIcon" x:Shared="False" />
</ResourceDictionary>

View File

@@ -3,43 +3,39 @@
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:viewModels="clr-namespace:Filtration.ViewModels"
xmlns:userControls="clr-namespace:Filtration.UserControls"
xmlns:toolkit="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Input.Toolkit"
xmlns:views="clr-namespace:Filtration.Views"
xmlns:converters="clr-namespace:Filtration.Converters"
xmlns:blockItemBaseTypes="clr-namespace:Filtration.ObjectModel.BlockItemBaseTypes;assembly=Filtration.ObjectModel"
xmlns:componentModel="clr-namespace:System.ComponentModel;assembly=WindowsBase"
xmlns:designTime="clr-namespace:Filtration.ViewModels.DesignTime"
mc:Ignorable="d"
d:DataContext="{d:DesignInstance Type=viewModels:ItemFilterBlockViewModel}"
d:DesignHeight="200" d:DesignWidth="800">
d:DataContext="{d:DesignInstance Type=designTime:DesignTimeItemFilterBlockViewModel, IsDesignTimeCreatable=True}"
d:DesignHeight="400" d:DesignWidth="817">
<UserControl.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary>
<views:BindingProxy x:Key="Proxy" Data="{Binding}" />
<converters:BlockGroupAdvancedFillColorConverter x:Key="BlockGroupAdvancedFillColorConverter" />
<converters:MinimapIconToCroppedBitmapConverter x:Key="MinimapIconToCroppedBitmapConverter"/>
<Style TargetType="{x:Type ContentPresenter}" x:Key="BlockItemFadeInStyle">
<Setter Property="LayoutTransform">
<Setter.Value>
<ScaleTransform x:Name="transform" />
</Setter.Value>
</Setter>
<Style.Triggers>
<EventTrigger RoutedEvent="Loaded">
<EventTrigger.Actions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetProperty="Opacity" From="0" To="1" Duration="0:0:0.5" />
</Storyboard>
</BeginStoryboard>
</EventTrigger.Actions>
</EventTrigger>
</Style.Triggers>
</Style>
</ResourceDictionary>
</ResourceDictionary.MergedDictionaries>
<views:BindingProxy x:Key="Proxy" Data="{Binding}" />
<converters:BlockGroupAdvancedFillColorConverter x:Key="BlockGroupAdvancedFillColorConverter" />
<converters:MinimapIconToCroppedBitmapConverter x:Key="MinimapIconToCroppedBitmapConverter"/>
<Style TargetType="{x:Type ContentPresenter}" x:Key="BlockItemFadeInStyle">
<Setter Property="LayoutTransform">
<Setter.Value>
<ScaleTransform x:Name="transform" />
</Setter.Value>
</Setter>
<Style.Triggers>
<EventTrigger RoutedEvent="Loaded">
<EventTrigger.Actions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetProperty="Opacity" From="0" To="1" Duration="0:0:0.5" />
</Storyboard>
</BeginStoryboard>
</EventTrigger.Actions>
</EventTrigger>
</Style.Triggers>
</Style>
</ResourceDictionary>
</UserControl.Resources>
<Grid x:Name="TopLevelGrid">
@@ -99,7 +95,7 @@
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<!-- BlockItems Summary Panel -->
<StackPanel Grid.Row="0" Grid.Column="0" VerticalAlignment="Center">
<StackPanel Grid.Row="0" Grid.Column="0" VerticalAlignment="Center" Margin="0,5">
<StackPanel.Resources>
<CollectionViewSource Source="{Binding SummaryBlockItems}" x:Key="SummaryBlockItemsCollectionViewSource">
<CollectionViewSource.SortDescriptions>
@@ -121,9 +117,9 @@
</DataTemplate>
<DataTemplate DataType="{x:Type blockItemBaseTypes:ActionBlockItem}">
<Button Command="{Binding ElementName=TopLevelGrid, Path=DataContext.ToggleBlockActionCommand}" Style="{StaticResource ChromelessButton}">
<Border BorderBrush="Black" CornerRadius="4" Margin="0,2,2,2" BorderThickness="1" Background="{Binding SummaryBackgroundColor, Converter={StaticResource ColorToSolidColorBrushConverter}}">
<TextBlock Text="{Binding SummaryText}" Margin="5,1,5,1" Foreground="{Binding SummaryTextColor, Converter={StaticResource ColorToSolidColorBrushConverter}}" />
</Border>
<Border BorderBrush="Black" CornerRadius="4" Margin="0,2,2,2" BorderThickness="1" Background="{Binding SummaryBackgroundColor, Converter={StaticResource ColorToSolidColorBrushConverter}}">
<TextBlock Text="{Binding SummaryText}" Margin="5,1,5,1" Foreground="{Binding SummaryTextColor, Converter={StaticResource ColorToSolidColorBrushConverter}}" />
</Border>
</Button>
</DataTemplate>
</ItemsControl.Resources>
@@ -199,9 +195,9 @@
</Expander.Header>
<Grid Margin="10,5,10,5" x:Name="BlockItemsGrid">
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
<RowDefinition />
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<WrapPanel Grid.Row="0">
@@ -240,24 +236,78 @@
<Button Height="12" Command="{Binding AddBlockGroupCommand}" Content="{StaticResource AddIcon}"
ToolTip="Add" Background="Transparent" BorderThickness="0" Margin="3,0,0,0" />
</WrapPanel>
<!-- Regular Block Items-->
<Grid Grid.Row="1" Visibility="{Binding AudioVisualBlockItemsGridVisible, Converter={StaticResource InverseBooleanVisibilityConverter}}">
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<TextBlock Grid.Row="1" VerticalAlignment="Bottom" HorizontalAlignment="Right">
<Hyperlink Command="{Binding SwitchBlockItemsViewCommand}">
Switch to Appearance Block Items
</Hyperlink>
</TextBlock>
<!-- Add Block Item Links -->
<ItemsControl Grid.Column="0" ItemsSource="{Binding BlockItemTypesAvailable}" Grid.Row="0" Margin="0,0,0,10">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBlock Margin="0,0,3,0">
<Hyperlink Command="{Binding ElementName=TopLevelGrid, Path=DataContext.AddFilterBlockItemCommand}" CommandParameter="{Binding}">
<TextBlock>+</TextBlock><TextBlock Text="{Binding Path=., Converter={StaticResource BlockItemTypeToStringConverter}}" />
</Hyperlink>
</TextBlock>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
<!-- Enable/Disable Block Button -->
<userControls:EnableDisableToggleButton Grid.Row="0" Grid.Column="1" VerticalAlignment="Top" />
<!-- Block Items -->
<Grid Grid.Column="0" Grid.ColumnSpan="2" Grid.Row="1" MaxHeight="200">
<Grid.Resources>
<CollectionViewSource Source="{Binding RegularBlockItems}" x:Key="BlockItemsCollectionViewSource">
<CollectionViewSource.SortDescriptions>
<componentModel:SortDescription PropertyName="SortOrder"/>
</CollectionViewSource.SortDescriptions>
</CollectionViewSource>
</Grid.Resources>
<ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Disabled" PreviewMouseWheel="UIElement_OnPreviewMouseWheel">
<ItemsControl ItemsSource="{Binding Source={StaticResource BlockItemsCollectionViewSource}}"
ItemContainerStyle="{StaticResource BlockItemFadeInStyle}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel Orientation="Vertical" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<userControls:BlockItemControl BlockItem="{Binding}" RemoveItemCommand="{Binding ElementName=TopLevelGrid, Path=DataContext.RemoveFilterBlockItemCommand}" RemoveEnabled="{Binding Path=., Converter={StaticResource BlockItemToRemoveEnabledVisibilityConverter}}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</ScrollViewer>
</Grid>
</Grid>
<!-- Audio/Visual Block Items-->
<Grid Grid.Row="1" Visibility="{Binding AudioVisualBlockItemsGridVisible, Converter={StaticResource BooleanVisibilityConverter}}">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<!-- Add AudioVisual Block Item Links -->
<ItemsControl Grid.Column="0" ItemsSource="{Binding AudioVisualBlockItemTypesAvailable}" Grid.Row="0" Margin="0,0,0,10">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel></WrapPanel>
@@ -275,116 +325,56 @@
</ItemsControl>
<!-- Enable/Disable Block Button -->
<ToggleButton Grid.Row="0"
Grid.Column="1"
Style="{StaticResource ChromelessToggleButton}"
IsChecked="{Binding BlockEnabled}"
Margin="0,0,5,0"
ToolTip="Enable/Disable Block"
Cursor="Hand"
Width="25"
Height="25">
<Image RenderOptions.BitmapScalingMode="HighQuality">
<Image.Style>
<Style TargetType="{x:Type Image}">
<Style.Triggers>
<DataTrigger Binding="{Binding BlockEnabled}" Value="true">
<Setter Property="Source" Value="/Filtration;component/Resources/Icons/standby_enabled_icon.png"/>
</DataTrigger>
<DataTrigger Binding="{Binding BlockEnabled}" Value="false">
<Setter Property="Source" Value="/Filtration;component/Resources/Icons/standby_disabled_icon.png"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Image.Style>
</Image>
</ToggleButton>
<!-- Block Items -->
<WrapPanel Grid.Column="0" Grid.ColumnSpan="2" Grid.Row="1" MaxHeight="200">
<WrapPanel.Resources>
<CollectionViewSource Source="{Binding RegularBlockItems}" x:Key="BlockItemsCollectionViewSource">
<CollectionViewSource.SortDescriptions>
<componentModel:SortDescription PropertyName="SortOrder"/>
</CollectionViewSource.SortDescriptions>
</CollectionViewSource>
</WrapPanel.Resources>
<ItemsControl ItemsSource="{Binding Source={StaticResource BlockItemsCollectionViewSource}}"
ItemContainerStyle="{StaticResource BlockItemFadeInStyle}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel Orientation="Vertical" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<userControls:BlockItemControl BlockItem="{Binding}" RemoveItemCommand="{Binding ElementName=TopLevelGrid, Path=DataContext.RemoveFilterBlockItemCommand}" RemoveEnabled="{Binding Path=., Converter={StaticResource BlockItemToRemoveEnabledVisibilityConverter}}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</WrapPanel>
</Grid>
<Grid Grid.Row="1" Visibility="{Binding AudioVisualBlockItemsGridVisible, Converter={StaticResource BooleanVisibilityConverter}}">
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<TextBlock Grid.Row="1" VerticalAlignment="Bottom" HorizontalAlignment="Right">
<Hyperlink Command="{Binding SwitchBlockItemsViewCommand}">
Switch to Regular Block Items
</Hyperlink>
</TextBlock>
<!-- Add AudioVisual Block Item Links -->
<ItemsControl ItemsSource="{Binding AudioVisualBlockItemTypesAvailable}" Grid.Row="0" Margin="0,0,0,10">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel></WrapPanel>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBlock Margin="0,0,3,0">
<Hyperlink Command="{Binding ElementName=TopLevelGrid, Path=DataContext.AddFilterBlockItemCommand}" CommandParameter="{Binding}">
<TextBlock>+</TextBlock><TextBlock Text="{Binding Path=., Converter={StaticResource BlockItemTypeToStringConverter}}" />
</Hyperlink>
</TextBlock>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
<userControls:EnableDisableToggleButton Grid.Row="0" Grid.Column="1" VerticalAlignment="Top" />
<TextBlock Grid.Column="0" Grid.ColumnSpan="2" Grid.Row="1" FontStyle="Italic" HorizontalAlignment="Left" Visibility="{Binding HasAudioVisualBlockItems, Converter={StaticResource InverseBooleanVisibilityConverter}}">To change the appearance of this block, add a Text, Background or Border Block Item above.</TextBlock>
<TextBlock Grid.Row="1" FontStyle="Italic" HorizontalAlignment="Left" Visibility="{Binding HasAudioVisualBlockItems, Converter={StaticResource InverseBooleanVisibilityConverter}}">To change the appearance of this block, add a Text, Background or Border Block Item above.</TextBlock>
<!-- Block Items -->
<WrapPanel Grid.Row="1" MaxHeight="200">
<WrapPanel.Resources>
<Grid Grid.Column="0" Grid.ColumnSpan="2" Grid.Row="1" MaxHeight="200">
<Grid.Resources>
<CollectionViewSource Source="{Binding AudioVisualBlockItems}" x:Key="BlockItemsCollectionViewSource">
<CollectionViewSource.SortDescriptions>
<componentModel:SortDescription PropertyName="SortOrder"/>
</CollectionViewSource.SortDescriptions>
</CollectionViewSource>
</WrapPanel.Resources>
<ItemsControl ItemsSource="{Binding Source={StaticResource BlockItemsCollectionViewSource}}"
</Grid.Resources>
<ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Disabled" PreviewMouseWheel="UIElement_OnPreviewMouseWheel">
<ItemsControl ItemsSource="{Binding Source={StaticResource BlockItemsCollectionViewSource}}"
ItemContainerStyle="{StaticResource BlockItemFadeInStyle}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel Orientation="Vertical" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<userControls:BlockItemControl BlockItem="{Binding}" RemoveItemCommand="{Binding ElementName=TopLevelGrid, Path=DataContext.RemoveFilterBlockItemCommand}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</WrapPanel>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel Orientation="Vertical" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<userControls:BlockItemControl BlockItem="{Binding}" RemoveItemCommand="{Binding ElementName=TopLevelGrid, Path=DataContext.RemoveFilterBlockItemCommand}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</ScrollViewer>
</Grid>
</Grid>
<Grid Grid.Row="2" Margin="0,5,0,5">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Margin="0,0,5,0" Text="Description:" VerticalAlignment="Center" />
<TextBox Grid.Column="1" Text="{Binding BlockDescription}" />
<TextBlock Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="2" VerticalAlignment="Bottom" HorizontalAlignment="Right" Margin="0,0,0,8">
<Hyperlink Command="{Binding SwitchBlockItemsViewCommand}">
<Grid>
<TextBlock Text="Switch to Regular Block Items" Visibility="{Binding AudioVisualBlockItemsGridVisible, Converter={StaticResource BooleanVisibilityConverter}}" />
<TextBlock Text="Switch to Appearance Block Items" Visibility="{Binding AudioVisualBlockItemsGridVisible, Converter={StaticResource InverseBooleanVisibilityConverter}}" />
</Grid>
</Hyperlink>
</TextBlock>
<TextBlock Grid.Row="1" Grid.Column="0" Margin="0,0,5,0" Text="Description:" VerticalAlignment="Center" />
<TextBox Grid.Row="1" Grid.Column="1" Text="{Binding BlockDescription}" />
</Grid>
</Grid>
</Expander>

View File

@@ -1,5 +1,9 @@
using System.Windows.Input;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Media;
using Filtration.UserControls;
using Filtration.Utility;
namespace Filtration.Views
{
@@ -25,10 +29,36 @@ namespace Filtration.Views
{
if (e.Key == Key.Enter)
{
System.Windows.Controls.AutoCompleteBox box = sender as System.Windows.Controls.AutoCompleteBox;
AutoCompleteBox box = sender as AutoCompleteBox;
dynamic viewModel = box.DataContext;
viewModel.AddBlockGroupCommand.Execute(null);
}
}
private void UIElement_OnPreviewMouseWheel(object sender, MouseWheelEventArgs e)
{
// Prevents the ScrollViewer from handling mouse wheel events, and passes the events
// to the parent control instead. This is necessary because the ItemsControl that displays
// ItemFilterBlocks is in a ScrollViewer but we want to use the mouse wheel for scrolling
// up and down in ItemFilterScriptView rather than within the block.
if (sender is ScrollViewer viewer && !e.Handled)
{
// Don't handle events if they originated from a control within an EditableListBoxControl
// since we still want to allow scrolling within those with the mouse wheel
if (e.OriginalSource is DependencyObject dependencyObject && VisualTreeUtility.FindParent<EditableListBoxControl>(dependencyObject) != null)
{
e.Handled = false;
return;
}
e.Handled = true;
var eventArg = new MouseWheelEventArgs(e.MouseDevice, e.Timestamp, e.Delta) {RoutedEvent = MouseWheelEvent, Source = viewer};
if (viewer.Parent is UIElement parent)
{
parent.RaiseEvent(eventArg);
}
}
}
}
}

View File

@@ -2,7 +2,7 @@
x:ClassModifier="internal"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:fluent="clr-namespace:Fluent;assembly=Fluent"
xmlns:viewModels="clr-namespace:Filtration.ViewModels"
@@ -64,12 +64,12 @@
Background="ForestGreen"
BorderBrush="ForestGreen"
x:Name="ScriptToolsGroup"
IsVisibleChanged="ScriptToolsGroup_OnIsVisibleChanged"
IsVisibleChanged="ScriptToolsGroup_OnIsVisibleChanged"
Visibility="{Binding ActiveDocumentIsScript, Converter={StaticResource BooleanVisibilityConverter}, Mode=OneWay}" />
<fluent:RibbonContextualTabGroup Header="Theme"
Background="DodgerBlue"
BorderBrush="DodgerBlue"
x:Name="ThemeToolsGroup"
x:Name="ThemeToolsGroup"
IsVisibleChanged="ThemeToolsGroup_OnIsVisibleChanged"
Visibility="{Binding ActiveDocumentIsTheme, Converter={StaticResource BooleanVisibilityConverter}, Mode=OneWay}" />
</fluent:Ribbon.ContextualGroups>
@@ -125,6 +125,10 @@
<fluent:Button Header="Create Theme" Command="{Binding CreateThemeCommand}" Icon="{StaticResource ThemeIcon}" LargeIcon="{StaticResource ThemeIcon}" />
<fluent:Button Header="Replace Colours" Command="{Binding ReplaceColorsCommand}" Icon="{StaticResource ReplaceColorsIcon}" LargeIcon="{StaticResource ReplaceColorsIcon}" />
</fluent:RibbonGroupBox>
<fluent:RibbonGroupBox Header="Helpers">
<fluent:Button Header="Enable Drop Sounds" Command="{Binding EnableDropSoundsCommand}" SizeDefinition="Middle" Icon="{StaticResource EnableDropSoundsIcon}" LargeIcon="{StaticResource EnableDropSoundsIcon}" />
<fluent:Button Header="Disable Drop Sounds" Command="{Binding DisableDropSoundsCommand}" SizeDefinition="Middle" Icon="{StaticResource DisableDropSoundsIcon}" LargeIcon="{StaticResource DisableDropSoundsIcon}" />
</fluent:RibbonGroupBox>
</fluent:RibbonTabItem>
<fluent:RibbonTabItem x:Name="ThemeToolsTabItem" Header="Theme Tools" Group="{Binding ElementName=ThemeToolsGroup}" Visibility="{Binding ActiveDocumentIsTheme, Converter={StaticResource BooleanVisibilityConverter}, Mode=OneWay}">
<fluent:RibbonGroupBox Header="Add Components">
@@ -172,5 +176,4 @@
</Grid>
</DockPanel>
</fluent:RibbonWindow>

View File

@@ -4,7 +4,7 @@
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:designTime="clr-namespace:Filtration.ViewModels.DesignTime"
mc:Ignorable="d" d:DesignWidth="1200"
mc:Ignorable="d" d:DesignWidth="1200" d:DesignHeight="400"
d:DataContext="{d:DesignInstance Type=designTime:DesignTimeSettingsPageViewModel, IsDesignTimeCreatable=True}">
<Border BorderBrush="Black" BorderThickness="1">
<DockPanel Margin="10" MaxWidth="600" HorizontalAlignment="Left">
@@ -22,8 +22,8 @@
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="5" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition x:Name="BlankLineBetweenBlocks" Height="Auto" />
<RowDefinition x:Name="DownloadPreReleases" Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
@@ -40,8 +40,10 @@
</Grid>
<TextBlock Grid.Row="2" Grid.Column="0" VerticalAlignment="Center">Add blank line between blocks when saving</TextBlock>
<CheckBox Grid.Row="2" Grid.Column="2" IsChecked="{Binding ExtraLineBetweenBlocks}" />
<TextBlock Grid.Row="4" Grid.Column="0" VerticalAlignment="Center">Download pre-release updates (use with caution)</TextBlock>
<CheckBox Grid.Row="4" Grid.Column="2" IsChecked="{Binding DownloadPrereleaseUpdates}" />
<TextBlock Grid.Row="3" Grid.Column="0" VerticalAlignment="Center">Download pre-release updates (use with caution)</TextBlock>
<CheckBox Grid.Row="3" Grid.Column="2" IsChecked="{Binding DownloadPrereleaseUpdates}" />
<TextBlock Grid.Row="4" Grid.Column="0" VerticalAlignment="Center">Auto-expand all sections when opening scripts</TextBlock>
<CheckBox Grid.Row="4" Grid.Column="2" IsChecked="{Binding BlocksExpandedOnOpen}" />
</Grid>
</Grid>
</DockPanel>

View File

@@ -5,7 +5,7 @@ using Filtration.Services;
namespace Filtration.WindsorInstallers
{
public class ServicesInstaller :IWindsorInstaller
public class ServicesInstaller : IWindsorInstaller
{
public void Install(IWindsorContainer container, IConfigurationStore store)
{
@@ -19,6 +19,11 @@ namespace Filtration.WindsorInstallers
.ImplementedBy<ItemFilterScriptDirectoryService>()
.LifeStyle.Singleton);
container.Register(
Component.For<IScriptLoadingService>()
.ImplementedBy<ScriptLoadingService>()
.LifeStyle.Singleton);
container.Register(
Component.For<IStaticDataService>()
.ImplementedBy<StaticDataService>()

View File

@@ -1,25 +1,27 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="AutoMapper" version="8.0.0" targetFramework="net461" />
<package id="Castle.Core" version="4.3.1" targetFramework="net461" />
<package id="Castle.Windsor" version="4.1.1" targetFramework="net461" />
<package id="CommonServiceLocator" version="2.0.4" targetFramework="net461" />
<package id="ControlzEx" version="3.0.2.4" targetFramework="net461" />
<package id="DeltaCompressionDotNet" version="1.1.0" targetFramework="net461" />
<package id="Extended.Wpf.Toolkit" version="3.4.0" targetFramework="net461" />
<package id="Fluent.Ribbon" version="6.1.0.326" targetFramework="net461" />
<package id="MahApps.Metro" version="1.2.4.0" targetFramework="net461" />
<package id="Mono.Cecil" version="0.9.6.1" targetFramework="net461" />
<package id="MvvmLightLibs" version="5.4.1.1" targetFramework="net461" />
<package id="NLog" version="4.5.11" targetFramework="net461" />
<package id="NLog.Schema" version="4.5.11" targetFramework="net461" />
<package id="NuGet.CommandLine" version="4.7.1" targetFramework="net461" developmentDependency="true" />
<package id="SharpCompress" version="0.17.1" targetFramework="net461" />
<package id="Splat" version="1.6.2" targetFramework="net461" />
<package id="squirrel.windows" version="1.8.0" targetFramework="net461" />
<package id="System.ValueTuple" version="4.5.0" targetFramework="net461" />
<package id="WindowsAPICodePack-Core" version="1.1.2" targetFramework="net461" />
<package id="WindowsAPICodePack-Shell" version="1.1.1" targetFramework="net461" />
<package id="WpfAnimatedGif" version="1.4.17" targetFramework="net461" />
<package id="WPFToolkit" version="3.5.50211.1" targetFramework="net451" />
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="AutoMapper" version="8.0.0" targetFramework="net461" />
<package id="Castle.Core" version="4.3.1" targetFramework="net461" />
<package id="Castle.Windsor" version="4.1.1" targetFramework="net461" />
<package id="CommonServiceLocator" version="2.0.4" targetFramework="net461" />
<package id="ControlzEx" version="3.0.2.4" targetFramework="net461" />
<package id="DeltaCompressionDotNet" version="1.1.0" targetFramework="net461" />
<package id="DynamicData" version="6.7.0.2529" targetFramework="net461" />
<package id="Extended.Wpf.Toolkit" version="3.4.0" targetFramework="net461" />
<package id="Fluent.Ribbon" version="6.1.0.326" targetFramework="net461" />
<package id="MahApps.Metro" version="1.2.4.0" targetFramework="net461" />
<package id="Mono.Cecil" version="0.9.6.1" targetFramework="net461" />
<package id="MvvmLightLibs" version="5.4.1.1" targetFramework="net461" />
<package id="NLog" version="4.5.11" targetFramework="net461" />
<package id="NLog.Schema" version="4.5.11" targetFramework="net461" />
<package id="NuGet.CommandLine" version="4.7.1" targetFramework="net461" developmentDependency="true" />
<package id="SharpCompress" version="0.17.1" targetFramework="net461" />
<package id="Splat" version="1.6.2" targetFramework="net461" />
<package id="squirrel.windows" version="1.9.0" targetFramework="net461" />
<package id="System.Reactive" version="4.0.0" targetFramework="net461" />
<package id="System.ValueTuple" version="4.5.0" targetFramework="net461" />
<package id="WindowsAPICodePack-Core" version="1.1.2" targetFramework="net461" />
<package id="WindowsAPICodePack-Shell" version="1.1.1" targetFramework="net461" />
<package id="WpfAnimatedGif" version="1.4.17" targetFramework="net461" />
<package id="WPFToolkit" version="3.5.50211.1" targetFramework="net451" />
</packages>