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
|
||||
## files generated by popular Visual Studio add-ons.
|
||||
##
|
||||
## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
|
||||
|
||||
# User-specific files
|
||||
/.vs/
|
||||
*.suo
|
||||
*.user
|
||||
*.userosscache
|
||||
*.sln.docstates
|
||||
|
||||
# User-specific files (MonoDevelop/Xamarin Studio)
|
||||
*.userprefs
|
||||
|
||||
# Build results
|
||||
[Dd]ebug/
|
||||
[Dd]ebugPublic/
|
||||
[Rr]elease/
|
||||
[Rr]eleases/
|
||||
x64/
|
||||
build/
|
||||
x86/
|
||||
bld/
|
||||
[Bb]in/
|
||||
[Oo]bj/
|
||||
[Ll]og/
|
||||
|
||||
# Roslyn cache directories
|
||||
*.ide/
|
||||
# Visual Studio 2015/2017 cache/options directory
|
||||
.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
|
||||
[Tt]est[Rr]esult*/
|
||||
[Bb]uild[Ll]og.*
|
||||
|
||||
#NUNIT
|
||||
# NUNIT
|
||||
*.VisualState.xml
|
||||
TestResult.xml
|
||||
|
||||
|
@ -32,6 +46,19 @@ TestResult.xml
|
|||
[Rr]eleasePS/
|
||||
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
|
||||
*_p.c
|
||||
*_i.h
|
||||
|
@ -64,14 +91,21 @@ _Chutzpah*
|
|||
ipch/
|
||||
*.aps
|
||||
*.ncb
|
||||
*.opendb
|
||||
*.opensdf
|
||||
*.sdf
|
||||
*.cachefile
|
||||
*.VC.db
|
||||
*.VC.VC.opendb
|
||||
|
||||
# Visual Studio profiler
|
||||
*.psess
|
||||
*.vsp
|
||||
*.vspx
|
||||
*.sap
|
||||
|
||||
# Visual Studio Trace Files
|
||||
*.e2e
|
||||
|
||||
# TFS 2012 Local Workspace
|
||||
$tf/
|
||||
|
@ -84,7 +118,7 @@ _ReSharper*/
|
|||
*.[Rr]e[Ss]harper
|
||||
*.DotSettings.user
|
||||
|
||||
# JustCode is a .NET coding addin-in
|
||||
# JustCode is a .NET coding add-in
|
||||
.JustCode
|
||||
|
||||
# TeamCity is a build add-in
|
||||
|
@ -93,9 +127,18 @@ _TeamCity*
|
|||
# DotCover is a Code Coverage Tool
|
||||
*.dotCover
|
||||
|
||||
# AxoCover is a Code Coverage Tool
|
||||
.axoCover/*
|
||||
!.axoCover/settings.json
|
||||
|
||||
# Visual Studio code coverage results
|
||||
*.coverage
|
||||
*.coveragexml
|
||||
|
||||
# NCrunch
|
||||
_NCrunch_*
|
||||
.*crunch*.local.xml
|
||||
nCrunchTemp_*
|
||||
|
||||
# MightyMoose
|
||||
*.mm.*
|
||||
|
@ -123,42 +166,63 @@ publish/
|
|||
# Publish Web Output
|
||||
*.[Pp]ublish.xml
|
||||
*.azurePubxml
|
||||
## TODO: Comment the next line if you want to checkin your
|
||||
## web deploy settings but do note that will include unencrypted
|
||||
## passwords
|
||||
#*.pubxml
|
||||
# Note: Comment the next line if you want to checkin your web deploy settings,
|
||||
# but database connection strings (with potential passwords) will be unencrypted
|
||||
*.pubxml
|
||||
*.publishproj
|
||||
|
||||
# NuGet Packages Directory
|
||||
packages/*
|
||||
## TODO: If the tool you use requires repositories.config
|
||||
## uncomment the next line
|
||||
#!packages/repositories.config
|
||||
# Microsoft Azure Web App publish settings. Comment the next line if you want to
|
||||
# checkin your Azure Web App publish settings, but sensitive information contained
|
||||
# in these scripts will be unencrypted
|
||||
PublishScripts/
|
||||
|
||||
# Enable "build/" folder in the NuGet Packages folder since
|
||||
# NuGet packages use it for MSBuild targets.
|
||||
# This line needs to be after the ignore of the build folder
|
||||
# (and the packages folder if the line above has been uncommented)
|
||||
!packages/build/
|
||||
# NuGet Packages
|
||||
*.nupkg
|
||||
# The packages folder can be ignored because of Package Restore
|
||||
**/[Pp]ackages/*
|
||||
# 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/
|
||||
*.build.csdef
|
||||
|
||||
# Windows Store app package directory
|
||||
# Microsoft Azure Emulator
|
||||
ecf/
|
||||
rcf/
|
||||
|
||||
# Windows Store app package directories and files
|
||||
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
|
||||
sql/
|
||||
*.Cache
|
||||
ClientBin/
|
||||
[Ss]tyle[Cc]op.*
|
||||
~$*
|
||||
*~
|
||||
*.dbmdl
|
||||
*.dbproj.schemaview
|
||||
*.jfm
|
||||
*.pfx
|
||||
*.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
|
||||
Generated_Code/
|
||||
|
@ -174,6 +238,7 @@ UpgradeLog*.htm
|
|||
# SQL Server files
|
||||
*.mdf
|
||||
*.ldf
|
||||
*.ndf
|
||||
|
||||
# Business Intelligence projects
|
||||
*.rdl.data
|
||||
|
@ -183,8 +248,69 @@ UpgradeLog*.htm
|
|||
# Microsoft Fakes
|
||||
FakesAssemblies/
|
||||
|
||||
# LightSwitch generated files
|
||||
GeneratedArtifacts/
|
||||
_Pvt_Extensions/
|
||||
ModelManifest.xml
|
||||
/Releases
|
||||
# GhostDoc plugin setting file
|
||||
*.GhostDoc.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>
|
||||
<RootNamespace>Filtration.Common.Tests</RootNamespace>
|
||||
<AssemblyName>Filtration.Common.Tests</AssemblyName>
|
||||
<TargetFrameworkVersion>v4.5.1</TargetFrameworkVersion>
|
||||
<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<TargetFrameworkProfile />
|
||||
<NuGetPackageImportStamp>
|
||||
</NuGetPackageImportStamp>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
|
@ -30,13 +33,8 @@
|
|||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<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.Configuration" />
|
||||
<Reference Include="System.Core" />
|
||||
<Reference Include="System.Xml.Linq" />
|
||||
<Reference Include="System.Data.DataSetExtensions" />
|
||||
|
@ -48,7 +46,24 @@
|
|||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
</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>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
<!-- 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.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
// 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
|
||||
{
|
||||
internal class BoolInverterConverter : IValueConverter
|
||||
public class BooleanInverterConverter : IValueConverter
|
||||
{
|
||||
public object Convert(object value, Type targetType, object parameter,
|
||||
CultureInfo culture)
|
||||
|
|
|
@ -13,10 +13,7 @@ namespace Filtration.Common.Converters
|
|||
|
||||
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
|
||||
{
|
||||
if (value != null)
|
||||
return ((SolidColorBrush)value).Color;
|
||||
|
||||
return null;
|
||||
return ((SolidColorBrush) value)?.Color;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3,16 +3,16 @@ using System.ComponentModel;
|
|||
using System.Linq;
|
||||
using System.Windows.Markup;
|
||||
|
||||
namespace Filtration.Extensions
|
||||
namespace Filtration.Common.Extensions
|
||||
{
|
||||
internal class EnumerationExtension : MarkupExtension
|
||||
public class EnumerationExtension : MarkupExtension
|
||||
{
|
||||
private Type _enumType;
|
||||
|
||||
|
||||
public EnumerationExtension(Type enumType)
|
||||
{
|
||||
if (enumType == null) throw new ArgumentNullException("enumType");
|
||||
if (enumType == null) throw new ArgumentNullException(nameof(enumType));
|
||||
|
||||
EnumType = enumType;
|
||||
}
|
|
@ -4,7 +4,7 @@ using System.Windows;
|
|||
using System.Windows.Documents;
|
||||
using System.Windows.Navigation;
|
||||
|
||||
namespace Filtration.Extensions
|
||||
namespace Filtration.Common.Extensions
|
||||
{
|
||||
public static class HyperlinkExtensions
|
||||
{
|
|
@ -9,8 +9,9 @@
|
|||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>Filtration.Common</RootNamespace>
|
||||
<AssemblyName>Filtration.Common</AssemblyName>
|
||||
<TargetFrameworkVersion>v4.5.1</TargetFrameworkVersion>
|
||||
<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<TargetFrameworkProfile />
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
|
@ -30,31 +31,13 @@
|
|||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<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="PresentationFramework" />
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Configuration" />
|
||||
<Reference Include="System.Core" />
|
||||
<Reference Include="System.Windows.Interactivity, Version=4.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\MvvmLightLibs.5.1.1.0\lib\net45\System.Windows.Interactivity.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Runtime.Remoting" />
|
||||
<Reference Include="System.Web" />
|
||||
<Reference Include="System.Xaml" />
|
||||
<Reference Include="System.Xml.Linq" />
|
||||
<Reference Include="System.Data.DataSetExtensions" />
|
||||
|
@ -69,16 +52,20 @@
|
|||
<Compile Include="Converters\ColorToSolidColorBrushConverter.cs" />
|
||||
<Compile Include="Converters\InverseBooleanVisibilityConverter.cs" />
|
||||
<Compile Include="Converters\StringToVisibilityConverter.cs" />
|
||||
<Compile Include="Extensions\EnumerationExtension.cs" />
|
||||
<Compile Include="Extensions\HyperlinkExtensions.cs" />
|
||||
<Compile Include="Messages\ThemeClosedMessage.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="Services\FileSystemService.cs" />
|
||||
<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="WindsorInstallers\ServicesInstaller.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="packages.config" />
|
||||
<None Include="app.config" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\Filtration.ObjectModel\Filtration.ObjectModel.csproj">
|
||||
|
@ -92,6 +79,23 @@
|
|||
<SubType>Designer</SubType>
|
||||
</Page>
|
||||
</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" />
|
||||
<!-- 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.
|
||||
|
|
|
@ -1,10 +1,4 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Filtration.Common.Messages
|
||||
namespace Filtration.Common.Messages
|
||||
{
|
||||
class ThemeClosedMessage
|
||||
{
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
using System;
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
|
||||
namespace Filtration.Common.Services
|
||||
{
|
||||
|
@ -20,7 +21,7 @@ namespace Filtration.Common.Services
|
|||
|
||||
public void WriteFileFromString(string filePath, string inputString)
|
||||
{
|
||||
File.WriteAllText(filePath, inputString);
|
||||
File.WriteAllText(filePath, inputString, Encoding.UTF8);
|
||||
}
|
||||
|
||||
public bool DirectoryExists(string directoryPath)
|
||||
|
|
|
@ -38,7 +38,7 @@
|
|||
<Setter Property="Margin" Value="0,0,5,5" />
|
||||
</Style>
|
||||
<converters:StringToVisibilityConverter x:Key="StringToVisibilityConverter" />
|
||||
<converters:BoolInverterConverter x:Key="BoolInverterConverter" />
|
||||
<converters:BooleanInverterConverter x:Key="BoolInverterConverter" />
|
||||
<converters:ColorToSolidColorBrushConverter x:Key="ColorToSolidColorBrushConverter" />
|
||||
<converters:BooleanVisibilityConverter x:Key="BooleanVisibilityConverter" />
|
||||
<converters:InverseBooleanVisibilityConverter x:Key="InverseBooleanVisibilityConverter" />
|
||||
|
|
|
@ -2,10 +2,11 @@
|
|||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
|
||||
namespace Filtration.Utilities
|
||||
namespace Filtration.Common.Utilities
|
||||
{
|
||||
|
||||
public sealed class LineReader : IEnumerable<string>
|
||||
|
@ -21,6 +22,7 @@ namespace Filtration.Utilities
|
|||
/// the stream into text.
|
||||
/// </summary>
|
||||
/// <param name="streamSource">Data source</param>
|
||||
[DebuggerStepThrough]
|
||||
public LineReader(Func<Stream> streamSource)
|
||||
: this(streamSource, Encoding.UTF8)
|
||||
{
|
||||
|
@ -33,6 +35,7 @@ namespace Filtration.Utilities
|
|||
/// <param name="streamSource">Data source</param>
|
||||
/// <param name="encoding">Encoding to use to decode the stream
|
||||
/// into text</param>
|
||||
[DebuggerStepThrough]
|
||||
public LineReader(Func<Stream> streamSource, Encoding encoding)
|
||||
: this(() => new StreamReader(streamSource(), encoding))
|
||||
{
|
||||
|
@ -44,6 +47,7 @@ namespace Filtration.Utilities
|
|||
/// UTF8 is used to decode the file into text.
|
||||
/// </summary>
|
||||
/// <param name="filename">File to read from</param>
|
||||
[DebuggerStepThrough]
|
||||
public LineReader(string filename)
|
||||
: this(filename, Encoding.UTF8)
|
||||
{
|
||||
|
@ -56,6 +60,7 @@ namespace Filtration.Utilities
|
|||
/// <param name="filename">File to read from</param>
|
||||
/// <param name="encoding">Encoding to use to decode the file
|
||||
/// into text</param>
|
||||
[DebuggerStepThrough]
|
||||
public LineReader(string filename, Encoding encoding)
|
||||
: this(() => new StreamReader(filename, encoding))
|
||||
{
|
||||
|
@ -66,6 +71,7 @@ namespace Filtration.Utilities
|
|||
/// is only called when the enumerator is fetched
|
||||
/// </summary>
|
||||
/// <param name="dataSource">Data source</param>
|
||||
[DebuggerStepThrough]
|
||||
public LineReader(Func<TextReader> dataSource)
|
||||
{
|
||||
_dataSource = dataSource;
|
||||
|
@ -74,6 +80,7 @@ namespace Filtration.Utilities
|
|||
/// <summary>
|
||||
/// Enumerates the data source line by line.
|
||||
/// </summary>
|
||||
[DebuggerStepThrough]
|
||||
public IEnumerator<string> GetEnumerator()
|
||||
{
|
||||
using (TextReader reader = _dataSource())
|
||||
|
@ -89,6 +96,7 @@ namespace Filtration.Utilities
|
|||
/// <summary>
|
||||
/// Enumerates the data source line by line.
|
||||
/// </summary>
|
||||
[DebuggerStepThrough]
|
||||
IEnumerator IEnumerable.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 GalaSoft.MvvmLight;
|
||||
|
||||
namespace Filtration.Common.ViewModels
|
||||
{
|
||||
public class PaneViewModel : FiltrationViewModelBase
|
||||
public class PaneViewModel : ViewModelBase
|
||||
{
|
||||
private 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>
|
||||
<RootNamespace>Filtration.Interface</RootNamespace>
|
||||
<AssemblyName>Filtration.Interface</AssemblyName>
|
||||
<TargetFrameworkVersion>v4.5.1</TargetFrameworkVersion>
|
||||
<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<TargetFrameworkProfile />
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
|
@ -45,6 +46,17 @@
|
|||
<Compile Include="IEditableDocument.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
</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" />
|
||||
<!-- 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.
|
||||
|
|
|
@ -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
|
||||
{
|
||||
bool IsScript { 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
|
||||
{
|
||||
bool IsDirty { get; }
|
||||
void Save();
|
||||
void SaveAs();
|
||||
Task SaveAsync();
|
||||
Task SaveAsAsync();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
using System.Reflection;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
// 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>
|
|
@ -5,12 +5,12 @@ 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.LootExplosionStudio.Tests")]
|
||||
[assembly: AssemblyTitle("Filtration.ItemFilterPreview.Data.Tests")]
|
||||
[assembly: AssemblyDescription("")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("Microsoft")]
|
||||
[assembly: AssemblyProduct("Filtration.LootExplosionStudio.Tests")]
|
||||
[assembly: AssemblyCopyright("Copyright © Microsoft 2015")]
|
||||
[assembly: AssemblyCompany("")]
|
||||
[assembly: AssemblyProduct("Filtration.ItemFilterPreview.Data.Tests")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2016")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
|
||||
|
@ -20,7 +20,7 @@ using System.Runtime.InteropServices;
|
|||
[assembly: ComVisible(false)]
|
||||
|
||||
// The following GUID is for the ID of the typelib if this project is exposed to COM
|
||||
[assembly: Guid("24ce1315-7f86-4389-a63c-22a40baa4c6d")]
|
||||
[assembly: Guid("7a5720de-a41b-47ea-aaab-7c5608ff0c1f")]
|
||||
|
||||
// Version information for an assembly consists of the following four values:
|
||||
//
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,16 +1,19 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<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>{56D0887E-B10D-4F9C-A88E-09CF8E8E06E3}</ProjectGuid>
|
||||
<ProjectGuid>{855B38CC-EEF2-471D-BBBC-EB3E2FF3D387}</ProjectGuid>
|
||||
<OutputType>Library</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>Filtration.LootExplosionStudio.Tests</RootNamespace>
|
||||
<AssemblyName>Filtration.LootExplosionStudio.Tests</AssemblyName>
|
||||
<TargetFrameworkVersion>v4.5.1</TargetFrameworkVersion>
|
||||
<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>
|
||||
|
@ -30,39 +33,41 @@
|
|||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="Moq">
|
||||
<HintPath>..\packages\Moq.4.2.1507.0118\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="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="Services\TestItemFilterBlockFinderService.cs" />
|
||||
<Compile Include="Services\TestLootItemAppearanceService.cs" />
|
||||
<Compile Include="Repositories\IEntityRepository.cs" />
|
||||
<Compile Include="Repositories\ItemSetRepository.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="packages.config" />
|
||||
<None Include="App.config" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\Filtration.LootExplosionStudio\Filtration.LootExplosionStudio.csproj">
|
||||
<Project>{c8009b11-14d0-4421-94f0-9ef4603cb363}</Project>
|
||||
<Name>Filtration.LootExplosionStudio</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="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.
|
|
@ -5,12 +5,12 @@ 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.LootExplosionStudio")]
|
||||
[assembly: AssemblyTitle("Filtration.ItemFilterPreview.Data")]
|
||||
[assembly: AssemblyDescription("")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("Microsoft")]
|
||||
[assembly: AssemblyProduct("Filtration.LootExplosionStudio")]
|
||||
[assembly: AssemblyCopyright("Copyright © Microsoft 2015")]
|
||||
[assembly: AssemblyCompany("")]
|
||||
[assembly: AssemblyProduct("Filtration.ItemFilterPreview.Data")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2016")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
|
||||
|
@ -20,7 +20,7 @@ using System.Runtime.InteropServices;
|
|||
[assembly: ComVisible(false)]
|
||||
|
||||
// The following GUID is for the ID of the typelib if this project is exposed to COM
|
||||
[assembly: Guid("b33dec95-6eec-4e14-81d5-3d8ce0db77d1")]
|
||||
[assembly: Guid("855b38cc-eef2-471d-bbbc-eb3e2ff3d387")]
|
||||
|
||||
// Version information for an assembly consists of the following four values:
|
||||
//
|
||||
|
@ -34,6 +34,3 @@ using System.Runtime.InteropServices;
|
|||
// [assembly: AssemblyVersion("1.0.*")]
|
||||
[assembly: AssemblyVersion("1.0.0.0")]
|
||||
[assembly: AssemblyFileVersion("1.0.0.0")]
|
||||
|
||||
[assembly: InternalsVisibleTo("Filtration.LootExplosionStudio.Tests")]
|
||||
[assembly: InternalsVisibleTo("DynamicProxyGenAssembly2")]
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,178 +0,0 @@
|
|||
using Filtration.LootExplosionStudio.Services;
|
||||
using Filtration.ObjectModel;
|
||||
using Filtration.ObjectModel.BlockItemTypes;
|
||||
using Filtration.ObjectModel.Enums;
|
||||
using Filtration.ObjectModel.LootExplosionStudio;
|
||||
using NUnit.Framework;
|
||||
|
||||
namespace Filtration.LootExplosionStudio.Tests.Services
|
||||
{
|
||||
[TestFixture]
|
||||
public class TestItemFilterBlockFinderService
|
||||
{
|
||||
private ItemFilterBlockFinderServiceTestUtility _testUtility;
|
||||
|
||||
[SetUp]
|
||||
public void ItemFilterProcessingServiceTestSetup()
|
||||
{
|
||||
_testUtility = new ItemFilterBlockFinderServiceTestUtility();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void FindBlockForLootItem_SingleBlock_BaseType_Matches()
|
||||
{
|
||||
// Arrange
|
||||
var testInputBaseType = "TestBaseType";
|
||||
var testInputBlockItem = new BaseTypeBlockItem();
|
||||
testInputBlockItem.Items.Add(testInputBaseType);
|
||||
|
||||
_testUtility.TestLootItem.BaseType = testInputBaseType;
|
||||
_testUtility.TestBlock.BlockItems.Add(testInputBlockItem);
|
||||
|
||||
|
||||
// Act
|
||||
var result = _testUtility.Service.FindBlockForLootItem(_testUtility.TestLootItem, _testUtility.TestScript);
|
||||
|
||||
// Assert
|
||||
Assert.AreEqual(_testUtility.TestBlock, result);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void FindBlockForLootItem_SingleHideBlock_Matches()
|
||||
{
|
||||
// Arrange
|
||||
|
||||
_testUtility.TestBlock.Action = BlockAction.Hide;
|
||||
|
||||
// Act
|
||||
var result = _testUtility.Service.FindBlockForLootItem(_testUtility.TestLootItem, _testUtility.TestScript);
|
||||
|
||||
// Assert
|
||||
Assert.AreEqual(_testUtility.TestBlock, result);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void FindBlockForLootItem_SingleBlock_MultipleBlockItems_Matches()
|
||||
{
|
||||
// Arrange
|
||||
var testInputBaseType = "TestBaseType";
|
||||
var testInputBaseTypeBlockItem = new BaseTypeBlockItem();
|
||||
testInputBaseTypeBlockItem.Items.Add(testInputBaseType);
|
||||
|
||||
var testInputClass = "Test Class";
|
||||
var testInputClassBlockItem = new ClassBlockItem();
|
||||
testInputClassBlockItem.Items.Add(testInputClass);
|
||||
|
||||
var testInputItemLevel = 57;
|
||||
var testInputItemLevelBlockItem = new ItemLevelBlockItem(FilterPredicateOperator.GreaterThan, 50);
|
||||
|
||||
_testUtility.TestLootItem.BaseType = testInputBaseType;
|
||||
_testUtility.TestLootItem.Class = testInputClass;
|
||||
_testUtility.TestLootItem.ItemLevel = testInputItemLevel;
|
||||
|
||||
_testUtility.TestBlock.BlockItems.Add(testInputBaseTypeBlockItem);
|
||||
_testUtility.TestBlock.BlockItems.Add(testInputClassBlockItem);
|
||||
_testUtility.TestBlock.BlockItems.Add(testInputItemLevelBlockItem);
|
||||
|
||||
|
||||
// Act
|
||||
var result = _testUtility.Service.FindBlockForLootItem(_testUtility.TestLootItem, _testUtility.TestScript);
|
||||
|
||||
// Assert
|
||||
Assert.AreEqual(_testUtility.TestBlock, result);
|
||||
}
|
||||
|
||||
|
||||
|
||||
[Test]
|
||||
public void FindBlockForLootItem_SingleBlock_MultipleBlockItemsOneWithoutMatch_Matches()
|
||||
{
|
||||
// Arrange
|
||||
var testInputBaseType = "TestBaseType";
|
||||
var testInputBaseTypeBlockItem = new BaseTypeBlockItem();
|
||||
testInputBaseTypeBlockItem.Items.Add(testInputBaseType);
|
||||
|
||||
var testInputClass = "Test Class";
|
||||
var testInputClassBlockItem = new ClassBlockItem();
|
||||
testInputClassBlockItem.Items.Add(testInputClass);
|
||||
|
||||
var testInputItemLevel = 57;
|
||||
var testInputItemLevelBlockItem = new ItemLevelBlockItem(FilterPredicateOperator.GreaterThan, 50);
|
||||
|
||||
var testInputDropLevel = 35;
|
||||
var testInputDropLevelBlockItem = new DropLevelBlockItem(FilterPredicateOperator.GreaterThanOrEqual, 89);
|
||||
|
||||
_testUtility.TestLootItem.BaseType = testInputBaseType;
|
||||
_testUtility.TestLootItem.Class = testInputClass;
|
||||
_testUtility.TestLootItem.ItemLevel = testInputItemLevel;
|
||||
_testUtility.TestLootItem.DropLevel = testInputDropLevel;
|
||||
|
||||
_testUtility.TestBlock.BlockItems.Add(testInputBaseTypeBlockItem);
|
||||
_testUtility.TestBlock.BlockItems.Add(testInputClassBlockItem);
|
||||
_testUtility.TestBlock.BlockItems.Add(testInputItemLevelBlockItem);
|
||||
_testUtility.TestBlock.BlockItems.Add(testInputDropLevelBlockItem);
|
||||
|
||||
// Act
|
||||
var result = _testUtility.Service.FindBlockForLootItem(_testUtility.TestLootItem, _testUtility.TestScript);
|
||||
|
||||
// Assert
|
||||
Assert.IsNull(result);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void FindBlockForLootItem_MultipleBlocksBlock_Matches()
|
||||
{
|
||||
// Arrange
|
||||
var testInputBlock1 = new ItemFilterBlock();
|
||||
var testInputClass1 = "Test Class";
|
||||
var testInputClassBlockItem1 = new ClassBlockItem();
|
||||
testInputClassBlockItem1.Items.Add(testInputClass1);
|
||||
testInputBlock1.BlockItems.Add(testInputClassBlockItem1);
|
||||
|
||||
_testUtility.TestScript.ItemFilterBlocks.Add(testInputBlock1);
|
||||
|
||||
var testInputBaseType = "TestBaseType";
|
||||
var testInputBaseTypeBlockItem = new BaseTypeBlockItem();
|
||||
testInputBaseTypeBlockItem.Items.Add(testInputBaseType);
|
||||
|
||||
var testInputClass = "Test Class";
|
||||
var testInputClassBlockItem = new ClassBlockItem();
|
||||
testInputClassBlockItem.Items.Add(testInputClass);
|
||||
|
||||
var testInputItemLevel = 57;
|
||||
var testInputItemLevelBlockItem = new ItemLevelBlockItem(FilterPredicateOperator.GreaterThan, 50);
|
||||
|
||||
_testUtility.TestLootItem.BaseType = testInputBaseType;
|
||||
_testUtility.TestLootItem.Class = testInputClass;
|
||||
_testUtility.TestLootItem.ItemLevel = testInputItemLevel;
|
||||
|
||||
_testUtility.TestBlock.BlockItems.Add(testInputBaseTypeBlockItem);
|
||||
_testUtility.TestBlock.BlockItems.Add(testInputClassBlockItem);
|
||||
_testUtility.TestBlock.BlockItems.Add(testInputItemLevelBlockItem);
|
||||
|
||||
// Act
|
||||
var result = _testUtility.Service.FindBlockForLootItem(_testUtility.TestLootItem, _testUtility.TestScript);
|
||||
|
||||
// Assert
|
||||
Assert.AreEqual(_testUtility.TestBlock, result);
|
||||
}
|
||||
|
||||
private class ItemFilterBlockFinderServiceTestUtility
|
||||
{
|
||||
public ItemFilterBlockFinderServiceTestUtility()
|
||||
{
|
||||
TestBlock = new ItemFilterBlock();
|
||||
TestScript = new ItemFilterScript();
|
||||
TestScript.ItemFilterBlocks.Add(TestBlock);
|
||||
TestLootItem = new LootItem();
|
||||
|
||||
Service = new ItemFilterBlockFinderService();
|
||||
}
|
||||
|
||||
public ItemFilterScript TestScript { get; private set; }
|
||||
public ItemFilterBlock TestBlock { get; private set; }
|
||||
public LootItem TestLootItem { get; private set; }
|
||||
public ItemFilterBlockFinderService Service { get; private set; }
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,275 +0,0 @@
|
|||
using System.Windows.Media;
|
||||
using Filtration.LootExplosionStudio.Services;
|
||||
using Filtration.ObjectModel;
|
||||
using Filtration.ObjectModel.BlockItemTypes;
|
||||
using Filtration.ObjectModel.Enums;
|
||||
using Filtration.ObjectModel.LootExplosionStudio;
|
||||
using Moq;
|
||||
using NUnit.Framework;
|
||||
|
||||
namespace Filtration.LootExplosionStudio.Tests.Services
|
||||
{
|
||||
[TestFixture]
|
||||
class TestLootItemAppearanceService
|
||||
{
|
||||
private LootItemAppearanceServiceTestUtility _testUtility;
|
||||
|
||||
[SetUp]
|
||||
public void ItemFilterProcessingServiceTestSetup()
|
||||
{
|
||||
_testUtility = new LootItemAppearanceServiceTestUtility();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void ProcessLootItemAgainstScript_NoMatchingBlocks_NormalItem_SetsCorrectTextColor()
|
||||
{
|
||||
// Arrange
|
||||
_testUtility.TestLootItem.Rarity = ItemRarity.Normal;
|
||||
|
||||
// Act
|
||||
_testUtility.Service.ProcessLootItemAgainstFilterScript(_testUtility.TestLootItem, _testUtility.TestScript);
|
||||
|
||||
// Assert
|
||||
Assert.AreEqual(DefaultLootItemAppearanceConstants.NormalTextColor, _testUtility.TestLootItem.TextColor);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void ProcessLootItemAgainstScript_NoMatchingBlocks_MagicItem_SetsCorrectTextColor()
|
||||
{
|
||||
// Arrange
|
||||
_testUtility.TestLootItem.Rarity = ItemRarity.Magic;
|
||||
_testUtility.TestBlock.BlockItems.Add(new ItemLevelBlockItem(FilterPredicateOperator.GreaterThan, 99));
|
||||
|
||||
// Act
|
||||
_testUtility.Service.ProcessLootItemAgainstFilterScript(_testUtility.TestLootItem, _testUtility.TestScript);
|
||||
|
||||
// Assert
|
||||
Assert.AreEqual(DefaultLootItemAppearanceConstants.MagicTextColor, _testUtility.TestLootItem.TextColor);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void ProcessLootItemAgainstScript_NoMatchingBlocks_RareItem_SetsCorrectTextColor()
|
||||
{
|
||||
// Arrange
|
||||
_testUtility.TestLootItem.Rarity = ItemRarity.Rare;
|
||||
_testUtility.TestBlock.BlockItems.Add(new ItemLevelBlockItem(FilterPredicateOperator.GreaterThan, 99));
|
||||
|
||||
// Act
|
||||
_testUtility.Service.ProcessLootItemAgainstFilterScript(_testUtility.TestLootItem, _testUtility.TestScript);
|
||||
|
||||
// Assert
|
||||
Assert.AreEqual(DefaultLootItemAppearanceConstants.RareTextColor, _testUtility.TestLootItem.TextColor);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void ProcessLootItemAgainstScript_NoMatchingBlocks_UniqueItem_SetsCorrectTextColor()
|
||||
{
|
||||
// Arrange
|
||||
_testUtility.TestLootItem.Rarity = ItemRarity.Unique;
|
||||
_testUtility.TestBlock.BlockItems.Add(new ItemLevelBlockItem(FilterPredicateOperator.GreaterThan, 99));
|
||||
|
||||
// Act
|
||||
_testUtility.Service.ProcessLootItemAgainstFilterScript(_testUtility.TestLootItem, _testUtility.TestScript);
|
||||
|
||||
// Assert
|
||||
Assert.AreEqual(DefaultLootItemAppearanceConstants.UniqueTextColor, _testUtility.TestLootItem.TextColor);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void ProcessLootItemAgainstScript_NoMatchingBlocks_SetsCorrectBackgroundColor()
|
||||
{
|
||||
// Arrange
|
||||
_testUtility.TestBlock.BlockItems.Add(new ItemLevelBlockItem(FilterPredicateOperator.GreaterThan, 99));
|
||||
|
||||
// Act
|
||||
_testUtility.Service.ProcessLootItemAgainstFilterScript(_testUtility.TestLootItem, _testUtility.TestScript);
|
||||
|
||||
// Assert
|
||||
Assert.AreEqual(DefaultLootItemAppearanceConstants.BackgroundColor, _testUtility.TestLootItem.BackgroundColor);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void ProcessLootItemAgainstScript_NoMatchingBlocks_SetsCorrectBorderColor()
|
||||
{
|
||||
// Arrange
|
||||
_testUtility.TestBlock.BlockItems.Add(new ItemLevelBlockItem(FilterPredicateOperator.GreaterThan, 99));
|
||||
|
||||
// Act
|
||||
_testUtility.Service.ProcessLootItemAgainstFilterScript(_testUtility.TestLootItem, _testUtility.TestScript);
|
||||
|
||||
// Assert
|
||||
Assert.AreEqual(DefaultLootItemAppearanceConstants.BorderColor, _testUtility.TestLootItem.BorderColor);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void ProcessLootItemAgainstScript_MatchingTextColorOnly_SetsColorsCorrectly()
|
||||
{
|
||||
// Arrange
|
||||
var testInputTextColor = new Color {R = 123, G = 5, B = 22, A = 200};
|
||||
_testUtility.TestBlock.BlockItems.Add(new TextColorBlockItem {Color = testInputTextColor});
|
||||
|
||||
// Act
|
||||
_testUtility.Service.ProcessLootItemAgainstFilterScript(_testUtility.TestLootItem, _testUtility.TestScript);
|
||||
|
||||
// Assert
|
||||
Assert.AreEqual(testInputTextColor, _testUtility.TestLootItem.TextColor);
|
||||
Assert.AreEqual(DefaultLootItemAppearanceConstants.BackgroundColor, _testUtility.TestLootItem.BackgroundColor);
|
||||
Assert.AreEqual(DefaultLootItemAppearanceConstants.BorderColor, _testUtility.TestLootItem.BorderColor);
|
||||
Assert.AreEqual(DefaultLootItemAppearanceConstants.FontSize, _testUtility.TestLootItem.FontSize );
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void ProcessLootItemAgainstScript_MatchingBackgroundColorOnly_RarityNormal_SetsColorsCorrectly()
|
||||
{
|
||||
// Arrange
|
||||
var testInputBackgroundColor = new Color {R = 123, G = 5, B = 22, A = 200};
|
||||
_testUtility.TestBlock.BlockItems.Add(new BackgroundColorBlockItem {Color = testInputBackgroundColor});
|
||||
|
||||
// Act
|
||||
_testUtility.Service.ProcessLootItemAgainstFilterScript(_testUtility.TestLootItem, _testUtility.TestScript);
|
||||
|
||||
// Assert
|
||||
Assert.AreEqual(testInputBackgroundColor, _testUtility.TestLootItem.BackgroundColor);
|
||||
Assert.AreEqual(DefaultLootItemAppearanceConstants.NormalTextColor, _testUtility.TestLootItem.TextColor);
|
||||
Assert.AreEqual(DefaultLootItemAppearanceConstants.BorderColor, _testUtility.TestLootItem.BorderColor);
|
||||
Assert.AreEqual(DefaultLootItemAppearanceConstants.FontSize, _testUtility.TestLootItem.FontSize);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void ProcessLootItemAgainstScript_MatchingBackgroundColorOnly_RarityMagic_SetsColorsCorrectly()
|
||||
{
|
||||
// Arrange
|
||||
var testInputBackgroundColor = new Color { R = 123, G = 5, B = 22, A = 200 };
|
||||
_testUtility.TestBlock.BlockItems.Add(new BackgroundColorBlockItem {Color = testInputBackgroundColor});
|
||||
_testUtility.TestLootItem.Rarity = ItemRarity.Magic;
|
||||
|
||||
// Act
|
||||
_testUtility.Service.ProcessLootItemAgainstFilterScript(_testUtility.TestLootItem, _testUtility.TestScript);
|
||||
|
||||
// Assert
|
||||
Assert.AreEqual(testInputBackgroundColor, _testUtility.TestLootItem.BackgroundColor);
|
||||
Assert.AreEqual(DefaultLootItemAppearanceConstants.MagicTextColor, _testUtility.TestLootItem.TextColor);
|
||||
Assert.AreEqual(DefaultLootItemAppearanceConstants.BorderColor, _testUtility.TestLootItem.BorderColor);
|
||||
Assert.AreEqual(DefaultLootItemAppearanceConstants.FontSize, _testUtility.TestLootItem.FontSize);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void ProcessLootItemAgainstScript_MatchingBackgroundColorOnly_RarityRare_SetsColorsCorrectly()
|
||||
{
|
||||
// Arrange
|
||||
var testInputBackgroundColor = new Color { R = 123, G = 5, B = 22, A = 200 };
|
||||
_testUtility.TestBlock.BlockItems.Add(new BackgroundColorBlockItem { Color = testInputBackgroundColor });
|
||||
_testUtility.TestLootItem.Rarity = ItemRarity.Rare;
|
||||
|
||||
// Act
|
||||
_testUtility.Service.ProcessLootItemAgainstFilterScript(_testUtility.TestLootItem, _testUtility.TestScript);
|
||||
|
||||
// Assert
|
||||
Assert.AreEqual(testInputBackgroundColor, _testUtility.TestLootItem.BackgroundColor);
|
||||
Assert.AreEqual(DefaultLootItemAppearanceConstants.RareTextColor, _testUtility.TestLootItem.TextColor);
|
||||
Assert.AreEqual(DefaultLootItemAppearanceConstants.BorderColor, _testUtility.TestLootItem.BorderColor);
|
||||
Assert.AreEqual(DefaultLootItemAppearanceConstants.FontSize, _testUtility.TestLootItem.FontSize);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void ProcessLootItemAgainstScript_MatchingBackgroundColorOnly_RarityUnique_SetsColorsCorrectly()
|
||||
{
|
||||
// Arrange
|
||||
var testInputBackgroundColor = new Color { R = 123, G = 5, B = 22, A = 200 };
|
||||
_testUtility.TestBlock.BlockItems.Add(new BackgroundColorBlockItem { Color = testInputBackgroundColor });
|
||||
_testUtility.TestLootItem.Rarity = ItemRarity.Unique;
|
||||
|
||||
// Act
|
||||
_testUtility.Service.ProcessLootItemAgainstFilterScript(_testUtility.TestLootItem, _testUtility.TestScript);
|
||||
|
||||
// Assert
|
||||
Assert.AreEqual(testInputBackgroundColor, _testUtility.TestLootItem.BackgroundColor);
|
||||
Assert.AreEqual(DefaultLootItemAppearanceConstants.UniqueTextColor, _testUtility.TestLootItem.TextColor);
|
||||
Assert.AreEqual(DefaultLootItemAppearanceConstants.BorderColor, _testUtility.TestLootItem.BorderColor);
|
||||
Assert.AreEqual(DefaultLootItemAppearanceConstants.FontSize, _testUtility.TestLootItem.FontSize);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void ProcessLootItemAgainstScript_MatchingBorderColorOnly_RarityUnique_SetsColorsCorrectly()
|
||||
{
|
||||
// Arrange
|
||||
var testInputBorderColor = new Color { R = 123, G = 5, B = 22, A = 200 };
|
||||
_testUtility.TestBlock.BlockItems.Add(new BorderColorBlockItem { Color = testInputBorderColor });
|
||||
|
||||
// Act
|
||||
_testUtility.Service.ProcessLootItemAgainstFilterScript(_testUtility.TestLootItem, _testUtility.TestScript);
|
||||
|
||||
// Assert
|
||||
Assert.AreEqual(testInputBorderColor, _testUtility.TestLootItem.BorderColor);
|
||||
Assert.AreEqual(DefaultLootItemAppearanceConstants.NormalTextColor, _testUtility.TestLootItem.TextColor);
|
||||
Assert.AreEqual(DefaultLootItemAppearanceConstants.BackgroundColor, _testUtility.TestLootItem.BackgroundColor);
|
||||
Assert.AreEqual(DefaultLootItemAppearanceConstants.FontSize, _testUtility.TestLootItem.FontSize);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void ProcessLootItemAgainstScript_MatchingFontSizeOnly_RarityUnique_SetsColorsCorrectly()
|
||||
{
|
||||
// Arrange
|
||||
var testInputFontSize = 22;
|
||||
_testUtility.TestBlock.BlockItems.Add(new FontSizeBlockItem(22));
|
||||
|
||||
// Act
|
||||
_testUtility.Service.ProcessLootItemAgainstFilterScript(_testUtility.TestLootItem, _testUtility.TestScript);
|
||||
|
||||
// Assert
|
||||
Assert.AreEqual(testInputFontSize, _testUtility.TestLootItem.FontSize);
|
||||
Assert.AreEqual(DefaultLootItemAppearanceConstants.NormalTextColor, _testUtility.TestLootItem.TextColor);
|
||||
Assert.AreEqual(DefaultLootItemAppearanceConstants.BackgroundColor, _testUtility.TestLootItem.BackgroundColor);
|
||||
Assert.AreEqual(DefaultLootItemAppearanceConstants.BorderColor, _testUtility.TestLootItem.BorderColor);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void ProcessLootItemAgainstScript_AllAppearanceMatching_SetsColorsCorrectly()
|
||||
{
|
||||
// Arrange
|
||||
var testInputFontSize = 22;
|
||||
var testInputTextColor = new Color { R = 123, G = 5, B = 22, A = 200 };
|
||||
var testInputBackgroundColor = new Color { R = 123, G = 59, B = 27, A = 50 };
|
||||
var testInputBorderColor = new Color { R = 166, G = 0, B = 100, A = 255 };
|
||||
|
||||
_testUtility.TestBlock.BlockItems.Add(new FontSizeBlockItem(22));
|
||||
_testUtility.TestBlock.BlockItems.Add(new BorderColorBlockItem { Color = testInputBorderColor });
|
||||
_testUtility.TestBlock.BlockItems.Add(new BackgroundColorBlockItem { Color = testInputBackgroundColor });
|
||||
_testUtility.TestBlock.BlockItems.Add(new TextColorBlockItem { Color = testInputTextColor });
|
||||
|
||||
// Act
|
||||
_testUtility.Service.ProcessLootItemAgainstFilterScript(_testUtility.TestLootItem, _testUtility.TestScript);
|
||||
|
||||
// Assert
|
||||
Assert.AreEqual(testInputFontSize, _testUtility.TestLootItem.FontSize);
|
||||
Assert.AreEqual(testInputTextColor, _testUtility.TestLootItem.TextColor);
|
||||
Assert.AreEqual(testInputBackgroundColor, _testUtility.TestLootItem.BackgroundColor);
|
||||
Assert.AreEqual(testInputBorderColor, _testUtility.TestLootItem.BorderColor);
|
||||
}
|
||||
|
||||
private class LootItemAppearanceServiceTestUtility
|
||||
{
|
||||
public LootItemAppearanceServiceTestUtility()
|
||||
{
|
||||
TestBlock = new ItemFilterBlock();
|
||||
TestScript = new ItemFilterScript();
|
||||
TestScript.ItemFilterBlocks.Add(TestBlock);
|
||||
TestLootItem = new LootItem();
|
||||
|
||||
MockItemFilterBlockFinderService = new Mock<IItemFilterBlockFinderService>();
|
||||
MockItemFilterBlockFinderService.Setup(
|
||||
b => b.FindBlockForLootItem(TestLootItem, TestScript))
|
||||
.Returns(TestBlock);
|
||||
|
||||
Service = new LootItemAppearanceService(MockItemFilterBlockFinderService.Object);
|
||||
}
|
||||
|
||||
public Mock<IItemFilterBlockFinderService> MockItemFilterBlockFinderService { get; private set; }
|
||||
|
||||
public ItemFilterScript TestScript { get; private set; }
|
||||
public ItemFilterBlock TestBlock { get; private set; }
|
||||
public LootItem TestLootItem { get; private set; }
|
||||
public LootItemAppearanceService Service { get; private set; }
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,5 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<packages>
|
||||
<package id="Moq" version="4.2.1507.0118" targetFramework="net451" />
|
||||
<package id="NUnit" version="2.6.4" targetFramework="net451" />
|
||||
</packages>
|
|
@ -1,37 +0,0 @@
|
|||
using System.Linq;
|
||||
using Filtration.ObjectModel;
|
||||
using Filtration.ObjectModel.BlockItemBaseTypes;
|
||||
using Filtration.ObjectModel.LootExplosionStudio;
|
||||
|
||||
namespace Filtration.LootExplosionStudio.Services
|
||||
{
|
||||
internal interface IItemFilterBlockFinderService
|
||||
{
|
||||
ItemFilterBlock FindBlockForLootItem(LootItem lootItem, ItemFilterScript script);
|
||||
}
|
||||
|
||||
internal class ItemFilterBlockFinderService : IItemFilterBlockFinderService
|
||||
{
|
||||
public ItemFilterBlock FindBlockForLootItem(LootItem lootItem, ItemFilterScript script)
|
||||
{
|
||||
return script.ItemFilterBlocks.FirstOrDefault(block => BlockMatchesLootItem(lootItem, block));
|
||||
}
|
||||
|
||||
private static bool BlockMatchesLootItem(LootItem lootItem, ItemFilterBlock block)
|
||||
{
|
||||
if (!block.BlockItems.OfType<StringListBlockItem>().All(blockItem => blockItem.MatchesLootItem(lootItem)))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (
|
||||
!block.BlockItems.OfType<NumericFilterPredicateBlockItem>()
|
||||
.All(blockItem => blockItem.MatchesLootItem(lootItem)))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,80 +0,0 @@
|
|||
using System.Linq;
|
||||
using System.Windows.Media;
|
||||
using Filtration.ObjectModel;
|
||||
using Filtration.ObjectModel.BlockItemTypes;
|
||||
using Filtration.ObjectModel.Enums;
|
||||
using Filtration.ObjectModel.LootExplosionStudio;
|
||||
|
||||
namespace Filtration.LootExplosionStudio.Services
|
||||
{
|
||||
internal interface ILootItemAppearanceService
|
||||
{
|
||||
void ProcessLootItemAgainstFilterScript(LootItem lootItem, ItemFilterScript script);
|
||||
}
|
||||
|
||||
internal class LootItemAppearanceService : ILootItemAppearanceService
|
||||
{
|
||||
private readonly IItemFilterBlockFinderService _blockFinderService;
|
||||
|
||||
public LootItemAppearanceService(IItemFilterBlockFinderService blockFinderService)
|
||||
{
|
||||
_blockFinderService = blockFinderService;
|
||||
}
|
||||
|
||||
public void ProcessLootItemAgainstFilterScript(LootItem lootItem, ItemFilterScript script)
|
||||
{
|
||||
var matchedBlock = _blockFinderService.FindBlockForLootItem(lootItem, script);
|
||||
if (matchedBlock == null)
|
||||
{
|
||||
lootItem.TextColor = GetDefaultTextColorForRarity(lootItem.Rarity);
|
||||
lootItem.BackgroundColor = DefaultLootItemAppearanceConstants.BackgroundColor;
|
||||
lootItem.BorderColor = DefaultLootItemAppearanceConstants.BorderColor;
|
||||
lootItem.FontSize = 35;
|
||||
return;
|
||||
}
|
||||
|
||||
lootItem.TextColor = matchedBlock.HasBlockItemOfType<TextColorBlockItem>()
|
||||
? matchedBlock.BlockItems.OfType<TextColorBlockItem>().First().Color
|
||||
: GetDefaultTextColorForRarity(lootItem.Rarity);
|
||||
|
||||
lootItem.BackgroundColor = matchedBlock.HasBlockItemOfType<BackgroundColorBlockItem>()
|
||||
? matchedBlock.BlockItems.OfType<BackgroundColorBlockItem>().First().Color
|
||||
: DefaultLootItemAppearanceConstants.BackgroundColor;
|
||||
|
||||
lootItem.BorderColor = matchedBlock.HasBlockItemOfType<BorderColorBlockItem>()
|
||||
? matchedBlock.BlockItems.OfType<BorderColorBlockItem>().First().Color
|
||||
: DefaultLootItemAppearanceConstants.BorderColor;
|
||||
|
||||
lootItem.FontSize = matchedBlock.HasBlockItemOfType<FontSizeBlockItem>()
|
||||
? matchedBlock.BlockItems.OfType<FontSizeBlockItem>().First().Value
|
||||
: 35;
|
||||
}
|
||||
|
||||
private Color GetDefaultTextColorForRarity(ItemRarity rarity)
|
||||
{
|
||||
switch (rarity)
|
||||
{
|
||||
case ItemRarity.Normal:
|
||||
{
|
||||
return DefaultLootItemAppearanceConstants.NormalTextColor;
|
||||
}
|
||||
case ItemRarity.Magic:
|
||||
{
|
||||
return DefaultLootItemAppearanceConstants.MagicTextColor;
|
||||
}
|
||||
case ItemRarity.Rare:
|
||||
{
|
||||
return DefaultLootItemAppearanceConstants.RareTextColor;
|
||||
}
|
||||
case ItemRarity.Unique:
|
||||
{
|
||||
return DefaultLootItemAppearanceConstants.UniqueTextColor;
|
||||
}
|
||||
default:
|
||||
{
|
||||
return DefaultLootItemAppearanceConstants.NormalTextColor;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,30 +0,0 @@
|
|||
using Filtration.ObjectModel;
|
||||
using Filtration.ObjectModel.LootExplosionStudio;
|
||||
|
||||
namespace Filtration.LootExplosionStudio.Services
|
||||
{
|
||||
internal interface ILootItemCollectionItemFilterCombinerService
|
||||
{
|
||||
void CombineLootItemCollectionWithItemFilterScript(LootItemCollection lootItemCollection,
|
||||
ItemFilterScript script);
|
||||
}
|
||||
|
||||
internal class LootItemCollectionItemFilterCombinerService : ILootItemCollectionItemFilterCombinerService
|
||||
{
|
||||
private readonly ILootItemAppearanceService _lootItemAppearanceService;
|
||||
|
||||
public LootItemCollectionItemFilterCombinerService(ILootItemAppearanceService lootItemAppearanceService)
|
||||
{
|
||||
_lootItemAppearanceService = lootItemAppearanceService;
|
||||
}
|
||||
|
||||
public void CombineLootItemCollectionWithItemFilterScript(LootItemCollection lootItemCollection,
|
||||
ItemFilterScript script)
|
||||
{
|
||||
foreach (var lootItem in lootItemCollection)
|
||||
{
|
||||
_lootItemAppearanceService.ProcessLootItemAgainstFilterScript(lootItem, script);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,27 +0,0 @@
|
|||
using Castle.MicroKernel.Registration;
|
||||
using Castle.MicroKernel.SubSystems.Configuration;
|
||||
using Castle.Windsor;
|
||||
using Filtration.LootExplosionStudio.Services;
|
||||
|
||||
namespace Filtration.LootExplosionStudio.WindsorInstallers
|
||||
{
|
||||
class ServicesInstaller : IWindsorInstaller
|
||||
{
|
||||
public void Install(IWindsorContainer container, IConfigurationStore store)
|
||||
{
|
||||
container.Register(
|
||||
Component.For<IItemFilterBlockFinderService>()
|
||||
.ImplementedBy<ItemFilterBlockFinderService>()
|
||||
.LifeStyle.Singleton);
|
||||
|
||||
container.Register(
|
||||
Component.For<ILootItemAppearanceService>()
|
||||
.ImplementedBy<LootItemAppearanceService>()
|
||||
.LifeStyle.Singleton);
|
||||
container.Register(
|
||||
Component.For<ILootItemCollectionItemFilterCombinerService>()
|
||||
.ImplementedBy<LootItemCollectionItemFilterCombinerService>()
|
||||
.LifeStyle.Singleton);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,5 +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" />
|
||||
</packages>
|
|
@ -1,48 +0,0 @@
|
|||
using System;
|
||||
using System.Windows.Media;
|
||||
using Filtration.ObjectModel.BlockItemBaseTypes;
|
||||
using Filtration.ObjectModel.BlockItemTypes;
|
||||
using Filtration.ObjectModel.LootExplosionStudio;
|
||||
using NUnit.Framework;
|
||||
|
||||
namespace Filtration.ObjectModel.Tests.BlockItemBaseTypes
|
||||
{
|
||||
[TestFixture]
|
||||
public class TestBaseTypeBlockItem
|
||||
{
|
||||
[Test]
|
||||
public void MatchesBlockItem_BlankLootItem_ReturnsFalse()
|
||||
{
|
||||
// Arrange
|
||||
|
||||
var blockItem = new BaseTypeBlockItem();
|
||||
var testInputLootItem = new LootItem();
|
||||
|
||||
// Act
|
||||
var result = blockItem.MatchesLootItem(testInputLootItem);
|
||||
|
||||
// Assert
|
||||
Assert.IsFalse(result);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void MatchesBlockItem_StringMatch_ReturnsTrue()
|
||||
{
|
||||
// Arrange
|
||||
var testInputBaseType = "Test Base Type";
|
||||
|
||||
var blockItem = new BaseTypeBlockItem();
|
||||
blockItem.Items.Add("Testblah");
|
||||
blockItem.Items.Add(testInputBaseType);
|
||||
blockItem.Items.Add("Another Base Type");
|
||||
|
||||
var testInputLootItem = new LootItem { BaseType = testInputBaseType};
|
||||
|
||||
// Act
|
||||
var result = blockItem.MatchesLootItem(testInputLootItem);
|
||||
|
||||
// Assert
|
||||
Assert.IsTrue(result);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,50 +0,0 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using Filtration.ObjectModel.BlockItemTypes;
|
||||
using Filtration.ObjectModel.LootExplosionStudio;
|
||||
using NUnit.Framework;
|
||||
|
||||
namespace Filtration.ObjectModel.Tests.BlockItemBaseTypes
|
||||
{
|
||||
[TestFixture]
|
||||
public class TestClassBlockItem
|
||||
{
|
||||
[Test]
|
||||
public void MatchesBlockItem_BlankLootItem_ReturnsFalse()
|
||||
{
|
||||
// Arrange
|
||||
|
||||
var blockItem = new ClassBlockItem();
|
||||
var testInputLootItem = new LootItem();
|
||||
|
||||
// Act
|
||||
var result = blockItem.MatchesLootItem(testInputLootItem);
|
||||
|
||||
// Assert
|
||||
Assert.IsFalse(result);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void MatchesBlockItem_StringMatch_ReturnsTrue()
|
||||
{
|
||||
// Arrange
|
||||
var testInputClass = "Test Class";
|
||||
|
||||
var blockItem = new ClassBlockItem();
|
||||
blockItem.Items.Add("Testblah");
|
||||
blockItem.Items.Add(testInputClass);
|
||||
blockItem.Items.Add("Another Base Type");
|
||||
|
||||
var testInputLootItem = new LootItem { Class = testInputClass };
|
||||
|
||||
// Act
|
||||
var result = blockItem.MatchesLootItem(testInputLootItem);
|
||||
|
||||
// Assert
|
||||
Assert.IsTrue(result);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,101 +0,0 @@
|
|||
using Filtration.ObjectModel.BlockItemTypes;
|
||||
using Filtration.ObjectModel.Enums;
|
||||
using Filtration.ObjectModel.LootExplosionStudio;
|
||||
using NUnit.Framework;
|
||||
|
||||
namespace Filtration.ObjectModel.Tests.BlockItemBaseTypes
|
||||
{
|
||||
[TestFixture]
|
||||
public class TestItemLevelBlockItem
|
||||
{
|
||||
[Test]
|
||||
public void MatchesBlockItem_NoMatch_ReturnsFalse()
|
||||
{
|
||||
// Arrange
|
||||
|
||||
var blockItem = new ItemLevelBlockItem(FilterPredicateOperator.GreaterThan, 10);
|
||||
var lootItem = new LootItem {ItemLevel = 5};
|
||||
|
||||
// Act
|
||||
var result = blockItem.MatchesLootItem(lootItem);
|
||||
|
||||
// Assert
|
||||
Assert.IsFalse(result);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void MatchesBlockItem_EqualsMatch_ReturnsTrue()
|
||||
{
|
||||
// Arrange
|
||||
|
||||
var blockItem = new ItemLevelBlockItem(FilterPredicateOperator.Equal, 10);
|
||||
var lootItem = new LootItem { ItemLevel = 10 };
|
||||
|
||||
// Act
|
||||
var result = blockItem.MatchesLootItem(lootItem);
|
||||
|
||||
// Assert
|
||||
Assert.IsTrue(result);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void MatchesBlockItem_GreaterThanMatch_ReturnsTrue()
|
||||
{
|
||||
// Arrange
|
||||
|
||||
var blockItem = new ItemLevelBlockItem(FilterPredicateOperator.GreaterThan, 10);
|
||||
var lootItem = new LootItem { ItemLevel = 50 };
|
||||
|
||||
// Act
|
||||
var result = blockItem.MatchesLootItem(lootItem);
|
||||
|
||||
// Assert
|
||||
Assert.IsTrue(result);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void MatchesBlockItem_GreaterThanOrEqualMatch_ReturnsTrue()
|
||||
{
|
||||
// Arrange
|
||||
|
||||
var blockItem = new ItemLevelBlockItem(FilterPredicateOperator.GreaterThanOrEqual, 10);
|
||||
var lootItem = new LootItem { ItemLevel = 50 };
|
||||
|
||||
// Act
|
||||
var result = blockItem.MatchesLootItem(lootItem);
|
||||
|
||||
// Assert
|
||||
Assert.IsTrue(result);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void MatchesBlockItem_LessThan_ReturnsTrue()
|
||||
{
|
||||
// Arrange
|
||||
|
||||
var blockItem = new ItemLevelBlockItem(FilterPredicateOperator.LessThan, 10);
|
||||
var lootItem = new LootItem { ItemLevel = 1 };
|
||||
|
||||
// Act
|
||||
var result = blockItem.MatchesLootItem(lootItem);
|
||||
|
||||
// Assert
|
||||
Assert.IsTrue(result);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void MatchesBlockItem_LessThanOrEqual_ReturnsTrue()
|
||||
{
|
||||
// Arrange
|
||||
|
||||
var blockItem = new ItemLevelBlockItem(FilterPredicateOperator.LessThanOrEqual, 10);
|
||||
var lootItem = new LootItem { ItemLevel = 1 };
|
||||
|
||||
// Act
|
||||
var result = blockItem.MatchesLootItem(lootItem);
|
||||
|
||||
// Assert
|
||||
Assert.IsTrue(result);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,92 +0,0 @@
|
|||
using System.Collections.Generic;
|
||||
using System.Net.Sockets;
|
||||
using Filtration.ObjectModel.BlockItemTypes;
|
||||
using Filtration.ObjectModel.Enums;
|
||||
using Filtration.ObjectModel.LootExplosionStudio;
|
||||
using NUnit.Framework;
|
||||
|
||||
namespace Filtration.ObjectModel.Tests.BlockItemBaseTypes
|
||||
{
|
||||
[TestFixture]
|
||||
public class TestSocketGroupBlockItem
|
||||
{
|
||||
[Test]
|
||||
public void MatchesBlockItem_BlankLootItem_ReturnsFalse()
|
||||
{
|
||||
// Arrange
|
||||
|
||||
var blockItem = new SocketGroupBlockItem();
|
||||
var testInputLootItem = new LootItem();
|
||||
|
||||
// Act
|
||||
var result = blockItem.MatchesLootItem(testInputLootItem);
|
||||
|
||||
// Assert
|
||||
Assert.IsFalse(result);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void MatchesBlockItem_SocketsMatch_ReturnsTrue()
|
||||
{
|
||||
// Arrange
|
||||
var testInputSocketGroups = new List<SocketGroup>();
|
||||
var testInputSocketGroup1 = new SocketGroup();
|
||||
var testInputSocketGroup2 = new SocketGroup();
|
||||
testInputSocketGroup1.Sockets = new List<SocketColor> {SocketColor.Blue, SocketColor.Red};
|
||||
testInputSocketGroup2.Sockets = new List<SocketColor>
|
||||
{
|
||||
SocketColor.Blue,
|
||||
SocketColor.Blue,
|
||||
SocketColor.Blue,
|
||||
SocketColor.Red
|
||||
};
|
||||
|
||||
testInputSocketGroups.Add(testInputSocketGroup1);
|
||||
testInputSocketGroups.Add(testInputSocketGroup2);
|
||||
|
||||
var blockItem = new SocketGroupBlockItem();
|
||||
blockItem.Items.Add("RRG");
|
||||
blockItem.Items.Add("BRB");
|
||||
|
||||
var testInputLootItem = new LootItem {SocketGroups = testInputSocketGroups};
|
||||
|
||||
// Act
|
||||
var result = blockItem.MatchesLootItem(testInputLootItem);
|
||||
|
||||
// Assert
|
||||
Assert.IsTrue(result);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void MatchesBlockItem_SocketsAlmostMatch_ReturnsFalse()
|
||||
{
|
||||
// Arrange
|
||||
var testInputSocketGroups = new List<SocketGroup>();
|
||||
var testInputSocketGroup1 = new SocketGroup();
|
||||
var testInputSocketGroup2 = new SocketGroup();
|
||||
testInputSocketGroup1.Sockets = new List<SocketColor> { SocketColor.Blue, SocketColor.Red };
|
||||
testInputSocketGroup2.Sockets = new List<SocketColor>
|
||||
{
|
||||
SocketColor.Blue,
|
||||
SocketColor.Blue,
|
||||
SocketColor.Blue,
|
||||
SocketColor.Red,
|
||||
SocketColor.Green
|
||||
};
|
||||
|
||||
testInputSocketGroups.Add(testInputSocketGroup1);
|
||||
testInputSocketGroups.Add(testInputSocketGroup2);
|
||||
|
||||
var blockItem = new SocketGroupBlockItem();
|
||||
blockItem.Items.Add("BGBRWB");
|
||||
|
||||
var testInputLootItem = new LootItem { SocketGroups = testInputSocketGroups };
|
||||
|
||||
// Act
|
||||
var result = blockItem.MatchesLootItem(testInputLootItem);
|
||||
|
||||
// Assert
|
||||
Assert.IsFalse(result);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -9,8 +9,11 @@
|
|||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>Filtration.ObjectModel.Tests</RootNamespace>
|
||||
<AssemblyName>Filtration.ObjectModel.Tests</AssemblyName>
|
||||
<TargetFrameworkVersion>v4.5.1</TargetFrameworkVersion>
|
||||
<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<TargetFrameworkProfile />
|
||||
<NuGetPackageImportStamp>
|
||||
</NuGetPackageImportStamp>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
|
@ -30,14 +33,9 @@
|
|||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<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="System" />
|
||||
<Reference Include="System.Configuration" />
|
||||
<Reference Include="System.Core" />
|
||||
<Reference Include="System.Xml.Linq" />
|
||||
<Reference Include="System.Data.DataSetExtensions" />
|
||||
|
@ -46,10 +44,6 @@
|
|||
<Reference Include="System.Xml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="BlockItemBaseTypes\TestBaseTypeBlockItem.cs" />
|
||||
<Compile Include="BlockItemBaseTypes\TestClassBlockItem.cs" />
|
||||
<Compile Include="BlockItemBaseTypes\TestItemLevelBlockItem.cs" />
|
||||
<Compile Include="BlockItemBaseTypes\TestSocketGroupBlockItem.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="TestItemFilterBlock.cs" />
|
||||
<Compile Include="TestItemFilterBlockGroup.cs" />
|
||||
|
@ -63,9 +57,28 @@
|
|||
</ProjectReference>
|
||||
</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 />
|
||||
<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.
|
||||
|
|
|
@ -6,23 +6,6 @@ namespace Filtration.ObjectModel.Tests
|
|||
[TestFixture]
|
||||
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]
|
||||
public void ItemFilterBlock_AddBlockItemAllowed_LessThanMaximum_ReturnsTrue()
|
||||
{
|
||||
|
|
|
@ -9,7 +9,7 @@ namespace Filtration.ObjectModel.Tests
|
|||
public void ToString_ReturnsFullBlockHierarchy()
|
||||
{
|
||||
// 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 child1BlockGroup = new ItemFilterBlockGroup("Child 1 Block Group", rootBlockGroup);
|
||||
|
@ -19,14 +19,14 @@ namespace Filtration.ObjectModel.Tests
|
|||
var result = child2BlockGroup.ToString();
|
||||
|
||||
// Assert
|
||||
Assert.AreEqual(ExpectedResult, result);
|
||||
Assert.AreEqual(expectedResult, result);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void ToString_AddsTildeForAdvancedBlock()
|
||||
{
|
||||
// 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 child1BlockGroup = new ItemFilterBlockGroup("Child 1 Block Group", rootBlockGroup, true);
|
||||
|
@ -36,7 +36,7 @@ namespace Filtration.ObjectModel.Tests
|
|||
var result = child2BlockGroup.ToString();
|
||||
|
||||
// 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>
|
|
@ -1,11 +1,10 @@
|
|||
using System.Windows.Media;
|
||||
using Filtration.ObjectModel.Enums;
|
||||
using Filtration.ObjectModel.Extensions;
|
||||
using Filtration.ObjectModel.LootExplosionStudio;
|
||||
|
||||
namespace Filtration.ObjectModel.BlockItemBaseTypes
|
||||
{
|
||||
public class ActionBlockItem : BlockItemBase
|
||||
public sealed class ActionBlockItem : BlockItemBase
|
||||
{
|
||||
private BlockAction _action;
|
||||
|
||||
|
@ -16,65 +15,33 @@ namespace Filtration.ObjectModel.BlockItemBaseTypes
|
|||
|
||||
public BlockAction Action
|
||||
{
|
||||
get { return _action; }
|
||||
get => _action;
|
||||
set
|
||||
{
|
||||
_action = value;
|
||||
IsDirty = true;
|
||||
OnPropertyChanged();
|
||||
OnPropertyChanged("SummaryText");
|
||||
OnPropertyChanged("SummaryBackgroundColor");
|
||||
OnPropertyChanged("SummaryTextColor");
|
||||
OnPropertyChanged(nameof(SummaryText));
|
||||
OnPropertyChanged(nameof(SummaryBackgroundColor));
|
||||
OnPropertyChanged(nameof(SummaryTextColor));
|
||||
}
|
||||
}
|
||||
|
||||
public override string OutputText
|
||||
{
|
||||
get { return Action.GetAttributeDescription(); }
|
||||
}
|
||||
public override string OutputText => Action.GetAttributeDescription();
|
||||
|
||||
public override string PrefixText
|
||||
{
|
||||
get { return string.Empty; }
|
||||
}
|
||||
public override string PrefixText => string.Empty;
|
||||
|
||||
public override int MaximumAllowed
|
||||
{
|
||||
get { return 1; }
|
||||
}
|
||||
public override int MaximumAllowed => 1;
|
||||
|
||||
public override string DisplayHeading
|
||||
{
|
||||
get
|
||||
{
|
||||
return "Action";
|
||||
}
|
||||
}
|
||||
public override string DisplayHeading => "Action";
|
||||
|
||||
public override string SummaryText
|
||||
{
|
||||
get
|
||||
{
|
||||
return Action == BlockAction.Show ? "Show" : "Hide";
|
||||
}
|
||||
}
|
||||
public override string SummaryText => Action == BlockAction.Show ? "Show" : "Hide";
|
||||
|
||||
public override Color SummaryBackgroundColor
|
||||
{
|
||||
get
|
||||
{
|
||||
return Action == BlockAction.Show ? Colors.LimeGreen : Colors.OrangeRed;
|
||||
}
|
||||
}
|
||||
public override Color SummaryBackgroundColor => Action == BlockAction.Show ? Colors.LimeGreen : Colors.OrangeRed;
|
||||
|
||||
public override Color SummaryTextColor
|
||||
{
|
||||
get
|
||||
{
|
||||
return Action == BlockAction.Show ? Colors.Black : Colors.White;
|
||||
}
|
||||
}
|
||||
public override Color SummaryTextColor => Action == BlockAction.Show ? Colors.Black : Colors.White;
|
||||
|
||||
public override int SortOrder { get { return 0; } }
|
||||
public override BlockItemOrdering SortOrder => BlockItemOrdering.Action;
|
||||
|
||||
public void ToggleAction()
|
||||
{
|
||||
|
|
|
@ -2,11 +2,14 @@
|
|||
using System.Runtime.CompilerServices;
|
||||
using System.Windows.Media;
|
||||
using Filtration.ObjectModel.Annotations;
|
||||
using Filtration.ObjectModel.Enums;
|
||||
|
||||
namespace Filtration.ObjectModel.BlockItemBaseTypes
|
||||
{
|
||||
public abstract class BlockItemBase : IItemFilterBlockItem
|
||||
{
|
||||
private bool _isDirty;
|
||||
|
||||
public abstract string PrefixText { get; }
|
||||
public abstract string OutputText { get; }
|
||||
public abstract int MaximumAllowed { get; }
|
||||
|
@ -14,15 +17,26 @@ namespace Filtration.ObjectModel.BlockItemBaseTypes
|
|||
public abstract string SummaryText { get; }
|
||||
public abstract Color SummaryBackgroundColor { get; }
|
||||
public abstract Color SummaryTextColor { get; }
|
||||
public abstract int SortOrder { get; }
|
||||
public abstract BlockItemOrdering SortOrder { get; }
|
||||
public string Comment { get; set; }
|
||||
|
||||
public bool IsDirty
|
||||
{
|
||||
get { return _isDirty; }
|
||||
protected set
|
||||
{
|
||||
_isDirty = value;
|
||||
OnPropertyChanged();
|
||||
}
|
||||
}
|
||||
|
||||
public event PropertyChangedEventHandler PropertyChanged;
|
||||
|
||||
|
||||
[NotifyPropertyChangedInvocator]
|
||||
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
|
||||
{
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,11 +1,10 @@
|
|||
using System;
|
||||
using System.Windows.Media;
|
||||
using Filtration.ObjectModel.LootExplosionStudio;
|
||||
using Filtration.ObjectModel.ThemeEditor;
|
||||
|
||||
namespace Filtration.ObjectModel.BlockItemBaseTypes
|
||||
{
|
||||
public abstract class ColorBlockItem : BlockItemBase, IAudioVisualBlockItem
|
||||
public abstract class ColorBlockItem : BlockItemBase, IAudioVisualBlockItem, IBlockItemWithTheme
|
||||
{
|
||||
private Color _color;
|
||||
private ThemeComponent _themeComponent;
|
||||
|
@ -19,20 +18,11 @@ namespace Filtration.ObjectModel.BlockItemBaseTypes
|
|||
Color = color;
|
||||
}
|
||||
|
||||
public override string OutputText
|
||||
{
|
||||
get
|
||||
{
|
||||
return PrefixText + " " + +Color.R + " " + Color.G + " "
|
||||
+ Color.B + (Color.A < 255 ? " " + Color.A : string.Empty) +
|
||||
(ThemeComponent != null ? " # " + ThemeComponent.ComponentName : string.Empty);
|
||||
}
|
||||
}
|
||||
public override string OutputText => PrefixText + " " + +Color.R + " " + Color.G + " "
|
||||
+ Color.B + (Color.A != 240 ? " " + Color.A : string.Empty) +
|
||||
(ThemeComponent != null ? " # " + ThemeComponent.ComponentName : string.Empty);
|
||||
|
||||
public override string SummaryText
|
||||
{
|
||||
get { return string.Empty; }
|
||||
}
|
||||
public override string SummaryText => string.Empty;
|
||||
|
||||
public ThemeComponent ThemeComponent
|
||||
{
|
||||
|
@ -57,8 +47,8 @@ namespace Filtration.ObjectModel.BlockItemBaseTypes
|
|||
}
|
||||
}
|
||||
|
||||
public override Color SummaryBackgroundColor { get { return Colors.Transparent; } }
|
||||
public override Color SummaryTextColor { get { return Colors.Transparent; } }
|
||||
public override Color SummaryBackgroundColor => Colors.Transparent;
|
||||
public override Color SummaryTextColor => Colors.Transparent;
|
||||
|
||||
public Color Color
|
||||
{
|
||||
|
@ -66,13 +56,14 @@ namespace Filtration.ObjectModel.BlockItemBaseTypes
|
|||
set
|
||||
{
|
||||
_color = value;
|
||||
IsDirty = true;
|
||||
OnPropertyChanged();
|
||||
}
|
||||
}
|
||||
|
||||
private void OnThemeComponentUpdated(object sender, EventArgs e)
|
||||
{
|
||||
Color = ((ThemeComponent) sender).Color;
|
||||
Color = ((ColorThemeComponent) sender).Color;
|
||||
}
|
||||
|
||||
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();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,5 +1,4 @@
|
|||
using System.Windows.Media;
|
||||
using Filtration.ObjectModel.LootExplosionStudio;
|
||||
|
||||
namespace Filtration.ObjectModel.BlockItemBaseTypes
|
||||
{
|
||||
|
@ -18,14 +17,11 @@ namespace Filtration.ObjectModel.BlockItemBaseTypes
|
|||
SecondValue = secondValue;
|
||||
}
|
||||
|
||||
public override string OutputText
|
||||
{
|
||||
get { return PrefixText + " " + Value + " " + SecondValue; }
|
||||
}
|
||||
|
||||
public override string SummaryText { get { return string.Empty; } }
|
||||
public override Color SummaryBackgroundColor { get { return Colors.Transparent; } }
|
||||
public override Color SummaryTextColor { get { return Colors.Transparent; } }
|
||||
public override string OutputText => PrefixText + " " + Value + " " + SecondValue;
|
||||
|
||||
public override string SummaryText => string.Empty;
|
||||
public override Color SummaryBackgroundColor => Colors.Transparent;
|
||||
public override Color SummaryTextColor => Colors.Transparent;
|
||||
|
||||
public int Value
|
||||
{
|
||||
|
@ -33,6 +29,7 @@ namespace Filtration.ObjectModel.BlockItemBaseTypes
|
|||
set
|
||||
{
|
||||
_value = value;
|
||||
IsDirty = true;
|
||||
OnPropertyChanged();
|
||||
}
|
||||
}
|
||||
|
@ -43,6 +40,7 @@ namespace Filtration.ObjectModel.BlockItemBaseTypes
|
|||
set
|
||||
{
|
||||
_secondValue = value;
|
||||
IsDirty = true;
|
||||
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,11 +1,13 @@
|
|||
using System.Windows.Media;
|
||||
using Filtration.ObjectModel.LootExplosionStudio;
|
||||
using System;
|
||||
using System.Windows.Media;
|
||||
using Filtration.ObjectModel.ThemeEditor;
|
||||
|
||||
namespace Filtration.ObjectModel.BlockItemBaseTypes
|
||||
{
|
||||
public abstract class IntegerBlockItem : BlockItemBase, IAudioVisualBlockItem
|
||||
public abstract class IntegerBlockItem : BlockItemBase, IAudioVisualBlockItem, IBlockItemWithTheme
|
||||
{
|
||||
private int _value;
|
||||
private ThemeComponent _themeComponent;
|
||||
|
||||
protected IntegerBlockItem()
|
||||
{
|
||||
|
@ -16,26 +18,57 @@ namespace Filtration.ObjectModel.BlockItemBaseTypes
|
|||
Value = value;
|
||||
}
|
||||
|
||||
public override string OutputText
|
||||
{
|
||||
get { return PrefixText + " " + Value; }
|
||||
}
|
||||
public override string OutputText => PrefixText + " " + Value + (ThemeComponent != null ? " # " + ThemeComponent.ComponentName : string.Empty);
|
||||
|
||||
public override string SummaryText { get { return string.Empty; } }
|
||||
public override Color SummaryBackgroundColor { get { return Colors.Transparent; } }
|
||||
public override Color SummaryTextColor { get { return Colors.Transparent; } }
|
||||
public override string SummaryText => string.Empty;
|
||||
public override Color SummaryBackgroundColor => Colors.Transparent;
|
||||
public override Color SummaryTextColor => Colors.Transparent;
|
||||
|
||||
public abstract int Minimum { 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
|
||||
{
|
||||
get { return _value; }
|
||||
set
|
||||
{
|
||||
_value = value;
|
||||
IsDirty = true;
|
||||
OnPropertyChanged();
|
||||
}
|
||||
}
|
||||
|
||||
private void OnThemeComponentUpdated(object sender, EventArgs e)
|
||||
{
|
||||
Value = ((IntegerBlockItem)sender).Value;
|
||||
}
|
||||
|
||||
private void OnThemeComponentDeleted(object sender, EventArgs e)
|
||||
{
|
||||
ThemeComponent = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue