Compare commits
320 Commits
LootExplos
...
master
Author | SHA1 | Date |
---|---|---|
Ben Wallis | bb715f6583 | |
Ben Wallis | 416f145d3f | |
Ben Wallis | 92759871b4 | |
Ben Wallis | 322afa1c3f | |
Ben Wallis | 8ea26a4614 | |
azakhi | dcd963a210 | |
azakhi | 757fc46e6b | |
Ben Wallis | 7a6747ebad | |
Ben Wallis | 309be5e881 | |
Ben Wallis | 785524f3ab | |
Ben Wallis | fdec69789e | |
Ben Wallis | 4afff926b8 | |
Ben Wallis | 4290688ac0 | |
Ben Wallis | 7c31ba393c | |
Ben Wallis | 7bab2e3392 | |
Ben Wallis | cb6b61c66c | |
Ben Wallis | ab7cbf5ce4 | |
Ben Wallis | 02eafb4c62 | |
Ben Wallis | 992c6f510a | |
Ben Wallis | 85c215382b | |
Ben Wallis | c44d7b6095 | |
Ben Wallis | 717a0a83a9 | |
azakhi | 1f9a1c5196 | |
azakhi | dea0378a16 | |
azakhi | 4862452188 | |
azakhi | db258de11e | |
Ben Wallis | e2a92e10bb | |
Ben Wallis | 444f09751a | |
Ben Wallis | 9356f55209 | |
Ben Wallis | fb7bd8b81e | |
azakhi | 72ed517929 | |
Ben Wallis | 290547cbba | |
azakhi | 065e56e0a6 | |
Ben Wallis | d686e6da39 | |
Ben Wallis | 79398667b4 | |
Glen M | 2424ab9195 | |
azakhi | 491f448f94 | |
Glen M | 2f49e85227 | |
azakhi | dce0af7fd6 | |
Ben Wallis | 208aeb39f6 | |
Ben Wallis | 79274df0fb | |
Ben Wallis | 4052d6e020 | |
Ben Wallis | 7c0da57570 | |
Ben Wallis | 557767f4dc | |
Ben Wallis | ad1b46f975 | |
Ben Wallis | 9f17d84a7f | |
Ben Wallis | 0fe21336e6 | |
Ben Wallis | 2ba1b8adac | |
Glen M | 2415be089b | |
Ben Wallis | 892b2f15f2 | |
Ben Wallis | 042e5b41f9 | |
Ben Wallis | 5fc260dbb2 | |
Ben Wallis | 3de33e9447 | |
Ben Wallis | 37ad9ac42e | |
Glen M | fbd02702b0 | |
Ben Wallis | a20c988380 | |
Glen M | 7ce5aaa861 | |
Glen M | 4b6cee9d94 | |
Ben Wallis | 6fb0ec8084 | |
Ben Wallis | a13dc44a7d | |
Ben Wallis | 05b729edf8 | |
Ben Wallis | 876e98437e | |
Ben Wallis | 30e76e333c | |
Glen M | f840fb69ad | |
Ben Wallis | ae98c2d5de | |
Ben Wallis | ba6d50cf45 | |
Ben Wallis | 6838cb12a8 | |
Ben Wallis | fd2023598b | |
Ben Wallis | e3b1a5dba7 | |
Ben Wallis | 25c25c2a1d | |
Ben Wallis | e5386132c3 | |
Ben Wallis | 784f0227ee | |
Ben Wallis | fb37faa7bc | |
azakhi | 63236769aa | |
azakhi | 05a994f562 | |
azakhi | 124786dd0d | |
Ben Wallis | cde2d692c9 | |
Ben Wallis | c96aa472d9 | |
Ben Wallis | d4e8a72d47 | |
Ben Wallis | 4c826f42fd | |
azakhi | 4022cf12a0 | |
Ben Wallis | 8073948cfe | |
Ben Wallis | e516ded476 | |
Ben Wallis | f331bffee7 | |
Ben Wallis | f238bbf856 | |
Ben Wallis | a0191576f0 | |
Ben Wallis | 1d96b69800 | |
Ben Wallis | 99abb276af | |
Ben Wallis | 073fe553ea | |
Ben Wallis | 0d81d0ef54 | |
Ben Wallis | f04f9c20ed | |
Ben Wallis | f71ba74425 | |
Ben Wallis | 04cbf218f3 | |
Ben Wallis | 6007306346 | |
Ben Wallis | 992bd21570 | |
Ben Wallis | 7d8b32b2e7 | |
Ben Wallis | ac904c31ff | |
Ben Wallis | f51fe315ad | |
Ben Wallis | 3ce2e12f56 | |
Ben Wallis | 43e5b30080 | |
GlenCFL | bc99339390 | |
Ben Wallis | 781faae85d | |
GlenCFL | c926808878 | |
GlenCFL | 24d9f97717 | |
Ben Wallis | 7e4e6fe42e | |
Ben Wallis | c6d75cfff6 | |
Ben Wallis | 2f30eade7c | |
azakhi | e719f0bce0 | |
Ben Wallis | dffbbf3591 | |
azakhi | 07a7e8d05c | |
Ben Wallis | 1ba224906c | |
azakhi | 32523787d2 | |
Ben Wallis | ac6943d73b | |
Ben Wallis | 36c0aaea17 | |
Ben Wallis | 4b38a6a4e0 | |
Ben Wallis | 9c44dd7e7d | |
Ben Wallis | 18c878e350 | |
Ben Wallis | 5d30888597 | |
azakhi | bfd722d362 | |
azakhi | d23741555a | |
azakhi | 820aa5499e | |
azakhi | 1ee38b4c0e | |
azakhi | 4bed777427 | |
azakhi | 1f6cbeec86 | |
azakhi | 550a2d8f25 | |
Ben Wallis | ae38197052 | |
GlenCFL | 4fd4ffc520 | |
Ben Wallis | e15efe4e15 | |
GlenCFL | 196db4c730 | |
GlenCFL | 910b2b8c7f | |
Ben Wallis | b31ce1d843 | |
azakhi | 99a011c78c | |
azakhi | 69ce542c1a | |
Ben Wallis | 2ff9ebf242 | |
azakhi | 0eff63d706 | |
Ben Wallis | 1b8f37ca3a | |
Ben Wallis | b4f02f872e | |
azakhi | cfef82e53a | |
azakhi | bdd121f48c | |
Ben Wallis | 0209de3817 | |
Ben Wallis | 1e26a2ae3e | |
GlenCFL | 54b72e44b0 | |
GlenCFL | 24df1d7687 | |
Ben Wallis | 7162e16b49 | |
azakhi | 324ce4d0b3 | |
azakhi | de489e8b2c | |
azakhi | 341b1d1eb2 | |
azakhi | 6be29dbd28 | |
azakhi | 3851ad51e1 | |
azakhi | 65d3e07156 | |
azakhi | a86ab3ec8d | |
azakhi | 41722e8a57 | |
Ben Wallis | 3cb0a041d7 | |
Ben Wallis | c8778bb1eb | |
Ben Wallis | 8e849d6a8f | |
azakhi | 0d3f01a856 | |
azakhi | 178ff579c6 | |
Ben Wallis | 30aa52e788 | |
Ben Wallis | c1aee2f8f7 | |
Ben Wallis | 937426e9a3 | |
Ben Wallis | 7e0932830d | |
Ben Wallis | 15c63fa222 | |
Ben Wallis | cc986eea21 | |
azakhi | c260014a16 | |
azakhi | 8f0f73f185 | |
Ben Wallis | 15143f738f | |
Ben Wallis | dc6ed934b2 | |
azakhi | 78b4ddc862 | |
azakhi | a09f0a5090 | |
azakhi | 2958d93b33 | |
azakhi | 1e9b1158bd | |
azakhi | d92d34af05 | |
azakhi | bc5a005ee7 | |
azakhi | 8ba3433dcf | |
azakhi | d0bc0b6864 | |
azakhi | 1eaf0b6fe5 | |
azakhi | 4c76dc9bab | |
azakhi | 2a7df9a1ca | |
azakhi | add7514ce7 | |
azakhi | 0974579684 | |
azakhi | c0e9c534de | |
azakhi | 780081263c | |
azakhi | 387f08db85 | |
azakhi | 7fb9378304 | |
azakhi | e5209fb459 | |
azakhi | 961805272d | |
azakhi | 281c7d85e1 | |
azakhi | 57775a9e22 | |
azakhi | 5817295f7c | |
azakhi | 216168533f | |
azakhi | f6969a0204 | |
azakhi | 38053666a0 | |
azakhi | bd730dd518 | |
azakhi | 2c4096ff2c | |
azakhi | 738415f10a | |
azakhi | f03e37602d | |
azakhi | 2230b81257 | |
azakhi | 3aa2bf488c | |
azakhi | 71b7a45f84 | |
azakhi | 0fd2db7076 | |
azakhi | 400688573c | |
Ben Wallis | 52fc1f6bbc | |
Ben Wallis | 3f437c0109 | |
Ben Wallis | f838b35b4c | |
Ben Wallis | ac706486cb | |
Ben Wallis | 3607ad362e | |
Ben Wallis | 1ecec4e9dc | |
Ben Wallis | 404a04c210 | |
GlenCFL | f1b2be7d74 | |
GlenCFL | 6393a53bf5 | |
GlenCFL | a0a72b5fe8 | |
GlenCFL | d96234f099 | |
GlenCFL | 07fdc2eb49 | |
GlenCFL | 86ff670fb0 | |
Ben Wallis | c9caed7e6b | |
Ben Wallis | 9cf4d86cb0 | |
Ben Wallis | 523a9553d9 | |
Ben Wallis | b88730fb3a | |
GlenCFL | 06b88e85f2 | |
GlenCFL | b98988f0b5 | |
Ben Wallis | d14e4e9320 | |
Ben Wallis | d91f7e1ac3 | |
Ben Wallis | d84b17ced3 | |
GlenCFL | fef20ff36a | |
GlenCFL | 23fa82655b | |
GlenCFL | e5bd994164 | |
GlenCFL | 342487f800 | |
GlenCFL | 8bf3527b69 | |
GlenCFL | 010e0dda31 | |
GlenCFL | 2cf6a5953b | |
GlenCFL | 1ebbe5b5a8 | |
Ben Wallis | fee2a4dd99 | |
Ben Wallis | b65fad0679 | |
Ben Wallis | 43c6149832 | |
Ben Wallis | 4def27c49d | |
Ben Wallis | 7b8ff1e3cb | |
Ben Wallis | 797c911bb5 | |
Ben Wallis | 8e54cc3b4b | |
Ben Wallis | ab7aefa8a6 | |
Ben Wallis | bb77138854 | |
Ben Wallis | 2d98f7de36 | |
Ben Wallis | 6277917ae6 | |
Ben Wallis | 3fe021949a | |
Ben Wallis | 733c7d1757 | |
Ben Wallis | 702c118783 | |
Ben Wallis | 11d85fdd1b | |
Ben Wallis | 8dc5864d2e | |
Ben Wallis | 884651bce9 | |
Ben Wallis | e7a40c8c6d | |
Ben Wallis | dde9f65ea6 | |
Ben Wallis | ae6e8c5211 | |
Ben Wallis | 67685d9eac | |
Ben Wallis | af08cdfed6 | |
Ben Wallis | 0b791f5747 | |
Ben Wallis | 43bc1410ae | |
Ben Wallis | b3520246b9 | |
Ben Wallis | 6d1c51361b | |
Ben Wallis | 360b1c8144 | |
Ben Wallis | 80b8318574 | |
Ben Wallis | 85f47ce654 | |
Ben Wallis | c88c401ca8 | |
Ben Wallis | 45ab1a57e3 | |
Ben Wallis | f77e9575fc | |
Ben Wallis | 6eb17555c0 | |
Ben Wallis | ce4366d3fd | |
Ben Wallis | 03a291a309 | |
Ben Wallis | 0eecd5d1ff | |
Ben Wallis | f947cd02da | |
Ben Wallis | f75095ba72 | |
Ben Wallis | 76dd9fb22c | |
Ben Wallis | 8bfbe7cc66 | |
Ben Wallis | 86dc03f4ff | |
Ben Wallis | d159f0b262 | |
Ben Wallis | 1bdc8bf6fd | |
Ben Wallis | 89e98fc8c6 | |
Ben Wallis | 014107c76b | |
Ben Wallis | 2f2a57e77a | |
Ben Wallis | d014a93b70 | |
Ben Wallis | 7d2e20e9e1 | |
Ben Wallis | bb45832d7a | |
Ben Wallis | 2dc56799fd | |
Ben Wallis | 9a117d118f | |
Ben Wallis | 94836f9673 | |
Ben | c5eb27d08d | |
Ben | 4185c3dbde | |
Ben Wallis | fc12c2dced | |
Ben | 94146467a3 | |
Ben | da9fad05a6 | |
Ben | eb73767560 | |
Ben | 2954cfe259 | |
Ben Wallis | 3694e6fa0c | |
Ben | 37258e563a | |
Ben | 71e1f2bf78 | |
Ben | b2b412a73c | |
Ben | ae948c83a5 | |
Ben | 3727166a44 | |
Ben | 32b0a0199f | |
Ben | e54730d693 | |
Ben | d11eefaeab | |
Ben | da5b2c73a0 | |
Ben | 2ff1373c6b | |
Ben | 1882687601 | |
Ben Wallis | 3ba25b8f07 | |
Ben | e80295cb69 | |
Ben | f3ed386845 | |
Ben | 89e0c717e8 | |
Ben | 8924637b98 | |
Ben | b0b912c676 | |
Ben | 92ebc51e7b | |
Ben | 95e7581a5b | |
Ben | 9cb854b584 | |
Ben | 61c2902f0c | |
Ben | dc157713f3 | |
Ben Wallis | 16fe837544 | |
Ben | 58de6f06b9 | |
Ben | af2dace29a | |
Ben | 59cf604430 | |
Ben | 93a51e7829 | |
Ben | 9d928a374a | |
Ben | b5788504cb |
|
@ -1,29 +1,43 @@
|
||||||
## Ignore Visual Studio temporary files, build results, and
|
## Ignore Visual Studio temporary files, build results, and
|
||||||
## files generated by popular Visual Studio add-ons.
|
## files generated by popular Visual Studio add-ons.
|
||||||
|
##
|
||||||
|
## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
|
||||||
|
|
||||||
# User-specific files
|
# User-specific files
|
||||||
|
/.vs/
|
||||||
*.suo
|
*.suo
|
||||||
*.user
|
*.user
|
||||||
|
*.userosscache
|
||||||
*.sln.docstates
|
*.sln.docstates
|
||||||
|
|
||||||
|
# User-specific files (MonoDevelop/Xamarin Studio)
|
||||||
|
*.userprefs
|
||||||
|
|
||||||
# Build results
|
# Build results
|
||||||
[Dd]ebug/
|
[Dd]ebug/
|
||||||
[Dd]ebugPublic/
|
[Dd]ebugPublic/
|
||||||
[Rr]elease/
|
[Rr]elease/
|
||||||
|
[Rr]eleases/
|
||||||
x64/
|
x64/
|
||||||
build/
|
x86/
|
||||||
bld/
|
bld/
|
||||||
[Bb]in/
|
[Bb]in/
|
||||||
[Oo]bj/
|
[Oo]bj/
|
||||||
|
[Ll]og/
|
||||||
|
|
||||||
# Roslyn cache directories
|
# Visual Studio 2015/2017 cache/options directory
|
||||||
*.ide/
|
.vs/
|
||||||
|
# Uncomment if you have tasks that create the project's static files in wwwroot
|
||||||
|
#wwwroot/
|
||||||
|
|
||||||
|
# Visual Studio 2017 auto generated files
|
||||||
|
Generated\ Files/
|
||||||
|
|
||||||
# MSTest test Results
|
# MSTest test Results
|
||||||
[Tt]est[Rr]esult*/
|
[Tt]est[Rr]esult*/
|
||||||
[Bb]uild[Ll]og.*
|
[Bb]uild[Ll]og.*
|
||||||
|
|
||||||
#NUNIT
|
# NUNIT
|
||||||
*.VisualState.xml
|
*.VisualState.xml
|
||||||
TestResult.xml
|
TestResult.xml
|
||||||
|
|
||||||
|
@ -32,6 +46,19 @@ TestResult.xml
|
||||||
[Rr]eleasePS/
|
[Rr]eleasePS/
|
||||||
dlldata.c
|
dlldata.c
|
||||||
|
|
||||||
|
# Benchmark Results
|
||||||
|
BenchmarkDotNet.Artifacts/
|
||||||
|
|
||||||
|
# .NET Core
|
||||||
|
project.lock.json
|
||||||
|
project.fragment.lock.json
|
||||||
|
artifacts/
|
||||||
|
**/Properties/launchSettings.json
|
||||||
|
|
||||||
|
# StyleCop
|
||||||
|
StyleCopReport.xml
|
||||||
|
|
||||||
|
# Files built by Visual Studio
|
||||||
*_i.c
|
*_i.c
|
||||||
*_p.c
|
*_p.c
|
||||||
*_i.h
|
*_i.h
|
||||||
|
@ -64,14 +91,21 @@ _Chutzpah*
|
||||||
ipch/
|
ipch/
|
||||||
*.aps
|
*.aps
|
||||||
*.ncb
|
*.ncb
|
||||||
|
*.opendb
|
||||||
*.opensdf
|
*.opensdf
|
||||||
*.sdf
|
*.sdf
|
||||||
*.cachefile
|
*.cachefile
|
||||||
|
*.VC.db
|
||||||
|
*.VC.VC.opendb
|
||||||
|
|
||||||
# Visual Studio profiler
|
# Visual Studio profiler
|
||||||
*.psess
|
*.psess
|
||||||
*.vsp
|
*.vsp
|
||||||
*.vspx
|
*.vspx
|
||||||
|
*.sap
|
||||||
|
|
||||||
|
# Visual Studio Trace Files
|
||||||
|
*.e2e
|
||||||
|
|
||||||
# TFS 2012 Local Workspace
|
# TFS 2012 Local Workspace
|
||||||
$tf/
|
$tf/
|
||||||
|
@ -84,7 +118,7 @@ _ReSharper*/
|
||||||
*.[Rr]e[Ss]harper
|
*.[Rr]e[Ss]harper
|
||||||
*.DotSettings.user
|
*.DotSettings.user
|
||||||
|
|
||||||
# JustCode is a .NET coding addin-in
|
# JustCode is a .NET coding add-in
|
||||||
.JustCode
|
.JustCode
|
||||||
|
|
||||||
# TeamCity is a build add-in
|
# TeamCity is a build add-in
|
||||||
|
@ -93,9 +127,18 @@ _TeamCity*
|
||||||
# DotCover is a Code Coverage Tool
|
# DotCover is a Code Coverage Tool
|
||||||
*.dotCover
|
*.dotCover
|
||||||
|
|
||||||
|
# AxoCover is a Code Coverage Tool
|
||||||
|
.axoCover/*
|
||||||
|
!.axoCover/settings.json
|
||||||
|
|
||||||
|
# Visual Studio code coverage results
|
||||||
|
*.coverage
|
||||||
|
*.coveragexml
|
||||||
|
|
||||||
# NCrunch
|
# NCrunch
|
||||||
_NCrunch_*
|
_NCrunch_*
|
||||||
.*crunch*.local.xml
|
.*crunch*.local.xml
|
||||||
|
nCrunchTemp_*
|
||||||
|
|
||||||
# MightyMoose
|
# MightyMoose
|
||||||
*.mm.*
|
*.mm.*
|
||||||
|
@ -123,42 +166,63 @@ publish/
|
||||||
# Publish Web Output
|
# Publish Web Output
|
||||||
*.[Pp]ublish.xml
|
*.[Pp]ublish.xml
|
||||||
*.azurePubxml
|
*.azurePubxml
|
||||||
## TODO: Comment the next line if you want to checkin your
|
# Note: Comment the next line if you want to checkin your web deploy settings,
|
||||||
## web deploy settings but do note that will include unencrypted
|
# but database connection strings (with potential passwords) will be unencrypted
|
||||||
## passwords
|
*.pubxml
|
||||||
#*.pubxml
|
*.publishproj
|
||||||
|
|
||||||
# NuGet Packages Directory
|
# Microsoft Azure Web App publish settings. Comment the next line if you want to
|
||||||
packages/*
|
# checkin your Azure Web App publish settings, but sensitive information contained
|
||||||
## TODO: If the tool you use requires repositories.config
|
# in these scripts will be unencrypted
|
||||||
## uncomment the next line
|
PublishScripts/
|
||||||
#!packages/repositories.config
|
|
||||||
|
|
||||||
# Enable "build/" folder in the NuGet Packages folder since
|
# NuGet Packages
|
||||||
# NuGet packages use it for MSBuild targets.
|
*.nupkg
|
||||||
# This line needs to be after the ignore of the build folder
|
# The packages folder can be ignored because of Package Restore
|
||||||
# (and the packages folder if the line above has been uncommented)
|
**/[Pp]ackages/*
|
||||||
!packages/build/
|
# except build/, which is used as an MSBuild target.
|
||||||
|
!**/[Pp]ackages/build/
|
||||||
|
# Uncomment if necessary however generally it will be regenerated when needed
|
||||||
|
#!**/[Pp]ackages/repositories.config
|
||||||
|
# NuGet v3's project.json files produces more ignorable files
|
||||||
|
*.nuget.props
|
||||||
|
*.nuget.targets
|
||||||
|
|
||||||
# Windows Azure Build Output
|
# Microsoft Azure Build Output
|
||||||
csx/
|
csx/
|
||||||
*.build.csdef
|
*.build.csdef
|
||||||
|
|
||||||
# Windows Store app package directory
|
# Microsoft Azure Emulator
|
||||||
|
ecf/
|
||||||
|
rcf/
|
||||||
|
|
||||||
|
# Windows Store app package directories and files
|
||||||
AppPackages/
|
AppPackages/
|
||||||
|
BundleArtifacts/
|
||||||
|
Package.StoreAssociation.xml
|
||||||
|
_pkginfo.txt
|
||||||
|
*.appx
|
||||||
|
|
||||||
|
# Visual Studio cache files
|
||||||
|
# files ending in .cache can be ignored
|
||||||
|
*.[Cc]ache
|
||||||
|
# but keep track of directories ending in .cache
|
||||||
|
!*.[Cc]ache/
|
||||||
|
|
||||||
# Others
|
# Others
|
||||||
sql/
|
|
||||||
*.Cache
|
|
||||||
ClientBin/
|
ClientBin/
|
||||||
[Ss]tyle[Cc]op.*
|
|
||||||
~$*
|
~$*
|
||||||
*~
|
*~
|
||||||
*.dbmdl
|
*.dbmdl
|
||||||
*.dbproj.schemaview
|
*.dbproj.schemaview
|
||||||
|
*.jfm
|
||||||
*.pfx
|
*.pfx
|
||||||
*.publishsettings
|
*.publishsettings
|
||||||
node_modules/
|
orleans.codegen.cs
|
||||||
|
|
||||||
|
# Since there are multiple workflows, uncomment next line to ignore bower_components
|
||||||
|
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
|
||||||
|
#bower_components/
|
||||||
|
|
||||||
# RIA/Silverlight projects
|
# RIA/Silverlight projects
|
||||||
Generated_Code/
|
Generated_Code/
|
||||||
|
@ -174,6 +238,7 @@ UpgradeLog*.htm
|
||||||
# SQL Server files
|
# SQL Server files
|
||||||
*.mdf
|
*.mdf
|
||||||
*.ldf
|
*.ldf
|
||||||
|
*.ndf
|
||||||
|
|
||||||
# Business Intelligence projects
|
# Business Intelligence projects
|
||||||
*.rdl.data
|
*.rdl.data
|
||||||
|
@ -183,7 +248,69 @@ UpgradeLog*.htm
|
||||||
# Microsoft Fakes
|
# Microsoft Fakes
|
||||||
FakesAssemblies/
|
FakesAssemblies/
|
||||||
|
|
||||||
# LightSwitch generated files
|
# GhostDoc plugin setting file
|
||||||
GeneratedArtifacts/
|
*.GhostDoc.xml
|
||||||
_Pvt_Extensions/
|
|
||||||
ModelManifest.xml
|
# Node.js Tools for Visual Studio
|
||||||
|
.ntvs_analysis.dat
|
||||||
|
node_modules/
|
||||||
|
|
||||||
|
# TypeScript v1 declaration files
|
||||||
|
typings/
|
||||||
|
|
||||||
|
# Visual Studio 6 build log
|
||||||
|
*.plg
|
||||||
|
|
||||||
|
# Visual Studio 6 workspace options file
|
||||||
|
*.opt
|
||||||
|
|
||||||
|
# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
|
||||||
|
*.vbw
|
||||||
|
|
||||||
|
# Visual Studio LightSwitch build output
|
||||||
|
**/*.HTMLClient/GeneratedArtifacts
|
||||||
|
**/*.DesktopClient/GeneratedArtifacts
|
||||||
|
**/*.DesktopClient/ModelManifest.xml
|
||||||
|
**/*.Server/GeneratedArtifacts
|
||||||
|
**/*.Server/ModelManifest.xml
|
||||||
|
_Pvt_Extensions
|
||||||
|
|
||||||
|
# Paket dependency manager
|
||||||
|
.paket/paket.exe
|
||||||
|
paket-files/
|
||||||
|
|
||||||
|
# FAKE - F# Make
|
||||||
|
.fake/
|
||||||
|
|
||||||
|
# JetBrains Rider
|
||||||
|
.idea/
|
||||||
|
*.sln.iml
|
||||||
|
|
||||||
|
# CodeRush
|
||||||
|
.cr/
|
||||||
|
|
||||||
|
# Python Tools for Visual Studio (PTVS)
|
||||||
|
__pycache__/
|
||||||
|
*.pyc
|
||||||
|
|
||||||
|
# Cake - Uncomment if you are using it
|
||||||
|
# tools/**
|
||||||
|
# !tools/packages.config
|
||||||
|
|
||||||
|
# Tabs Studio
|
||||||
|
*.tss
|
||||||
|
|
||||||
|
# Telerik's JustMock configuration file
|
||||||
|
*.jmconfig
|
||||||
|
|
||||||
|
# BizTalk build output
|
||||||
|
*.btp.cs
|
||||||
|
*.btm.cs
|
||||||
|
*.odx.cs
|
||||||
|
*.xsd.cs
|
||||||
|
|
||||||
|
# OpenCover UI analysis results
|
||||||
|
OpenCover/
|
||||||
|
|
||||||
|
# Azure Stream Analytics local run output
|
||||||
|
ASALocalRun/
|
|
@ -9,8 +9,11 @@
|
||||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||||
<RootNamespace>Filtration.Common.Tests</RootNamespace>
|
<RootNamespace>Filtration.Common.Tests</RootNamespace>
|
||||||
<AssemblyName>Filtration.Common.Tests</AssemblyName>
|
<AssemblyName>Filtration.Common.Tests</AssemblyName>
|
||||||
<TargetFrameworkVersion>v4.5.1</TargetFrameworkVersion>
|
<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
|
||||||
<FileAlignment>512</FileAlignment>
|
<FileAlignment>512</FileAlignment>
|
||||||
|
<TargetFrameworkProfile />
|
||||||
|
<NuGetPackageImportStamp>
|
||||||
|
</NuGetPackageImportStamp>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||||
<DebugSymbols>true</DebugSymbols>
|
<DebugSymbols>true</DebugSymbols>
|
||||||
|
@ -30,13 +33,8 @@
|
||||||
<WarningLevel>4</WarningLevel>
|
<WarningLevel>4</WarningLevel>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Reference Include="Moq">
|
|
||||||
<HintPath>..\packages\Moq.4.2.1506.2515\lib\net40\Moq.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="nunit.framework">
|
|
||||||
<HintPath>..\packages\NUnit.2.6.4\lib\nunit.framework.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="System" />
|
<Reference Include="System" />
|
||||||
|
<Reference Include="System.Configuration" />
|
||||||
<Reference Include="System.Core" />
|
<Reference Include="System.Core" />
|
||||||
<Reference Include="System.Xml.Linq" />
|
<Reference Include="System.Xml.Linq" />
|
||||||
<Reference Include="System.Data.DataSetExtensions" />
|
<Reference Include="System.Data.DataSetExtensions" />
|
||||||
|
@ -48,7 +46,24 @@
|
||||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<None Include="packages.config" />
|
<None Include="app.config" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="Castle.Core">
|
||||||
|
<Version>4.4.0</Version>
|
||||||
|
</PackageReference>
|
||||||
|
<PackageReference Include="Moq">
|
||||||
|
<Version>4.10.1</Version>
|
||||||
|
</PackageReference>
|
||||||
|
<PackageReference Include="NUnit">
|
||||||
|
<Version>3.11.0</Version>
|
||||||
|
</PackageReference>
|
||||||
|
<PackageReference Include="System.Threading.Tasks.Extensions">
|
||||||
|
<Version>4.5.2</Version>
|
||||||
|
</PackageReference>
|
||||||
|
<PackageReference Include="System.ValueTuple">
|
||||||
|
<Version>4.5.0</Version>
|
||||||
|
</PackageReference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using System.Runtime.CompilerServices;
|
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
// General Information about an assembly is controlled through the following
|
// General Information about an assembly is controlled through the following
|
||||||
|
|
|
@ -0,0 +1,19 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<configuration>
|
||||||
|
<runtime>
|
||||||
|
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||||
|
<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>
|
||||||
|
</assemblyBinding>
|
||||||
|
</runtime>
|
||||||
|
</configuration>
|
|
@ -1,5 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<packages>
|
|
||||||
<package id="Moq" version="4.2.1506.2515" targetFramework="net451" />
|
|
||||||
<package id="NUnit" version="2.6.4" targetFramework="net451" />
|
|
||||||
</packages>
|
|
|
@ -4,7 +4,7 @@ using System.Windows.Data;
|
||||||
|
|
||||||
namespace Filtration.Common.Converters
|
namespace Filtration.Common.Converters
|
||||||
{
|
{
|
||||||
internal class BoolInverterConverter : IValueConverter
|
public class BooleanInverterConverter : IValueConverter
|
||||||
{
|
{
|
||||||
public object Convert(object value, Type targetType, object parameter,
|
public object Convert(object value, Type targetType, object parameter,
|
||||||
CultureInfo culture)
|
CultureInfo culture)
|
||||||
|
|
|
@ -13,10 +13,7 @@ namespace Filtration.Common.Converters
|
||||||
|
|
||||||
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
|
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
|
||||||
{
|
{
|
||||||
if (value != null)
|
return ((SolidColorBrush) value)?.Color;
|
||||||
return ((SolidColorBrush)value).Color;
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,16 +3,16 @@ using System.ComponentModel;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Windows.Markup;
|
using System.Windows.Markup;
|
||||||
|
|
||||||
namespace Filtration.Extensions
|
namespace Filtration.Common.Extensions
|
||||||
{
|
{
|
||||||
internal class EnumerationExtension : MarkupExtension
|
public class EnumerationExtension : MarkupExtension
|
||||||
{
|
{
|
||||||
private Type _enumType;
|
private Type _enumType;
|
||||||
|
|
||||||
|
|
||||||
public EnumerationExtension(Type enumType)
|
public EnumerationExtension(Type enumType)
|
||||||
{
|
{
|
||||||
if (enumType == null) throw new ArgumentNullException("enumType");
|
if (enumType == null) throw new ArgumentNullException(nameof(enumType));
|
||||||
|
|
||||||
EnumType = enumType;
|
EnumType = enumType;
|
||||||
}
|
}
|
|
@ -4,7 +4,7 @@ using System.Windows;
|
||||||
using System.Windows.Documents;
|
using System.Windows.Documents;
|
||||||
using System.Windows.Navigation;
|
using System.Windows.Navigation;
|
||||||
|
|
||||||
namespace Filtration.Extensions
|
namespace Filtration.Common.Extensions
|
||||||
{
|
{
|
||||||
public static class HyperlinkExtensions
|
public static class HyperlinkExtensions
|
||||||
{
|
{
|
|
@ -9,8 +9,9 @@
|
||||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||||
<RootNamespace>Filtration.Common</RootNamespace>
|
<RootNamespace>Filtration.Common</RootNamespace>
|
||||||
<AssemblyName>Filtration.Common</AssemblyName>
|
<AssemblyName>Filtration.Common</AssemblyName>
|
||||||
<TargetFrameworkVersion>v4.5.1</TargetFrameworkVersion>
|
<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
|
||||||
<FileAlignment>512</FileAlignment>
|
<FileAlignment>512</FileAlignment>
|
||||||
|
<TargetFrameworkProfile />
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||||
<DebugSymbols>true</DebugSymbols>
|
<DebugSymbols>true</DebugSymbols>
|
||||||
|
@ -30,31 +31,13 @@
|
||||||
<WarningLevel>4</WarningLevel>
|
<WarningLevel>4</WarningLevel>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Reference Include="Castle.Core">
|
|
||||||
<HintPath>..\packages\Castle.Core.3.3.0\lib\net45\Castle.Core.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="Castle.Windsor">
|
|
||||||
<HintPath>..\packages\Castle.Windsor.3.3.0\lib\net45\Castle.Windsor.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="GalaSoft.MvvmLight">
|
|
||||||
<HintPath>..\packages\MvvmLightLibs.5.1.1.0\lib\net45\GalaSoft.MvvmLight.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="GalaSoft.MvvmLight.Extras">
|
|
||||||
<HintPath>..\packages\MvvmLightLibs.5.1.1.0\lib\net45\GalaSoft.MvvmLight.Extras.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="GalaSoft.MvvmLight.Platform">
|
|
||||||
<HintPath>..\packages\MvvmLightLibs.5.1.1.0\lib\net45\GalaSoft.MvvmLight.Platform.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="Microsoft.Practices.ServiceLocation">
|
|
||||||
<HintPath>..\packages\CommonServiceLocator.1.3\lib\portable-net4+sl5+netcore45+wpa81+wp8\Microsoft.Practices.ServiceLocation.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="PresentationCore" />
|
<Reference Include="PresentationCore" />
|
||||||
<Reference Include="PresentationFramework" />
|
<Reference Include="PresentationFramework" />
|
||||||
<Reference Include="System" />
|
<Reference Include="System" />
|
||||||
|
<Reference Include="System.Configuration" />
|
||||||
<Reference Include="System.Core" />
|
<Reference Include="System.Core" />
|
||||||
<Reference Include="System.Windows.Interactivity, Version=4.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
|
<Reference Include="System.Runtime.Remoting" />
|
||||||
<HintPath>..\packages\MvvmLightLibs.5.1.1.0\lib\net45\System.Windows.Interactivity.dll</HintPath>
|
<Reference Include="System.Web" />
|
||||||
</Reference>
|
|
||||||
<Reference Include="System.Xaml" />
|
<Reference Include="System.Xaml" />
|
||||||
<Reference Include="System.Xml.Linq" />
|
<Reference Include="System.Xml.Linq" />
|
||||||
<Reference Include="System.Data.DataSetExtensions" />
|
<Reference Include="System.Data.DataSetExtensions" />
|
||||||
|
@ -69,16 +52,20 @@
|
||||||
<Compile Include="Converters\ColorToSolidColorBrushConverter.cs" />
|
<Compile Include="Converters\ColorToSolidColorBrushConverter.cs" />
|
||||||
<Compile Include="Converters\InverseBooleanVisibilityConverter.cs" />
|
<Compile Include="Converters\InverseBooleanVisibilityConverter.cs" />
|
||||||
<Compile Include="Converters\StringToVisibilityConverter.cs" />
|
<Compile Include="Converters\StringToVisibilityConverter.cs" />
|
||||||
|
<Compile Include="Extensions\EnumerationExtension.cs" />
|
||||||
|
<Compile Include="Extensions\HyperlinkExtensions.cs" />
|
||||||
<Compile Include="Messages\ThemeClosedMessage.cs" />
|
<Compile Include="Messages\ThemeClosedMessage.cs" />
|
||||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||||
<Compile Include="Services\FileSystemService.cs" />
|
<Compile Include="Services\FileSystemService.cs" />
|
||||||
<Compile Include="Services\MessageBoxService.cs" />
|
<Compile Include="Services\MessageBoxService.cs" />
|
||||||
<Compile Include="ViewModels\FiltrationViewModelBase.cs" />
|
<Compile Include="Utilities\LineReader.cs" />
|
||||||
|
<Compile Include="Utilities\PathOfExileColors.cs" />
|
||||||
|
<Compile Include="Utilities\VisualTreeUtility.cs" />
|
||||||
<Compile Include="ViewModels\PaneViewModel.cs" />
|
<Compile Include="ViewModels\PaneViewModel.cs" />
|
||||||
<Compile Include="WindsorInstallers\ServicesInstaller.cs" />
|
<Compile Include="WindsorInstallers\ServicesInstaller.cs" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<None Include="packages.config" />
|
<None Include="app.config" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\Filtration.ObjectModel\Filtration.ObjectModel.csproj">
|
<ProjectReference Include="..\Filtration.ObjectModel\Filtration.ObjectModel.csproj">
|
||||||
|
@ -92,6 +79,23 @@
|
||||||
<SubType>Designer</SubType>
|
<SubType>Designer</SubType>
|
||||||
</Page>
|
</Page>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="Castle.Core">
|
||||||
|
<Version>4.4.0</Version>
|
||||||
|
</PackageReference>
|
||||||
|
<PackageReference Include="Castle.Windsor">
|
||||||
|
<Version>5.0.0</Version>
|
||||||
|
</PackageReference>
|
||||||
|
<PackageReference Include="CommonServiceLocator">
|
||||||
|
<Version>2.0.4</Version>
|
||||||
|
</PackageReference>
|
||||||
|
<PackageReference Include="Extended.Wpf.Toolkit">
|
||||||
|
<Version>3.5.0</Version>
|
||||||
|
</PackageReference>
|
||||||
|
<PackageReference Include="MvvmLightLibs">
|
||||||
|
<Version>5.4.1.1</Version>
|
||||||
|
</PackageReference>
|
||||||
|
</ItemGroup>
|
||||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||||
Other similar extension points exist, see Microsoft.Common.targets.
|
Other similar extension points exist, see Microsoft.Common.targets.
|
||||||
|
|
|
@ -1,10 +1,4 @@
|
||||||
using System;
|
namespace Filtration.Common.Messages
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace Filtration.Common.Messages
|
|
||||||
{
|
{
|
||||||
class ThemeClosedMessage
|
class ThemeClosedMessage
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
using System;
|
using System;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
namespace Filtration.Common.Services
|
namespace Filtration.Common.Services
|
||||||
{
|
{
|
||||||
|
@ -20,7 +21,7 @@ namespace Filtration.Common.Services
|
||||||
|
|
||||||
public void WriteFileFromString(string filePath, string inputString)
|
public void WriteFileFromString(string filePath, string inputString)
|
||||||
{
|
{
|
||||||
File.WriteAllText(filePath, inputString);
|
File.WriteAllText(filePath, inputString, Encoding.UTF8);
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool DirectoryExists(string directoryPath)
|
public bool DirectoryExists(string directoryPath)
|
||||||
|
|
|
@ -38,7 +38,7 @@
|
||||||
<Setter Property="Margin" Value="0,0,5,5" />
|
<Setter Property="Margin" Value="0,0,5,5" />
|
||||||
</Style>
|
</Style>
|
||||||
<converters:StringToVisibilityConverter x:Key="StringToVisibilityConverter" />
|
<converters:StringToVisibilityConverter x:Key="StringToVisibilityConverter" />
|
||||||
<converters:BoolInverterConverter x:Key="BoolInverterConverter" />
|
<converters:BooleanInverterConverter x:Key="BoolInverterConverter" />
|
||||||
<converters:ColorToSolidColorBrushConverter x:Key="ColorToSolidColorBrushConverter" />
|
<converters:ColorToSolidColorBrushConverter x:Key="ColorToSolidColorBrushConverter" />
|
||||||
<converters:BooleanVisibilityConverter x:Key="BooleanVisibilityConverter" />
|
<converters:BooleanVisibilityConverter x:Key="BooleanVisibilityConverter" />
|
||||||
<converters:InverseBooleanVisibilityConverter x:Key="InverseBooleanVisibilityConverter" />
|
<converters:InverseBooleanVisibilityConverter x:Key="InverseBooleanVisibilityConverter" />
|
||||||
|
|
|
@ -2,10 +2,11 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Collections;
|
using System.Collections;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Diagnostics;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
|
||||||
namespace Filtration.Utilities
|
namespace Filtration.Common.Utilities
|
||||||
{
|
{
|
||||||
|
|
||||||
public sealed class LineReader : IEnumerable<string>
|
public sealed class LineReader : IEnumerable<string>
|
||||||
|
@ -21,6 +22,7 @@ namespace Filtration.Utilities
|
||||||
/// the stream into text.
|
/// the stream into text.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="streamSource">Data source</param>
|
/// <param name="streamSource">Data source</param>
|
||||||
|
[DebuggerStepThrough]
|
||||||
public LineReader(Func<Stream> streamSource)
|
public LineReader(Func<Stream> streamSource)
|
||||||
: this(streamSource, Encoding.UTF8)
|
: this(streamSource, Encoding.UTF8)
|
||||||
{
|
{
|
||||||
|
@ -33,6 +35,7 @@ namespace Filtration.Utilities
|
||||||
/// <param name="streamSource">Data source</param>
|
/// <param name="streamSource">Data source</param>
|
||||||
/// <param name="encoding">Encoding to use to decode the stream
|
/// <param name="encoding">Encoding to use to decode the stream
|
||||||
/// into text</param>
|
/// into text</param>
|
||||||
|
[DebuggerStepThrough]
|
||||||
public LineReader(Func<Stream> streamSource, Encoding encoding)
|
public LineReader(Func<Stream> streamSource, Encoding encoding)
|
||||||
: this(() => new StreamReader(streamSource(), encoding))
|
: this(() => new StreamReader(streamSource(), encoding))
|
||||||
{
|
{
|
||||||
|
@ -44,6 +47,7 @@ namespace Filtration.Utilities
|
||||||
/// UTF8 is used to decode the file into text.
|
/// UTF8 is used to decode the file into text.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="filename">File to read from</param>
|
/// <param name="filename">File to read from</param>
|
||||||
|
[DebuggerStepThrough]
|
||||||
public LineReader(string filename)
|
public LineReader(string filename)
|
||||||
: this(filename, Encoding.UTF8)
|
: this(filename, Encoding.UTF8)
|
||||||
{
|
{
|
||||||
|
@ -56,6 +60,7 @@ namespace Filtration.Utilities
|
||||||
/// <param name="filename">File to read from</param>
|
/// <param name="filename">File to read from</param>
|
||||||
/// <param name="encoding">Encoding to use to decode the file
|
/// <param name="encoding">Encoding to use to decode the file
|
||||||
/// into text</param>
|
/// into text</param>
|
||||||
|
[DebuggerStepThrough]
|
||||||
public LineReader(string filename, Encoding encoding)
|
public LineReader(string filename, Encoding encoding)
|
||||||
: this(() => new StreamReader(filename, encoding))
|
: this(() => new StreamReader(filename, encoding))
|
||||||
{
|
{
|
||||||
|
@ -66,6 +71,7 @@ namespace Filtration.Utilities
|
||||||
/// is only called when the enumerator is fetched
|
/// is only called when the enumerator is fetched
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="dataSource">Data source</param>
|
/// <param name="dataSource">Data source</param>
|
||||||
|
[DebuggerStepThrough]
|
||||||
public LineReader(Func<TextReader> dataSource)
|
public LineReader(Func<TextReader> dataSource)
|
||||||
{
|
{
|
||||||
_dataSource = dataSource;
|
_dataSource = dataSource;
|
||||||
|
@ -74,6 +80,7 @@ namespace Filtration.Utilities
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Enumerates the data source line by line.
|
/// Enumerates the data source line by line.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
[DebuggerStepThrough]
|
||||||
public IEnumerator<string> GetEnumerator()
|
public IEnumerator<string> GetEnumerator()
|
||||||
{
|
{
|
||||||
using (TextReader reader = _dataSource())
|
using (TextReader reader = _dataSource())
|
||||||
|
@ -89,6 +96,7 @@ namespace Filtration.Utilities
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Enumerates the data source line by line.
|
/// Enumerates the data source line by line.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
[DebuggerStepThrough]
|
||||||
IEnumerator IEnumerable.GetEnumerator()
|
IEnumerator IEnumerable.GetEnumerator()
|
||||||
{
|
{
|
||||||
return GetEnumerator();
|
return GetEnumerator();
|
|
@ -0,0 +1,48 @@
|
||||||
|
using System.Collections.ObjectModel;
|
||||||
|
using System.Windows.Media;
|
||||||
|
using Xceed.Wpf.Toolkit;
|
||||||
|
|
||||||
|
namespace Filtration.Common.Utilities
|
||||||
|
{
|
||||||
|
public static class PathOfExileColors
|
||||||
|
{
|
||||||
|
static PathOfExileColors()
|
||||||
|
{
|
||||||
|
DefaultColors = new ObservableCollection<ColorItem>
|
||||||
|
{
|
||||||
|
new ColorItem(new Color {A = 240, R=127, G = 127, B = 127}, "Default"),
|
||||||
|
new ColorItem(new Color {A = 240, R=255, G = 255, B = 255}, "Value Default"),
|
||||||
|
new ColorItem(new Color {A = 240, R=255, G = 192, B = 203}, "Pink"),
|
||||||
|
new ColorItem(new Color {A = 240, R=30, G = 144, B = 255}, "Dodger Blue"),
|
||||||
|
new ColorItem(new Color {A = 240, R=150, G = 0, B = 0}, "Fire"),
|
||||||
|
new ColorItem(new Color {A = 240, R=54, G = 100, B = 146}, "Cold"),
|
||||||
|
new ColorItem(new Color {A = 240, R=255, G = 215, B = 0}, "Lightning"),
|
||||||
|
new ColorItem(new Color {A = 240, R=208, G = 32, B = 144}, "Chaos"),
|
||||||
|
new ColorItem(new Color {A = 240, R=136, G = 136, B = 255}, "Augmented"),
|
||||||
|
new ColorItem(new Color {A = 240, R=184, G = 218, B = 242}, "Crafted"),
|
||||||
|
new ColorItem(new Color {A = 240, R=210, G = 0, B = 0}, "Unmet"),
|
||||||
|
new ColorItem(new Color {A = 240, R=175, G = 96, B = 37}, "Unique Item"),
|
||||||
|
new ColorItem(new Color {A = 240, R=255, G = 255, B = 119}, "Rare Item"),
|
||||||
|
new ColorItem(new Color {A = 240, R=136, G = 136, B = 255}, "Magic Item"),
|
||||||
|
new ColorItem(new Color {A = 240, R=200, G = 200, B = 200}, "White Item"),
|
||||||
|
new ColorItem(new Color {A = 240, R=27, G = 162, B = 155}, "Gem Item"),
|
||||||
|
new ColorItem(new Color {A = 240, R=170, G = 158, B = 130}, "Currency Item"),
|
||||||
|
new ColorItem(new Color {A = 240, R=74, G = 230, B = 58}, "Quest Item"),
|
||||||
|
new ColorItem(new Color {A = 240, R=255, G = 200, B = 0}, "Nemesis Mod"),
|
||||||
|
new ColorItem(new Color {A = 220, R = 255, G = 40, B = 0}, "Nemesis Mod Outline"),
|
||||||
|
new ColorItem(new Color {A = 240, R=231, G = 180, B = 120}, "Title"),
|
||||||
|
new ColorItem(new Color {A = 240, R=210, G = 0, B = 0}, "Corrupted"),
|
||||||
|
new ColorItem(new Color {A = 240, R=170, G = 158, B = 130}, "Favour"),
|
||||||
|
new ColorItem(new Color {A = 240, R=180, G = 96, B = 0}, "Supporter Pack New Item"),
|
||||||
|
new ColorItem(new Color {A = 240, R=163, G = 141, B = 109}, "Supporter Pack Item"),
|
||||||
|
new ColorItem(new Color {A = 240, R=210, G = 0, B = 220}, "Bloodline Mod"),
|
||||||
|
new ColorItem(new Color {A = 200, R = 74, G = 0, B = 160}, "Bloodline Mod Outline"),
|
||||||
|
new ColorItem(new Color {A = 240, R=50, G = 230, B = 100}, "Torment Mod"),
|
||||||
|
new ColorItem(new Color {A = 200, R = 0, G = 100, B = 150}, "Torment Mod Outline"),
|
||||||
|
new ColorItem(new Color {A = 240, R=210, G = 0, B = 0}, "Can't Trade or Modify")
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ObservableCollection<ColorItem> DefaultColors { get; private set; }
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,26 @@
|
||||||
|
using System.Windows;
|
||||||
|
using System.Windows.Media;
|
||||||
|
|
||||||
|
namespace Filtration.Common.Utilities
|
||||||
|
{
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,17 +0,0 @@
|
||||||
using System.Runtime.CompilerServices;
|
|
||||||
using Filtration.ObjectModel.Annotations;
|
|
||||||
using GalaSoft.MvvmLight;
|
|
||||||
|
|
||||||
namespace Filtration.Common.ViewModels
|
|
||||||
{
|
|
||||||
public class FiltrationViewModelBase : ViewModelBase
|
|
||||||
{
|
|
||||||
/// This gives us the ReSharper option to transform an autoproperty into a property with change notification
|
|
||||||
/// Also leverages .net 4.5 callermembername attribute
|
|
||||||
[NotifyPropertyChangedInvocator]
|
|
||||||
protected override void RaisePropertyChanged([CallerMemberName]string property = "")
|
|
||||||
{
|
|
||||||
base.RaisePropertyChanged(property);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,8 +1,9 @@
|
||||||
using System.Windows.Media;
|
using System.Windows.Media;
|
||||||
|
using GalaSoft.MvvmLight;
|
||||||
|
|
||||||
namespace Filtration.Common.ViewModels
|
namespace Filtration.Common.ViewModels
|
||||||
{
|
{
|
||||||
public class PaneViewModel : FiltrationViewModelBase
|
public class PaneViewModel : ViewModelBase
|
||||||
{
|
{
|
||||||
private string _title;
|
private string _title;
|
||||||
public string Title
|
public string Title
|
||||||
|
|
|
@ -0,0 +1,11 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<configuration>
|
||||||
|
<runtime>
|
||||||
|
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||||
|
<dependentAssembly>
|
||||||
|
<assemblyIdentity name="CommonServiceLocator" publicKeyToken="489b6accfaf20ef0" culture="neutral" />
|
||||||
|
<bindingRedirect oldVersion="0.0.0.0-2.0.4.0" newVersion="2.0.4.0" />
|
||||||
|
</dependentAssembly>
|
||||||
|
</assemblyBinding>
|
||||||
|
</runtime>
|
||||||
|
</configuration>
|
|
@ -1,7 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<packages>
|
|
||||||
<package id="Castle.Core" version="3.3.0" targetFramework="net451" />
|
|
||||||
<package id="Castle.Windsor" version="3.3.0" targetFramework="net451" />
|
|
||||||
<package id="CommonServiceLocator" version="1.3" targetFramework="net451" />
|
|
||||||
<package id="MvvmLightLibs" version="5.1.1.0" targetFramework="net451" />
|
|
||||||
</packages>
|
|
|
@ -9,8 +9,9 @@
|
||||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||||
<RootNamespace>Filtration.Interface</RootNamespace>
|
<RootNamespace>Filtration.Interface</RootNamespace>
|
||||||
<AssemblyName>Filtration.Interface</AssemblyName>
|
<AssemblyName>Filtration.Interface</AssemblyName>
|
||||||
<TargetFrameworkVersion>v4.5.1</TargetFrameworkVersion>
|
<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
|
||||||
<FileAlignment>512</FileAlignment>
|
<FileAlignment>512</FileAlignment>
|
||||||
|
<TargetFrameworkProfile />
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||||
<DebugSymbols>true</DebugSymbols>
|
<DebugSymbols>true</DebugSymbols>
|
||||||
|
@ -45,6 +46,17 @@
|
||||||
<Compile Include="IEditableDocument.cs" />
|
<Compile Include="IEditableDocument.cs" />
|
||||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="app.config" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="CommonServiceLocator">
|
||||||
|
<Version>2.0.4</Version>
|
||||||
|
</PackageReference>
|
||||||
|
<PackageReference Include="MvvmLightLibs">
|
||||||
|
<Version>5.4.1.1</Version>
|
||||||
|
</PackageReference>
|
||||||
|
</ItemGroup>
|
||||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||||
Other similar extension points exist, see Microsoft.Common.targets.
|
Other similar extension points exist, see Microsoft.Common.targets.
|
||||||
|
|
|
@ -1,9 +1,14 @@
|
||||||
namespace Filtration.Interface
|
using System.Threading.Tasks;
|
||||||
|
using System.Windows.Input;
|
||||||
|
using GalaSoft.MvvmLight.CommandWpf;
|
||||||
|
|
||||||
|
namespace Filtration.Interface
|
||||||
{
|
{
|
||||||
public interface IDocument
|
public interface IDocument
|
||||||
{
|
{
|
||||||
bool IsScript { get; }
|
bool IsScript { get; }
|
||||||
bool IsTheme { get; }
|
bool IsTheme { get; }
|
||||||
void Close();
|
Task<bool> Close();
|
||||||
|
RelayCommand CloseCommand { get; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,9 +1,11 @@
|
||||||
namespace Filtration.Interface
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Filtration.Interface
|
||||||
{
|
{
|
||||||
public interface IEditableDocument : IDocument
|
public interface IEditableDocument : IDocument
|
||||||
{
|
{
|
||||||
bool IsDirty { get; }
|
bool IsDirty { get; }
|
||||||
void Save();
|
Task SaveAsync();
|
||||||
void SaveAs();
|
Task SaveAsAsync();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using System.Runtime.CompilerServices;
|
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
// General Information about an assembly is controlled through the following
|
// General Information about an assembly is controlled through the following
|
||||||
|
|
|
@ -0,0 +1,11 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<configuration>
|
||||||
|
<runtime>
|
||||||
|
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||||
|
<dependentAssembly>
|
||||||
|
<assemblyIdentity name="CommonServiceLocator" publicKeyToken="489b6accfaf20ef0" culture="neutral" />
|
||||||
|
<bindingRedirect oldVersion="0.0.0.0-2.0.4.0" newVersion="2.0.4.0" />
|
||||||
|
</dependentAssembly>
|
||||||
|
</assemblyBinding>
|
||||||
|
</runtime>
|
||||||
|
</configuration>
|
|
@ -0,0 +1,34 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<configuration>
|
||||||
|
<configSections>
|
||||||
|
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
|
||||||
|
|
||||||
|
</configSections>
|
||||||
|
<entityFramework>
|
||||||
|
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
|
||||||
|
<parameters>
|
||||||
|
<parameter value="mssqllocaldb" />
|
||||||
|
</parameters>
|
||||||
|
</defaultConnectionFactory>
|
||||||
|
<providers>
|
||||||
|
<provider invariantName="System.Data.SQLite" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6" />
|
||||||
|
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
|
||||||
|
<provider invariantName="System.Data.SQLite.EF6" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6" />
|
||||||
|
</providers>
|
||||||
|
</entityFramework>
|
||||||
|
<startup>
|
||||||
|
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
|
||||||
|
</startup>
|
||||||
|
<connectionStrings>
|
||||||
|
<add name="FiltrationDbContext" connectionString="data source="D:\C# Projects\Filtration\Filtration.db"" providerName="System.Data.SQLite.EF6" />
|
||||||
|
</connectionStrings>
|
||||||
|
|
||||||
|
<runtime>
|
||||||
|
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||||
|
<dependentAssembly>
|
||||||
|
<assemblyIdentity name="CommonServiceLocator" publicKeyToken="489b6accfaf20ef0" culture="neutral" />
|
||||||
|
<bindingRedirect oldVersion="0.0.0.0-2.0.4.0" newVersion="2.0.4.0" />
|
||||||
|
</dependentAssembly>
|
||||||
|
</assemblyBinding>
|
||||||
|
</runtime>
|
||||||
|
</configuration>
|
|
@ -0,0 +1,111 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<PropertyGroup>
|
||||||
|
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||||
|
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||||
|
<ProjectGuid>{7A5720DE-A41B-47EA-AAAB-7C5608FF0C1F}</ProjectGuid>
|
||||||
|
<OutputType>Library</OutputType>
|
||||||
|
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||||
|
<RootNamespace>Filtration.ItemFilterPreview.Data.Tests</RootNamespace>
|
||||||
|
<AssemblyName>Filtration.ItemFilterPreview.Data.Tests</AssemblyName>
|
||||||
|
<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
|
||||||
|
<FileAlignment>512</FileAlignment>
|
||||||
|
<ProjectTypeGuids>{3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
|
||||||
|
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
|
||||||
|
<VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
|
||||||
|
<ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\$(VisualStudioVersion)\UITestExtensionPackages</ReferencePath>
|
||||||
|
<IsCodedUITest>False</IsCodedUITest>
|
||||||
|
<TestProjectType>UnitTest</TestProjectType>
|
||||||
|
<TargetFrameworkProfile />
|
||||||
|
<NuGetPackageImportStamp>
|
||||||
|
</NuGetPackageImportStamp>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||||
|
<DebugSymbols>true</DebugSymbols>
|
||||||
|
<DebugType>full</DebugType>
|
||||||
|
<Optimize>false</Optimize>
|
||||||
|
<OutputPath>bin\Debug\</OutputPath>
|
||||||
|
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||||
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
<WarningLevel>4</WarningLevel>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||||
|
<DebugType>pdbonly</DebugType>
|
||||||
|
<Optimize>true</Optimize>
|
||||||
|
<OutputPath>bin\Release\</OutputPath>
|
||||||
|
<DefineConstants>TRACE</DefineConstants>
|
||||||
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
<WarningLevel>4</WarningLevel>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Reference Include="System" />
|
||||||
|
<Reference Include="System.ComponentModel.DataAnnotations" />
|
||||||
|
</ItemGroup>
|
||||||
|
<Choose>
|
||||||
|
<When Condition="('$(VisualStudioVersion)' == '10.0' or '$(VisualStudioVersion)' == '') and '$(TargetFrameworkVersion)' == 'v3.5'">
|
||||||
|
<ItemGroup>
|
||||||
|
<Reference Include="Microsoft.VisualStudio.QualityTools.UnitTestFramework, Version=10.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" />
|
||||||
|
</ItemGroup>
|
||||||
|
</When>
|
||||||
|
<Otherwise>
|
||||||
|
<ItemGroup>
|
||||||
|
<Reference Include="Microsoft.VisualStudio.QualityTools.UnitTestFramework" />
|
||||||
|
</ItemGroup>
|
||||||
|
</Otherwise>
|
||||||
|
</Choose>
|
||||||
|
<ItemGroup>
|
||||||
|
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||||
|
<Compile Include="Repositories\TestItemSetRepository.cs" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="App.config" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\Filtration.ItemFilterPreview.Data\Filtration.ItemFilterPreview.Data.csproj">
|
||||||
|
<Project>{855b38cc-eef2-471d-bbbc-eb3e2ff3d387}</Project>
|
||||||
|
<Name>Filtration.ItemFilterPreview.Data</Name>
|
||||||
|
</ProjectReference>
|
||||||
|
<ProjectReference Include="..\Filtration.ObjectModel\Filtration.ObjectModel.csproj">
|
||||||
|
<Project>{4aac3beb-1dc1-483e-9d11-0e9334e80227}</Project>
|
||||||
|
<Name>Filtration.ObjectModel</Name>
|
||||||
|
</ProjectReference>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="NUnit">
|
||||||
|
<Version>3.11.0</Version>
|
||||||
|
</PackageReference>
|
||||||
|
<PackageReference Include="System.Data.SQLite">
|
||||||
|
<Version>1.0.109.2</Version>
|
||||||
|
</PackageReference>
|
||||||
|
<PackageReference Include="System.Data.SQLite.Core">
|
||||||
|
<Version>1.0.109.2</Version>
|
||||||
|
</PackageReference>
|
||||||
|
</ItemGroup>
|
||||||
|
<Choose>
|
||||||
|
<When Condition="'$(VisualStudioVersion)' == '10.0' And '$(IsCodedUITest)' == 'True'">
|
||||||
|
<ItemGroup>
|
||||||
|
<Reference Include="Microsoft.VisualStudio.QualityTools.CodedUITestFramework, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||||
|
<Private>False</Private>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="Microsoft.VisualStudio.TestTools.UITest.Common, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||||
|
<Private>False</Private>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="Microsoft.VisualStudio.TestTools.UITest.Extension, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||||
|
<Private>False</Private>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="Microsoft.VisualStudio.TestTools.UITesting, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||||
|
<Private>False</Private>
|
||||||
|
</Reference>
|
||||||
|
</ItemGroup>
|
||||||
|
</When>
|
||||||
|
</Choose>
|
||||||
|
<Import Project="$(VSToolsPath)\TeamTest\Microsoft.TestTools.targets" Condition="Exists('$(VSToolsPath)\TeamTest\Microsoft.TestTools.targets')" />
|
||||||
|
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||||
|
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||||
|
Other similar extension points exist, see Microsoft.Common.targets.
|
||||||
|
<Target Name="BeforeBuild">
|
||||||
|
</Target>
|
||||||
|
<Target Name="AfterBuild">
|
||||||
|
</Target>
|
||||||
|
-->
|
||||||
|
</Project>
|
|
@ -0,0 +1,36 @@
|
||||||
|
using System.Reflection;
|
||||||
|
using System.Runtime.CompilerServices;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
|
// General Information about an assembly is controlled through the following
|
||||||
|
// set of attributes. Change these attribute values to modify the information
|
||||||
|
// associated with an assembly.
|
||||||
|
[assembly: AssemblyTitle("Filtration.ItemFilterPreview.Data.Tests")]
|
||||||
|
[assembly: AssemblyDescription("")]
|
||||||
|
[assembly: AssemblyConfiguration("")]
|
||||||
|
[assembly: AssemblyCompany("")]
|
||||||
|
[assembly: AssemblyProduct("Filtration.ItemFilterPreview.Data.Tests")]
|
||||||
|
[assembly: AssemblyCopyright("Copyright © 2016")]
|
||||||
|
[assembly: AssemblyTrademark("")]
|
||||||
|
[assembly: AssemblyCulture("")]
|
||||||
|
|
||||||
|
// Setting ComVisible to false makes the types in this assembly not visible
|
||||||
|
// to COM components. If you need to access a type in this assembly from
|
||||||
|
// COM, set the ComVisible attribute to true on that type.
|
||||||
|
[assembly: ComVisible(false)]
|
||||||
|
|
||||||
|
// The following GUID is for the ID of the typelib if this project is exposed to COM
|
||||||
|
[assembly: Guid("7a5720de-a41b-47ea-aaab-7c5608ff0c1f")]
|
||||||
|
|
||||||
|
// Version information for an assembly consists of the following four values:
|
||||||
|
//
|
||||||
|
// Major Version
|
||||||
|
// Minor Version
|
||||||
|
// Build Number
|
||||||
|
// Revision
|
||||||
|
//
|
||||||
|
// You can specify all the values or you can default the Build and Revision Numbers
|
||||||
|
// by using the '*' as shown below:
|
||||||
|
// [assembly: AssemblyVersion("1.0.*")]
|
||||||
|
[assembly: AssemblyVersion("1.0.0.0")]
|
||||||
|
[assembly: AssemblyFileVersion("1.0.0.0")]
|
|
@ -0,0 +1,55 @@
|
||||||
|
using System.Linq;
|
||||||
|
using Filtration.ItemFilterPreview.Data.Repositories;
|
||||||
|
using Filtration.ObjectModel;
|
||||||
|
using Filtration.ObjectModel.Enums;
|
||||||
|
using NUnit.Framework;
|
||||||
|
|
||||||
|
namespace Filtration.ItemFilterPreview.Data.Tests.Repositories
|
||||||
|
{
|
||||||
|
[Ignore("integration test")]
|
||||||
|
[TestFixture]
|
||||||
|
public class TestItemSetRepository
|
||||||
|
{
|
||||||
|
[Test]
|
||||||
|
public void All_ReturnsAllItemSets()
|
||||||
|
{
|
||||||
|
using (var repository = new ItemSetRepository())
|
||||||
|
{
|
||||||
|
var result = repository.All.ToList();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void AddItemToItemSet()
|
||||||
|
{
|
||||||
|
ItemSet fetchedItemSet;
|
||||||
|
using (var repository = new ItemSetRepository())
|
||||||
|
{
|
||||||
|
fetchedItemSet = repository.Find(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
var newItem = new Item
|
||||||
|
{
|
||||||
|
BaseType = "Test Base",
|
||||||
|
Description = "Test Item Supreme",
|
||||||
|
DropLevel = 75,
|
||||||
|
Height = 3,
|
||||||
|
Width = 2,
|
||||||
|
ItemClass = "Super Class",
|
||||||
|
ItemRarity = ItemRarity.Rare,
|
||||||
|
ItemLevel = 50,
|
||||||
|
ItemSet = fetchedItemSet,
|
||||||
|
ItemSetId = fetchedItemSet.Id
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
fetchedItemSet.Items.Add(newItem);
|
||||||
|
|
||||||
|
using (var repository = new ItemSetRepository())
|
||||||
|
{
|
||||||
|
repository.InsertOrUpdate(fetchedItemSet);
|
||||||
|
repository.Save();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,33 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<configuration>
|
||||||
|
<configSections>
|
||||||
|
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
|
||||||
|
|
||||||
|
</configSections>
|
||||||
|
<entityFramework>
|
||||||
|
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
|
||||||
|
<parameters>
|
||||||
|
<parameter value="mssqllocaldb" />
|
||||||
|
</parameters>
|
||||||
|
</defaultConnectionFactory>
|
||||||
|
<providers>
|
||||||
|
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
|
||||||
|
<provider invariantName="System.Data.SQLite.EF6" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6" />
|
||||||
|
</providers>
|
||||||
|
</entityFramework>
|
||||||
|
<startup>
|
||||||
|
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
|
||||||
|
</startup>
|
||||||
|
<connectionStrings>
|
||||||
|
<add name="FiltrationDbContext" connectionString="data source="D:\C# Projects\Filtration\Filtration.db"" providerName="System.Data.SQLite.EF6" />
|
||||||
|
</connectionStrings>
|
||||||
|
|
||||||
|
<runtime>
|
||||||
|
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||||
|
<dependentAssembly>
|
||||||
|
<assemblyIdentity name="CommonServiceLocator" publicKeyToken="489b6accfaf20ef0" culture="neutral" />
|
||||||
|
<bindingRedirect oldVersion="0.0.0.0-2.0.4.0" newVersion="2.0.4.0" />
|
||||||
|
</dependentAssembly>
|
||||||
|
</assemblyBinding>
|
||||||
|
</runtime>
|
||||||
|
</configuration>
|
|
@ -0,0 +1,47 @@
|
||||||
|
using System;
|
||||||
|
using System.Data.Entity;
|
||||||
|
using Filtration.ObjectModel;
|
||||||
|
|
||||||
|
namespace Filtration.ItemFilterPreview.Data.DataContexts
|
||||||
|
{
|
||||||
|
public class FiltrationDbContext : DbContext
|
||||||
|
{
|
||||||
|
public FiltrationDbContext() : base("name=FiltrationDbContext")
|
||||||
|
{
|
||||||
|
// Disable database initializer
|
||||||
|
Database.SetInitializer<FiltrationDbContext>(null);
|
||||||
|
Database.Log = Console.WriteLine;
|
||||||
|
}
|
||||||
|
|
||||||
|
public virtual DbSet<Item> Items { get; set; }
|
||||||
|
public virtual DbSet<ItemSet> ItemSets { get; set; }
|
||||||
|
|
||||||
|
protected override void OnModelCreating(DbModelBuilder modelBuilder)
|
||||||
|
{
|
||||||
|
modelBuilder.Entity<Item>()
|
||||||
|
.Property(e => e.Description)
|
||||||
|
.IsUnicode(false);
|
||||||
|
|
||||||
|
modelBuilder.Entity<Item>()
|
||||||
|
.Property(e => e.BaseType)
|
||||||
|
.IsUnicode(false);
|
||||||
|
|
||||||
|
modelBuilder.Entity<Item>()
|
||||||
|
.Property(e => e.ItemClass)
|
||||||
|
.IsUnicode(false);
|
||||||
|
|
||||||
|
modelBuilder.Entity<Item>()
|
||||||
|
.Property(e => e.Sockets)
|
||||||
|
.IsUnicode(false);
|
||||||
|
|
||||||
|
modelBuilder.Entity<ItemSet>()
|
||||||
|
.Property(e => e.Name)
|
||||||
|
.IsUnicode(false);
|
||||||
|
|
||||||
|
modelBuilder.Entity<ItemSet>()
|
||||||
|
.HasMany(e => e.Items)
|
||||||
|
.WithRequired(e => e.ItemSet)
|
||||||
|
.WillCascadeOnDelete(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,79 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||||
|
<PropertyGroup>
|
||||||
|
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||||
|
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||||
|
<ProjectGuid>{855B38CC-EEF2-471D-BBBC-EB3E2FF3D387}</ProjectGuid>
|
||||||
|
<OutputType>Library</OutputType>
|
||||||
|
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||||
|
<RootNamespace>Filtration.ItemFilterPreview.Data</RootNamespace>
|
||||||
|
<AssemblyName>Filtration.ItemFilterPreview.Data</AssemblyName>
|
||||||
|
<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
|
||||||
|
<FileAlignment>512</FileAlignment>
|
||||||
|
<TargetFrameworkProfile />
|
||||||
|
<NuGetPackageImportStamp>
|
||||||
|
</NuGetPackageImportStamp>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||||
|
<DebugSymbols>true</DebugSymbols>
|
||||||
|
<DebugType>full</DebugType>
|
||||||
|
<Optimize>false</Optimize>
|
||||||
|
<OutputPath>bin\Debug\</OutputPath>
|
||||||
|
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||||
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
<WarningLevel>4</WarningLevel>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||||
|
<DebugType>pdbonly</DebugType>
|
||||||
|
<Optimize>true</Optimize>
|
||||||
|
<OutputPath>bin\Release\</OutputPath>
|
||||||
|
<DefineConstants>TRACE</DefineConstants>
|
||||||
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
<WarningLevel>4</WarningLevel>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Reference Include="System" />
|
||||||
|
<Reference Include="System.ComponentModel.DataAnnotations" />
|
||||||
|
<Reference Include="System.Core" />
|
||||||
|
<Reference Include="System.Runtime.Serialization" />
|
||||||
|
<Reference Include="System.Security" />
|
||||||
|
<Reference Include="System.Xml.Linq" />
|
||||||
|
<Reference Include="System.Data.DataSetExtensions" />
|
||||||
|
<Reference Include="Microsoft.CSharp" />
|
||||||
|
<Reference Include="System.Data" />
|
||||||
|
<Reference Include="System.Net.Http" />
|
||||||
|
<Reference Include="System.Xml" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Compile Include="DataContexts\FiltrationDbContext.cs" />
|
||||||
|
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||||
|
<Compile Include="Repositories\IEntityRepository.cs" />
|
||||||
|
<Compile Include="Repositories\ItemSetRepository.cs" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="App.config" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\Filtration.ObjectModel\Filtration.ObjectModel.csproj">
|
||||||
|
<Project>{4aac3beb-1dc1-483e-9d11-0e9334e80227}</Project>
|
||||||
|
<Name>Filtration.ObjectModel</Name>
|
||||||
|
</ProjectReference>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="System.Data.SQLite">
|
||||||
|
<Version>1.0.109.2</Version>
|
||||||
|
</PackageReference>
|
||||||
|
<PackageReference Include="System.Data.SQLite.Core">
|
||||||
|
<Version>1.0.109.2</Version>
|
||||||
|
</PackageReference>
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||||
|
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||||
|
Other similar extension points exist, see Microsoft.Common.targets.
|
||||||
|
<Target Name="BeforeBuild">
|
||||||
|
</Target>
|
||||||
|
<Target Name="AfterBuild">
|
||||||
|
</Target>
|
||||||
|
-->
|
||||||
|
</Project>
|
|
@ -0,0 +1,36 @@
|
||||||
|
using System.Reflection;
|
||||||
|
using System.Runtime.CompilerServices;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
|
// General Information about an assembly is controlled through the following
|
||||||
|
// set of attributes. Change these attribute values to modify the information
|
||||||
|
// associated with an assembly.
|
||||||
|
[assembly: AssemblyTitle("Filtration.ItemFilterPreview.Data")]
|
||||||
|
[assembly: AssemblyDescription("")]
|
||||||
|
[assembly: AssemblyConfiguration("")]
|
||||||
|
[assembly: AssemblyCompany("")]
|
||||||
|
[assembly: AssemblyProduct("Filtration.ItemFilterPreview.Data")]
|
||||||
|
[assembly: AssemblyCopyright("Copyright © 2016")]
|
||||||
|
[assembly: AssemblyTrademark("")]
|
||||||
|
[assembly: AssemblyCulture("")]
|
||||||
|
|
||||||
|
// Setting ComVisible to false makes the types in this assembly not visible
|
||||||
|
// to COM components. If you need to access a type in this assembly from
|
||||||
|
// COM, set the ComVisible attribute to true on that type.
|
||||||
|
[assembly: ComVisible(false)]
|
||||||
|
|
||||||
|
// The following GUID is for the ID of the typelib if this project is exposed to COM
|
||||||
|
[assembly: Guid("855b38cc-eef2-471d-bbbc-eb3e2ff3d387")]
|
||||||
|
|
||||||
|
// Version information for an assembly consists of the following four values:
|
||||||
|
//
|
||||||
|
// Major Version
|
||||||
|
// Minor Version
|
||||||
|
// Build Number
|
||||||
|
// Revision
|
||||||
|
//
|
||||||
|
// You can specify all the values or you can default the Build and Revision Numbers
|
||||||
|
// by using the '*' as shown below:
|
||||||
|
// [assembly: AssemblyVersion("1.0.*")]
|
||||||
|
[assembly: AssemblyVersion("1.0.0.0")]
|
||||||
|
[assembly: AssemblyFileVersion("1.0.0.0")]
|
|
@ -0,0 +1,16 @@
|
||||||
|
using System;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Linq.Expressions;
|
||||||
|
|
||||||
|
namespace Filtration.ItemFilterPreview.Data.Repositories
|
||||||
|
{
|
||||||
|
public interface IEntityRepository<T> : IDisposable
|
||||||
|
{
|
||||||
|
IQueryable<T> All { get; }
|
||||||
|
IQueryable<T> AllIncluding(params Expression<Func<T, object>>[] includeProperties);
|
||||||
|
T Find(int id);
|
||||||
|
void InsertOrUpdate(T itemSet);
|
||||||
|
void Delete(int id);
|
||||||
|
void Save();
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,63 @@
|
||||||
|
using System;
|
||||||
|
using System.Data.Entity;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Linq.Expressions;
|
||||||
|
using Filtration.ItemFilterPreview.Data.DataContexts;
|
||||||
|
using Filtration.ObjectModel;
|
||||||
|
|
||||||
|
namespace Filtration.ItemFilterPreview.Data.Repositories
|
||||||
|
{
|
||||||
|
public class ItemSetRepository : IEntityRepository<ItemSet>
|
||||||
|
{
|
||||||
|
FiltrationDbContext _context = new FiltrationDbContext();
|
||||||
|
|
||||||
|
|
||||||
|
public IQueryable<ItemSet> All => _context.ItemSets;
|
||||||
|
|
||||||
|
public IQueryable<ItemSet> AllIncluding(params Expression<Func<ItemSet, object>>[] includeProperties)
|
||||||
|
{
|
||||||
|
IQueryable<ItemSet> query = _context.ItemSets;
|
||||||
|
foreach (var includeProperty in includeProperties)
|
||||||
|
{
|
||||||
|
query = query.Include(includeProperty);
|
||||||
|
}
|
||||||
|
|
||||||
|
return query;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ItemSet Find(int id)
|
||||||
|
{
|
||||||
|
return _context.ItemSets.Find(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void InsertOrUpdate(ItemSet itemSet)
|
||||||
|
{
|
||||||
|
if (itemSet.Id == default(long))
|
||||||
|
{
|
||||||
|
// New entity
|
||||||
|
_context.ItemSets.Add(itemSet);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Existing entity
|
||||||
|
_context.Entry(itemSet).State = EntityState.Modified;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Delete(int id)
|
||||||
|
{
|
||||||
|
var itemSet = _context.ItemSets.Find(id);
|
||||||
|
_context.ItemSets.Remove(itemSet);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Save()
|
||||||
|
{
|
||||||
|
_context.SaveChanges();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Dispose()
|
||||||
|
{
|
||||||
|
_context.Dispose();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,130 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<PropertyGroup>
|
||||||
|
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||||
|
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||||
|
<ProductVersion>
|
||||||
|
</ProductVersion>
|
||||||
|
<SchemaVersion>2.0</SchemaVersion>
|
||||||
|
<ProjectGuid>{58CD3B9C-EBBA-4527-A81C-78B7EA9CA298}</ProjectGuid>
|
||||||
|
<OutputType>Library</OutputType>
|
||||||
|
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||||
|
<RootNamespace>Filtration.ItemFilterPreview.Tests</RootNamespace>
|
||||||
|
<AssemblyName>Filtration.ItemFilterPreview.Tests</AssemblyName>
|
||||||
|
<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
|
||||||
|
<TargetPlatformVersion>8.1</TargetPlatformVersion>
|
||||||
|
<MinimumVisualStudioVersion>12</MinimumVisualStudioVersion>
|
||||||
|
<FileAlignment>512</FileAlignment>
|
||||||
|
<ProjectTypeGuids>{3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
|
||||||
|
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
|
||||||
|
<VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
|
||||||
|
<ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\$(VisualStudioVersion)\UITestExtensionPackages</ReferencePath>
|
||||||
|
<IsCodedUITest>True</IsCodedUITest>
|
||||||
|
<TestProjectType>CodedUITest</TestProjectType>
|
||||||
|
<IsWindowsStoreCodedUITest>True</IsWindowsStoreCodedUITest>
|
||||||
|
<TargetFrameworkProfile />
|
||||||
|
<NuGetPackageImportStamp>
|
||||||
|
</NuGetPackageImportStamp>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||||
|
<DebugSymbols>true</DebugSymbols>
|
||||||
|
<DebugType>full</DebugType>
|
||||||
|
<Optimize>false</Optimize>
|
||||||
|
<OutputPath>bin\Debug\</OutputPath>
|
||||||
|
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||||
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
<WarningLevel>4</WarningLevel>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||||
|
<DebugType>pdbonly</DebugType>
|
||||||
|
<Optimize>true</Optimize>
|
||||||
|
<OutputPath>bin\Release\</OutputPath>
|
||||||
|
<DefineConstants>TRACE</DefineConstants>
|
||||||
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
<WarningLevel>4</WarningLevel>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Reference Include="System" />
|
||||||
|
<Reference Include="System.Configuration" />
|
||||||
|
<Reference Include="System.Xml" />
|
||||||
|
<Reference Include="System.Xml.Linq" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
|
||||||
|
<Visible>False</Visible>
|
||||||
|
</CodeAnalysisDependentAssemblyPaths>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||||
|
<Compile Include="Properties\Resources.Designer.cs">
|
||||||
|
<AutoGen>True</AutoGen>
|
||||||
|
<DesignTime>True</DesignTime>
|
||||||
|
<DependentUpon>Resources.resx</DependentUpon>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="Services\serializationtest.cs" />
|
||||||
|
<Compile Include="Services\TestItemBlockItemMatcher.cs" />
|
||||||
|
<Compile Include="Services\TestItemFilterProcessor.cs" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="app.config" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\Filtration.ItemFilterPreview\Filtration.ItemFilterPreview.csproj">
|
||||||
|
<Project>{3ab98b6e-05db-44fa-9dad-584aa88f0739}</Project>
|
||||||
|
<Name>Filtration.ItemFilterPreview</Name>
|
||||||
|
</ProjectReference>
|
||||||
|
<ProjectReference Include="..\Filtration.ObjectModel\Filtration.ObjectModel.csproj">
|
||||||
|
<Project>{4aac3beb-1dc1-483e-9d11-0e9334e80227}</Project>
|
||||||
|
<Name>Filtration.ObjectModel</Name>
|
||||||
|
</ProjectReference>
|
||||||
|
<ProjectReference Include="..\Filtration.Parser.Interface\Filtration.Parser.Interface.csproj">
|
||||||
|
<Project>{46383F20-02DF-48B4-B092-9088FA4ACD5A}</Project>
|
||||||
|
<Name>Filtration.Parser.Interface</Name>
|
||||||
|
</ProjectReference>
|
||||||
|
<ProjectReference Include="..\Filtration.Parser\Filtration.Parser.csproj">
|
||||||
|
<Project>{10a7c2bc-ec6f-4a38-bdda-e35935004c02}</Project>
|
||||||
|
<Name>Filtration.Parser</Name>
|
||||||
|
</ProjectReference>
|
||||||
|
<ProjectReference Include="..\Filtration\Filtration.csproj">
|
||||||
|
<Project>{55e0a34c-e039-43d7-a024-a4045401cdda}</Project>
|
||||||
|
<Name>Filtration</Name>
|
||||||
|
</ProjectReference>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<EmbeddedResource Include="Properties\Resources.resx">
|
||||||
|
<Generator>ResXFileCodeGenerator</Generator>
|
||||||
|
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
|
||||||
|
</EmbeddedResource>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="Resources\MuldiniFilterScript.txt" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="Castle.Core">
|
||||||
|
<Version>4.4.0</Version>
|
||||||
|
</PackageReference>
|
||||||
|
<PackageReference Include="FluentAssertions">
|
||||||
|
<Version>5.6.0</Version>
|
||||||
|
</PackageReference>
|
||||||
|
<PackageReference Include="Moq">
|
||||||
|
<Version>4.10.1</Version>
|
||||||
|
</PackageReference>
|
||||||
|
<PackageReference Include="NUnit">
|
||||||
|
<Version>3.11.0</Version>
|
||||||
|
</PackageReference>
|
||||||
|
<PackageReference Include="System.Threading.Tasks.Extensions">
|
||||||
|
<Version>4.5.2</Version>
|
||||||
|
</PackageReference>
|
||||||
|
<PackageReference Include="System.ValueTuple">
|
||||||
|
<Version>4.5.0</Version>
|
||||||
|
</PackageReference>
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
|
||||||
|
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||||
|
Other similar extension points exist, see Microsoft.Common.targets.
|
||||||
|
<Target Name="BeforeBuild">
|
||||||
|
</Target>
|
||||||
|
<Target Name="AfterBuild">
|
||||||
|
</Target>
|
||||||
|
-->
|
||||||
|
</Project>
|
|
@ -0,0 +1,35 @@
|
||||||
|
using System.Reflection;
|
||||||
|
using System.Runtime.CompilerServices;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
|
// General Information about an assembly is controlled through the following
|
||||||
|
// set of attributes. Change these attribute values to modify the information
|
||||||
|
// associated with an assembly.
|
||||||
|
[assembly: AssemblyTitle("Filtration.ItemFilterPreview.Tests")]
|
||||||
|
[assembly: AssemblyDescription("")]
|
||||||
|
[assembly: AssemblyConfiguration("")]
|
||||||
|
[assembly: AssemblyCompany("")]
|
||||||
|
[assembly: AssemblyProduct("Filtration.ItemFilterPreview.Tests")]
|
||||||
|
[assembly: AssemblyCopyright("Copyright © 2015")]
|
||||||
|
[assembly: AssemblyTrademark("")]
|
||||||
|
[assembly: AssemblyCulture("")]
|
||||||
|
|
||||||
|
// Setting ComVisible to false makes the types in this assembly not visible
|
||||||
|
// to COM components. If you need to access a type in this assembly from
|
||||||
|
// COM, set the ComVisible attribute to true on that type.
|
||||||
|
[assembly: ComVisible(false)]
|
||||||
|
|
||||||
|
// The following GUID is for the ID of the typelib if this project is exposed to COM
|
||||||
|
[assembly: Guid("58cd3b9c-ebba-4527-a81c-78b7ea9ca298")]
|
||||||
|
|
||||||
|
// Version information for an assembly consists of the following four values:
|
||||||
|
//
|
||||||
|
// Major Version
|
||||||
|
// Minor Version
|
||||||
|
// Build Number
|
||||||
|
// Revision
|
||||||
|
//
|
||||||
|
// You can specify all the values or you can default the Build and Revision Numbers
|
||||||
|
// by using the '*' as shown below:
|
||||||
|
[assembly: AssemblyVersion("1.0.0.0")]
|
||||||
|
[assembly: AssemblyFileVersion("1.0.0.0")]
|
|
@ -0,0 +1,82 @@
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// <auto-generated>
|
||||||
|
// This code was generated by a tool.
|
||||||
|
// Runtime Version:4.0.30319.42000
|
||||||
|
//
|
||||||
|
// Changes to this file may cause incorrect behavior and will be lost if
|
||||||
|
// the code is regenerated.
|
||||||
|
// </auto-generated>
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
namespace Filtration.ItemFilterPreview.Tests.Properties {
|
||||||
|
using System;
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// A strongly-typed resource class, for looking up localized strings, etc.
|
||||||
|
/// </summary>
|
||||||
|
// This class was auto-generated by the StronglyTypedResourceBuilder
|
||||||
|
// class via a tool like ResGen or Visual Studio.
|
||||||
|
// To add or remove a member, edit your .ResX file then rerun ResGen
|
||||||
|
// with the /str option, or rebuild your VS project.
|
||||||
|
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
|
||||||
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||||
|
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||||
|
internal class Resources {
|
||||||
|
|
||||||
|
private static global::System.Resources.ResourceManager resourceMan;
|
||||||
|
|
||||||
|
private static global::System.Globalization.CultureInfo resourceCulture;
|
||||||
|
|
||||||
|
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
|
||||||
|
internal Resources() {
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Returns the cached ResourceManager instance used by this class.
|
||||||
|
/// </summary>
|
||||||
|
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
||||||
|
internal static global::System.Resources.ResourceManager ResourceManager {
|
||||||
|
get {
|
||||||
|
if (object.ReferenceEquals(resourceMan, null)) {
|
||||||
|
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Filtration.ItemFilterPreview.Tests.Properties.Resources", typeof(Resources).Assembly);
|
||||||
|
resourceMan = temp;
|
||||||
|
}
|
||||||
|
return resourceMan;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Overrides the current thread's CurrentUICulture property for all
|
||||||
|
/// resource lookups using this strongly typed resource class.
|
||||||
|
/// </summary>
|
||||||
|
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
||||||
|
internal static global::System.Globalization.CultureInfo Culture {
|
||||||
|
get {
|
||||||
|
return resourceCulture;
|
||||||
|
}
|
||||||
|
set {
|
||||||
|
resourceCulture = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to ###############################################################################
|
||||||
|
///################ Path of Exile Item Filter - Script by Muldini ################
|
||||||
|
///###############################################################################
|
||||||
|
///############ http://www.pathofexile.com/forum/view-thread/1259059 #############
|
||||||
|
///
|
||||||
|
///
|
||||||
|
///
|
||||||
|
///
|
||||||
|
///###############################################################################
|
||||||
|
///### Overview ##################################################################
|
||||||
|
///################## [rest of string was truncated]";.
|
||||||
|
/// </summary>
|
||||||
|
internal static string MuldiniFilterScript {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("MuldiniFilterScript", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,124 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<root>
|
||||||
|
<!--
|
||||||
|
Microsoft ResX Schema
|
||||||
|
|
||||||
|
Version 2.0
|
||||||
|
|
||||||
|
The primary goals of this format is to allow a simple XML format
|
||||||
|
that is mostly human readable. The generation and parsing of the
|
||||||
|
various data types are done through the TypeConverter classes
|
||||||
|
associated with the data types.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
... ado.net/XML headers & schema ...
|
||||||
|
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||||
|
<resheader name="version">2.0</resheader>
|
||||||
|
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||||
|
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||||
|
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||||
|
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||||
|
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||||
|
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||||
|
</data>
|
||||||
|
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||||
|
<comment>This is a comment</comment>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
There are any number of "resheader" rows that contain simple
|
||||||
|
name/value pairs.
|
||||||
|
|
||||||
|
Each data row contains a name, and value. The row also contains a
|
||||||
|
type or mimetype. Type corresponds to a .NET class that support
|
||||||
|
text/value conversion through the TypeConverter architecture.
|
||||||
|
Classes that don't support this are serialized and stored with the
|
||||||
|
mimetype set.
|
||||||
|
|
||||||
|
The mimetype is used for serialized objects, and tells the
|
||||||
|
ResXResourceReader how to depersist the object. This is currently not
|
||||||
|
extensible. For a given mimetype the value must be set accordingly:
|
||||||
|
|
||||||
|
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||||
|
that the ResXResourceWriter will generate, however the reader can
|
||||||
|
read any of the formats listed below.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.binary.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.soap.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||||
|
value : The object must be serialized into a byte array
|
||||||
|
: using a System.ComponentModel.TypeConverter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
-->
|
||||||
|
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||||
|
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||||
|
<xsd:element name="root" msdata:IsDataSet="true">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:choice maxOccurs="unbounded">
|
||||||
|
<xsd:element name="metadata">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="assembly">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:attribute name="alias" type="xsd:string" />
|
||||||
|
<xsd:attribute name="name" type="xsd:string" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="data">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="resheader">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:choice>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:schema>
|
||||||
|
<resheader name="resmimetype">
|
||||||
|
<value>text/microsoft-resx</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="version">
|
||||||
|
<value>2.0</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="reader">
|
||||||
|
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="writer">
|
||||||
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||||
|
<data name="MuldiniFilterScript" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||||
|
<value>..\Resources\MuldiniFilterScript.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252</value>
|
||||||
|
</data>
|
||||||
|
</root>
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,522 @@
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using Filtration.ItemFilterPreview.Services;
|
||||||
|
using Filtration.ObjectModel;
|
||||||
|
using Filtration.ObjectModel.BlockItemTypes;
|
||||||
|
using Filtration.ObjectModel.Enums;
|
||||||
|
using Moq;
|
||||||
|
using NUnit.Framework;
|
||||||
|
|
||||||
|
namespace Filtration.ItemFilterPreview.Tests.Services
|
||||||
|
{
|
||||||
|
[TestFixture]
|
||||||
|
public class TestItemBlockItemMatcher
|
||||||
|
{
|
||||||
|
private ItemBlockItemMatcherTestUtility _testUtility;
|
||||||
|
|
||||||
|
[SetUp]
|
||||||
|
public void ItemBlockItemMatcherTestSetUp()
|
||||||
|
{
|
||||||
|
_testUtility = new ItemBlockItemMatcherTestUtility();
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void ItemBlockMatch_EmptyShowBlock_ReturnsTrue()
|
||||||
|
{
|
||||||
|
//Arrange
|
||||||
|
var testInputItem = Mock.Of<IItem>();
|
||||||
|
var testInputBlock = new ItemFilterBlock();
|
||||||
|
|
||||||
|
//Act
|
||||||
|
var result = _testUtility.BlockItemMatcher.ItemBlockMatch(testInputBlock, testInputItem);
|
||||||
|
|
||||||
|
//Assert
|
||||||
|
Assert.IsTrue(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void ItemBlockMatch_SingleBlockItem_Matches_ReturnsTrue()
|
||||||
|
{
|
||||||
|
//Arrange
|
||||||
|
var testBaseType = "Test Base Type";
|
||||||
|
var testInputItem = Mock.Of<IItem>(i => i.BaseType == testBaseType);
|
||||||
|
var testInputBlock = new ItemFilterBlock();
|
||||||
|
var baseTypeBlockItem = new BaseTypeBlockItem();
|
||||||
|
baseTypeBlockItem.Items.Add(testBaseType);
|
||||||
|
testInputBlock.BlockItems.Add(baseTypeBlockItem);
|
||||||
|
|
||||||
|
//Act
|
||||||
|
var result = _testUtility.BlockItemMatcher.ItemBlockMatch(testInputBlock, testInputItem);
|
||||||
|
|
||||||
|
//Assert
|
||||||
|
Assert.IsTrue(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void ItemBlockMatch_SingleBlockItem_DoesNotMatche_ReturnsFalse()
|
||||||
|
{
|
||||||
|
//Arrange
|
||||||
|
var testInputItem = Mock.Of<IItem>(i => i.BaseType == "Base Type 1");
|
||||||
|
var testInputBlock = new ItemFilterBlock();
|
||||||
|
var baseTypeBlockItem = new BaseTypeBlockItem();
|
||||||
|
baseTypeBlockItem.Items.Add("Base Type 2");
|
||||||
|
testInputBlock.BlockItems.Add(baseTypeBlockItem);
|
||||||
|
|
||||||
|
//Act
|
||||||
|
var result = _testUtility.BlockItemMatcher.ItemBlockMatch(testInputBlock, testInputItem);
|
||||||
|
|
||||||
|
//Assert
|
||||||
|
Assert.IsFalse(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void ItemBlockMatch_MultipleBlockItems_Matches_ReturnsTrue()
|
||||||
|
{
|
||||||
|
//Arrange
|
||||||
|
var testInputItem = Mock.Of<IItem>(i => i.BaseType == "Base Type 1" && i.Height == 4 && i.Width == 2);
|
||||||
|
var testInputBlock = new ItemFilterBlock();
|
||||||
|
var baseTypeBlockItem = new BaseTypeBlockItem();
|
||||||
|
baseTypeBlockItem.Items.Add("Base Type 1");
|
||||||
|
var heightBlockItem = new HeightBlockItem(FilterPredicateOperator.Equal, 4);
|
||||||
|
var widthBlockItem = new WidthBlockItem(FilterPredicateOperator.Equal, 2);
|
||||||
|
|
||||||
|
testInputBlock.BlockItems.Add(baseTypeBlockItem);
|
||||||
|
testInputBlock.BlockItems.Add(heightBlockItem);
|
||||||
|
testInputBlock.BlockItems.Add(widthBlockItem);
|
||||||
|
|
||||||
|
//Act
|
||||||
|
var result = _testUtility.BlockItemMatcher.ItemBlockMatch(testInputBlock, testInputItem);
|
||||||
|
|
||||||
|
//Assert
|
||||||
|
Assert.IsTrue(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void ItemBlockMatch_MultipleBlockItems_DoesNotMatch_ReturnsFalse()
|
||||||
|
{
|
||||||
|
//Arrange
|
||||||
|
var testInputItem = Mock.Of<IItem>(i => i.BaseType == "Base Type 1" && i.Height == 4 && i.Width == 2);
|
||||||
|
var testInputBlock = new ItemFilterBlock();
|
||||||
|
var baseTypeBlockItem = new BaseTypeBlockItem();
|
||||||
|
baseTypeBlockItem.Items.Add("Base Type d");
|
||||||
|
var heightBlockItem = new HeightBlockItem(FilterPredicateOperator.Equal, 3);
|
||||||
|
var widthBlockItem = new WidthBlockItem(FilterPredicateOperator.Equal, 2);
|
||||||
|
|
||||||
|
testInputBlock.BlockItems.Add(baseTypeBlockItem);
|
||||||
|
testInputBlock.BlockItems.Add(heightBlockItem);
|
||||||
|
testInputBlock.BlockItems.Add(widthBlockItem);
|
||||||
|
|
||||||
|
//Act
|
||||||
|
var result = _testUtility.BlockItemMatcher.ItemBlockMatch(testInputBlock, testInputItem);
|
||||||
|
|
||||||
|
//Assert
|
||||||
|
Assert.IsFalse(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
[TestCase("Test Base Type", true)]
|
||||||
|
[TestCase("Test Bas", true)]
|
||||||
|
[TestCase("T", true)]
|
||||||
|
[TestCase("Base Type", false)]
|
||||||
|
public void ItemBlockItemMatch_BaseTypeBlockItem_SingleBlockItemValue_ReturnsTrue(string testInputBaseType, bool expectedResult)
|
||||||
|
{
|
||||||
|
//Arrange
|
||||||
|
var testInputItem = Mock.Of<IItem>(i => i.BaseType == "Test Base Type");
|
||||||
|
var testInputBaseTypeBlockItem = new BaseTypeBlockItem();
|
||||||
|
testInputBaseTypeBlockItem.Items.Add(testInputBaseType);
|
||||||
|
|
||||||
|
//Act
|
||||||
|
var result = _testUtility.BlockItemMatcher.ItemBlockItemMatch(testInputBaseTypeBlockItem, testInputItem);
|
||||||
|
|
||||||
|
//Assert
|
||||||
|
Assert.AreEqual(expectedResult, result);
|
||||||
|
}
|
||||||
|
|
||||||
|
[TestCase("Test Base Type", true)]
|
||||||
|
[TestCase("Test Bas", true)]
|
||||||
|
[TestCase("T", true)]
|
||||||
|
[TestCase("Base Type", false)]
|
||||||
|
public void ItemBlockItemMatch_BaseTypeBlockItem_MultipleBlockItemValues_ReturnsCorrectResult(string testInputBaseType, bool expectedResult)
|
||||||
|
{
|
||||||
|
//Arrange
|
||||||
|
var testInputItem = Mock.Of<IItem>(i => i.BaseType == "Test Base Type");
|
||||||
|
var testInputBlockItem = new BaseTypeBlockItem();
|
||||||
|
testInputBlockItem.Items.Add("Something else");
|
||||||
|
testInputBlockItem.Items.Add(testInputBaseType);
|
||||||
|
testInputBlockItem.Items.Add("Blah");
|
||||||
|
|
||||||
|
//Act
|
||||||
|
var result = _testUtility.BlockItemMatcher.ItemBlockItemMatch(testInputBlockItem, testInputItem);
|
||||||
|
|
||||||
|
//Assert
|
||||||
|
Assert.AreEqual(expectedResult, result);
|
||||||
|
}
|
||||||
|
|
||||||
|
[TestCase("Test Item Class", true)]
|
||||||
|
[TestCase("Test It", true)]
|
||||||
|
[TestCase("T", true)]
|
||||||
|
[TestCase("Carrots", false)]
|
||||||
|
[TestCase("Item Class", true)]
|
||||||
|
public void ItemBlockItemMatch_ClassBlockItem_SingleBlockItemValue_ReturnsCorrectResult(string testInputBlockItemItemClass, bool expectedResult)
|
||||||
|
{
|
||||||
|
//Arrange
|
||||||
|
var testInputItem = Mock.Of<IItem>(i => i.ItemClass == "Test Item Class");
|
||||||
|
var testInputBlockItem = new ClassBlockItem();
|
||||||
|
testInputBlockItem.Items.Add(testInputBlockItemItemClass);
|
||||||
|
|
||||||
|
//Act
|
||||||
|
var result = _testUtility.BlockItemMatcher.ItemBlockItemMatch(testInputBlockItem, testInputItem);
|
||||||
|
|
||||||
|
//Assert
|
||||||
|
Assert.AreEqual(expectedResult, result);
|
||||||
|
}
|
||||||
|
|
||||||
|
[TestCase(FilterPredicateOperator.Equal, 49, false)]
|
||||||
|
[TestCase(FilterPredicateOperator.Equal, 50, true)]
|
||||||
|
[TestCase(FilterPredicateOperator.Equal, 51, false)]
|
||||||
|
[TestCase(FilterPredicateOperator.GreaterThan, 49, true)]
|
||||||
|
[TestCase(FilterPredicateOperator.GreaterThan, 50, false)]
|
||||||
|
[TestCase(FilterPredicateOperator.GreaterThan, 51, false)]
|
||||||
|
[TestCase(FilterPredicateOperator.GreaterThanOrEqual, 49, true)]
|
||||||
|
[TestCase(FilterPredicateOperator.GreaterThanOrEqual, 50, true)]
|
||||||
|
[TestCase(FilterPredicateOperator.GreaterThanOrEqual, 51, false)]
|
||||||
|
[TestCase(FilterPredicateOperator.LessThan, 49, false)]
|
||||||
|
[TestCase(FilterPredicateOperator.LessThan, 50, false)]
|
||||||
|
[TestCase(FilterPredicateOperator.LessThan, 51, true)]
|
||||||
|
[TestCase(FilterPredicateOperator.LessThanOrEqual, 49, false)]
|
||||||
|
[TestCase(FilterPredicateOperator.LessThanOrEqual, 50, true)]
|
||||||
|
[TestCase(FilterPredicateOperator.LessThanOrEqual, 51, true)]
|
||||||
|
[TestCase(-1, 51, false)]
|
||||||
|
public void ItemBlockItemMatch_DropLevelBlockItem_ReturnsCorrectResult(FilterPredicateOperator testInputFilterPredicateOperator, int testInputBlockItemDropLevel, bool expectedResult)
|
||||||
|
{
|
||||||
|
//Arrange
|
||||||
|
var testInputItem = Mock.Of<IItem>(i => i.DropLevel == 50);
|
||||||
|
var testInputBlockItem = new DropLevelBlockItem(testInputFilterPredicateOperator, testInputBlockItemDropLevel);
|
||||||
|
|
||||||
|
//Act
|
||||||
|
var result = _testUtility.BlockItemMatcher.ItemBlockItemMatch(testInputBlockItem, testInputItem);
|
||||||
|
|
||||||
|
//Assert
|
||||||
|
Assert.AreEqual(expectedResult, result);
|
||||||
|
}
|
||||||
|
|
||||||
|
[TestCase(FilterPredicateOperator.Equal, 1, false)]
|
||||||
|
[TestCase(FilterPredicateOperator.Equal, 2, true)]
|
||||||
|
[TestCase(FilterPredicateOperator.Equal, 3, false)]
|
||||||
|
[TestCase(FilterPredicateOperator.GreaterThan, 1, true)]
|
||||||
|
[TestCase(FilterPredicateOperator.GreaterThan, 2, false)]
|
||||||
|
[TestCase(FilterPredicateOperator.GreaterThan, 3, false)]
|
||||||
|
[TestCase(FilterPredicateOperator.GreaterThanOrEqual, 1, true)]
|
||||||
|
[TestCase(FilterPredicateOperator.GreaterThanOrEqual, 2, true)]
|
||||||
|
[TestCase(FilterPredicateOperator.GreaterThanOrEqual, 3, false)]
|
||||||
|
[TestCase(FilterPredicateOperator.LessThan, 1, false)]
|
||||||
|
[TestCase(FilterPredicateOperator.LessThan, 2, false)]
|
||||||
|
[TestCase(FilterPredicateOperator.LessThan, 3, true)]
|
||||||
|
[TestCase(FilterPredicateOperator.LessThanOrEqual, 1, false)]
|
||||||
|
[TestCase(FilterPredicateOperator.LessThanOrEqual, 2, true)]
|
||||||
|
[TestCase(FilterPredicateOperator.LessThanOrEqual, 3, true)]
|
||||||
|
[TestCase(-1, 3, false)]
|
||||||
|
public void ItemBlockItemMatch_HeightBlockItem_ReturnsCorrectResult(FilterPredicateOperator testInputFilterPredicateOperator, int testInputBlockItemHeight, bool expectedResult)
|
||||||
|
{
|
||||||
|
//Arrange
|
||||||
|
var testInputItem = Mock.Of<IItem>(i => i.Height == 2);
|
||||||
|
var testInputBlockItem = new HeightBlockItem(testInputFilterPredicateOperator, testInputBlockItemHeight);
|
||||||
|
|
||||||
|
//Act
|
||||||
|
var result = _testUtility.BlockItemMatcher.ItemBlockItemMatch(testInputBlockItem, testInputItem);
|
||||||
|
|
||||||
|
//Assert
|
||||||
|
Assert.AreEqual(expectedResult, result);
|
||||||
|
}
|
||||||
|
|
||||||
|
[TestCase(FilterPredicateOperator.Equal, 49, false)]
|
||||||
|
[TestCase(FilterPredicateOperator.Equal, 50, true)]
|
||||||
|
[TestCase(FilterPredicateOperator.Equal, 51, false)]
|
||||||
|
[TestCase(FilterPredicateOperator.GreaterThan, 49, true)]
|
||||||
|
[TestCase(FilterPredicateOperator.GreaterThan, 50, false)]
|
||||||
|
[TestCase(FilterPredicateOperator.GreaterThan, 51, false)]
|
||||||
|
[TestCase(FilterPredicateOperator.GreaterThanOrEqual, 49, true)]
|
||||||
|
[TestCase(FilterPredicateOperator.GreaterThanOrEqual, 50, true)]
|
||||||
|
[TestCase(FilterPredicateOperator.GreaterThanOrEqual, 51, false)]
|
||||||
|
[TestCase(FilterPredicateOperator.LessThan, 49, false)]
|
||||||
|
[TestCase(FilterPredicateOperator.LessThan, 50, false)]
|
||||||
|
[TestCase(FilterPredicateOperator.LessThan, 51, true)]
|
||||||
|
[TestCase(FilterPredicateOperator.LessThanOrEqual, 49, false)]
|
||||||
|
[TestCase(FilterPredicateOperator.LessThanOrEqual, 50, true)]
|
||||||
|
[TestCase(FilterPredicateOperator.LessThanOrEqual, 51, true)]
|
||||||
|
[TestCase(-1, 51, false)]
|
||||||
|
public void ItemBlockItemMatch_ItemLevelBlockItem_ReturnsCorrectResult(FilterPredicateOperator testInputFilterPredicateOperator, int testInputBlockItemItemLevel, bool expectedResult)
|
||||||
|
{
|
||||||
|
//Arrange
|
||||||
|
var testInputItem = Mock.Of<IItem>(i => i.ItemLevel == 50);
|
||||||
|
var testInputBlockItem = new ItemLevelBlockItem(testInputFilterPredicateOperator, testInputBlockItemItemLevel);
|
||||||
|
|
||||||
|
//Act
|
||||||
|
var result = _testUtility.BlockItemMatcher.ItemBlockItemMatch(testInputBlockItem, testInputItem);
|
||||||
|
|
||||||
|
//Assert
|
||||||
|
Assert.AreEqual(expectedResult, result);
|
||||||
|
}
|
||||||
|
|
||||||
|
[TestCase(FilterPredicateOperator.Equal, 2, false)]
|
||||||
|
[TestCase(FilterPredicateOperator.Equal, 3, true)]
|
||||||
|
[TestCase(FilterPredicateOperator.Equal, 4, false)]
|
||||||
|
[TestCase(FilterPredicateOperator.GreaterThan, 2, true)]
|
||||||
|
[TestCase(FilterPredicateOperator.GreaterThan, 3, false)]
|
||||||
|
[TestCase(FilterPredicateOperator.GreaterThan, 4, false)]
|
||||||
|
[TestCase(FilterPredicateOperator.GreaterThanOrEqual, 2, true)]
|
||||||
|
[TestCase(FilterPredicateOperator.GreaterThanOrEqual, 3, true)]
|
||||||
|
[TestCase(FilterPredicateOperator.GreaterThanOrEqual, 4, false)]
|
||||||
|
[TestCase(FilterPredicateOperator.LessThan, 2, false)]
|
||||||
|
[TestCase(FilterPredicateOperator.LessThan, 3, false)]
|
||||||
|
[TestCase(FilterPredicateOperator.LessThan, 4, true)]
|
||||||
|
[TestCase(FilterPredicateOperator.LessThanOrEqual, 2, false)]
|
||||||
|
[TestCase(FilterPredicateOperator.LessThanOrEqual, 3, true)]
|
||||||
|
[TestCase(FilterPredicateOperator.LessThanOrEqual, 4, true)]
|
||||||
|
[TestCase(-1, 3, false)]
|
||||||
|
public void ItemBlockItemMatch_LinkedSocketsBlockItem_ReturnsCorrectResult(FilterPredicateOperator testInputFilterPredicateOperator, int testInputBlockItemLinkedSockets, bool expectedResult)
|
||||||
|
{
|
||||||
|
//Arrange
|
||||||
|
var testInputItem = Mock.Of<IItem>(i => i.LinkedSockets == 3);
|
||||||
|
var testInputBlockItem = new LinkedSocketsBlockItem(testInputFilterPredicateOperator, testInputBlockItemLinkedSockets);
|
||||||
|
|
||||||
|
//Act
|
||||||
|
var result = _testUtility.BlockItemMatcher.ItemBlockItemMatch(testInputBlockItem, testInputItem);
|
||||||
|
|
||||||
|
//Assert
|
||||||
|
Assert.AreEqual(expectedResult, result);
|
||||||
|
}
|
||||||
|
|
||||||
|
[TestCase(FilterPredicateOperator.Equal, 11, false)]
|
||||||
|
[TestCase(FilterPredicateOperator.Equal, 12, true)]
|
||||||
|
[TestCase(FilterPredicateOperator.Equal, 13, false)]
|
||||||
|
[TestCase(FilterPredicateOperator.GreaterThan, 11, true)]
|
||||||
|
[TestCase(FilterPredicateOperator.GreaterThan, 12, false)]
|
||||||
|
[TestCase(FilterPredicateOperator.GreaterThan, 13, false)]
|
||||||
|
[TestCase(FilterPredicateOperator.GreaterThanOrEqual, 11, true)]
|
||||||
|
[TestCase(FilterPredicateOperator.GreaterThanOrEqual, 12, true)]
|
||||||
|
[TestCase(FilterPredicateOperator.GreaterThanOrEqual, 13, false)]
|
||||||
|
[TestCase(FilterPredicateOperator.LessThan, 11, false)]
|
||||||
|
[TestCase(FilterPredicateOperator.LessThan, 12, false)]
|
||||||
|
[TestCase(FilterPredicateOperator.LessThan, 13, true)]
|
||||||
|
[TestCase(FilterPredicateOperator.LessThanOrEqual, 11, false)]
|
||||||
|
[TestCase(FilterPredicateOperator.LessThanOrEqual, 12, true)]
|
||||||
|
[TestCase(FilterPredicateOperator.LessThanOrEqual, 13, true)]
|
||||||
|
[TestCase(-1, 13, false)]
|
||||||
|
public void ItemBlockItemMatch_QualityBlockItem_ReturnsCorrectResult(FilterPredicateOperator testInputFilterPredicateOperator, int testInputBlockItemQuality, bool expectedResult)
|
||||||
|
{
|
||||||
|
//Arrange
|
||||||
|
var testInputItem = Mock.Of<IItem>(i => i.Quality == 12);
|
||||||
|
var testInputBlockItem = new QualityBlockItem(testInputFilterPredicateOperator, testInputBlockItemQuality);
|
||||||
|
|
||||||
|
//Act
|
||||||
|
var result = _testUtility.BlockItemMatcher.ItemBlockItemMatch(testInputBlockItem, testInputItem);
|
||||||
|
|
||||||
|
//Assert
|
||||||
|
Assert.AreEqual(expectedResult, result);
|
||||||
|
}
|
||||||
|
|
||||||
|
[TestCase(FilterPredicateOperator.Equal, ItemRarity.Normal, false)]
|
||||||
|
[TestCase(FilterPredicateOperator.Equal, ItemRarity.Magic , true)]
|
||||||
|
[TestCase(FilterPredicateOperator.Equal, ItemRarity.Rare, false)]
|
||||||
|
[TestCase(FilterPredicateOperator.GreaterThan, ItemRarity.Normal, true)]
|
||||||
|
[TestCase(FilterPredicateOperator.GreaterThan, ItemRarity.Magic, false)]
|
||||||
|
[TestCase(FilterPredicateOperator.GreaterThan, ItemRarity.Rare, false)]
|
||||||
|
[TestCase(FilterPredicateOperator.GreaterThanOrEqual, ItemRarity.Normal, true)]
|
||||||
|
[TestCase(FilterPredicateOperator.GreaterThanOrEqual, ItemRarity.Magic, true)]
|
||||||
|
[TestCase(FilterPredicateOperator.GreaterThanOrEqual, ItemRarity.Rare, false)]
|
||||||
|
[TestCase(FilterPredicateOperator.LessThan, ItemRarity.Normal, false)]
|
||||||
|
[TestCase(FilterPredicateOperator.LessThan, ItemRarity.Magic, false)]
|
||||||
|
[TestCase(FilterPredicateOperator.LessThan, ItemRarity.Rare, true)]
|
||||||
|
[TestCase(FilterPredicateOperator.LessThanOrEqual, ItemRarity.Normal, false)]
|
||||||
|
[TestCase(FilterPredicateOperator.LessThanOrEqual, ItemRarity.Magic, true)]
|
||||||
|
[TestCase(FilterPredicateOperator.LessThanOrEqual, ItemRarity.Rare, true)]
|
||||||
|
[TestCase(-1, 13, false)]
|
||||||
|
public void ItemBlockItemMatch_RarityBlockItem_ReturnsCorrectResult(FilterPredicateOperator testInputFilterPredicateOperator, int testInputBlockItemRarity, bool expectedResult)
|
||||||
|
{
|
||||||
|
//Arrange
|
||||||
|
var testInputItem = Mock.Of<IItem>(i => i.ItemRarity == ItemRarity.Magic);
|
||||||
|
var testInputBlockItem = new RarityBlockItem(testInputFilterPredicateOperator, testInputBlockItemRarity);
|
||||||
|
|
||||||
|
//Act
|
||||||
|
var result = _testUtility.BlockItemMatcher.ItemBlockItemMatch(testInputBlockItem, testInputItem);
|
||||||
|
|
||||||
|
//Assert
|
||||||
|
Assert.AreEqual(expectedResult, result);
|
||||||
|
}
|
||||||
|
|
||||||
|
[TestCase(FilterPredicateOperator.Equal, 2, false)]
|
||||||
|
[TestCase(FilterPredicateOperator.Equal, 3, true)]
|
||||||
|
[TestCase(FilterPredicateOperator.Equal, 4, false)]
|
||||||
|
[TestCase(FilterPredicateOperator.GreaterThan, 2, true)]
|
||||||
|
[TestCase(FilterPredicateOperator.GreaterThan, 3, false)]
|
||||||
|
[TestCase(FilterPredicateOperator.GreaterThan, 4, false)]
|
||||||
|
[TestCase(FilterPredicateOperator.GreaterThanOrEqual, 2, true)]
|
||||||
|
[TestCase(FilterPredicateOperator.GreaterThanOrEqual, 3, true)]
|
||||||
|
[TestCase(FilterPredicateOperator.GreaterThanOrEqual, 4, false)]
|
||||||
|
[TestCase(FilterPredicateOperator.LessThan, 2, false)]
|
||||||
|
[TestCase(FilterPredicateOperator.LessThan, 3, false)]
|
||||||
|
[TestCase(FilterPredicateOperator.LessThan, 4, true)]
|
||||||
|
[TestCase(FilterPredicateOperator.LessThanOrEqual, 2, false)]
|
||||||
|
[TestCase(FilterPredicateOperator.LessThanOrEqual, 3, true)]
|
||||||
|
[TestCase(FilterPredicateOperator.LessThanOrEqual, 4, true)]
|
||||||
|
[TestCase(-1, 3, false)]
|
||||||
|
public void ItemBlockItemMatch_SocketsBlockItem_ReturnsCorrectResult(FilterPredicateOperator testInputFilterPredicateOperator, int testInputBlockItemSockets, bool expectedResult)
|
||||||
|
{
|
||||||
|
//Arrange
|
||||||
|
var testInputItem = Mock.Of<IItem>(i => i.SocketCount == 3);
|
||||||
|
var testInputBlockItem = new SocketsBlockItem(testInputFilterPredicateOperator, testInputBlockItemSockets);
|
||||||
|
|
||||||
|
//Act
|
||||||
|
var result = _testUtility.BlockItemMatcher.ItemBlockItemMatch(testInputBlockItem, testInputItem);
|
||||||
|
|
||||||
|
//Assert
|
||||||
|
Assert.AreEqual(expectedResult, result);
|
||||||
|
}
|
||||||
|
|
||||||
|
[TestCase(FilterPredicateOperator.Equal, 1, false)]
|
||||||
|
[TestCase(FilterPredicateOperator.Equal, 2, true)]
|
||||||
|
[TestCase(FilterPredicateOperator.Equal, 3, false)]
|
||||||
|
[TestCase(FilterPredicateOperator.GreaterThan, 1, true)]
|
||||||
|
[TestCase(FilterPredicateOperator.GreaterThan, 2, false)]
|
||||||
|
[TestCase(FilterPredicateOperator.GreaterThan, 3, false)]
|
||||||
|
[TestCase(FilterPredicateOperator.GreaterThanOrEqual, 1, true)]
|
||||||
|
[TestCase(FilterPredicateOperator.GreaterThanOrEqual, 2, true)]
|
||||||
|
[TestCase(FilterPredicateOperator.GreaterThanOrEqual, 3, false)]
|
||||||
|
[TestCase(FilterPredicateOperator.LessThan, 1, false)]
|
||||||
|
[TestCase(FilterPredicateOperator.LessThan, 2, false)]
|
||||||
|
[TestCase(FilterPredicateOperator.LessThan, 3, true)]
|
||||||
|
[TestCase(FilterPredicateOperator.LessThanOrEqual, 1, false)]
|
||||||
|
[TestCase(FilterPredicateOperator.LessThanOrEqual, 2, true)]
|
||||||
|
[TestCase(FilterPredicateOperator.LessThanOrEqual, 3, true)]
|
||||||
|
[TestCase(-1, 3, false)]
|
||||||
|
public void ItemBlockItemMatch_ReturnsCorrectResult(FilterPredicateOperator testInputFilterPredicateOperator, int testInputBlockItemWidth, bool expectedResult)
|
||||||
|
{
|
||||||
|
//Arrange
|
||||||
|
var testInputItem = Mock.Of<IItem>(i => i.Width == 2);
|
||||||
|
var testInputBlockItem = new WidthBlockItem(testInputFilterPredicateOperator, testInputBlockItemWidth);
|
||||||
|
|
||||||
|
//Act
|
||||||
|
var result = _testUtility.BlockItemMatcher.ItemBlockItemMatch(testInputBlockItem, testInputItem);
|
||||||
|
|
||||||
|
//Assert
|
||||||
|
Assert.AreEqual(expectedResult, result);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void ItemBlockItemMatch_SocketGroupBlockItem_SingleItemSocketGroup_SingleBlockItemSocketGroup_Match_ReturnsCorrectResult()
|
||||||
|
{
|
||||||
|
//Arrange
|
||||||
|
var testInputBlockItem = new SocketGroupBlockItem();
|
||||||
|
testInputBlockItem.Items.Add("RGB");
|
||||||
|
|
||||||
|
var testInputItem = Mock.Of<IItem>(i => i.LinkedSocketGroups == new List<SocketGroup>
|
||||||
|
{
|
||||||
|
new SocketGroup(new List<Socket>
|
||||||
|
{
|
||||||
|
new Socket(SocketColor.Red),
|
||||||
|
new Socket(SocketColor.Green),
|
||||||
|
new Socket(SocketColor.Blue),
|
||||||
|
}, true)
|
||||||
|
});
|
||||||
|
|
||||||
|
//Act
|
||||||
|
var result = _testUtility.BlockItemMatcher.ItemBlockItemMatch(testInputBlockItem, testInputItem);
|
||||||
|
|
||||||
|
//Assert
|
||||||
|
Assert.IsTrue(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void ItemBlockItemMatch_SocketGroupBlockItem_SingleItemSocketGroup_SingleBlockItemSocketGroup_NoMatch_ReturnsCorrectResult()
|
||||||
|
{
|
||||||
|
//Arrange
|
||||||
|
var testInputBlockItem = new SocketGroupBlockItem();
|
||||||
|
testInputBlockItem.Items.Add("RGB");
|
||||||
|
|
||||||
|
var testInputItem = Mock.Of<IItem>(i => i.LinkedSocketGroups == new List<SocketGroup>
|
||||||
|
{
|
||||||
|
new SocketGroup(new List<Socket>
|
||||||
|
{
|
||||||
|
new Socket(SocketColor.Red),
|
||||||
|
new Socket(SocketColor.Green)
|
||||||
|
}, true)
|
||||||
|
});
|
||||||
|
|
||||||
|
//Act
|
||||||
|
var result = _testUtility.BlockItemMatcher.ItemBlockItemMatch(testInputBlockItem, testInputItem);
|
||||||
|
|
||||||
|
//Assert
|
||||||
|
Assert.IsFalse(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void ItemBlockItemMatch_SocketGroupBlockItem_MultipleItemSocketGroup_SingleBlockItemSocketGroup_NoMatch_ReturnsCorrectResult()
|
||||||
|
{
|
||||||
|
//Arrange
|
||||||
|
var testInputBlockItem = new SocketGroupBlockItem();
|
||||||
|
testInputBlockItem.Items.Add("RGB");
|
||||||
|
testInputBlockItem.Items.Add("RGWW");
|
||||||
|
testInputBlockItem.Items.Add("RRGG");
|
||||||
|
testInputBlockItem.Items.Add("WWWW");
|
||||||
|
|
||||||
|
var testInputItem = Mock.Of<IItem>(i => i.LinkedSocketGroups == new List<SocketGroup>
|
||||||
|
{
|
||||||
|
new SocketGroup(new List<Socket>
|
||||||
|
{
|
||||||
|
new Socket(SocketColor.Red),
|
||||||
|
new Socket(SocketColor.Green),
|
||||||
|
new Socket(SocketColor.White),
|
||||||
|
new Socket(SocketColor.Green)
|
||||||
|
|
||||||
|
}, true)
|
||||||
|
});
|
||||||
|
|
||||||
|
//Act
|
||||||
|
var result = _testUtility.BlockItemMatcher.ItemBlockItemMatch(testInputBlockItem, testInputItem);
|
||||||
|
|
||||||
|
//Assert
|
||||||
|
Assert.IsFalse(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void ItemBlockItemMatch_SocketGroupBlockItem_MultipleItemSocketGroup_SingleBlockItemSocketGroup_Match_ReturnsCorrectResult()
|
||||||
|
{
|
||||||
|
//Arrange
|
||||||
|
var testInputBlockItem = new SocketGroupBlockItem();
|
||||||
|
testInputBlockItem.Items.Add("RGB");
|
||||||
|
testInputBlockItem.Items.Add("RGWW");
|
||||||
|
testInputBlockItem.Items.Add("RGWG");
|
||||||
|
testInputBlockItem.Items.Add("WWWW");
|
||||||
|
|
||||||
|
var testInputItem = Mock.Of<IItem>(i => i.LinkedSocketGroups == new List<SocketGroup>
|
||||||
|
{
|
||||||
|
new SocketGroup(new List<Socket>
|
||||||
|
{
|
||||||
|
new Socket(SocketColor.Red),
|
||||||
|
new Socket(SocketColor.Green),
|
||||||
|
new Socket(SocketColor.White),
|
||||||
|
new Socket(SocketColor.Green)
|
||||||
|
|
||||||
|
}, true)
|
||||||
|
});
|
||||||
|
|
||||||
|
//Act
|
||||||
|
var result = _testUtility.BlockItemMatcher.ItemBlockItemMatch(testInputBlockItem, testInputItem);
|
||||||
|
|
||||||
|
//Assert
|
||||||
|
Assert.IsTrue(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
private class ItemBlockItemMatcherTestUtility
|
||||||
|
{
|
||||||
|
public ItemBlockItemMatcherTestUtility()
|
||||||
|
{
|
||||||
|
// Mock setups
|
||||||
|
|
||||||
|
// Class under-test instantiation
|
||||||
|
BlockItemMatcher = new BlockItemMatcher();
|
||||||
|
}
|
||||||
|
|
||||||
|
public BlockItemMatcher BlockItemMatcher { get; }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,258 @@
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Collections.ObjectModel;
|
||||||
|
using System.Linq;
|
||||||
|
using Filtration.ItemFilterPreview.Services;
|
||||||
|
using Filtration.ItemFilterPreview.Tests.Properties;
|
||||||
|
using Filtration.ObjectModel;
|
||||||
|
using Filtration.ObjectModel.BlockItemTypes;
|
||||||
|
using Filtration.ObjectModel.Enums;
|
||||||
|
using Filtration.ObjectModel.Factories;
|
||||||
|
using Filtration.Parser.Services;
|
||||||
|
using Moq;
|
||||||
|
using NUnit.Framework;
|
||||||
|
|
||||||
|
namespace Filtration.ItemFilterPreview.Tests.Services
|
||||||
|
{
|
||||||
|
[TestFixture]
|
||||||
|
public class TestItemFilterProcessor
|
||||||
|
{
|
||||||
|
private ItemFilterProcessorTestUtility _testUtility;
|
||||||
|
|
||||||
|
[SetUp]
|
||||||
|
public void ItemFilterProcessorTestSetUp()
|
||||||
|
{
|
||||||
|
_testUtility = new ItemFilterProcessorTestUtility();
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void ProcessItemsAgainstItemFilterScript_Matches_ReturnsTrue()
|
||||||
|
{
|
||||||
|
//Arrange
|
||||||
|
var testInputItem = Mock.Of<IItem>();
|
||||||
|
var testInputBlock = Mock.Of<IItemFilterBlock>();
|
||||||
|
var testInputScript = Mock.Of<IItemFilterScript>(s => s.ItemFilterBlocks == new ObservableCollection<IItemFilterBlockBase> {testInputBlock});
|
||||||
|
|
||||||
|
_testUtility.MockBlockItemMatcher
|
||||||
|
.Setup(b => b.ItemBlockMatch(testInputBlock, testInputItem))
|
||||||
|
.Returns(true)
|
||||||
|
.Verifiable();
|
||||||
|
|
||||||
|
//Act
|
||||||
|
var result = _testUtility.ItemFilterProcessor.ProcessItemsAgainstItemFilterScript(testInputScript, new List<IItem> { testInputItem });
|
||||||
|
|
||||||
|
//Assert
|
||||||
|
_testUtility.MockBlockItemMatcher.Verify();
|
||||||
|
Assert.AreEqual(testInputBlock, result.First(r => r.ItemFilterBlock == testInputBlock).ItemFilterBlock);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void ProcessItemsAgainstItemFilterScript_DoesNotMatch_ResultHasNullItemFilterBlock()
|
||||||
|
{
|
||||||
|
//Arrange
|
||||||
|
var testInputItem = Mock.Of<IItem>();
|
||||||
|
var testInputBlock = Mock.Of<IItemFilterBlock>();
|
||||||
|
var testInputScript = Mock.Of<IItemFilterScript>(s => s.ItemFilterBlocks == new ObservableCollection<IItemFilterBlockBase> { testInputBlock });
|
||||||
|
|
||||||
|
_testUtility.MockBlockItemMatcher
|
||||||
|
.Setup(b => b.ItemBlockMatch(testInputBlock, testInputItem))
|
||||||
|
.Returns(false)
|
||||||
|
.Verifiable();
|
||||||
|
|
||||||
|
//Act
|
||||||
|
var result = _testUtility.ItemFilterProcessor.ProcessItemsAgainstItemFilterScript(testInputScript, new List<IItem> { testInputItem });
|
||||||
|
|
||||||
|
//Assert
|
||||||
|
_testUtility.MockBlockItemMatcher.Verify();
|
||||||
|
Assert.AreEqual(null, result.First(r => r.Item == testInputItem).ItemFilterBlock);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
[Ignore("Outdated item filter")]
|
||||||
|
public void ProcessItemsAgainstItemFilterScript_IntegrationTest()
|
||||||
|
{
|
||||||
|
//Arrange
|
||||||
|
var testInputScriptFile = Resources.MuldiniFilterScript;
|
||||||
|
var blockGroupHierarchyBuilder = new BlockGroupHierarchyBuilder();
|
||||||
|
var mockItemFilterScriptFactory = new Mock<IItemFilterScriptFactory>();
|
||||||
|
mockItemFilterScriptFactory
|
||||||
|
.Setup(i => i.Create())
|
||||||
|
.Returns(new ItemFilterScript());
|
||||||
|
|
||||||
|
var scriptTranslator = new ItemFilterScriptTranslator(blockGroupHierarchyBuilder, new ItemFilterBlockTranslator(blockGroupHierarchyBuilder), mockItemFilterScriptFactory.Object);
|
||||||
|
var script = scriptTranslator.TranslateStringToItemFilterScript(testInputScriptFile);
|
||||||
|
|
||||||
|
var testInputItem = new Item
|
||||||
|
{
|
||||||
|
BaseType = "BlahdeBlah",
|
||||||
|
ItemClass = "Wands",
|
||||||
|
ItemRarity = ItemRarity.Magic,
|
||||||
|
ItemLevel = 9,
|
||||||
|
DropLevel = 9,
|
||||||
|
Height = 3,
|
||||||
|
Width = 1,
|
||||||
|
SocketGroups = new List<SocketGroup> {new SocketGroup(new List<Socket> {new Socket(SocketColor.Red)}, false)}
|
||||||
|
};
|
||||||
|
|
||||||
|
var itemFilterProcessor = new ItemFilterProcessor(new BlockItemMatcher());
|
||||||
|
|
||||||
|
//Act
|
||||||
|
var result = itemFilterProcessor.ProcessItemsAgainstItemFilterScript(script, new List<IItem> { testInputItem });
|
||||||
|
|
||||||
|
//Assert
|
||||||
|
Assert.AreEqual("Wands", result.First().ItemFilterBlock.BlockItems.OfType<ClassBlockItem>().First().Items.First());
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
[Ignore("Outdated item filter")]
|
||||||
|
public void ProcessItemsAgainstItemFilterScript_IntegrationTest_10Items()
|
||||||
|
{
|
||||||
|
//Arrange
|
||||||
|
var testInputScriptFile = Resources.MuldiniFilterScript;
|
||||||
|
var blockGroupHierarchyBuilder = new BlockGroupHierarchyBuilder();
|
||||||
|
var mockItemFilterScriptFactory = new Mock<IItemFilterScriptFactory>();
|
||||||
|
mockItemFilterScriptFactory
|
||||||
|
.Setup(i => i.Create())
|
||||||
|
.Returns(new ItemFilterScript());
|
||||||
|
var scriptTranslator = new ItemFilterScriptTranslator(blockGroupHierarchyBuilder, new ItemFilterBlockTranslator(blockGroupHierarchyBuilder), mockItemFilterScriptFactory.Object);
|
||||||
|
var script = scriptTranslator.TranslateStringToItemFilterScript(testInputScriptFile);
|
||||||
|
|
||||||
|
var testInputItems = new List<IItem>
|
||||||
|
{
|
||||||
|
new Item
|
||||||
|
{
|
||||||
|
BaseType = "BlahdeBlah",
|
||||||
|
ItemClass = "Wands",
|
||||||
|
ItemRarity = ItemRarity.Magic,
|
||||||
|
ItemLevel = 9,
|
||||||
|
DropLevel = 9,
|
||||||
|
Height = 3,
|
||||||
|
Width = 1,
|
||||||
|
SocketGroups = new List<SocketGroup> {new SocketGroup(new List<Socket> {new Socket(SocketColor.Red)}, false)}
|
||||||
|
},
|
||||||
|
new Item
|
||||||
|
{
|
||||||
|
BaseType = "BlahdeBlah",
|
||||||
|
ItemClass = "Wands",
|
||||||
|
ItemRarity = ItemRarity.Magic,
|
||||||
|
ItemLevel = 9,
|
||||||
|
DropLevel = 9,
|
||||||
|
Height = 3,
|
||||||
|
Width = 1,
|
||||||
|
SocketGroups = new List<SocketGroup> {new SocketGroup(new List<Socket> {new Socket(SocketColor.Red)}, false)}
|
||||||
|
},
|
||||||
|
new Item
|
||||||
|
{
|
||||||
|
BaseType = "BlahdeBlah",
|
||||||
|
ItemClass = "Wands",
|
||||||
|
ItemRarity = ItemRarity.Magic,
|
||||||
|
ItemLevel = 9,
|
||||||
|
DropLevel = 9,
|
||||||
|
Height = 3,
|
||||||
|
Width = 1,
|
||||||
|
SocketGroups = new List<SocketGroup> {new SocketGroup(new List<Socket> {new Socket(SocketColor.Red)}, false)}
|
||||||
|
},
|
||||||
|
new Item
|
||||||
|
{
|
||||||
|
BaseType = "BlahdeBlah",
|
||||||
|
ItemClass = "Wands",
|
||||||
|
ItemRarity = ItemRarity.Magic,
|
||||||
|
ItemLevel = 9,
|
||||||
|
DropLevel = 9,
|
||||||
|
Height = 3,
|
||||||
|
Width = 1,
|
||||||
|
SocketGroups = new List<SocketGroup> {new SocketGroup(new List<Socket> {new Socket(SocketColor.Red)}, false)}
|
||||||
|
},
|
||||||
|
new Item
|
||||||
|
{
|
||||||
|
BaseType = "BlahdeBlah",
|
||||||
|
ItemClass = "Wands",
|
||||||
|
ItemRarity = ItemRarity.Magic,
|
||||||
|
ItemLevel = 9,
|
||||||
|
DropLevel = 9,
|
||||||
|
Height = 3,
|
||||||
|
Width = 1,
|
||||||
|
SocketGroups = new List<SocketGroup> {new SocketGroup(new List<Socket> {new Socket(SocketColor.Red)}, false)}
|
||||||
|
},
|
||||||
|
new Item
|
||||||
|
{
|
||||||
|
BaseType = "BlahdeBlah",
|
||||||
|
ItemClass = "Wands",
|
||||||
|
ItemRarity = ItemRarity.Magic,
|
||||||
|
ItemLevel = 9,
|
||||||
|
DropLevel = 9,
|
||||||
|
Height = 3,
|
||||||
|
Width = 1,
|
||||||
|
SocketGroups = new List<SocketGroup> {new SocketGroup(new List<Socket> {new Socket(SocketColor.Red)}, false)}
|
||||||
|
},
|
||||||
|
new Item
|
||||||
|
{
|
||||||
|
BaseType = "BlahdeBlah",
|
||||||
|
ItemClass = "Wands",
|
||||||
|
ItemRarity = ItemRarity.Magic,
|
||||||
|
ItemLevel = 9,
|
||||||
|
DropLevel = 9,
|
||||||
|
Height = 3,
|
||||||
|
Width = 1,
|
||||||
|
SocketGroups = new List<SocketGroup> {new SocketGroup(new List<Socket> {new Socket(SocketColor.Red)}, false)}
|
||||||
|
},
|
||||||
|
new Item
|
||||||
|
{
|
||||||
|
BaseType = "BlahdeBlah",
|
||||||
|
ItemClass = "Wands",
|
||||||
|
ItemRarity = ItemRarity.Magic,
|
||||||
|
ItemLevel = 9,
|
||||||
|
DropLevel = 9,
|
||||||
|
Height = 3,
|
||||||
|
Width = 1,
|
||||||
|
SocketGroups = new List<SocketGroup> {new SocketGroup(new List<Socket> {new Socket(SocketColor.Red)}, false)}
|
||||||
|
},
|
||||||
|
new Item
|
||||||
|
{
|
||||||
|
BaseType = "BlahdeBlah",
|
||||||
|
ItemClass = "Wands",
|
||||||
|
ItemRarity = ItemRarity.Magic,
|
||||||
|
ItemLevel = 9,
|
||||||
|
DropLevel = 9,
|
||||||
|
Height = 3,
|
||||||
|
Width = 1,
|
||||||
|
SocketGroups = new List<SocketGroup> {new SocketGroup(new List<Socket> {new Socket(SocketColor.Red)}, false)}
|
||||||
|
},
|
||||||
|
new Item
|
||||||
|
{
|
||||||
|
BaseType = "BlahdeBlah",
|
||||||
|
ItemClass = "Wands",
|
||||||
|
ItemRarity = ItemRarity.Magic,
|
||||||
|
ItemLevel = 9,
|
||||||
|
DropLevel = 9,
|
||||||
|
Height = 3,
|
||||||
|
Width = 1,
|
||||||
|
SocketGroups = new List<SocketGroup> {new SocketGroup(new List<Socket> {new Socket(SocketColor.Red)}, false)}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
var itemFilterProcessor = new ItemFilterProcessor(new BlockItemMatcher());
|
||||||
|
|
||||||
|
//Act
|
||||||
|
var result = itemFilterProcessor.ProcessItemsAgainstItemFilterScript(script, testInputItems);
|
||||||
|
|
||||||
|
//Assert
|
||||||
|
Assert.AreEqual("Wands", result.First().ItemFilterBlock.BlockItems.OfType<ClassBlockItem>().First().Items.First());
|
||||||
|
}
|
||||||
|
|
||||||
|
private class ItemFilterProcessorTestUtility
|
||||||
|
{
|
||||||
|
public ItemFilterProcessorTestUtility()
|
||||||
|
{
|
||||||
|
// Mock setups
|
||||||
|
MockBlockItemMatcher = new Mock<IBlockItemMatcher>();
|
||||||
|
|
||||||
|
// Class under-test instantiation
|
||||||
|
ItemFilterProcessor = new ItemFilterProcessor(MockBlockItemMatcher.Object);
|
||||||
|
}
|
||||||
|
|
||||||
|
public ItemFilterProcessor ItemFilterProcessor { get; private set; }
|
||||||
|
|
||||||
|
public Mock<IBlockItemMatcher> MockBlockItemMatcher { get; }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,45 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.IO;
|
||||||
|
using System.Xml;
|
||||||
|
using System.Xml.Serialization;
|
||||||
|
using Filtration.ObjectModel;
|
||||||
|
using Filtration.ObjectModel.Enums;
|
||||||
|
using NUnit.Framework;
|
||||||
|
|
||||||
|
namespace Filtration.ItemFilterPreview.Tests.Services
|
||||||
|
{
|
||||||
|
class serializationtest
|
||||||
|
{
|
||||||
|
[Ignore("")]
|
||||||
|
[Test]
|
||||||
|
public void test_serialization()
|
||||||
|
{
|
||||||
|
//Arrange
|
||||||
|
var item = new Item
|
||||||
|
{
|
||||||
|
ItemClass = "Test Class",
|
||||||
|
BaseType = "Test Base Type",
|
||||||
|
DropLevel = 54,
|
||||||
|
Height = 2,
|
||||||
|
Width = 2,
|
||||||
|
ItemLevel = 50,
|
||||||
|
ItemRarity = ItemRarity.Rare,
|
||||||
|
SocketGroups = new List<SocketGroup> {new SocketGroup(new List<Socket> {new Socket(SocketColor.Red), new Socket(SocketColor.Blue), new Socket(SocketColor.White)}, true)},
|
||||||
|
Quality = 12
|
||||||
|
};
|
||||||
|
|
||||||
|
//Act
|
||||||
|
|
||||||
|
var serializer = new XmlSerializer(item.GetType());
|
||||||
|
var output = string.Empty;
|
||||||
|
using (var textWriter = new StringWriter())
|
||||||
|
{
|
||||||
|
serializer.Serialize(textWriter, item);
|
||||||
|
output = textWriter.ToString();
|
||||||
|
}
|
||||||
|
|
||||||
|
//Assert
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +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.5.0.0" newVersion="3.5.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-3.5.0.0" newVersion="3.5.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>
|
|
@ -0,0 +1,26 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<configuration>
|
||||||
|
<startup>
|
||||||
|
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
|
||||||
|
</startup>
|
||||||
|
<runtime>
|
||||||
|
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||||
|
<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>
|
||||||
|
</assemblyBinding>
|
||||||
|
</runtime>
|
||||||
|
</configuration>
|
|
@ -0,0 +1,8 @@
|
||||||
|
<Application x:Class="Filtration.ItemFilterPreview.App"
|
||||||
|
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||||
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
|
Startup="Application_Startup">
|
||||||
|
<Application.Resources>
|
||||||
|
|
||||||
|
</Application.Resources>
|
||||||
|
</Application>
|
|
@ -0,0 +1,25 @@
|
||||||
|
using System.Windows;
|
||||||
|
using Castle.Facilities.TypedFactory;
|
||||||
|
using Castle.Windsor;
|
||||||
|
using Castle.Windsor.Installer;
|
||||||
|
using Filtration.ItemFilterPreview.Views;
|
||||||
|
|
||||||
|
namespace Filtration.ItemFilterPreview
|
||||||
|
{
|
||||||
|
public partial class App : Application
|
||||||
|
{
|
||||||
|
private IWindsorContainer _container;
|
||||||
|
|
||||||
|
private void Application_Startup(object sender, StartupEventArgs e)
|
||||||
|
{
|
||||||
|
_container = new WindsorContainer();
|
||||||
|
|
||||||
|
_container.AddFacility<TypedFactoryFacility>();
|
||||||
|
_container.Install(FromAssembly.InThisApplication());
|
||||||
|
_container.Install(FromAssembly.Named("Filtration.Parser"));
|
||||||
|
|
||||||
|
var mainWindow = _container.Resolve<IMainWindow>();
|
||||||
|
mainWindow.Show();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,197 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||||
|
<PropertyGroup>
|
||||||
|
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||||
|
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||||
|
<ProjectGuid>{3AB98B6E-05DB-44FA-9DAD-584AA88F0739}</ProjectGuid>
|
||||||
|
<OutputType>WinExe</OutputType>
|
||||||
|
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||||
|
<RootNamespace>Filtration.ItemFilterPreview</RootNamespace>
|
||||||
|
<AssemblyName>Filtration.ItemFilterPreview</AssemblyName>
|
||||||
|
<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
|
||||||
|
<FileAlignment>512</FileAlignment>
|
||||||
|
<ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
|
||||||
|
<WarningLevel>4</WarningLevel>
|
||||||
|
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
|
||||||
|
<TargetFrameworkProfile />
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||||
|
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||||
|
<DebugSymbols>true</DebugSymbols>
|
||||||
|
<DebugType>full</DebugType>
|
||||||
|
<Optimize>false</Optimize>
|
||||||
|
<OutputPath>bin\Debug\</OutputPath>
|
||||||
|
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||||
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
<WarningLevel>4</WarningLevel>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||||
|
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||||
|
<DebugType>pdbonly</DebugType>
|
||||||
|
<Optimize>true</Optimize>
|
||||||
|
<OutputPath>bin\Release\</OutputPath>
|
||||||
|
<DefineConstants>TRACE</DefineConstants>
|
||||||
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
<WarningLevel>4</WarningLevel>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Reference Include="System" />
|
||||||
|
<Reference Include="System.Configuration" />
|
||||||
|
<Reference Include="System.Data" />
|
||||||
|
<Reference Include="System.Runtime.Remoting" />
|
||||||
|
<Reference Include="System.Web" />
|
||||||
|
<Reference Include="System.Xml" />
|
||||||
|
<Reference Include="Microsoft.CSharp" />
|
||||||
|
<Reference Include="System.Core" />
|
||||||
|
<Reference Include="System.Xml.Linq" />
|
||||||
|
<Reference Include="System.Data.DataSetExtensions" />
|
||||||
|
<Reference Include="System.Net.Http" />
|
||||||
|
<Reference Include="System.Xaml">
|
||||||
|
<RequiredTargetFramework>4.0</RequiredTargetFramework>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="WindowsBase" />
|
||||||
|
<Reference Include="PresentationCore" />
|
||||||
|
<Reference Include="PresentationFramework" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ApplicationDefinition Include="App.xaml">
|
||||||
|
<Generator>MSBuild:Compile</Generator>
|
||||||
|
<SubType>Designer</SubType>
|
||||||
|
</ApplicationDefinition>
|
||||||
|
<Compile Include="Services\BlockItemMatcher.cs" />
|
||||||
|
<Compile Include="Services\ItemFilterProcessor.cs" />
|
||||||
|
<Compile Include="UserControls\DesignTime\DesignTimeItemControl.cs" />
|
||||||
|
<Compile Include="UserControls\ItemControl.xaml.cs">
|
||||||
|
<DependentUpon>ItemControl.xaml</DependentUpon>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="UserControls\ItemSocketsControl.xaml.cs">
|
||||||
|
<DependentUpon>ItemSocketsControl.xaml</DependentUpon>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="UserControls\LootExplosionSceneUserControl.xaml.cs">
|
||||||
|
<DependentUpon>LootExplosionSceneUserControl.xaml</DependentUpon>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="ViewModels\LootExplosionViewModel.cs" />
|
||||||
|
<Compile Include="ViewModels\MainWindowViewModel.cs" />
|
||||||
|
<Compile Include="Views\LootExplosionView.xaml.cs">
|
||||||
|
<DependentUpon>LootExplosionView.xaml</DependentUpon>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="WindsorInstallers\ViewModelsInstaller.cs" />
|
||||||
|
<Compile Include="WindsorInstallers\ViewsInstaller.cs" />
|
||||||
|
<Compile Include="WindsorInstallers\ServicesInstaller.cs" />
|
||||||
|
<Page Include="UserControls\ItemControl.xaml">
|
||||||
|
<SubType>Designer</SubType>
|
||||||
|
<Generator>MSBuild:Compile</Generator>
|
||||||
|
</Page>
|
||||||
|
<Page Include="UserControls\LootExplosionSceneUserControl.xaml">
|
||||||
|
<SubType>Designer</SubType>
|
||||||
|
<Generator>MSBuild:Compile</Generator>
|
||||||
|
</Page>
|
||||||
|
<Page Include="Views\LootExplosionView.xaml">
|
||||||
|
<SubType>Designer</SubType>
|
||||||
|
<Generator>MSBuild:Compile</Generator>
|
||||||
|
</Page>
|
||||||
|
<Page Include="Views\MainWindow.xaml">
|
||||||
|
<Generator>MSBuild:Compile</Generator>
|
||||||
|
<SubType>Designer</SubType>
|
||||||
|
</Page>
|
||||||
|
<Compile Include="App.xaml.cs">
|
||||||
|
<DependentUpon>App.xaml</DependentUpon>
|
||||||
|
<SubType>Code</SubType>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="Views\MainWindow.xaml.cs">
|
||||||
|
<DependentUpon>MainWindow.xaml</DependentUpon>
|
||||||
|
<SubType>Code</SubType>
|
||||||
|
</Compile>
|
||||||
|
<Page Include="UserControls\ItemSocketsControl.xaml">
|
||||||
|
<SubType>Designer</SubType>
|
||||||
|
<Generator>MSBuild:Compile</Generator>
|
||||||
|
</Page>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Compile Include="Properties\AssemblyInfo.cs">
|
||||||
|
<SubType>Code</SubType>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="Properties\Resources.Designer.cs">
|
||||||
|
<AutoGen>True</AutoGen>
|
||||||
|
<DesignTime>True</DesignTime>
|
||||||
|
<DependentUpon>Resources.resx</DependentUpon>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="Properties\Settings.Designer.cs">
|
||||||
|
<AutoGen>True</AutoGen>
|
||||||
|
<DependentUpon>Settings.settings</DependentUpon>
|
||||||
|
<DesignTimeSharedInput>True</DesignTimeSharedInput>
|
||||||
|
</Compile>
|
||||||
|
<EmbeddedResource Include="Properties\Resources.resx">
|
||||||
|
<Generator>ResXFileCodeGenerator</Generator>
|
||||||
|
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
|
||||||
|
</EmbeddedResource>
|
||||||
|
<None Include="Properties\Settings.settings">
|
||||||
|
<Generator>SettingsSingleFileGenerator</Generator>
|
||||||
|
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
|
||||||
|
</None>
|
||||||
|
<AppDesigner Include="Properties\" />
|
||||||
|
<Resource Include="Resources\Fontin-SmallCaps.ttf" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="App.config" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\Filtration.Common\Filtration.Common.csproj">
|
||||||
|
<Project>{8cb44f28-2956-4c2a-9314-72727262edd4}</Project>
|
||||||
|
<Name>Filtration.Common</Name>
|
||||||
|
</ProjectReference>
|
||||||
|
<ProjectReference Include="..\Filtration.ObjectModel\Filtration.ObjectModel.csproj">
|
||||||
|
<Project>{4aac3beb-1dc1-483e-9d11-0e9334e80227}</Project>
|
||||||
|
<Name>Filtration.ObjectModel</Name>
|
||||||
|
</ProjectReference>
|
||||||
|
<ProjectReference Include="..\Filtration.Parser.Interface\Filtration.Parser.Interface.csproj">
|
||||||
|
<Project>{46383f20-02df-48b4-b092-9088fa4acd5a}</Project>
|
||||||
|
<Name>Filtration.Parser.Interface</Name>
|
||||||
|
</ProjectReference>
|
||||||
|
<ProjectReference Include="..\Filtration.Parser\Filtration.Parser.csproj">
|
||||||
|
<Project>{10a7c2bc-ec6f-4a38-bdda-e35935004c02}</Project>
|
||||||
|
<Name>Filtration.Parser</Name>
|
||||||
|
</ProjectReference>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="Resources\neversink.filter.txt" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="Resources\muldini.txt" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Folder Include="Model\" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="Castle.Core">
|
||||||
|
<Version>4.4.0</Version>
|
||||||
|
</PackageReference>
|
||||||
|
<PackageReference Include="Castle.Windsor">
|
||||||
|
<Version>5.0.0</Version>
|
||||||
|
</PackageReference>
|
||||||
|
<PackageReference Include="CommonServiceLocator">
|
||||||
|
<Version>2.0.4</Version>
|
||||||
|
</PackageReference>
|
||||||
|
<PackageReference Include="Moq">
|
||||||
|
<Version>4.10.1</Version>
|
||||||
|
</PackageReference>
|
||||||
|
<PackageReference Include="MvvmLightLibs">
|
||||||
|
<Version>5.4.1.1</Version>
|
||||||
|
</PackageReference>
|
||||||
|
<PackageReference Include="System.Threading.Tasks.Extensions">
|
||||||
|
<Version>4.5.2</Version>
|
||||||
|
</PackageReference>
|
||||||
|
<PackageReference Include="System.ValueTuple">
|
||||||
|
<Version>4.5.0</Version>
|
||||||
|
</PackageReference>
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||||
|
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||||
|
Other similar extension points exist, see Microsoft.Common.targets.
|
||||||
|
<Target Name="BeforeBuild">
|
||||||
|
</Target>
|
||||||
|
<Target Name="AfterBuild">
|
||||||
|
</Target>
|
||||||
|
-->
|
||||||
|
</Project>
|
|
@ -0,0 +1,59 @@
|
||||||
|
using System.Reflection;
|
||||||
|
using System.Resources;
|
||||||
|
using System.Runtime.CompilerServices;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
using System.Windows;
|
||||||
|
|
||||||
|
// General Information about an assembly is controlled through the following
|
||||||
|
// set of attributes. Change these attribute values to modify the information
|
||||||
|
// associated with an assembly.
|
||||||
|
[assembly: AssemblyTitle("Filtration.ItemFilterPreview")]
|
||||||
|
[assembly: AssemblyDescription("")]
|
||||||
|
[assembly: AssemblyConfiguration("")]
|
||||||
|
[assembly: AssemblyCompany("")]
|
||||||
|
[assembly: AssemblyProduct("Filtration.ItemFilterPreview")]
|
||||||
|
[assembly: AssemblyCopyright("Copyright © 2015")]
|
||||||
|
[assembly: AssemblyTrademark("")]
|
||||||
|
[assembly: AssemblyCulture("")]
|
||||||
|
|
||||||
|
// Setting ComVisible to false makes the types in this assembly not visible
|
||||||
|
// to COM components. If you need to access a type in this assembly from
|
||||||
|
// COM, set the ComVisible attribute to true on that type.
|
||||||
|
[assembly: ComVisible(false)]
|
||||||
|
|
||||||
|
//In order to begin building localizable applications, set
|
||||||
|
//<UICulture>CultureYouAreCodingWith</UICulture> in your .csproj file
|
||||||
|
//inside a <PropertyGroup>. For example, if you are using US english
|
||||||
|
//in your source files, set the <UICulture> to en-US. Then uncomment
|
||||||
|
//the NeutralResourceLanguage attribute below. Update the "en-US" in
|
||||||
|
//the line below to match the UICulture setting in the project file.
|
||||||
|
|
||||||
|
//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]
|
||||||
|
|
||||||
|
|
||||||
|
[assembly: ThemeInfo(
|
||||||
|
ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located
|
||||||
|
//(used if a resource is not found in the page,
|
||||||
|
// or application resource dictionaries)
|
||||||
|
ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located
|
||||||
|
//(used if a resource is not found in the page,
|
||||||
|
// app, or any theme specific resource dictionaries)
|
||||||
|
)]
|
||||||
|
|
||||||
|
|
||||||
|
// Version information for an assembly consists of the following four values:
|
||||||
|
//
|
||||||
|
// Major Version
|
||||||
|
// Minor Version
|
||||||
|
// Build Number
|
||||||
|
// Revision
|
||||||
|
//
|
||||||
|
// You can specify all the values or you can default the Build and Revision Numbers
|
||||||
|
// by using the '*' as shown below:
|
||||||
|
// [assembly: AssemblyVersion("1.0.*")]
|
||||||
|
[assembly: AssemblyVersion("1.0.0.0")]
|
||||||
|
[assembly: AssemblyFileVersion("1.0.0.0")]
|
||||||
|
|
||||||
|
|
||||||
|
[assembly: InternalsVisibleTo("Filtration.ItemFilterPreview.Tests")]
|
||||||
|
[assembly: InternalsVisibleTo("DynamicProxyGenAssembly2")]
|
|
@ -0,0 +1,100 @@
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// <auto-generated>
|
||||||
|
// This code was generated by a tool.
|
||||||
|
// Runtime Version:4.0.30319.42000
|
||||||
|
//
|
||||||
|
// Changes to this file may cause incorrect behavior and will be lost if
|
||||||
|
// the code is regenerated.
|
||||||
|
// </auto-generated>
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
namespace Filtration.ItemFilterPreview.Properties {
|
||||||
|
using System;
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// A strongly-typed resource class, for looking up localized strings, etc.
|
||||||
|
/// </summary>
|
||||||
|
// This class was auto-generated by the StronglyTypedResourceBuilder
|
||||||
|
// class via a tool like ResGen or Visual Studio.
|
||||||
|
// To add or remove a member, edit your .ResX file then rerun ResGen
|
||||||
|
// with the /str option, or rebuild your VS project.
|
||||||
|
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
|
||||||
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||||
|
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||||
|
internal class Resources {
|
||||||
|
|
||||||
|
private static global::System.Resources.ResourceManager resourceMan;
|
||||||
|
|
||||||
|
private static global::System.Globalization.CultureInfo resourceCulture;
|
||||||
|
|
||||||
|
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
|
||||||
|
internal Resources() {
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Returns the cached ResourceManager instance used by this class.
|
||||||
|
/// </summary>
|
||||||
|
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
||||||
|
internal static global::System.Resources.ResourceManager ResourceManager {
|
||||||
|
get {
|
||||||
|
if (object.ReferenceEquals(resourceMan, null)) {
|
||||||
|
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Filtration.ItemFilterPreview.Properties.Resources", typeof(Resources).Assembly);
|
||||||
|
resourceMan = temp;
|
||||||
|
}
|
||||||
|
return resourceMan;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Overrides the current thread's CurrentUICulture property for all
|
||||||
|
/// resource lookups using this strongly typed resource class.
|
||||||
|
/// </summary>
|
||||||
|
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
||||||
|
internal static global::System.Globalization.CultureInfo Culture {
|
||||||
|
get {
|
||||||
|
return resourceCulture;
|
||||||
|
}
|
||||||
|
set {
|
||||||
|
resourceCulture = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to ###############################################################################
|
||||||
|
///################ Path of Exile Item Filter - Script by Muldini ################
|
||||||
|
///###############################################################################
|
||||||
|
///############ http://www.pathofexile.com/forum/view-thread/1259059 #############
|
||||||
|
///
|
||||||
|
///
|
||||||
|
///
|
||||||
|
///
|
||||||
|
///###############################################################################
|
||||||
|
///### Overview ##################################################################
|
||||||
|
///################## [rest of string was truncated]";.
|
||||||
|
/// </summary>
|
||||||
|
internal static string muldini {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("muldini", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to #---------------------------------------------------------------------------------------------------------------
|
||||||
|
///# NeverSink's Indepth Loot Filter
|
||||||
|
///# VERSION 3.0 - Full
|
||||||
|
///#---------------------------------------------------------------------------------------------------------------
|
||||||
|
///#
|
||||||
|
///# You can always find the latest version here:
|
||||||
|
///# http://pastebin.com/Af00CbhA
|
||||||
|
///# Forum discussion thread. You can post question and feedback here:
|
||||||
|
///# http://www.pathofexile.com/forum/view-thread/1246208/page/1
|
||||||
|
///# Please use [rest of string was truncated]";.
|
||||||
|
/// </summary>
|
||||||
|
internal static string neversinkfilter {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("neversinkfilter", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,127 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<root>
|
||||||
|
<!--
|
||||||
|
Microsoft ResX Schema
|
||||||
|
|
||||||
|
Version 2.0
|
||||||
|
|
||||||
|
The primary goals of this format is to allow a simple XML format
|
||||||
|
that is mostly human readable. The generation and parsing of the
|
||||||
|
various data types are done through the TypeConverter classes
|
||||||
|
associated with the data types.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
... ado.net/XML headers & schema ...
|
||||||
|
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||||
|
<resheader name="version">2.0</resheader>
|
||||||
|
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||||
|
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||||
|
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||||
|
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||||
|
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||||
|
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||||
|
</data>
|
||||||
|
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||||
|
<comment>This is a comment</comment>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
There are any number of "resheader" rows that contain simple
|
||||||
|
name/value pairs.
|
||||||
|
|
||||||
|
Each data row contains a name, and value. The row also contains a
|
||||||
|
type or mimetype. Type corresponds to a .NET class that support
|
||||||
|
text/value conversion through the TypeConverter architecture.
|
||||||
|
Classes that don't support this are serialized and stored with the
|
||||||
|
mimetype set.
|
||||||
|
|
||||||
|
The mimetype is used for serialized objects, and tells the
|
||||||
|
ResXResourceReader how to depersist the object. This is currently not
|
||||||
|
extensible. For a given mimetype the value must be set accordingly:
|
||||||
|
|
||||||
|
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||||
|
that the ResXResourceWriter will generate, however the reader can
|
||||||
|
read any of the formats listed below.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.binary.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.soap.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||||
|
value : The object must be serialized into a byte array
|
||||||
|
: using a System.ComponentModel.TypeConverter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
-->
|
||||||
|
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||||
|
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||||
|
<xsd:element name="root" msdata:IsDataSet="true">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:choice maxOccurs="unbounded">
|
||||||
|
<xsd:element name="metadata">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="assembly">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:attribute name="alias" type="xsd:string" />
|
||||||
|
<xsd:attribute name="name" type="xsd:string" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="data">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="resheader">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:choice>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:schema>
|
||||||
|
<resheader name="resmimetype">
|
||||||
|
<value>text/microsoft-resx</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="version">
|
||||||
|
<value>2.0</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="reader">
|
||||||
|
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="writer">
|
||||||
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||||
|
<data name="muldini" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||||
|
<value>..\Resources\muldini.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252</value>
|
||||||
|
</data>
|
||||||
|
<data name="neversinkfilter" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||||
|
<value>..\Resources\neversink.filter.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252</value>
|
||||||
|
</data>
|
||||||
|
</root>
|
|
@ -0,0 +1,26 @@
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// <auto-generated>
|
||||||
|
// This code was generated by a tool.
|
||||||
|
// Runtime Version:4.0.30319.42000
|
||||||
|
//
|
||||||
|
// Changes to this file may cause incorrect behavior and will be lost if
|
||||||
|
// the code is regenerated.
|
||||||
|
// </auto-generated>
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
namespace Filtration.ItemFilterPreview.Properties {
|
||||||
|
|
||||||
|
|
||||||
|
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||||
|
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "14.0.0.0")]
|
||||||
|
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
|
||||||
|
|
||||||
|
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
|
||||||
|
|
||||||
|
public static Settings Default {
|
||||||
|
get {
|
||||||
|
return defaultInstance;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,7 @@
|
||||||
|
<?xml version='1.0' encoding='utf-8'?>
|
||||||
|
<SettingsFile xmlns="uri:settings" CurrentProfile="(Default)">
|
||||||
|
<Profiles>
|
||||||
|
<Profile Name="(Default)" />
|
||||||
|
</Profiles>
|
||||||
|
<Settings />
|
||||||
|
</SettingsFile>
|
Binary file not shown.
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,155 @@
|
||||||
|
using System.Linq;
|
||||||
|
using Filtration.ObjectModel;
|
||||||
|
using Filtration.ObjectModel.BlockItemBaseTypes;
|
||||||
|
using Filtration.ObjectModel.BlockItemTypes;
|
||||||
|
|
||||||
|
namespace Filtration.ItemFilterPreview.Services
|
||||||
|
{
|
||||||
|
internal interface IBlockItemMatcher
|
||||||
|
{
|
||||||
|
bool ItemBlockMatch(IItemFilterBlock block, IItem item);
|
||||||
|
bool ItemBlockItemMatch(IItemFilterBlockItem blockItem, IItem item);
|
||||||
|
}
|
||||||
|
|
||||||
|
internal class BlockItemMatcher : IBlockItemMatcher
|
||||||
|
{
|
||||||
|
public bool ItemBlockMatch(IItemFilterBlock block, IItem item)
|
||||||
|
{
|
||||||
|
|
||||||
|
var match = block.BlockItems
|
||||||
|
.Where(blockItem => !(blockItem is IAudioVisualBlockItem) && !(blockItem is ActionBlockItem))
|
||||||
|
.All(blockItem => ItemBlockItemMatch(blockItem, item));
|
||||||
|
|
||||||
|
return match;
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool ItemBlockItemMatch(IItemFilterBlockItem blockItem, IItem item)
|
||||||
|
{
|
||||||
|
var blockItemType = blockItem.GetType();
|
||||||
|
|
||||||
|
if (blockItemType == typeof (BaseTypeBlockItem))
|
||||||
|
return BaseTypeBlockItemMatch((BaseTypeBlockItem)blockItem, item);
|
||||||
|
|
||||||
|
if (blockItemType == typeof (ClassBlockItem))
|
||||||
|
return ClassBlockItemMatch((ClassBlockItem) blockItem, item);
|
||||||
|
|
||||||
|
if (blockItemType == typeof(DropLevelBlockItem))
|
||||||
|
return DropLevelBlockItemMatch((DropLevelBlockItem)blockItem, item);
|
||||||
|
|
||||||
|
if (blockItemType == typeof(HeightBlockItem))
|
||||||
|
return HeightBlockItemMatch((HeightBlockItem)blockItem, item);
|
||||||
|
|
||||||
|
if (blockItemType == typeof(ItemLevelBlockItem))
|
||||||
|
return ItemLevelBlockItemMatch((ItemLevelBlockItem)blockItem, item);
|
||||||
|
|
||||||
|
if (blockItemType == typeof(LinkedSocketsBlockItem))
|
||||||
|
return LinkedSocketsBlockItemMatch((LinkedSocketsBlockItem)blockItem, item);
|
||||||
|
|
||||||
|
if (blockItemType == typeof(QualityBlockItem))
|
||||||
|
return QualityBlockItemMatch((QualityBlockItem)blockItem, item);
|
||||||
|
|
||||||
|
if (blockItemType == typeof(RarityBlockItem))
|
||||||
|
return RarityBlockItemMatch((RarityBlockItem)blockItem, item);
|
||||||
|
|
||||||
|
if (blockItemType == typeof(SocketsBlockItem))
|
||||||
|
return SocketsBlockItemMatch((SocketsBlockItem)blockItem, item);
|
||||||
|
|
||||||
|
if (blockItemType == typeof(WidthBlockItem))
|
||||||
|
return WidthBlockItemMatch((WidthBlockItem)blockItem, item);
|
||||||
|
|
||||||
|
if (blockItemType == typeof(SocketGroupBlockItem))
|
||||||
|
return SocketGroupBlockItemMatch((SocketGroupBlockItem)blockItem, item);
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static bool BaseTypeBlockItemMatch(BaseTypeBlockItem baseTypeBlockItem, IItem item)
|
||||||
|
{
|
||||||
|
return baseTypeBlockItem.Items.Any(b => item.BaseType.StartsWith(b));
|
||||||
|
}
|
||||||
|
|
||||||
|
private static bool ClassBlockItemMatch(ClassBlockItem classBlockItem, IItem item)
|
||||||
|
{
|
||||||
|
return classBlockItem.Items.Any(c => item.ItemClass.Contains(c));
|
||||||
|
}
|
||||||
|
|
||||||
|
private static bool DropLevelBlockItemMatch(DropLevelBlockItem dropLevelBlockItem, IItem item)
|
||||||
|
{
|
||||||
|
return NumericFilterPredicateBlockItemMatch(dropLevelBlockItem, item.DropLevel);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static bool HeightBlockItemMatch(HeightBlockItem heightBlockItem, IItem item)
|
||||||
|
{
|
||||||
|
return NumericFilterPredicateBlockItemMatch(heightBlockItem, item.Height);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static bool ItemLevelBlockItemMatch(ItemLevelBlockItem itemLevelBlockItem, IItem item)
|
||||||
|
{
|
||||||
|
return NumericFilterPredicateBlockItemMatch(itemLevelBlockItem, item.ItemLevel);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static bool LinkedSocketsBlockItemMatch(LinkedSocketsBlockItem linkedSocketsBlockItem, IItem item)
|
||||||
|
{
|
||||||
|
return NumericFilterPredicateBlockItemMatch(linkedSocketsBlockItem, item.LinkedSockets);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static bool QualityBlockItemMatch(QualityBlockItem qualityBlockItem, IItem item)
|
||||||
|
{
|
||||||
|
return NumericFilterPredicateBlockItemMatch(qualityBlockItem, item.Quality);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static bool RarityBlockItemMatch(RarityBlockItem qualityBlockItem, IItem item)
|
||||||
|
{
|
||||||
|
return NumericFilterPredicateBlockItemMatch(qualityBlockItem, (int)item.ItemRarity);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static bool SocketsBlockItemMatch(SocketsBlockItem socketsBlockItem, IItem item)
|
||||||
|
{
|
||||||
|
return NumericFilterPredicateBlockItemMatch(socketsBlockItem, item.SocketCount);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static bool WidthBlockItemMatch(WidthBlockItem widthBlockItem, IItem item)
|
||||||
|
{
|
||||||
|
return NumericFilterPredicateBlockItemMatch(widthBlockItem, item.Width);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static bool SocketGroupBlockItemMatch(SocketGroupBlockItem socketGroupBlockItem, IItem item)
|
||||||
|
{
|
||||||
|
|
||||||
|
foreach (var blockItemSocketGroup in socketGroupBlockItem.SocketGroups) // for each group of sockets in the block item
|
||||||
|
{
|
||||||
|
foreach (var itemLinkedSocketGroup in item.LinkedSocketGroups) // for each linked socket group in the item
|
||||||
|
{
|
||||||
|
if (SocketGroupHasRequiredSocketColors(itemLinkedSocketGroup, blockItemSocketGroup))
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static bool SocketGroupHasRequiredSocketColors(SocketGroup itemLinkedSocketGroup, SocketGroup blockItemSocketGroup)
|
||||||
|
{
|
||||||
|
|
||||||
|
var blockSocketGroupColorCounts = blockItemSocketGroup.GroupBy(i => i.Color, (key, values) => new { SocketColor = key, Count = values.Count() }).ToList();
|
||||||
|
var itemSocketGroupColorCounts = itemLinkedSocketGroup.GroupBy(i => i.Color, (key, values) => new {SocketColor = key, Count = values.Count()}).ToList();
|
||||||
|
|
||||||
|
foreach (var blockItemSocketColorCount in blockSocketGroupColorCounts)
|
||||||
|
{
|
||||||
|
var match = itemSocketGroupColorCounts.FirstOrDefault(i => i.SocketColor == blockItemSocketColorCount.SocketColor && i.Count >= blockItemSocketColorCount.Count);
|
||||||
|
if (match == null)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static bool NumericFilterPredicateBlockItemMatch<T>(T numericFilterPredicateBlockItem, int matchValue) where T : NumericFilterPredicateBlockItem
|
||||||
|
{
|
||||||
|
return numericFilterPredicateBlockItem.FilterPredicate.CompareUsing(matchValue);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,48 @@
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Diagnostics;
|
||||||
|
using System.Linq;
|
||||||
|
using Filtration.ObjectModel;
|
||||||
|
|
||||||
|
namespace Filtration.ItemFilterPreview.Services
|
||||||
|
{
|
||||||
|
internal interface IItemFilterProcessor
|
||||||
|
{
|
||||||
|
List<IFilteredItem> ProcessItemsAgainstItemFilterScript(IItemFilterScript itemFilterScript, IEnumerable<IItem> items);
|
||||||
|
}
|
||||||
|
|
||||||
|
internal class ItemFilterProcessor : IItemFilterProcessor
|
||||||
|
{
|
||||||
|
private readonly IBlockItemMatcher _blockItemMatcher;
|
||||||
|
|
||||||
|
public ItemFilterProcessor(IBlockItemMatcher blockItemMatcher)
|
||||||
|
{
|
||||||
|
_blockItemMatcher = blockItemMatcher;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<IFilteredItem> ProcessItemsAgainstItemFilterScript(IItemFilterScript itemFilterScript, IEnumerable<IItem> items)
|
||||||
|
{
|
||||||
|
var overallsw = Stopwatch.StartNew();
|
||||||
|
|
||||||
|
var filteredItems = new List<IFilteredItem>();
|
||||||
|
|
||||||
|
var sw = Stopwatch.StartNew();
|
||||||
|
foreach (var item in items)
|
||||||
|
{
|
||||||
|
sw.Restart();
|
||||||
|
|
||||||
|
var matchedBlock = itemFilterScript.ItemFilterBlocks
|
||||||
|
.OfType<IItemFilterBlock>()
|
||||||
|
.FirstOrDefault(block => _blockItemMatcher.ItemBlockMatch(block, item));
|
||||||
|
|
||||||
|
filteredItems.Add(new FilteredItem(item, matchedBlock));
|
||||||
|
|
||||||
|
Debug.WriteLine("Processed Item in {0}ms", sw.ElapsedMilliseconds);
|
||||||
|
}
|
||||||
|
sw.Stop();
|
||||||
|
|
||||||
|
overallsw.Stop();
|
||||||
|
Debug.WriteLine("Total processing time: {0}ms", overallsw.ElapsedMilliseconds);
|
||||||
|
return filteredItems;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,17 @@
|
||||||
|
using System.Windows.Media;
|
||||||
|
using Filtration.ObjectModel;
|
||||||
|
using Moq;
|
||||||
|
|
||||||
|
namespace Filtration.ItemFilterPreview.UserControls.DesignTime
|
||||||
|
{
|
||||||
|
public class DesignTimeItemControl
|
||||||
|
{
|
||||||
|
public IFilteredItem FilteredItem
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return Mock.Of<IFilteredItem>(f => f.BackgroundColor == Colors.Bisque && f.TextColor == Colors.Maroon && f.BorderColor == Colors.CornflowerBlue && f.FontSize == 15);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,39 @@
|
||||||
|
<UserControl x:Class="Filtration.ItemFilterPreview.UserControls.ItemControl"
|
||||||
|
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"
|
||||||
|
xmlns:designTime="clr-namespace:Filtration.ItemFilterPreview.UserControls.DesignTime"
|
||||||
|
xmlns:converters="clr-namespace:Filtration.Common.Converters;assembly=Filtration.Common"
|
||||||
|
mc:Ignorable="d"
|
||||||
|
d:DataContext="{d:DesignInstance Type=designTime:DesignTimeItemControl, IsDesignTimeCreatable=True}"
|
||||||
|
d:DesignHeight="35" d:DesignWidth="170">
|
||||||
|
<UserControl.Resources>
|
||||||
|
<Style x:Key="PathOfExileFont" TargetType="{x:Type TextBlock}">
|
||||||
|
<Setter Property="FontFamily" Value="pack://application:,,,/resources/#Fontin SmallCaps" />
|
||||||
|
</Style>
|
||||||
|
<converters:ColorToSolidColorBrushConverter x:Key="ColorToSolidColorBrushConverter"/>
|
||||||
|
</UserControl.Resources>
|
||||||
|
<Grid>
|
||||||
|
<Grid.RowDefinitions>
|
||||||
|
<RowDefinition Height="*" />
|
||||||
|
<RowDefinition Height="Auto" />
|
||||||
|
<RowDefinition Height="*" />
|
||||||
|
</Grid.RowDefinitions>
|
||||||
|
<Grid.ColumnDefinitions>
|
||||||
|
<ColumnDefinition Width="*" />
|
||||||
|
<ColumnDefinition Width="Auto" />
|
||||||
|
<ColumnDefinition Width="*" />
|
||||||
|
</Grid.ColumnDefinitions>
|
||||||
|
<Border Grid.Row="1" Grid.Column="1" Margin="3" Padding="4,0,4,0" BorderThickness="1" BorderBrush="{Binding FilteredItem.BorderColor, Converter={StaticResource ColorToSolidColorBrushConverter}}">
|
||||||
|
<Border.Background>
|
||||||
|
<SolidColorBrush Color="{Binding FilteredItem.BackgroundColor}" />
|
||||||
|
</Border.Background>
|
||||||
|
<TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" Text="{Binding FilteredItem.Item.Description}" Style="{StaticResource PathOfExileFont}" FontSize="{Binding FilteredItem.FontSize}">
|
||||||
|
<TextBlock.Foreground>
|
||||||
|
<SolidColorBrush Color="{Binding FilteredItem.TextColor}" />
|
||||||
|
</TextBlock.Foreground>
|
||||||
|
</TextBlock>
|
||||||
|
</Border>
|
||||||
|
</Grid>
|
||||||
|
</UserControl>
|
|
@ -0,0 +1,29 @@
|
||||||
|
using System.Windows;
|
||||||
|
using Filtration.ObjectModel;
|
||||||
|
|
||||||
|
namespace Filtration.ItemFilterPreview.UserControls
|
||||||
|
{
|
||||||
|
public partial class ItemControl
|
||||||
|
{
|
||||||
|
public ItemControl()
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
// ReSharper disable once PossibleNullReferenceException
|
||||||
|
(Content as FrameworkElement).DataContext = this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static readonly DependencyProperty FilteredItemProperty = DependencyProperty.Register(
|
||||||
|
"FilteredItem",
|
||||||
|
typeof (IFilteredItem),
|
||||||
|
typeof (ItemControl),
|
||||||
|
new FrameworkPropertyMetadata()
|
||||||
|
);
|
||||||
|
|
||||||
|
public IFilteredItem FilteredItem
|
||||||
|
{
|
||||||
|
get { return (IFilteredItem)GetValue(FilteredItemProperty); }
|
||||||
|
set { SetValue(FilteredItemProperty, value); }
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,55 @@
|
||||||
|
<UserControl x:Class="Filtration.ItemFilterPreview.UserControls.ItemSocketsControl"
|
||||||
|
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"
|
||||||
|
xmlns:local="clr-namespace:Filtration.ItemFilterPreview.UserControls"
|
||||||
|
mc:Ignorable="d" SizeChanged="ItemSocketsControl_OnSizeChanged" RenderOptions.EdgeMode="Aliased" SnapsToDevicePixels="True"
|
||||||
|
Height="29" Width="17" >
|
||||||
|
<Grid>
|
||||||
|
<Grid.ColumnDefinitions>
|
||||||
|
<ColumnDefinition Width="2*"/>
|
||||||
|
<ColumnDefinition Width="3*"/>
|
||||||
|
<ColumnDefinition Width="2*"/>
|
||||||
|
<ColumnDefinition Width="3*"/>
|
||||||
|
<ColumnDefinition Width="2*"/>
|
||||||
|
<ColumnDefinition Width="3*"/>
|
||||||
|
<ColumnDefinition Width="2*"/>
|
||||||
|
</Grid.ColumnDefinitions>
|
||||||
|
<Grid.RowDefinitions>
|
||||||
|
<RowDefinition Height="2"/>
|
||||||
|
<RowDefinition Height="3"/>
|
||||||
|
<RowDefinition Height="2"/>
|
||||||
|
<RowDefinition Height="4"/>
|
||||||
|
<RowDefinition Height="2"/>
|
||||||
|
<RowDefinition Height="3"/>
|
||||||
|
<RowDefinition Height="2"/>
|
||||||
|
<RowDefinition Height="4"/>
|
||||||
|
<RowDefinition Height="2"/>
|
||||||
|
<RowDefinition Height="3"/>
|
||||||
|
<RowDefinition Height="2"/>
|
||||||
|
</Grid.RowDefinitions>
|
||||||
|
|
||||||
|
<Border Grid.Row="0" Grid.RowSpan="3" Grid.Column="0" Grid.ColumnSpan="3" Background="Tomato" />
|
||||||
|
|
||||||
|
<Border Grid.Row="1" Grid.Column="3" Background="White" />
|
||||||
|
|
||||||
|
<Border Grid.Row="0" Grid.RowSpan="3" Grid.Column="4" Grid.ColumnSpan="3" Background="GreenYellow" />
|
||||||
|
|
||||||
|
<Border Grid.Row="3" Grid.Column="5" Background="White" />
|
||||||
|
|
||||||
|
<Border Grid.Row="4" Grid.RowSpan="3" Grid.Column="4" Grid.ColumnSpan="3" Background="GreenYellow" />
|
||||||
|
|
||||||
|
<Border Grid.Row="5" Grid.Column="3" Background="White" />
|
||||||
|
|
||||||
|
<Border Grid.Row="4" Grid.RowSpan="3" Grid.Column="0" Grid.ColumnSpan="3" Background="CornflowerBlue" />
|
||||||
|
|
||||||
|
<Border Grid.Row="7" Grid.Column="1" Background="White" />
|
||||||
|
|
||||||
|
<Border Grid.Row="8" Grid.RowSpan="3" Grid.Column="0" Grid.ColumnSpan="3" Background="CornflowerBlue" />
|
||||||
|
|
||||||
|
<Border Grid.Row="9" Grid.Column="3" Background="White" />
|
||||||
|
|
||||||
|
<Border Grid.Row="8" Grid.RowSpan="3" Grid.Column="4" Grid.ColumnSpan="3" Background="Tomato" />
|
||||||
|
</Grid>
|
||||||
|
</UserControl>
|
|
@ -0,0 +1,18 @@
|
||||||
|
using System.Windows;
|
||||||
|
|
||||||
|
namespace Filtration.ItemFilterPreview.UserControls
|
||||||
|
{
|
||||||
|
public partial class ItemSocketsControl
|
||||||
|
{
|
||||||
|
public ItemSocketsControl()
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ItemSocketsControl_OnSizeChanged(object sender, SizeChangedEventArgs e)
|
||||||
|
{
|
||||||
|
const double ratio = 2d/3d;
|
||||||
|
Width = Height * ratio;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,29 @@
|
||||||
|
<UserControl x:Class="Filtration.ItemFilterPreview.UserControls.LootExplosionSceneUserControl"
|
||||||
|
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"
|
||||||
|
xmlns:local="clr-namespace:Filtration.ItemFilterPreview.UserControls"
|
||||||
|
xmlns:model="clr-namespace:Filtration.ObjectModel;assembly=Filtration.ObjectModel"
|
||||||
|
mc:Ignorable="d"
|
||||||
|
d:DesignHeight="300" d:DesignWidth="300" d:DataContext="{d:DesignInstance local:LootExplosionSceneUserControl}">
|
||||||
|
<Grid Background="DimGray">
|
||||||
|
<Grid.RowDefinitions>
|
||||||
|
<RowDefinition Height="Auto" />
|
||||||
|
<RowDefinition Height="*"/>
|
||||||
|
</Grid.RowDefinitions>
|
||||||
|
<Button Grid.Row="0" Click="ButtonBase_OnClick">Test Canvas</Button>
|
||||||
|
<ItemsControl Grid.Row="1" ItemsSource="{Binding FilteredItems}" x:Name="FilteredItemsControl" Height="800">
|
||||||
|
<ItemsControl.ItemsPanel>
|
||||||
|
<ItemsPanelTemplate>
|
||||||
|
<Canvas />
|
||||||
|
</ItemsPanelTemplate>
|
||||||
|
</ItemsControl.ItemsPanel>
|
||||||
|
<ItemsControl.ItemTemplate>
|
||||||
|
<DataTemplate DataType="{x:Type model:IFilteredItem}">
|
||||||
|
<local:ItemControl FilteredItem="{Binding}" />
|
||||||
|
</DataTemplate>
|
||||||
|
</ItemsControl.ItemTemplate>
|
||||||
|
</ItemsControl>
|
||||||
|
</Grid>
|
||||||
|
</UserControl>
|
|
@ -0,0 +1,83 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Windows;
|
||||||
|
using System.Windows.Controls;
|
||||||
|
using System.Windows.Data;
|
||||||
|
using System.Windows.Media;
|
||||||
|
using Filtration.ObjectModel;
|
||||||
|
|
||||||
|
namespace Filtration.ItemFilterPreview.UserControls
|
||||||
|
{
|
||||||
|
public partial class LootExplosionSceneUserControl : UserControl
|
||||||
|
{
|
||||||
|
public LootExplosionSceneUserControl()
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static readonly DependencyProperty FilteredItemsProperty = DependencyProperty.Register(
|
||||||
|
"FilteredItems",
|
||||||
|
typeof(IEnumerable<IFilteredItem>),
|
||||||
|
typeof(LootExplosionSceneUserControl),
|
||||||
|
new FrameworkPropertyMetadata()
|
||||||
|
);
|
||||||
|
|
||||||
|
public IEnumerable<IFilteredItem> FilteredItems
|
||||||
|
{
|
||||||
|
get { return (IEnumerable<IFilteredItem>)GetValue(FilteredItemsProperty); }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
SetValue(FilteredItemsProperty, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void LootCanvas_OnSourceUpdated(object sender, DataTransferEventArgs e)
|
||||||
|
{
|
||||||
|
var canvas = sender as Canvas;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ButtonBase_OnClick(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
var canvas = GetItemsPanel(FilteredItemsControl) as Canvas;
|
||||||
|
if (canvas == null) return;
|
||||||
|
var rand = new Random();
|
||||||
|
|
||||||
|
foreach (var child in canvas.Children.OfType<ContentPresenter>())
|
||||||
|
{
|
||||||
|
Canvas.SetLeft(child, rand.Next((int)(canvas.ActualWidth - child.ActualWidth)));
|
||||||
|
Canvas.SetTop(child, rand.Next((int)(canvas.ActualHeight - child.ActualHeight)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static Panel GetItemsPanel(DependencyObject itemsControl)
|
||||||
|
{
|
||||||
|
var itemsPresenter = GetVisualChild<ItemsPresenter>(itemsControl);
|
||||||
|
var itemsPanel = VisualTreeHelper.GetChild(itemsPresenter, 0) as Panel;
|
||||||
|
return itemsPanel;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static T GetVisualChild<T>(DependencyObject parent) where T : Visual
|
||||||
|
{
|
||||||
|
var child = default(T);
|
||||||
|
|
||||||
|
var numVisuals = VisualTreeHelper.GetChildrenCount(parent);
|
||||||
|
for (var i = 0; i < numVisuals; i++)
|
||||||
|
{
|
||||||
|
var v = (Visual)VisualTreeHelper.GetChild(parent, i);
|
||||||
|
child = v as T;
|
||||||
|
if (child == null)
|
||||||
|
{
|
||||||
|
child = GetVisualChild<T>(v);
|
||||||
|
}
|
||||||
|
if (child != null)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return child;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,10 @@
|
||||||
|
namespace Filtration.ItemFilterPreview.ViewModels
|
||||||
|
{
|
||||||
|
internal class LootExplosionViewModel
|
||||||
|
{
|
||||||
|
public LootExplosionViewModel()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,189 @@
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Collections.ObjectModel;
|
||||||
|
using Filtration.ItemFilterPreview.Properties;
|
||||||
|
using Filtration.ItemFilterPreview.Services;
|
||||||
|
using Filtration.ObjectModel;
|
||||||
|
using Filtration.ObjectModel.Enums;
|
||||||
|
using Filtration.Parser.Interface.Services;
|
||||||
|
using GalaSoft.MvvmLight;
|
||||||
|
using GalaSoft.MvvmLight.CommandWpf;
|
||||||
|
|
||||||
|
namespace Filtration.ItemFilterPreview.ViewModels
|
||||||
|
{
|
||||||
|
internal interface IMainWindowViewModel
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
internal class MainWindowViewModel : ViewModelBase, IMainWindowViewModel
|
||||||
|
{
|
||||||
|
private readonly IItemFilterScriptTranslator _itemFilterScriptTranslator;
|
||||||
|
private readonly IItemFilterProcessor _itemFilterProcessor;
|
||||||
|
private IItemFilterScript _itemFilterScript;
|
||||||
|
|
||||||
|
|
||||||
|
public MainWindowViewModel(IItemFilterScriptTranslator itemFilterScriptTranslator, IItemFilterProcessor itemFilterProcessor)
|
||||||
|
{
|
||||||
|
_itemFilterScriptTranslator = itemFilterScriptTranslator;
|
||||||
|
_itemFilterProcessor = itemFilterProcessor;
|
||||||
|
LoadScriptCommand = new RelayCommand(OnLoadScriptCommand);
|
||||||
|
LoadAlternateScriptCommand = new RelayCommand(OnLoadAlternateScriptCommand);
|
||||||
|
ProcessItemFilterCommand = new RelayCommand(OnProcessItemFilterCommand);
|
||||||
|
}
|
||||||
|
|
||||||
|
public RelayCommand LoadScriptCommand { get; private set; }
|
||||||
|
public RelayCommand LoadAlternateScriptCommand { get; private set; }
|
||||||
|
public RelayCommand ProcessItemFilterCommand { get; private set; }
|
||||||
|
|
||||||
|
public IEnumerable<IFilteredItem> FilteredItems
|
||||||
|
{
|
||||||
|
get { return _filteredItems; }
|
||||||
|
private set
|
||||||
|
{
|
||||||
|
_filteredItems = value;
|
||||||
|
RaisePropertyChanged();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnLoadScriptCommand()
|
||||||
|
{
|
||||||
|
_itemFilterScript = _itemFilterScriptTranslator.TranslateStringToItemFilterScript(Resources.neversinkfilter);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnLoadAlternateScriptCommand()
|
||||||
|
{
|
||||||
|
_itemFilterScript = _itemFilterScriptTranslator.TranslateStringToItemFilterScript(Resources.muldini);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnProcessItemFilterCommand()
|
||||||
|
{
|
||||||
|
FilteredItems = _itemFilterProcessor.ProcessItemsAgainstItemFilterScript(_itemFilterScript, TestItems);
|
||||||
|
}
|
||||||
|
|
||||||
|
private readonly List<IItem> TestItems = new List<IItem>
|
||||||
|
{
|
||||||
|
new Item
|
||||||
|
{
|
||||||
|
Description = "Full Plate",
|
||||||
|
BaseType = "Full Plate",
|
||||||
|
ItemClass = "Body Armors",
|
||||||
|
ItemRarity = ItemRarity.Normal,
|
||||||
|
ItemLevel = 66,
|
||||||
|
DropLevel = 28,
|
||||||
|
Height = 3,
|
||||||
|
Width = 2,
|
||||||
|
SocketGroups = new List<SocketGroup> {new SocketGroup(new List<Socket> { new Socket(SocketColor.Red) , new Socket(SocketColor.Red) , new Socket(SocketColor.Red) , new Socket(SocketColor.Red) , new Socket(SocketColor.Red) , new Socket(SocketColor.Red) }, true)}
|
||||||
|
},
|
||||||
|
new Item
|
||||||
|
{
|
||||||
|
Description = "Scroll of Wisdom",
|
||||||
|
BaseType = "Scroll of Wisdom",
|
||||||
|
ItemClass = "Currency",
|
||||||
|
ItemRarity = ItemRarity.Normal,
|
||||||
|
ItemLevel = 75,
|
||||||
|
DropLevel = 1,
|
||||||
|
Height = 1,
|
||||||
|
Width = 1,
|
||||||
|
SocketGroups = new List<SocketGroup>()
|
||||||
|
},
|
||||||
|
new Item
|
||||||
|
{
|
||||||
|
Description = "Unset Ring",
|
||||||
|
BaseType = "Unset Ring",
|
||||||
|
ItemClass = "Rings",
|
||||||
|
ItemRarity = ItemRarity.Rare,
|
||||||
|
ItemLevel = 53,
|
||||||
|
DropLevel = 45,
|
||||||
|
Height = 1,
|
||||||
|
Width = 1,
|
||||||
|
SocketGroups = new List<SocketGroup>()
|
||||||
|
},
|
||||||
|
new Item
|
||||||
|
{
|
||||||
|
Description = "Incinerate",
|
||||||
|
BaseType = "Incinerate",
|
||||||
|
ItemClass = "Active Skill Gems",
|
||||||
|
ItemRarity = ItemRarity.Normal,
|
||||||
|
ItemLevel = 9,
|
||||||
|
DropLevel = 9,
|
||||||
|
Quality = 10,
|
||||||
|
Height = 1,
|
||||||
|
Width = 1,
|
||||||
|
SocketGroups = new List<SocketGroup>()
|
||||||
|
},
|
||||||
|
new Item
|
||||||
|
{
|
||||||
|
Description = "Mirror of Kalandra",
|
||||||
|
BaseType = "Mirror of Kalandra",
|
||||||
|
ItemClass = "Currency",
|
||||||
|
ItemRarity = ItemRarity.Normal,
|
||||||
|
ItemLevel = 77,
|
||||||
|
DropLevel = 1,
|
||||||
|
Height = 1,
|
||||||
|
Width = 1,
|
||||||
|
SocketGroups = new List<SocketGroup>()
|
||||||
|
},
|
||||||
|
new Item
|
||||||
|
{
|
||||||
|
Description = "The Gemcutter",
|
||||||
|
BaseType = "The Gemcutter",
|
||||||
|
ItemClass = "Divination Card",
|
||||||
|
ItemRarity = ItemRarity.Normal,
|
||||||
|
ItemLevel = 1,
|
||||||
|
DropLevel = 72,
|
||||||
|
Height = 1,
|
||||||
|
Width = 1,
|
||||||
|
SocketGroups = new List<SocketGroup>()
|
||||||
|
},
|
||||||
|
new Item
|
||||||
|
{
|
||||||
|
Description = "Thaumetic Sulphite",
|
||||||
|
BaseType = "Thaumetic Sulphite",
|
||||||
|
ItemClass = "Quest Items",
|
||||||
|
ItemRarity = ItemRarity.Normal,
|
||||||
|
ItemLevel = 32,
|
||||||
|
DropLevel = 1,
|
||||||
|
Height = 2,
|
||||||
|
Width = 2,
|
||||||
|
SocketGroups = new List<SocketGroup>()
|
||||||
|
},
|
||||||
|
new Item
|
||||||
|
{
|
||||||
|
Description = "Fishing Rod",
|
||||||
|
BaseType = "Fishing Rod",
|
||||||
|
ItemClass = "Fishing Rods",
|
||||||
|
ItemRarity = ItemRarity.Normal,
|
||||||
|
ItemLevel = 1,
|
||||||
|
DropLevel = 1,
|
||||||
|
Height = 4,
|
||||||
|
Width = 1,
|
||||||
|
SocketGroups = new List<SocketGroup>()
|
||||||
|
},
|
||||||
|
new Item
|
||||||
|
{
|
||||||
|
Description = "Dry Peninsula Map",
|
||||||
|
BaseType = "Dry Peninsula Map",
|
||||||
|
ItemClass = "Maps",
|
||||||
|
ItemRarity = ItemRarity.Magic,
|
||||||
|
ItemLevel = 75,
|
||||||
|
DropLevel = 75,
|
||||||
|
Height = 1,
|
||||||
|
Width = 1,
|
||||||
|
SocketGroups = new List<SocketGroup>()
|
||||||
|
},
|
||||||
|
new Item
|
||||||
|
{
|
||||||
|
Description = "Stone Hammer",
|
||||||
|
BaseType = "Stone Hammer",
|
||||||
|
ItemClass = "One Hand Maces",
|
||||||
|
ItemRarity = ItemRarity.Normal,
|
||||||
|
ItemLevel = 1,
|
||||||
|
DropLevel = 1,
|
||||||
|
Height = 3,
|
||||||
|
Width = 2,
|
||||||
|
SocketGroups = new List<SocketGroup>()
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
private IEnumerable<IFilteredItem> _filteredItems;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,13 @@
|
||||||
|
<UserControl x:Class="Filtration.ItemFilterPreview.Views.LootExplosionView"
|
||||||
|
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"
|
||||||
|
xmlns:local="clr-namespace:Filtration.ItemFilterPreview.Views"
|
||||||
|
mc:Ignorable="d"
|
||||||
|
d:DesignHeight="300" d:DesignWidth="300">
|
||||||
|
|
||||||
|
<Grid>
|
||||||
|
|
||||||
|
</Grid>
|
||||||
|
</UserControl>
|
|
@ -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.ItemFilterPreview.Views
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Interaction logic for LootExplosionView.xaml
|
||||||
|
/// </summary>
|
||||||
|
public partial class LootExplosionView : UserControl
|
||||||
|
{
|
||||||
|
public LootExplosionView()
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,22 @@
|
||||||
|
<Window x:Class="Filtration.ItemFilterPreview.Views.MainWindow"
|
||||||
|
x:ClassModifier="internal"
|
||||||
|
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||||
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
|
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||||
|
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||||
|
xmlns:userControls="clr-namespace:Filtration.ItemFilterPreview.UserControls"
|
||||||
|
xmlns:viewModels="clr-namespace:Filtration.ItemFilterPreview.ViewModels"
|
||||||
|
mc:Ignorable="d"
|
||||||
|
d:DataContext="{d:DesignInstance viewModels:MainWindowViewModel}"
|
||||||
|
Title="MainWindow" Height="960" Width="1280" >
|
||||||
|
<Grid>
|
||||||
|
<StackPanel>
|
||||||
|
<StackPanel Orientation="Horizontal">
|
||||||
|
<Button Command="{Binding LoadScriptCommand}">Load Neversink Script</Button>
|
||||||
|
<Button Command="{Binding LoadAlternateScriptCommand}">Load Muldini Script</Button>
|
||||||
|
</StackPanel>
|
||||||
|
<Button Command="{Binding ProcessItemFilterCommand}">Process Item Filter</Button>
|
||||||
|
<userControls:LootExplosionSceneUserControl FilteredItems="{Binding FilteredItems}" />
|
||||||
|
</StackPanel>
|
||||||
|
</Grid>
|
||||||
|
</Window>
|
|
@ -0,0 +1,18 @@
|
||||||
|
using Filtration.ItemFilterPreview.ViewModels;
|
||||||
|
|
||||||
|
namespace Filtration.ItemFilterPreview.Views
|
||||||
|
{
|
||||||
|
public interface IMainWindow
|
||||||
|
{
|
||||||
|
void Show();
|
||||||
|
}
|
||||||
|
|
||||||
|
internal partial class MainWindow : IMainWindow
|
||||||
|
{
|
||||||
|
public MainWindow(IMainWindowViewModel mainWindowViewModel)
|
||||||
|
{
|
||||||
|
DataContext = mainWindowViewModel;
|
||||||
|
InitializeComponent();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,23 @@
|
||||||
|
using Castle.MicroKernel.Registration;
|
||||||
|
using Castle.MicroKernel.SubSystems.Configuration;
|
||||||
|
using Castle.Windsor;
|
||||||
|
using Filtration.ItemFilterPreview.Services;
|
||||||
|
|
||||||
|
namespace Filtration.ItemFilterPreview.WindsorInstallers
|
||||||
|
{
|
||||||
|
public class ServicesInstaller : IWindsorInstaller
|
||||||
|
{
|
||||||
|
public void Install(IWindsorContainer container, IConfigurationStore store)
|
||||||
|
{
|
||||||
|
container.Register(
|
||||||
|
Component.For<IBlockItemMatcher>()
|
||||||
|
.ImplementedBy<BlockItemMatcher>()
|
||||||
|
.LifeStyle.Singleton);
|
||||||
|
|
||||||
|
container.Register(
|
||||||
|
Component.For<IItemFilterProcessor>()
|
||||||
|
.ImplementedBy<ItemFilterProcessor>()
|
||||||
|
.LifeStyle.Singleton);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,18 @@
|
||||||
|
using Castle.MicroKernel.Registration;
|
||||||
|
using Castle.MicroKernel.SubSystems.Configuration;
|
||||||
|
using Castle.Windsor;
|
||||||
|
using Filtration.ItemFilterPreview.ViewModels;
|
||||||
|
|
||||||
|
namespace Filtration.ItemFilterPreview.WindsorInstallers
|
||||||
|
{
|
||||||
|
public class ViewModelsInstaller : IWindsorInstaller
|
||||||
|
{
|
||||||
|
public void Install(IWindsorContainer container, IConfigurationStore store)
|
||||||
|
{
|
||||||
|
container.Register(
|
||||||
|
Component.For<IMainWindowViewModel>()
|
||||||
|
.ImplementedBy<MainWindowViewModel>()
|
||||||
|
.LifeStyle.Singleton);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,18 @@
|
||||||
|
using Castle.MicroKernel.Registration;
|
||||||
|
using Castle.MicroKernel.SubSystems.Configuration;
|
||||||
|
using Castle.Windsor;
|
||||||
|
using Filtration.ItemFilterPreview.Views;
|
||||||
|
|
||||||
|
namespace Filtration.ItemFilterPreview.WindsorInstallers
|
||||||
|
{
|
||||||
|
public class ViewsInstaller : IWindsorInstaller
|
||||||
|
{
|
||||||
|
public void Install(IWindsorContainer container, IConfigurationStore store)
|
||||||
|
{
|
||||||
|
container.Register(
|
||||||
|
Component.For<IMainWindow>()
|
||||||
|
.ImplementedBy<MainWindow>()
|
||||||
|
.LifeStyle.Singleton);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -9,8 +9,11 @@
|
||||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||||
<RootNamespace>Filtration.ObjectModel.Tests</RootNamespace>
|
<RootNamespace>Filtration.ObjectModel.Tests</RootNamespace>
|
||||||
<AssemblyName>Filtration.ObjectModel.Tests</AssemblyName>
|
<AssemblyName>Filtration.ObjectModel.Tests</AssemblyName>
|
||||||
<TargetFrameworkVersion>v4.5.1</TargetFrameworkVersion>
|
<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
|
||||||
<FileAlignment>512</FileAlignment>
|
<FileAlignment>512</FileAlignment>
|
||||||
|
<TargetFrameworkProfile />
|
||||||
|
<NuGetPackageImportStamp>
|
||||||
|
</NuGetPackageImportStamp>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||||
<DebugSymbols>true</DebugSymbols>
|
<DebugSymbols>true</DebugSymbols>
|
||||||
|
@ -30,14 +33,9 @@
|
||||||
<WarningLevel>4</WarningLevel>
|
<WarningLevel>4</WarningLevel>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Reference Include="Moq">
|
|
||||||
<HintPath>..\packages\Moq.4.2.1506.2016\lib\net40\Moq.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="nunit.framework">
|
|
||||||
<HintPath>..\packages\NUnit.2.6.4\lib\nunit.framework.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="PresentationCore" />
|
<Reference Include="PresentationCore" />
|
||||||
<Reference Include="System" />
|
<Reference Include="System" />
|
||||||
|
<Reference Include="System.Configuration" />
|
||||||
<Reference Include="System.Core" />
|
<Reference Include="System.Core" />
|
||||||
<Reference Include="System.Xml.Linq" />
|
<Reference Include="System.Xml.Linq" />
|
||||||
<Reference Include="System.Data.DataSetExtensions" />
|
<Reference Include="System.Data.DataSetExtensions" />
|
||||||
|
@ -59,9 +57,28 @@
|
||||||
</ProjectReference>
|
</ProjectReference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<None Include="packages.config" />
|
<None Include="app.config" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="Castle.Core">
|
||||||
|
<Version>4.4.0</Version>
|
||||||
|
</PackageReference>
|
||||||
|
<PackageReference Include="Moq">
|
||||||
|
<Version>4.10.1</Version>
|
||||||
|
</PackageReference>
|
||||||
|
<PackageReference Include="NUnit">
|
||||||
|
<Version>3.11.0</Version>
|
||||||
|
</PackageReference>
|
||||||
|
<PackageReference Include="System.Threading.Tasks.Extensions">
|
||||||
|
<Version>4.5.2</Version>
|
||||||
|
</PackageReference>
|
||||||
|
<PackageReference Include="System.ValueTuple">
|
||||||
|
<Version>4.5.0</Version>
|
||||||
|
</PackageReference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup />
|
|
||||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||||
Other similar extension points exist, see Microsoft.Common.targets.
|
Other similar extension points exist, see Microsoft.Common.targets.
|
||||||
|
|
|
@ -6,23 +6,6 @@ namespace Filtration.ObjectModel.Tests
|
||||||
[TestFixture]
|
[TestFixture]
|
||||||
public class TestItemFilterBlock
|
public class TestItemFilterBlock
|
||||||
{
|
{
|
||||||
[Test]
|
|
||||||
public void ItemFilterBlock_BlockCount_ReturnsCorrectNumber()
|
|
||||||
{
|
|
||||||
// Arrange
|
|
||||||
var block = new ItemFilterBlock();
|
|
||||||
block.BlockItems.Add(new ItemLevelBlockItem());
|
|
||||||
block.BlockItems.Add(new ItemLevelBlockItem());
|
|
||||||
block.BlockItems.Add(new ItemLevelBlockItem());
|
|
||||||
block.BlockItems.Add(new ItemLevelBlockItem());
|
|
||||||
|
|
||||||
// Act
|
|
||||||
var count = block.BlockCount(typeof (ItemLevelBlockItem));
|
|
||||||
|
|
||||||
// Assert
|
|
||||||
Assert.AreEqual(4, count);
|
|
||||||
}
|
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
public void ItemFilterBlock_AddBlockItemAllowed_LessThanMaximum_ReturnsTrue()
|
public void ItemFilterBlock_AddBlockItemAllowed_LessThanMaximum_ReturnsTrue()
|
||||||
{
|
{
|
||||||
|
|
|
@ -9,7 +9,7 @@ namespace Filtration.ObjectModel.Tests
|
||||||
public void ToString_ReturnsFullBlockHierarchy()
|
public void ToString_ReturnsFullBlockHierarchy()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
const string ExpectedResult = "Child 1 Block Group - Child 2 Block Group";
|
const string expectedResult = "Child 1 Block Group - Child 2 Block Group";
|
||||||
|
|
||||||
var rootBlockGroup = new ItemFilterBlockGroup("Root Block Group", null);
|
var rootBlockGroup = new ItemFilterBlockGroup("Root Block Group", null);
|
||||||
var child1BlockGroup = new ItemFilterBlockGroup("Child 1 Block Group", rootBlockGroup);
|
var child1BlockGroup = new ItemFilterBlockGroup("Child 1 Block Group", rootBlockGroup);
|
||||||
|
@ -19,14 +19,14 @@ namespace Filtration.ObjectModel.Tests
|
||||||
var result = child2BlockGroup.ToString();
|
var result = child2BlockGroup.ToString();
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.AreEqual(ExpectedResult, result);
|
Assert.AreEqual(expectedResult, result);
|
||||||
}
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
public void ToString_AddsTildeForAdvancedBlock()
|
public void ToString_AddsTildeForAdvancedBlock()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
const string ExpectedResult = "~Child 1 Block Group - Child 2 Block Group";
|
const string expectedResult = "~Child 1 Block Group - Child 2 Block Group";
|
||||||
|
|
||||||
var rootBlockGroup = new ItemFilterBlockGroup("Root Block Group", null);
|
var rootBlockGroup = new ItemFilterBlockGroup("Root Block Group", null);
|
||||||
var child1BlockGroup = new ItemFilterBlockGroup("Child 1 Block Group", rootBlockGroup, true);
|
var child1BlockGroup = new ItemFilterBlockGroup("Child 1 Block Group", rootBlockGroup, true);
|
||||||
|
@ -36,7 +36,7 @@ namespace Filtration.ObjectModel.Tests
|
||||||
var result = child2BlockGroup.ToString();
|
var result = child2BlockGroup.ToString();
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.AreEqual(ExpectedResult, result);
|
Assert.AreEqual(expectedResult, result);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,27 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<configuration>
|
||||||
|
<runtime>
|
||||||
|
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||||
|
<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="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>
|
||||||
|
</assemblyBinding>
|
||||||
|
</runtime>
|
||||||
|
</configuration>
|
|
@ -1,5 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<packages>
|
|
||||||
<package id="Moq" version="4.2.1506.2016" targetFramework="net451" />
|
|
||||||
<package id="NUnit" version="2.6.4" targetFramework="net451" />
|
|
||||||
</packages>
|
|
|
@ -4,7 +4,7 @@ using Filtration.ObjectModel.Extensions;
|
||||||
|
|
||||||
namespace Filtration.ObjectModel.BlockItemBaseTypes
|
namespace Filtration.ObjectModel.BlockItemBaseTypes
|
||||||
{
|
{
|
||||||
public class ActionBlockItem : BlockItemBase
|
public sealed class ActionBlockItem : BlockItemBase
|
||||||
{
|
{
|
||||||
private BlockAction _action;
|
private BlockAction _action;
|
||||||
|
|
||||||
|
@ -15,65 +15,33 @@ namespace Filtration.ObjectModel.BlockItemBaseTypes
|
||||||
|
|
||||||
public BlockAction Action
|
public BlockAction Action
|
||||||
{
|
{
|
||||||
get { return _action; }
|
get => _action;
|
||||||
set
|
set
|
||||||
{
|
{
|
||||||
_action = value;
|
_action = value;
|
||||||
|
IsDirty = true;
|
||||||
OnPropertyChanged();
|
OnPropertyChanged();
|
||||||
OnPropertyChanged("SummaryText");
|
OnPropertyChanged(nameof(SummaryText));
|
||||||
OnPropertyChanged("SummaryBackgroundColor");
|
OnPropertyChanged(nameof(SummaryBackgroundColor));
|
||||||
OnPropertyChanged("SummaryTextColor");
|
OnPropertyChanged(nameof(SummaryTextColor));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string OutputText
|
public override string OutputText => Action.GetAttributeDescription();
|
||||||
{
|
|
||||||
get { return Action.GetAttributeDescription(); }
|
|
||||||
}
|
|
||||||
|
|
||||||
public override string PrefixText
|
public override string PrefixText => string.Empty;
|
||||||
{
|
|
||||||
get { return string.Empty; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public override int MaximumAllowed
|
public override int MaximumAllowed => 1;
|
||||||
{
|
|
||||||
get { return 1; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public override string DisplayHeading
|
public override string DisplayHeading => "Action";
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return "Action";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public override string SummaryText
|
public override string SummaryText => Action == BlockAction.Show ? "Show" : "Hide";
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return Action == BlockAction.Show ? "Show" : "Hide";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public override Color SummaryBackgroundColor
|
public override Color SummaryBackgroundColor => Action == BlockAction.Show ? Colors.LimeGreen : Colors.OrangeRed;
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return Action == BlockAction.Show ? Colors.LimeGreen : Colors.OrangeRed;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public override Color SummaryTextColor
|
public override Color SummaryTextColor => Action == BlockAction.Show ? Colors.Black : Colors.White;
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return Action == BlockAction.Show ? Colors.Black : Colors.White;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public override int SortOrder { get { return 0; } }
|
public override BlockItemOrdering SortOrder => BlockItemOrdering.Action;
|
||||||
|
|
||||||
public void ToggleAction()
|
public void ToggleAction()
|
||||||
{
|
{
|
||||||
|
|
|
@ -2,11 +2,14 @@
|
||||||
using System.Runtime.CompilerServices;
|
using System.Runtime.CompilerServices;
|
||||||
using System.Windows.Media;
|
using System.Windows.Media;
|
||||||
using Filtration.ObjectModel.Annotations;
|
using Filtration.ObjectModel.Annotations;
|
||||||
|
using Filtration.ObjectModel.Enums;
|
||||||
|
|
||||||
namespace Filtration.ObjectModel.BlockItemBaseTypes
|
namespace Filtration.ObjectModel.BlockItemBaseTypes
|
||||||
{
|
{
|
||||||
public abstract class BlockItemBase : IItemFilterBlockItem
|
public abstract class BlockItemBase : IItemFilterBlockItem
|
||||||
{
|
{
|
||||||
|
private bool _isDirty;
|
||||||
|
|
||||||
public abstract string PrefixText { get; }
|
public abstract string PrefixText { get; }
|
||||||
public abstract string OutputText { get; }
|
public abstract string OutputText { get; }
|
||||||
public abstract int MaximumAllowed { get; }
|
public abstract int MaximumAllowed { get; }
|
||||||
|
@ -14,7 +17,18 @@ namespace Filtration.ObjectModel.BlockItemBaseTypes
|
||||||
public abstract string SummaryText { get; }
|
public abstract string SummaryText { get; }
|
||||||
public abstract Color SummaryBackgroundColor { get; }
|
public abstract Color SummaryBackgroundColor { get; }
|
||||||
public abstract Color SummaryTextColor { get; }
|
public abstract Color SummaryTextColor { get; }
|
||||||
public abstract int SortOrder { get; }
|
public abstract BlockItemOrdering SortOrder { get; }
|
||||||
|
public string Comment { get; set; }
|
||||||
|
|
||||||
|
public bool IsDirty
|
||||||
|
{
|
||||||
|
get { return _isDirty; }
|
||||||
|
protected set
|
||||||
|
{
|
||||||
|
_isDirty = value;
|
||||||
|
OnPropertyChanged();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public event PropertyChangedEventHandler PropertyChanged;
|
public event PropertyChangedEventHandler PropertyChanged;
|
||||||
|
|
||||||
|
@ -22,7 +36,7 @@ namespace Filtration.ObjectModel.BlockItemBaseTypes
|
||||||
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
|
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
|
||||||
{
|
{
|
||||||
var handler = PropertyChanged;
|
var handler = PropertyChanged;
|
||||||
if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
|
handler?.Invoke(this, new PropertyChangedEventArgs(propertyName));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,38 @@
|
||||||
|
namespace Filtration.ObjectModel.BlockItemBaseTypes
|
||||||
|
{
|
||||||
|
public abstract class BooleanBlockItem : BlockItemBase
|
||||||
|
{
|
||||||
|
private bool _booleanValue;
|
||||||
|
|
||||||
|
protected BooleanBlockItem()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
protected BooleanBlockItem(bool booleanValue)
|
||||||
|
{
|
||||||
|
BooleanValue = booleanValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool BooleanValue
|
||||||
|
{
|
||||||
|
get { return _booleanValue; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_booleanValue = value;
|
||||||
|
IsDirty = true;
|
||||||
|
OnPropertyChanged();
|
||||||
|
OnPropertyChanged(nameof(SummaryText));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string OutputText => PrefixText + " " + BooleanValue;
|
||||||
|
public override string SummaryText => DisplayHeading + " = " + BooleanValue;
|
||||||
|
public override int MaximumAllowed => 1;
|
||||||
|
|
||||||
|
public void ToggleValue()
|
||||||
|
{
|
||||||
|
BooleanValue = !BooleanValue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -4,7 +4,7 @@ using Filtration.ObjectModel.ThemeEditor;
|
||||||
|
|
||||||
namespace Filtration.ObjectModel.BlockItemBaseTypes
|
namespace Filtration.ObjectModel.BlockItemBaseTypes
|
||||||
{
|
{
|
||||||
public abstract class ColorBlockItem : BlockItemBase, IAudioVisualBlockItem
|
public abstract class ColorBlockItem : BlockItemBase, IAudioVisualBlockItem, IBlockItemWithTheme
|
||||||
{
|
{
|
||||||
private Color _color;
|
private Color _color;
|
||||||
private ThemeComponent _themeComponent;
|
private ThemeComponent _themeComponent;
|
||||||
|
@ -18,20 +18,11 @@ namespace Filtration.ObjectModel.BlockItemBaseTypes
|
||||||
Color = color;
|
Color = color;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string OutputText
|
public override string OutputText => PrefixText + " " + +Color.R + " " + Color.G + " "
|
||||||
{
|
+ Color.B + (Color.A != 240 ? " " + Color.A : string.Empty) +
|
||||||
get
|
(ThemeComponent != null ? " # " + ThemeComponent.ComponentName : string.Empty);
|
||||||
{
|
|
||||||
return PrefixText + " " + +Color.R + " " + Color.G + " "
|
|
||||||
+ Color.B + (Color.A < 255 ? " " + Color.A : string.Empty) +
|
|
||||||
(ThemeComponent != null ? " # " + ThemeComponent.ComponentName : string.Empty);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public override string SummaryText
|
public override string SummaryText => string.Empty;
|
||||||
{
|
|
||||||
get { return string.Empty; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public ThemeComponent ThemeComponent
|
public ThemeComponent ThemeComponent
|
||||||
{
|
{
|
||||||
|
@ -56,8 +47,8 @@ namespace Filtration.ObjectModel.BlockItemBaseTypes
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public override Color SummaryBackgroundColor { get { return Colors.Transparent; } }
|
public override Color SummaryBackgroundColor => Colors.Transparent;
|
||||||
public override Color SummaryTextColor { get { return Colors.Transparent; } }
|
public override Color SummaryTextColor => Colors.Transparent;
|
||||||
|
|
||||||
public Color Color
|
public Color Color
|
||||||
{
|
{
|
||||||
|
@ -65,13 +56,14 @@ namespace Filtration.ObjectModel.BlockItemBaseTypes
|
||||||
set
|
set
|
||||||
{
|
{
|
||||||
_color = value;
|
_color = value;
|
||||||
|
IsDirty = true;
|
||||||
OnPropertyChanged();
|
OnPropertyChanged();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnThemeComponentUpdated(object sender, EventArgs e)
|
private void OnThemeComponentUpdated(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
Color = ((ThemeComponent) sender).Color;
|
Color = ((ColorThemeComponent) sender).Color;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnThemeComponentDeleted(object sender, EventArgs e)
|
private void OnThemeComponentDeleted(object sender, EventArgs e)
|
||||||
|
|
|
@ -0,0 +1,53 @@
|
||||||
|
using System;
|
||||||
|
using System.Windows.Media;
|
||||||
|
using Filtration.ObjectModel.ThemeEditor;
|
||||||
|
|
||||||
|
namespace Filtration.ObjectModel.BlockItemBaseTypes
|
||||||
|
{
|
||||||
|
public abstract class ColorBooleanBlockItem : BlockItemBase, IAudioVisualBlockItem
|
||||||
|
{
|
||||||
|
private Color _color;
|
||||||
|
private bool _booleanValue;
|
||||||
|
|
||||||
|
protected ColorBooleanBlockItem()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
protected ColorBooleanBlockItem(Color color, bool booleanValue)
|
||||||
|
{
|
||||||
|
Color = color;
|
||||||
|
BooleanValue = booleanValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string OutputText => PrefixText + " " + +Color.R + " " + Color.G + " "
|
||||||
|
+ Color.B + (Color.A < 255 ? " " + Color.A : string.Empty) +
|
||||||
|
(BooleanValue ? " True" : " False");
|
||||||
|
|
||||||
|
public override string SummaryText => string.Empty;
|
||||||
|
|
||||||
|
public override Color SummaryBackgroundColor => Colors.Transparent;
|
||||||
|
public override Color SummaryTextColor => Colors.Transparent;
|
||||||
|
|
||||||
|
public Color Color
|
||||||
|
{
|
||||||
|
get { return _color; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_color = value;
|
||||||
|
IsDirty = true;
|
||||||
|
OnPropertyChanged();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool BooleanValue
|
||||||
|
{
|
||||||
|
get { return _booleanValue; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_booleanValue = value;
|
||||||
|
IsDirty = true;
|
||||||
|
OnPropertyChanged();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -17,14 +17,11 @@ namespace Filtration.ObjectModel.BlockItemBaseTypes
|
||||||
SecondValue = secondValue;
|
SecondValue = secondValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string OutputText
|
public override string OutputText => PrefixText + " " + Value + " " + SecondValue;
|
||||||
{
|
|
||||||
get { return PrefixText + " " + Value + " " + SecondValue; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public override string SummaryText { get { return string.Empty; } }
|
public override string SummaryText => string.Empty;
|
||||||
public override Color SummaryBackgroundColor { get { return Colors.Transparent; } }
|
public override Color SummaryBackgroundColor => Colors.Transparent;
|
||||||
public override Color SummaryTextColor { get { return Colors.Transparent; } }
|
public override Color SummaryTextColor => Colors.Transparent;
|
||||||
|
|
||||||
public int Value
|
public int Value
|
||||||
{
|
{
|
||||||
|
@ -32,6 +29,7 @@ namespace Filtration.ObjectModel.BlockItemBaseTypes
|
||||||
set
|
set
|
||||||
{
|
{
|
||||||
_value = value;
|
_value = value;
|
||||||
|
IsDirty = true;
|
||||||
OnPropertyChanged();
|
OnPropertyChanged();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -42,6 +40,7 @@ namespace Filtration.ObjectModel.BlockItemBaseTypes
|
||||||
set
|
set
|
||||||
{
|
{
|
||||||
_secondValue = value;
|
_secondValue = value;
|
||||||
|
IsDirty = true;
|
||||||
OnPropertyChanged();
|
OnPropertyChanged();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,90 @@
|
||||||
|
using System;
|
||||||
|
using System.Windows.Media;
|
||||||
|
using Filtration.ObjectModel.Enums;
|
||||||
|
using Filtration.ObjectModel.Extensions;
|
||||||
|
using Filtration.ObjectModel.ThemeEditor;
|
||||||
|
|
||||||
|
namespace Filtration.ObjectModel.BlockItemBaseTypes
|
||||||
|
{
|
||||||
|
public abstract class EffectColorBlockItem : BlockItemBase, IAudioVisualBlockItem, IBlockItemWithTheme
|
||||||
|
{
|
||||||
|
private EffectColor _color;
|
||||||
|
private bool _temporary;
|
||||||
|
private ThemeComponent _themeComponent;
|
||||||
|
|
||||||
|
protected EffectColorBlockItem()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
protected EffectColorBlockItem(EffectColor color, bool temporary)
|
||||||
|
{
|
||||||
|
Color = color;
|
||||||
|
Temporary = temporary;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string OutputText => PrefixText + " " + Color.GetAttributeDescription() +
|
||||||
|
(Temporary ? " " + "Temp" : string.Empty) +
|
||||||
|
(ThemeComponent != null ? " # " + ThemeComponent.ComponentName : string.Empty);
|
||||||
|
|
||||||
|
public override string SummaryText => string.Empty;
|
||||||
|
|
||||||
|
public ThemeComponent ThemeComponent
|
||||||
|
{
|
||||||
|
get { return _themeComponent; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (_themeComponent == value) { return; }
|
||||||
|
|
||||||
|
if (_themeComponent != null)
|
||||||
|
{
|
||||||
|
_themeComponent.ThemeComponentUpdated -= OnThemeComponentUpdated;
|
||||||
|
_themeComponent.ThemeComponentDeleted -= OnThemeComponentDeleted;
|
||||||
|
}
|
||||||
|
if (value != null)
|
||||||
|
{
|
||||||
|
value.ThemeComponentUpdated += OnThemeComponentUpdated;
|
||||||
|
value.ThemeComponentDeleted += OnThemeComponentDeleted;
|
||||||
|
}
|
||||||
|
|
||||||
|
_themeComponent = value;
|
||||||
|
OnPropertyChanged();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public override Color SummaryBackgroundColor => Colors.Transparent;
|
||||||
|
public override Color SummaryTextColor => Colors.Transparent;
|
||||||
|
|
||||||
|
public EffectColor Color
|
||||||
|
{
|
||||||
|
get { return _color; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_color = value;
|
||||||
|
IsDirty = true;
|
||||||
|
OnPropertyChanged();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool Temporary
|
||||||
|
{
|
||||||
|
get { return _temporary; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_temporary = value;
|
||||||
|
IsDirty = true;
|
||||||
|
OnPropertyChanged();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnThemeComponentUpdated(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
Color = ((EffectColorThemeComponent)sender).EffectColor;
|
||||||
|
Temporary = ((EffectColorThemeComponent)sender).Temporary;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnThemeComponentDeleted(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
ThemeComponent = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,103 @@
|
||||||
|
using System;
|
||||||
|
using System.Windows.Media;
|
||||||
|
using Filtration.ObjectModel.Enums;
|
||||||
|
using Filtration.ObjectModel.Extensions;
|
||||||
|
using Filtration.ObjectModel.ThemeEditor;
|
||||||
|
|
||||||
|
namespace Filtration.ObjectModel.BlockItemBaseTypes
|
||||||
|
{
|
||||||
|
public abstract class IconBlockItem : BlockItemBase, IAudioVisualBlockItem, IBlockItemWithTheme
|
||||||
|
{
|
||||||
|
private IconSize _size;
|
||||||
|
private IconColor _color;
|
||||||
|
private IconShape _shape;
|
||||||
|
private ThemeComponent _themeComponent;
|
||||||
|
|
||||||
|
protected IconBlockItem()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
protected IconBlockItem(IconSize size, IconColor color, IconShape shape)
|
||||||
|
{
|
||||||
|
Size = size;
|
||||||
|
Color = color;
|
||||||
|
Shape = shape;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string OutputText => PrefixText + " " + (int)Size + " " + Color.GetAttributeDescription() + " " + Shape.GetAttributeDescription() +
|
||||||
|
(ThemeComponent != null ? " # " + ThemeComponent.ComponentName : string.Empty);
|
||||||
|
|
||||||
|
public override string SummaryText => string.Empty;
|
||||||
|
|
||||||
|
public ThemeComponent ThemeComponent
|
||||||
|
{
|
||||||
|
get { return _themeComponent; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (_themeComponent == value) { return; }
|
||||||
|
|
||||||
|
if (_themeComponent != null)
|
||||||
|
{
|
||||||
|
_themeComponent.ThemeComponentUpdated -= OnThemeComponentUpdated;
|
||||||
|
_themeComponent.ThemeComponentDeleted -= OnThemeComponentDeleted;
|
||||||
|
}
|
||||||
|
if (value != null)
|
||||||
|
{
|
||||||
|
value.ThemeComponentUpdated += OnThemeComponentUpdated;
|
||||||
|
value.ThemeComponentDeleted += OnThemeComponentDeleted;
|
||||||
|
}
|
||||||
|
|
||||||
|
_themeComponent = value;
|
||||||
|
OnPropertyChanged();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public override Color SummaryBackgroundColor => Colors.Transparent;
|
||||||
|
public override Color SummaryTextColor => Colors.Transparent;
|
||||||
|
|
||||||
|
public IconSize Size
|
||||||
|
{
|
||||||
|
get { return _size; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_size = value;
|
||||||
|
IsDirty = true;
|
||||||
|
OnPropertyChanged();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public IconColor Color
|
||||||
|
{
|
||||||
|
get { return _color; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_color = value;
|
||||||
|
IsDirty = true;
|
||||||
|
OnPropertyChanged();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public IconShape Shape
|
||||||
|
{
|
||||||
|
get { return _shape; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_shape = value;
|
||||||
|
IsDirty = true;
|
||||||
|
OnPropertyChanged();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnThemeComponentUpdated(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
Size = ((IconThemeComponent)sender).IconSize;
|
||||||
|
Color = ((IconThemeComponent)sender).IconColor;
|
||||||
|
Shape = ((IconThemeComponent)sender).IconShape;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnThemeComponentDeleted(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
ThemeComponent = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,10 +1,13 @@
|
||||||
using System.Windows.Media;
|
using System;
|
||||||
|
using System.Windows.Media;
|
||||||
|
using Filtration.ObjectModel.ThemeEditor;
|
||||||
|
|
||||||
namespace Filtration.ObjectModel.BlockItemBaseTypes
|
namespace Filtration.ObjectModel.BlockItemBaseTypes
|
||||||
{
|
{
|
||||||
public abstract class IntegerBlockItem : BlockItemBase, IAudioVisualBlockItem
|
public abstract class IntegerBlockItem : BlockItemBase, IAudioVisualBlockItem, IBlockItemWithTheme
|
||||||
{
|
{
|
||||||
private int _value;
|
private int _value;
|
||||||
|
private ThemeComponent _themeComponent;
|
||||||
|
|
||||||
protected IntegerBlockItem()
|
protected IntegerBlockItem()
|
||||||
{
|
{
|
||||||
|
@ -15,26 +18,57 @@ namespace Filtration.ObjectModel.BlockItemBaseTypes
|
||||||
Value = value;
|
Value = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string OutputText
|
public override string OutputText => PrefixText + " " + Value + (ThemeComponent != null ? " # " + ThemeComponent.ComponentName : string.Empty);
|
||||||
{
|
|
||||||
get { return PrefixText + " " + Value; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public override string SummaryText { get { return string.Empty; } }
|
public override string SummaryText => string.Empty;
|
||||||
public override Color SummaryBackgroundColor { get { return Colors.Transparent; } }
|
public override Color SummaryBackgroundColor => Colors.Transparent;
|
||||||
public override Color SummaryTextColor { get { return Colors.Transparent; } }
|
public override Color SummaryTextColor => Colors.Transparent;
|
||||||
|
|
||||||
public abstract int Minimum { get; }
|
public abstract int Minimum { get; }
|
||||||
public abstract int Maximum { get; }
|
public abstract int Maximum { get; }
|
||||||
|
|
||||||
|
public ThemeComponent ThemeComponent
|
||||||
|
{
|
||||||
|
get { return _themeComponent; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (_themeComponent == value) { return; }
|
||||||
|
|
||||||
|
if (_themeComponent != null)
|
||||||
|
{
|
||||||
|
_themeComponent.ThemeComponentUpdated -= OnThemeComponentUpdated;
|
||||||
|
_themeComponent.ThemeComponentDeleted -= OnThemeComponentDeleted;
|
||||||
|
}
|
||||||
|
if (value != null)
|
||||||
|
{
|
||||||
|
value.ThemeComponentUpdated += OnThemeComponentUpdated;
|
||||||
|
value.ThemeComponentDeleted += OnThemeComponentDeleted;
|
||||||
|
}
|
||||||
|
|
||||||
|
_themeComponent = value;
|
||||||
|
OnPropertyChanged();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public int Value
|
public int Value
|
||||||
{
|
{
|
||||||
get { return _value; }
|
get { return _value; }
|
||||||
set
|
set
|
||||||
{
|
{
|
||||||
_value = value;
|
_value = value;
|
||||||
|
IsDirty = true;
|
||||||
OnPropertyChanged();
|
OnPropertyChanged();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void OnThemeComponentUpdated(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
Value = ((IntegerBlockItem)sender).Value;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnThemeComponentDeleted(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
ThemeComponent = null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,16 @@
|
||||||
|
namespace Filtration.ObjectModel.BlockItemBaseTypes
|
||||||
|
{
|
||||||
|
public abstract class NilBlockItem : BlockItemBase
|
||||||
|
{
|
||||||
|
protected NilBlockItem()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string OutputText => PrefixText;
|
||||||
|
public override string SummaryText => DisplayHeading;
|
||||||
|
public override int MaximumAllowed => 1;
|
||||||
|
|
||||||
|
public abstract string Description { get; }
|
||||||
|
}
|
||||||
|
}
|
|
@ -20,14 +20,8 @@ namespace Filtration.ObjectModel.BlockItemBaseTypes
|
||||||
FilterPredicate.PropertyChanged += OnFilterPredicateChanged;
|
FilterPredicate.PropertyChanged += OnFilterPredicateChanged;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string OutputText
|
public override string OutputText => PrefixText + " " + FilterPredicate.PredicateOperator.GetAttributeDescription() +
|
||||||
{
|
" " + FilterPredicate.PredicateOperand;
|
||||||
get
|
|
||||||
{
|
|
||||||
return PrefixText + " " + FilterPredicate.PredicateOperator.GetAttributeDescription() +
|
|
||||||
" " + FilterPredicate.PredicateOperand;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public abstract int Minimum { get; }
|
public abstract int Minimum { get; }
|
||||||
public abstract int Maximum { get; }
|
public abstract int Maximum { get; }
|
||||||
|
@ -44,8 +38,9 @@ namespace Filtration.ObjectModel.BlockItemBaseTypes
|
||||||
|
|
||||||
private void OnFilterPredicateChanged(object sender, EventArgs e)
|
private void OnFilterPredicateChanged(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
OnPropertyChanged("FilterPredicate");
|
IsDirty = true;
|
||||||
OnPropertyChanged("SummaryText");
|
OnPropertyChanged(nameof(FilterPredicate));
|
||||||
|
OnPropertyChanged(nameof(SummaryText));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,87 @@
|
||||||
|
using System;
|
||||||
|
using System.Windows.Media;
|
||||||
|
using Filtration.ObjectModel.ThemeEditor;
|
||||||
|
|
||||||
|
namespace Filtration.ObjectModel.BlockItemBaseTypes
|
||||||
|
{
|
||||||
|
public abstract class StrIntBlockItem : BlockItemBase, IAudioVisualBlockItem, IBlockItemWithTheme
|
||||||
|
{
|
||||||
|
private string _value;
|
||||||
|
private int _secondValue;
|
||||||
|
private ThemeComponent _themeComponent;
|
||||||
|
|
||||||
|
protected StrIntBlockItem()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
protected StrIntBlockItem(string value, int secondValue)
|
||||||
|
{
|
||||||
|
Value = value;
|
||||||
|
SecondValue = secondValue;
|
||||||
|
Value = value;
|
||||||
|
SecondValue = secondValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string OutputText => PrefixText + " " + Value + " " + SecondValue + (ThemeComponent != null ? " # " + ThemeComponent.ComponentName : string.Empty);
|
||||||
|
|
||||||
|
public override string SummaryText => string.Empty;
|
||||||
|
public override Color SummaryBackgroundColor => Colors.Transparent;
|
||||||
|
public override Color SummaryTextColor => Colors.Transparent;
|
||||||
|
|
||||||
|
public ThemeComponent ThemeComponent
|
||||||
|
{
|
||||||
|
get { return _themeComponent; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (_themeComponent == value) { return; }
|
||||||
|
|
||||||
|
if (_themeComponent != null)
|
||||||
|
{
|
||||||
|
_themeComponent.ThemeComponentUpdated -= OnThemeComponentUpdated;
|
||||||
|
_themeComponent.ThemeComponentDeleted -= OnThemeComponentDeleted;
|
||||||
|
}
|
||||||
|
if (value != null)
|
||||||
|
{
|
||||||
|
value.ThemeComponentUpdated += OnThemeComponentUpdated;
|
||||||
|
value.ThemeComponentDeleted += OnThemeComponentDeleted;
|
||||||
|
}
|
||||||
|
|
||||||
|
_themeComponent = value;
|
||||||
|
OnPropertyChanged();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public string Value
|
||||||
|
{
|
||||||
|
get { return _value; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_value = value;
|
||||||
|
IsDirty = true;
|
||||||
|
OnPropertyChanged();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public int SecondValue
|
||||||
|
{
|
||||||
|
get { return _secondValue; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_secondValue = value;
|
||||||
|
IsDirty = true;
|
||||||
|
OnPropertyChanged();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnThemeComponentUpdated(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
Value = ((StrIntBlockItem)sender).Value;
|
||||||
|
SecondValue = ((StrIntBlockItem)sender).SecondValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnThemeComponentDeleted(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
ThemeComponent = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,72 @@
|
||||||
|
using System;
|
||||||
|
using System.Windows.Media;
|
||||||
|
using Filtration.ObjectModel.ThemeEditor;
|
||||||
|
|
||||||
|
namespace Filtration.ObjectModel.BlockItemBaseTypes
|
||||||
|
{
|
||||||
|
public abstract class StringBlockItem : BlockItemBase, IAudioVisualBlockItem, IBlockItemWithTheme
|
||||||
|
{
|
||||||
|
private string _value;
|
||||||
|
private ThemeComponent _themeComponent;
|
||||||
|
|
||||||
|
protected StringBlockItem()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
protected StringBlockItem(string value)
|
||||||
|
{
|
||||||
|
Value = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string OutputText => PrefixText + " \"" + Value + "\""
|
||||||
|
+ (ThemeComponent != null ? " # " + ThemeComponent.ComponentName : string.Empty);
|
||||||
|
|
||||||
|
public override string SummaryText => string.Empty;
|
||||||
|
public override Color SummaryBackgroundColor => Colors.Transparent;
|
||||||
|
public override Color SummaryTextColor => Colors.Transparent;
|
||||||
|
|
||||||
|
public ThemeComponent ThemeComponent
|
||||||
|
{
|
||||||
|
get { return _themeComponent; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (_themeComponent == value) { return; }
|
||||||
|
|
||||||
|
if (_themeComponent != null)
|
||||||
|
{
|
||||||
|
_themeComponent.ThemeComponentUpdated -= OnThemeComponentUpdated;
|
||||||
|
_themeComponent.ThemeComponentDeleted -= OnThemeComponentDeleted;
|
||||||
|
}
|
||||||
|
if (value != null)
|
||||||
|
{
|
||||||
|
value.ThemeComponentUpdated += OnThemeComponentUpdated;
|
||||||
|
value.ThemeComponentDeleted += OnThemeComponentDeleted;
|
||||||
|
}
|
||||||
|
|
||||||
|
_themeComponent = value;
|
||||||
|
OnPropertyChanged();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public string Value
|
||||||
|
{
|
||||||
|
get { return _value; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_value = value;
|
||||||
|
IsDirty = true;
|
||||||
|
OnPropertyChanged();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnThemeComponentUpdated(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
Value = ((StringThemeComponent)sender).Value;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnThemeComponentDeleted(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
ThemeComponent = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -21,8 +21,7 @@ namespace Filtration.ObjectModel.BlockItemBaseTypes
|
||||||
if (enumerable.Count > 0)
|
if (enumerable.Count > 0)
|
||||||
{
|
{
|
||||||
return PrefixText + " " +
|
return PrefixText + " " +
|
||||||
string.Format("\"{0}\"",
|
$"\"{string.Join("\" \"", enumerable.ToArray())}\"";
|
||||||
string.Join("\" \"", enumerable.ToArray()));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return string.Empty;
|
return string.Empty;
|
||||||
|
@ -33,8 +32,9 @@ namespace Filtration.ObjectModel.BlockItemBaseTypes
|
||||||
|
|
||||||
private void OnItemsCollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
|
private void OnItemsCollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
|
||||||
{
|
{
|
||||||
OnPropertyChanged("Items");
|
IsDirty = true;
|
||||||
OnPropertyChanged("SummaryText");
|
OnPropertyChanged(nameof(Items));
|
||||||
|
OnPropertyChanged(nameof(SummaryText));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,23 @@
|
||||||
|
using System.Windows.Media;
|
||||||
|
using Filtration.ObjectModel.BlockItemBaseTypes;
|
||||||
|
using Filtration.ObjectModel.Enums;
|
||||||
|
|
||||||
|
namespace Filtration.ObjectModel.BlockItemTypes
|
||||||
|
{
|
||||||
|
public sealed class AnyEnchantmentBlockItem : BooleanBlockItem
|
||||||
|
{
|
||||||
|
public AnyEnchantmentBlockItem()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public AnyEnchantmentBlockItem(bool booleanValue) : base(booleanValue)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string PrefixText => "AnyEnchantment";
|
||||||
|
public override string DisplayHeading => "Any Enchantment";
|
||||||
|
public override Color SummaryBackgroundColor => Colors.YellowGreen;
|
||||||
|
public override Color SummaryTextColor => Colors.Black;
|
||||||
|
public override BlockItemOrdering SortOrder => BlockItemOrdering.AnyEnchantment;
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,4 +1,5 @@
|
||||||
using System.Windows.Media;
|
using System.Windows.Media;
|
||||||
|
using Filtration.ObjectModel.Enums;
|
||||||
using Filtration.ObjectModel.BlockItemBaseTypes;
|
using Filtration.ObjectModel.BlockItemBaseTypes;
|
||||||
|
|
||||||
namespace Filtration.ObjectModel.BlockItemTypes
|
namespace Filtration.ObjectModel.BlockItemTypes
|
||||||
|
@ -7,33 +8,16 @@ namespace Filtration.ObjectModel.BlockItemTypes
|
||||||
{
|
{
|
||||||
public BackgroundColorBlockItem()
|
public BackgroundColorBlockItem()
|
||||||
{
|
{
|
||||||
|
Color = new Color { A = 240, R = 0, G = 0, B = 0 };
|
||||||
}
|
}
|
||||||
|
|
||||||
public BackgroundColorBlockItem(Color color) : base(color)
|
public BackgroundColorBlockItem(Color color) : base(color)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string PrefixText
|
public override string PrefixText => "SetBackgroundColor";
|
||||||
{
|
public override int MaximumAllowed => 1;
|
||||||
get { return "SetBackgroundColor"; }
|
public override string DisplayHeading => "Background Color";
|
||||||
}
|
public override BlockItemOrdering SortOrder => BlockItemOrdering.SetBackgroundColor;
|
||||||
|
|
||||||
public override int MaximumAllowed
|
|
||||||
{
|
|
||||||
get { return 1; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public override string DisplayHeading
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return "Background Color";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public override int SortOrder
|
|
||||||
{
|
|
||||||
get { return 13; }
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,25 +1,15 @@
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Windows.Media;
|
using System.Windows.Media;
|
||||||
using Filtration.ObjectModel.BlockItemBaseTypes;
|
using Filtration.ObjectModel.BlockItemBaseTypes;
|
||||||
|
using Filtration.ObjectModel.Enums;
|
||||||
|
|
||||||
namespace Filtration.ObjectModel.BlockItemTypes
|
namespace Filtration.ObjectModel.BlockItemTypes
|
||||||
{
|
{
|
||||||
public class BaseTypeBlockItem : StringListBlockItem
|
public class BaseTypeBlockItem : StringListBlockItem
|
||||||
{
|
{
|
||||||
public override string PrefixText { get { return "BaseType"; } }
|
public override string PrefixText => "BaseType";
|
||||||
|
public override int MaximumAllowed => 1;
|
||||||
public override int MaximumAllowed
|
public override string DisplayHeading => "Base Type";
|
||||||
{
|
|
||||||
get { return 1; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public override string DisplayHeading
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return "Base Type";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public override string SummaryText
|
public override string SummaryText
|
||||||
{
|
{
|
||||||
|
@ -27,34 +17,23 @@ namespace Filtration.ObjectModel.BlockItemTypes
|
||||||
{
|
{
|
||||||
if (Items.Count > 0 && Items.Count < 4)
|
if (Items.Count > 0 && Items.Count < 4)
|
||||||
{
|
{
|
||||||
return "Item Base Types: " +
|
return "Base Types: " +
|
||||||
Items.Aggregate(string.Empty, (current, i) => current + i + ", ").TrimEnd(' ').TrimEnd(',');
|
Items.Aggregate(string.Empty, (current, i) => current + i + ", ").TrimEnd(' ').TrimEnd(',');
|
||||||
}
|
}
|
||||||
if (Items.Count >= 4)
|
if (Items.Count >= 4)
|
||||||
{
|
{
|
||||||
var remaining = Items.Count - 3;
|
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 + ", ")
|
.Aggregate(string.Empty, (current, i) => current + i + ", ")
|
||||||
.TrimEnd(' ')
|
.TrimEnd(' ')
|
||||||
.TrimEnd(',') + " (+" + remaining + " more)";
|
.TrimEnd(',') + " (+" + remaining + " more)";
|
||||||
}
|
}
|
||||||
return "Item Base Types: (none)";
|
return "Base Types: (none)";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public override Color SummaryBackgroundColor
|
public override Color SummaryBackgroundColor => Colors.MediumTurquoise;
|
||||||
{
|
public override Color SummaryTextColor => Colors.Black;
|
||||||
get { return Colors.MediumTurquoise; }
|
public override BlockItemOrdering SortOrder => BlockItemOrdering.BaseType;
|
||||||
}
|
|
||||||
|
|
||||||
public override Color SummaryTextColor
|
|
||||||
{
|
|
||||||
get { return Colors.Black; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public override int SortOrder
|
|
||||||
{
|
|
||||||
get { return 11; }
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,23 @@
|
||||||
|
using System.Windows.Media;
|
||||||
|
using Filtration.ObjectModel.BlockItemBaseTypes;
|
||||||
|
using Filtration.ObjectModel.Enums;
|
||||||
|
|
||||||
|
namespace Filtration.ObjectModel.BlockItemTypes
|
||||||
|
{
|
||||||
|
public sealed class BlightedMapBlockItem : BooleanBlockItem
|
||||||
|
{
|
||||||
|
public BlightedMapBlockItem()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public BlightedMapBlockItem(bool booleanValue) : base(booleanValue)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string PrefixText => "BlightedMap";
|
||||||
|
public override string DisplayHeading => "Blighted Map";
|
||||||
|
public override Color SummaryBackgroundColor => Colors.Khaki;
|
||||||
|
public override Color SummaryTextColor => Colors.Black;
|
||||||
|
public override BlockItemOrdering SortOrder => BlockItemOrdering.BligtedMap;
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,5 +1,6 @@
|
||||||
using System.Windows.Media;
|
using System.Windows.Media;
|
||||||
using Filtration.ObjectModel.BlockItemBaseTypes;
|
using Filtration.ObjectModel.BlockItemBaseTypes;
|
||||||
|
using Filtration.ObjectModel.Enums;
|
||||||
|
|
||||||
namespace Filtration.ObjectModel.BlockItemTypes
|
namespace Filtration.ObjectModel.BlockItemTypes
|
||||||
{
|
{
|
||||||
|
@ -7,33 +8,16 @@ namespace Filtration.ObjectModel.BlockItemTypes
|
||||||
{
|
{
|
||||||
public BorderColorBlockItem()
|
public BorderColorBlockItem()
|
||||||
{
|
{
|
||||||
|
Color = new Color {A = 240, R = 0, G = 0, B = 0};
|
||||||
}
|
}
|
||||||
|
|
||||||
public BorderColorBlockItem(Color color) : base(color)
|
public BorderColorBlockItem(Color color) : base(color)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string PrefixText
|
public override string PrefixText => "SetBorderColor";
|
||||||
{
|
public override int MaximumAllowed => 1;
|
||||||
get { return "SetBorderColor"; }
|
public override string DisplayHeading => "Border Color";
|
||||||
}
|
public override BlockItemOrdering SortOrder => BlockItemOrdering.SetBorderColor;
|
||||||
|
|
||||||
public override int MaximumAllowed
|
|
||||||
{
|
|
||||||
get { return 1; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public override string DisplayHeading
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return "Border Color";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public override int SortOrder
|
|
||||||
{
|
|
||||||
get { return 14; }
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,19 +1,15 @@
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Windows.Media;
|
using System.Windows.Media;
|
||||||
using Filtration.ObjectModel.BlockItemBaseTypes;
|
using Filtration.ObjectModel.BlockItemBaseTypes;
|
||||||
|
using Filtration.ObjectModel.Enums;
|
||||||
|
|
||||||
namespace Filtration.ObjectModel.BlockItemTypes
|
namespace Filtration.ObjectModel.BlockItemTypes
|
||||||
{
|
{
|
||||||
public class ClassBlockItem : StringListBlockItem
|
public class ClassBlockItem : StringListBlockItem
|
||||||
{
|
{
|
||||||
public override string PrefixText { get { return "Class"; } }
|
public override string PrefixText => "Class";
|
||||||
|
public override int MaximumAllowed => 1;
|
||||||
public override int MaximumAllowed
|
public override string DisplayHeading => "Class";
|
||||||
{
|
|
||||||
get { return 1; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public override string DisplayHeading { get { return "Class"; } }
|
|
||||||
|
|
||||||
public override string SummaryText
|
public override string SummaryText
|
||||||
{
|
{
|
||||||
|
@ -21,34 +17,23 @@ namespace Filtration.ObjectModel.BlockItemTypes
|
||||||
{
|
{
|
||||||
if (Items.Count > 0 && Items.Count < 4)
|
if (Items.Count > 0 && Items.Count < 4)
|
||||||
{
|
{
|
||||||
return "Item Classes: " +
|
return "Classes: " +
|
||||||
Items.Aggregate(string.Empty, (current, i) => current + i + ", ").TrimEnd(' ').TrimEnd(',');
|
Items.Aggregate(string.Empty, (current, i) => current + i + ", ").TrimEnd(' ').TrimEnd(',');
|
||||||
}
|
}
|
||||||
if (Items.Count >= 4)
|
if (Items.Count >= 4)
|
||||||
{
|
{
|
||||||
var remaining = Items.Count - 3;
|
var remaining = Items.Count - 3;
|
||||||
return "Item Classes: " + Items.Take(3)
|
return "Classes: " + Items.Take(3)
|
||||||
.Aggregate(string.Empty, (current, i) => current + i + ", ")
|
.Aggregate(string.Empty, (current, i) => current + i + ", ")
|
||||||
.TrimEnd(' ')
|
.TrimEnd(' ')
|
||||||
.TrimEnd(',') + " (+" + remaining + " more)";
|
.TrimEnd(',') + " (+" + remaining + " more)";
|
||||||
}
|
}
|
||||||
return "Item Classes: (none)";
|
return "Classes: (none)";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public override Color SummaryBackgroundColor
|
public override Color SummaryBackgroundColor => Colors.MediumSeaGreen;
|
||||||
{
|
public override Color SummaryTextColor => Colors.White;
|
||||||
get { return Colors.MediumSeaGreen; }
|
public override BlockItemOrdering SortOrder => BlockItemOrdering.Class;
|
||||||
}
|
|
||||||
|
|
||||||
public override Color SummaryTextColor
|
|
||||||
{
|
|
||||||
get { return Colors.White; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public override int SortOrder
|
|
||||||
{
|
|
||||||
get { return 10; }
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,23 @@
|
||||||
|
using System.Windows.Media;
|
||||||
|
using Filtration.ObjectModel.BlockItemBaseTypes;
|
||||||
|
using Filtration.ObjectModel.Enums;
|
||||||
|
|
||||||
|
namespace Filtration.ObjectModel.BlockItemTypes
|
||||||
|
{
|
||||||
|
public sealed class CorruptedBlockItem : BooleanBlockItem
|
||||||
|
{
|
||||||
|
public CorruptedBlockItem()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public CorruptedBlockItem(bool booleanValue) : base(booleanValue)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string PrefixText => "Corrupted";
|
||||||
|
public override string DisplayHeading => "Corrupted";
|
||||||
|
public override Color SummaryBackgroundColor => Colors.DarkRed;
|
||||||
|
public override Color SummaryTextColor => Colors.White;
|
||||||
|
public override BlockItemOrdering SortOrder => BlockItemOrdering.Corrupted;
|
||||||
|
}
|
||||||
|
}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue