Implemented script-level undo/redo (currently hidden in UI)
This commit is contained in:
parent
fee2a4dd99
commit
d84b17ced3
|
@ -1,29 +1,42 @@
|
||||||
## Ignore Visual Studio temporary files, build results, and
|
## Ignore Visual Studio temporary files, build results, and
|
||||||
## files generated by popular Visual Studio add-ons.
|
## files generated by popular Visual Studio add-ons.
|
||||||
|
##
|
||||||
|
## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
|
||||||
|
|
||||||
# User-specific files
|
# User-specific files
|
||||||
*.suo
|
*.suo
|
||||||
*.user
|
*.user
|
||||||
|
*.userosscache
|
||||||
*.sln.docstates
|
*.sln.docstates
|
||||||
|
|
||||||
|
# User-specific files (MonoDevelop/Xamarin Studio)
|
||||||
|
*.userprefs
|
||||||
|
|
||||||
# Build results
|
# Build results
|
||||||
[Dd]ebug/
|
[Dd]ebug/
|
||||||
[Dd]ebugPublic/
|
[Dd]ebugPublic/
|
||||||
[Rr]elease/
|
[Rr]elease/
|
||||||
|
[Rr]eleases/
|
||||||
x64/
|
x64/
|
||||||
build/
|
x86/
|
||||||
bld/
|
bld/
|
||||||
[Bb]in/
|
[Bb]in/
|
||||||
[Oo]bj/
|
[Oo]bj/
|
||||||
|
[Ll]og/
|
||||||
|
|
||||||
# Roslyn cache directories
|
# Visual Studio 2015/2017 cache/options directory
|
||||||
*.ide/
|
.vs/
|
||||||
|
# Uncomment if you have tasks that create the project's static files in wwwroot
|
||||||
|
#wwwroot/
|
||||||
|
|
||||||
|
# Visual Studio 2017 auto generated files
|
||||||
|
Generated\ Files/
|
||||||
|
|
||||||
# MSTest test Results
|
# MSTest test Results
|
||||||
[Tt]est[Rr]esult*/
|
[Tt]est[Rr]esult*/
|
||||||
[Bb]uild[Ll]og.*
|
[Bb]uild[Ll]og.*
|
||||||
|
|
||||||
#NUNIT
|
# NUNIT
|
||||||
*.VisualState.xml
|
*.VisualState.xml
|
||||||
TestResult.xml
|
TestResult.xml
|
||||||
|
|
||||||
|
@ -32,6 +45,19 @@ TestResult.xml
|
||||||
[Rr]eleasePS/
|
[Rr]eleasePS/
|
||||||
dlldata.c
|
dlldata.c
|
||||||
|
|
||||||
|
# Benchmark Results
|
||||||
|
BenchmarkDotNet.Artifacts/
|
||||||
|
|
||||||
|
# .NET Core
|
||||||
|
project.lock.json
|
||||||
|
project.fragment.lock.json
|
||||||
|
artifacts/
|
||||||
|
**/Properties/launchSettings.json
|
||||||
|
|
||||||
|
# StyleCop
|
||||||
|
StyleCopReport.xml
|
||||||
|
|
||||||
|
# Files built by Visual Studio
|
||||||
*_i.c
|
*_i.c
|
||||||
*_p.c
|
*_p.c
|
||||||
*_i.h
|
*_i.h
|
||||||
|
@ -64,14 +90,21 @@ _Chutzpah*
|
||||||
ipch/
|
ipch/
|
||||||
*.aps
|
*.aps
|
||||||
*.ncb
|
*.ncb
|
||||||
|
*.opendb
|
||||||
*.opensdf
|
*.opensdf
|
||||||
*.sdf
|
*.sdf
|
||||||
*.cachefile
|
*.cachefile
|
||||||
|
*.VC.db
|
||||||
|
*.VC.VC.opendb
|
||||||
|
|
||||||
# Visual Studio profiler
|
# Visual Studio profiler
|
||||||
*.psess
|
*.psess
|
||||||
*.vsp
|
*.vsp
|
||||||
*.vspx
|
*.vspx
|
||||||
|
*.sap
|
||||||
|
|
||||||
|
# Visual Studio Trace Files
|
||||||
|
*.e2e
|
||||||
|
|
||||||
# TFS 2012 Local Workspace
|
# TFS 2012 Local Workspace
|
||||||
$tf/
|
$tf/
|
||||||
|
@ -84,7 +117,7 @@ _ReSharper*/
|
||||||
*.[Rr]e[Ss]harper
|
*.[Rr]e[Ss]harper
|
||||||
*.DotSettings.user
|
*.DotSettings.user
|
||||||
|
|
||||||
# JustCode is a .NET coding addin-in
|
# JustCode is a .NET coding add-in
|
||||||
.JustCode
|
.JustCode
|
||||||
|
|
||||||
# TeamCity is a build add-in
|
# TeamCity is a build add-in
|
||||||
|
@ -93,9 +126,18 @@ _TeamCity*
|
||||||
# DotCover is a Code Coverage Tool
|
# DotCover is a Code Coverage Tool
|
||||||
*.dotCover
|
*.dotCover
|
||||||
|
|
||||||
|
# AxoCover is a Code Coverage Tool
|
||||||
|
.axoCover/*
|
||||||
|
!.axoCover/settings.json
|
||||||
|
|
||||||
|
# Visual Studio code coverage results
|
||||||
|
*.coverage
|
||||||
|
*.coveragexml
|
||||||
|
|
||||||
# NCrunch
|
# NCrunch
|
||||||
_NCrunch_*
|
_NCrunch_*
|
||||||
.*crunch*.local.xml
|
.*crunch*.local.xml
|
||||||
|
nCrunchTemp_*
|
||||||
|
|
||||||
# MightyMoose
|
# MightyMoose
|
||||||
*.mm.*
|
*.mm.*
|
||||||
|
@ -123,42 +165,63 @@ publish/
|
||||||
# Publish Web Output
|
# Publish Web Output
|
||||||
*.[Pp]ublish.xml
|
*.[Pp]ublish.xml
|
||||||
*.azurePubxml
|
*.azurePubxml
|
||||||
## TODO: Comment the next line if you want to checkin your
|
# Note: Comment the next line if you want to checkin your web deploy settings,
|
||||||
## web deploy settings but do note that will include unencrypted
|
# but database connection strings (with potential passwords) will be unencrypted
|
||||||
## passwords
|
*.pubxml
|
||||||
#*.pubxml
|
*.publishproj
|
||||||
|
|
||||||
# NuGet Packages Directory
|
# Microsoft Azure Web App publish settings. Comment the next line if you want to
|
||||||
packages/*
|
# checkin your Azure Web App publish settings, but sensitive information contained
|
||||||
## TODO: If the tool you use requires repositories.config
|
# in these scripts will be unencrypted
|
||||||
## uncomment the next line
|
PublishScripts/
|
||||||
#!packages/repositories.config
|
|
||||||
|
|
||||||
# Enable "build/" folder in the NuGet Packages folder since
|
# NuGet Packages
|
||||||
# NuGet packages use it for MSBuild targets.
|
*.nupkg
|
||||||
# This line needs to be after the ignore of the build folder
|
# The packages folder can be ignored because of Package Restore
|
||||||
# (and the packages folder if the line above has been uncommented)
|
**/[Pp]ackages/*
|
||||||
!packages/build/
|
# except build/, which is used as an MSBuild target.
|
||||||
|
!**/[Pp]ackages/build/
|
||||||
|
# Uncomment if necessary however generally it will be regenerated when needed
|
||||||
|
#!**/[Pp]ackages/repositories.config
|
||||||
|
# NuGet v3's project.json files produces more ignorable files
|
||||||
|
*.nuget.props
|
||||||
|
*.nuget.targets
|
||||||
|
|
||||||
# Windows Azure Build Output
|
# Microsoft Azure Build Output
|
||||||
csx/
|
csx/
|
||||||
*.build.csdef
|
*.build.csdef
|
||||||
|
|
||||||
# Windows Store app package directory
|
# Microsoft Azure Emulator
|
||||||
|
ecf/
|
||||||
|
rcf/
|
||||||
|
|
||||||
|
# Windows Store app package directories and files
|
||||||
AppPackages/
|
AppPackages/
|
||||||
|
BundleArtifacts/
|
||||||
|
Package.StoreAssociation.xml
|
||||||
|
_pkginfo.txt
|
||||||
|
*.appx
|
||||||
|
|
||||||
|
# Visual Studio cache files
|
||||||
|
# files ending in .cache can be ignored
|
||||||
|
*.[Cc]ache
|
||||||
|
# but keep track of directories ending in .cache
|
||||||
|
!*.[Cc]ache/
|
||||||
|
|
||||||
# Others
|
# Others
|
||||||
sql/
|
|
||||||
*.Cache
|
|
||||||
ClientBin/
|
ClientBin/
|
||||||
[Ss]tyle[Cc]op.*
|
|
||||||
~$*
|
~$*
|
||||||
*~
|
*~
|
||||||
*.dbmdl
|
*.dbmdl
|
||||||
*.dbproj.schemaview
|
*.dbproj.schemaview
|
||||||
|
*.jfm
|
||||||
*.pfx
|
*.pfx
|
||||||
*.publishsettings
|
*.publishsettings
|
||||||
node_modules/
|
orleans.codegen.cs
|
||||||
|
|
||||||
|
# Since there are multiple workflows, uncomment next line to ignore bower_components
|
||||||
|
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
|
||||||
|
#bower_components/
|
||||||
|
|
||||||
# RIA/Silverlight projects
|
# RIA/Silverlight projects
|
||||||
Generated_Code/
|
Generated_Code/
|
||||||
|
@ -174,6 +237,7 @@ UpgradeLog*.htm
|
||||||
# SQL Server files
|
# SQL Server files
|
||||||
*.mdf
|
*.mdf
|
||||||
*.ldf
|
*.ldf
|
||||||
|
*.ndf
|
||||||
|
|
||||||
# Business Intelligence projects
|
# Business Intelligence projects
|
||||||
*.rdl.data
|
*.rdl.data
|
||||||
|
@ -183,7 +247,69 @@ UpgradeLog*.htm
|
||||||
# Microsoft Fakes
|
# Microsoft Fakes
|
||||||
FakesAssemblies/
|
FakesAssemblies/
|
||||||
|
|
||||||
# LightSwitch generated files
|
# GhostDoc plugin setting file
|
||||||
GeneratedArtifacts/
|
*.GhostDoc.xml
|
||||||
_Pvt_Extensions/
|
|
||||||
ModelManifest.xml
|
# Node.js Tools for Visual Studio
|
||||||
|
.ntvs_analysis.dat
|
||||||
|
node_modules/
|
||||||
|
|
||||||
|
# TypeScript v1 declaration files
|
||||||
|
typings/
|
||||||
|
|
||||||
|
# Visual Studio 6 build log
|
||||||
|
*.plg
|
||||||
|
|
||||||
|
# Visual Studio 6 workspace options file
|
||||||
|
*.opt
|
||||||
|
|
||||||
|
# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
|
||||||
|
*.vbw
|
||||||
|
|
||||||
|
# Visual Studio LightSwitch build output
|
||||||
|
**/*.HTMLClient/GeneratedArtifacts
|
||||||
|
**/*.DesktopClient/GeneratedArtifacts
|
||||||
|
**/*.DesktopClient/ModelManifest.xml
|
||||||
|
**/*.Server/GeneratedArtifacts
|
||||||
|
**/*.Server/ModelManifest.xml
|
||||||
|
_Pvt_Extensions
|
||||||
|
|
||||||
|
# Paket dependency manager
|
||||||
|
.paket/paket.exe
|
||||||
|
paket-files/
|
||||||
|
|
||||||
|
# FAKE - F# Make
|
||||||
|
.fake/
|
||||||
|
|
||||||
|
# JetBrains Rider
|
||||||
|
.idea/
|
||||||
|
*.sln.iml
|
||||||
|
|
||||||
|
# CodeRush
|
||||||
|
.cr/
|
||||||
|
|
||||||
|
# Python Tools for Visual Studio (PTVS)
|
||||||
|
__pycache__/
|
||||||
|
*.pyc
|
||||||
|
|
||||||
|
# Cake - Uncomment if you are using it
|
||||||
|
# tools/**
|
||||||
|
# !tools/packages.config
|
||||||
|
|
||||||
|
# Tabs Studio
|
||||||
|
*.tss
|
||||||
|
|
||||||
|
# Telerik's JustMock configuration file
|
||||||
|
*.jmconfig
|
||||||
|
|
||||||
|
# BizTalk build output
|
||||||
|
*.btp.cs
|
||||||
|
*.btm.cs
|
||||||
|
*.odx.cs
|
||||||
|
*.xsd.cs
|
||||||
|
|
||||||
|
# OpenCover UI analysis results
|
||||||
|
OpenCover/
|
||||||
|
|
||||||
|
# Azure Stream Analytics local run output
|
||||||
|
ASALocalRun/
|
|
@ -28,8 +28,7 @@ namespace Filtration.ObjectModel.Commands
|
||||||
public void ExecuteCommand(ICommand command)
|
public void ExecuteCommand(ICommand command)
|
||||||
{
|
{
|
||||||
command.Execute();
|
command.Execute();
|
||||||
var undoableCommand = command as IUndoableCommand;
|
if (command is IUndoableCommand undoableCommand)
|
||||||
if (undoableCommand != null)
|
|
||||||
{
|
{
|
||||||
_undoCommandStack.Push(undoableCommand);
|
_undoCommandStack.Push(undoableCommand);
|
||||||
_redoCommandStack.Clear();
|
_redoCommandStack.Clear();
|
||||||
|
|
|
@ -0,0 +1,37 @@
|
||||||
|
using System;
|
||||||
|
|
||||||
|
namespace Filtration.ObjectModel.Commands.ItemFilterScript
|
||||||
|
{
|
||||||
|
public class AddBlockCommand : IUndoableCommand
|
||||||
|
{
|
||||||
|
private readonly IItemFilterScript _itemFilterScript;
|
||||||
|
private readonly IItemFilterBlockBase _addAfterItemFilterBlock;
|
||||||
|
private IItemFilterBlock _newItemFilterBlock;
|
||||||
|
|
||||||
|
public AddBlockCommand(IItemFilterScript itemFilterScript, IItemFilterBlockBase addAfterItemFilterBlock)
|
||||||
|
{
|
||||||
|
_itemFilterScript = itemFilterScript;
|
||||||
|
_addAfterItemFilterBlock = addAfterItemFilterBlock;
|
||||||
|
}
|
||||||
|
public void Execute()
|
||||||
|
{
|
||||||
|
_newItemFilterBlock = new ItemFilterBlock(_itemFilterScript);
|
||||||
|
if (_addAfterItemFilterBlock != null)
|
||||||
|
{
|
||||||
|
_itemFilterScript.ItemFilterBlocks.Insert(_itemFilterScript.ItemFilterBlocks.IndexOf(_addAfterItemFilterBlock) + 1, _newItemFilterBlock);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
_itemFilterScript.ItemFilterBlocks.Add(_newItemFilterBlock);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Undo()
|
||||||
|
{
|
||||||
|
_itemFilterScript.ItemFilterBlocks.Remove(_newItemFilterBlock);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Redo() => Execute();
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,37 @@
|
||||||
|
using System;
|
||||||
|
|
||||||
|
namespace Filtration.ObjectModel.Commands.ItemFilterScript
|
||||||
|
{
|
||||||
|
public class AddCommentBlockCommand : IUndoableCommand
|
||||||
|
{
|
||||||
|
private readonly IItemFilterScript _itemFilterScript;
|
||||||
|
private readonly IItemFilterBlockBase _addAfterItemFilterBlock;
|
||||||
|
private IItemFilterCommentBlock _newItemFilterBlock;
|
||||||
|
|
||||||
|
public AddCommentBlockCommand(IItemFilterScript itemFilterScript, IItemFilterBlockBase addAfterItemFilterBlock)
|
||||||
|
{
|
||||||
|
_itemFilterScript = itemFilterScript;
|
||||||
|
_addAfterItemFilterBlock = addAfterItemFilterBlock;
|
||||||
|
}
|
||||||
|
public void Execute()
|
||||||
|
{
|
||||||
|
_newItemFilterBlock = new ItemFilterCommentBlock(_itemFilterScript);
|
||||||
|
if (_addAfterItemFilterBlock != null)
|
||||||
|
{
|
||||||
|
_itemFilterScript.ItemFilterBlocks.Insert(_itemFilterScript.ItemFilterBlocks.IndexOf(_addAfterItemFilterBlock) + 1, _newItemFilterBlock);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
_itemFilterScript.ItemFilterBlocks.Add(_newItemFilterBlock);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Undo()
|
||||||
|
{
|
||||||
|
_itemFilterScript.ItemFilterBlocks.Remove(_newItemFilterBlock);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Redo() => Execute();
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,39 @@
|
||||||
|
using System;
|
||||||
|
|
||||||
|
namespace Filtration.ObjectModel.Commands.ItemFilterScript
|
||||||
|
{
|
||||||
|
public class MoveBlockDownCommand : IUndoableCommand
|
||||||
|
{
|
||||||
|
private readonly IItemFilterScript _itemFilterScript;
|
||||||
|
private readonly IItemFilterBlockBase _blockToMove;
|
||||||
|
private int _indexMovedFrom;
|
||||||
|
|
||||||
|
public MoveBlockDownCommand(IItemFilterScript itemFilterScript, IItemFilterBlockBase blockToMove)
|
||||||
|
{
|
||||||
|
_itemFilterScript = itemFilterScript;
|
||||||
|
_blockToMove = blockToMove;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Execute()
|
||||||
|
{
|
||||||
|
_indexMovedFrom = _itemFilterScript.ItemFilterBlocks.IndexOf(_blockToMove);
|
||||||
|
|
||||||
|
if (_indexMovedFrom >= _itemFilterScript.ItemFilterBlocks.Count)
|
||||||
|
{
|
||||||
|
throw new InvalidOperationException("Cannot move the bottom block down");
|
||||||
|
}
|
||||||
|
|
||||||
|
_itemFilterScript.ItemFilterBlocks.Remove(_blockToMove);
|
||||||
|
_itemFilterScript.ItemFilterBlocks.Insert(_indexMovedFrom + 1, _blockToMove);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Undo()
|
||||||
|
{
|
||||||
|
_itemFilterScript.ItemFilterBlocks.Remove(_blockToMove);
|
||||||
|
_itemFilterScript.ItemFilterBlocks.Insert(_indexMovedFrom, _blockToMove);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Redo() => Execute();
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,30 @@
|
||||||
|
namespace Filtration.ObjectModel.Commands.ItemFilterScript
|
||||||
|
{
|
||||||
|
public class MoveBlockToBottomCommand : IUndoableCommand
|
||||||
|
{
|
||||||
|
private readonly IItemFilterScript _itemFilterScript;
|
||||||
|
private readonly IItemFilterBlockBase _blockToMove;
|
||||||
|
private int _indexMovedFrom;
|
||||||
|
|
||||||
|
public MoveBlockToBottomCommand(IItemFilterScript itemFilterScript, IItemFilterBlockBase blockToMove)
|
||||||
|
{
|
||||||
|
_itemFilterScript = itemFilterScript;
|
||||||
|
_blockToMove = blockToMove;
|
||||||
|
}
|
||||||
|
public void Execute()
|
||||||
|
{
|
||||||
|
_indexMovedFrom = _itemFilterScript.ItemFilterBlocks.IndexOf(_blockToMove);
|
||||||
|
|
||||||
|
_itemFilterScript.ItemFilterBlocks.Remove(_blockToMove);
|
||||||
|
_itemFilterScript.ItemFilterBlocks.Add(_blockToMove);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Undo()
|
||||||
|
{
|
||||||
|
_itemFilterScript.ItemFilterBlocks.Remove(_blockToMove);
|
||||||
|
_itemFilterScript.ItemFilterBlocks.Insert(_indexMovedFrom, _blockToMove);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Redo() => Execute();
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,30 @@
|
||||||
|
namespace Filtration.ObjectModel.Commands.ItemFilterScript
|
||||||
|
{
|
||||||
|
public class MoveBlockToTopCommand : IUndoableCommand
|
||||||
|
{
|
||||||
|
private readonly IItemFilterScript _itemFilterScript;
|
||||||
|
private readonly IItemFilterBlockBase _blockToMove;
|
||||||
|
private int _indexMovedFrom;
|
||||||
|
|
||||||
|
public MoveBlockToTopCommand(IItemFilterScript itemFilterScript, IItemFilterBlockBase blockToMove)
|
||||||
|
{
|
||||||
|
_itemFilterScript = itemFilterScript;
|
||||||
|
_blockToMove = blockToMove;
|
||||||
|
}
|
||||||
|
public void Execute()
|
||||||
|
{
|
||||||
|
_indexMovedFrom = _itemFilterScript.ItemFilterBlocks.IndexOf(_blockToMove);
|
||||||
|
|
||||||
|
_itemFilterScript.ItemFilterBlocks.Remove(_blockToMove);
|
||||||
|
_itemFilterScript.ItemFilterBlocks.Insert(0, _blockToMove);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Undo()
|
||||||
|
{
|
||||||
|
_itemFilterScript.ItemFilterBlocks.Remove(_blockToMove);
|
||||||
|
_itemFilterScript.ItemFilterBlocks.Insert(_indexMovedFrom, _blockToMove);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Redo() => Execute();
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,39 @@
|
||||||
|
using System;
|
||||||
|
|
||||||
|
namespace Filtration.ObjectModel.Commands.ItemFilterScript
|
||||||
|
{
|
||||||
|
public class MoveBlockUpCommand : IUndoableCommand
|
||||||
|
{
|
||||||
|
private readonly IItemFilterScript _itemFilterScript;
|
||||||
|
private readonly IItemFilterBlockBase _blockToMove;
|
||||||
|
private int _indexMovedFrom;
|
||||||
|
|
||||||
|
public MoveBlockUpCommand(IItemFilterScript itemFilterScript, IItemFilterBlockBase blockToMove)
|
||||||
|
{
|
||||||
|
_itemFilterScript = itemFilterScript;
|
||||||
|
_blockToMove = blockToMove;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Execute()
|
||||||
|
{
|
||||||
|
_indexMovedFrom = _itemFilterScript.ItemFilterBlocks.IndexOf(_blockToMove);
|
||||||
|
|
||||||
|
if (_indexMovedFrom <= 0)
|
||||||
|
{
|
||||||
|
throw new InvalidOperationException("Cannot move the top block up");
|
||||||
|
}
|
||||||
|
|
||||||
|
_itemFilterScript.ItemFilterBlocks.Remove(_blockToMove);
|
||||||
|
_itemFilterScript.ItemFilterBlocks.Insert(_indexMovedFrom-1, _blockToMove);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Undo()
|
||||||
|
{
|
||||||
|
_itemFilterScript.ItemFilterBlocks.Remove(_blockToMove);
|
||||||
|
_itemFilterScript.ItemFilterBlocks.Insert(_indexMovedFrom, _blockToMove);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Redo() => Execute();
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,37 @@
|
||||||
|
using System;
|
||||||
|
|
||||||
|
namespace Filtration.ObjectModel.Commands.ItemFilterScript
|
||||||
|
{
|
||||||
|
public class PasteBlockCommand : IUndoableCommand
|
||||||
|
{
|
||||||
|
private readonly IItemFilterScript _itemFilterScript;
|
||||||
|
private readonly IItemFilterBlockBase _pastedItemFilterBlock;
|
||||||
|
private readonly IItemFilterBlockBase _addAfterItemFilterBlock;
|
||||||
|
|
||||||
|
public PasteBlockCommand(IItemFilterScript itemFilterScript, IItemFilterBlockBase pastedItemFilterBlock, IItemFilterBlockBase addAfterItemFilterBlock)
|
||||||
|
{
|
||||||
|
_itemFilterScript = itemFilterScript;
|
||||||
|
_pastedItemFilterBlock = pastedItemFilterBlock;
|
||||||
|
_addAfterItemFilterBlock = addAfterItemFilterBlock;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Execute()
|
||||||
|
{
|
||||||
|
if (_addAfterItemFilterBlock != null)
|
||||||
|
{
|
||||||
|
_itemFilterScript.ItemFilterBlocks.Insert(_itemFilterScript.ItemFilterBlocks.IndexOf(_addAfterItemFilterBlock) + 1, _pastedItemFilterBlock);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
_itemFilterScript.ItemFilterBlocks.Add(_pastedItemFilterBlock);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Undo()
|
||||||
|
{
|
||||||
|
_itemFilterScript.ItemFilterBlocks.Remove(_pastedItemFilterBlock);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Redo() => Execute();
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,29 @@
|
||||||
|
using System;
|
||||||
|
|
||||||
|
namespace Filtration.ObjectModel.Commands.ItemFilterScript
|
||||||
|
{
|
||||||
|
public class RemoveBlockCommand : IUndoableCommand
|
||||||
|
{
|
||||||
|
private readonly IItemFilterScript _itemFilterScript;
|
||||||
|
private IItemFilterBlockBase _removedItemFilterBlock;
|
||||||
|
private int _indexRemovedFrom;
|
||||||
|
|
||||||
|
public RemoveBlockCommand(IItemFilterScript itemFilterScript, IItemFilterBlockBase itemFilterBlockBase)
|
||||||
|
{
|
||||||
|
_itemFilterScript = itemFilterScript;
|
||||||
|
_removedItemFilterBlock = itemFilterBlockBase;
|
||||||
|
}
|
||||||
|
public void Execute()
|
||||||
|
{
|
||||||
|
_indexRemovedFrom = _itemFilterScript.ItemFilterBlocks.IndexOf(_removedItemFilterBlock);
|
||||||
|
_itemFilterScript.ItemFilterBlocks.Remove(_removedItemFilterBlock);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Undo()
|
||||||
|
{
|
||||||
|
_itemFilterScript.ItemFilterBlocks.Insert(_indexRemovedFrom, _removedItemFilterBlock);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Redo() => Execute();
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,30 @@
|
||||||
|
using System;
|
||||||
|
|
||||||
|
namespace Filtration.ObjectModel.Commands.ItemFilterScript
|
||||||
|
{
|
||||||
|
public class SetScriptDescriptionCommand : IUndoableCommand
|
||||||
|
{
|
||||||
|
private readonly IItemFilterScript _itemFilterScript;
|
||||||
|
private readonly string _newDescription;
|
||||||
|
private string _oldDescription;
|
||||||
|
|
||||||
|
public SetScriptDescriptionCommand(IItemFilterScript itemFilterScript, string newDescription)
|
||||||
|
{
|
||||||
|
_itemFilterScript = itemFilterScript;
|
||||||
|
_newDescription = newDescription;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Execute()
|
||||||
|
{
|
||||||
|
_oldDescription = _itemFilterScript.Description;
|
||||||
|
_itemFilterScript.Description = _newDescription;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Undo()
|
||||||
|
{
|
||||||
|
_itemFilterScript.Description = _oldDescription;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Redo() => Execute();
|
||||||
|
}
|
||||||
|
}
|
|
@ -76,6 +76,15 @@
|
||||||
<Compile Include="BlockItemTypes\WidthBlockItem.cs" />
|
<Compile Include="BlockItemTypes\WidthBlockItem.cs" />
|
||||||
<Compile Include="Commands\CommandManager.cs" />
|
<Compile Include="Commands\CommandManager.cs" />
|
||||||
<Compile Include="Commands\ICommand.cs" />
|
<Compile Include="Commands\ICommand.cs" />
|
||||||
|
<Compile Include="Commands\ItemFilterScript\PasteBlockCommand.cs" />
|
||||||
|
<Compile Include="Commands\ItemFilterScript\MoveBlockToBottomCommand.cs" />
|
||||||
|
<Compile Include="Commands\ItemFilterScript\AddCommentBlockCommand.cs" />
|
||||||
|
<Compile Include="Commands\ItemFilterScript\MoveBlockDownCommand.cs" />
|
||||||
|
<Compile Include="Commands\ItemFilterScript\MoveBlockUpCommand.cs" />
|
||||||
|
<Compile Include="Commands\ItemFilterScript\MoveBlockToTopCommand.cs" />
|
||||||
|
<Compile Include="Commands\ItemFilterScript\SetScriptDescriptionCommand.cs" />
|
||||||
|
<Compile Include="Commands\ItemFilterScript\RemoveBlockCommand.cs" />
|
||||||
|
<Compile Include="Commands\ItemFilterScript\AddBlockCommand.cs" />
|
||||||
<Compile Include="Commands\IUndoableCommand.cs" />
|
<Compile Include="Commands\IUndoableCommand.cs" />
|
||||||
<Compile Include="Enums\BlockAction.cs" />
|
<Compile Include="Enums\BlockAction.cs" />
|
||||||
<Compile Include="Enums\BlockItemType.cs" />
|
<Compile Include="Enums\BlockItemType.cs" />
|
||||||
|
|
|
@ -4,6 +4,7 @@ using System.Linq;
|
||||||
using System.Windows.Media;
|
using System.Windows.Media;
|
||||||
using Filtration.ObjectModel.BlockItemBaseTypes;
|
using Filtration.ObjectModel.BlockItemBaseTypes;
|
||||||
using Filtration.ObjectModel.BlockItemTypes;
|
using Filtration.ObjectModel.BlockItemTypes;
|
||||||
|
using Filtration.ObjectModel.Commands;
|
||||||
using Filtration.ObjectModel.Enums;
|
using Filtration.ObjectModel.Enums;
|
||||||
using Filtration.ObjectModel.Extensions;
|
using Filtration.ObjectModel.Extensions;
|
||||||
|
|
||||||
|
@ -29,9 +30,20 @@ namespace Filtration.ObjectModel
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
public class ItemFilterBlockBase : IItemFilterBlockBase
|
public abstract class ItemFilterBlockBase : IItemFilterBlockBase
|
||||||
{
|
{
|
||||||
|
protected ItemFilterBlockBase()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
protected ItemFilterBlockBase(IItemFilterScript parentScript)
|
||||||
|
{
|
||||||
|
CommandManager = parentScript.CommandManager;
|
||||||
|
ParentScript = parentScript;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ICommandManager CommandManager { get; }
|
||||||
|
public IItemFilterScript ParentScript { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public interface IItemFilterCommentBlock : IItemFilterBlockBase
|
public interface IItemFilterCommentBlock : IItemFilterBlockBase
|
||||||
|
@ -41,6 +53,10 @@ namespace Filtration.ObjectModel
|
||||||
|
|
||||||
public class ItemFilterCommentBlock : ItemFilterBlockBase, IItemFilterCommentBlock
|
public class ItemFilterCommentBlock : ItemFilterBlockBase, IItemFilterCommentBlock
|
||||||
{
|
{
|
||||||
|
public ItemFilterCommentBlock(IItemFilterScript parentScript) : base(parentScript)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
public string Comment { get; set; }
|
public string Comment { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -48,14 +64,19 @@ namespace Filtration.ObjectModel
|
||||||
{
|
{
|
||||||
private ItemFilterBlockGroup _blockGroup;
|
private ItemFilterBlockGroup _blockGroup;
|
||||||
|
|
||||||
public ItemFilterBlock()
|
internal ItemFilterBlock()
|
||||||
{
|
{
|
||||||
ActionBlockItem = new ActionBlockItem(BlockAction.Show);
|
BlockItems = new ObservableCollection<IItemFilterBlockItem> { ActionBlockItem };
|
||||||
BlockItems = new ObservableCollection<IItemFilterBlockItem> {ActionBlockItem};
|
|
||||||
Enabled = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool Enabled { get; set; }
|
public ItemFilterBlock(IItemFilterScript parentScript) : base(parentScript)
|
||||||
|
{
|
||||||
|
BlockItems = new ObservableCollection<IItemFilterBlockItem> { ActionBlockItem };
|
||||||
|
}
|
||||||
|
|
||||||
|
public ICommandManager CommandManager { get; }
|
||||||
|
|
||||||
|
public bool Enabled { get; set; } = true;
|
||||||
public string Description { get; set; }
|
public string Description { get; set; }
|
||||||
|
|
||||||
public ItemFilterBlockGroup BlockGroup
|
public ItemFilterBlockGroup BlockGroup
|
||||||
|
@ -98,7 +119,7 @@ namespace Filtration.ObjectModel
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public ActionBlockItem ActionBlockItem { get; }
|
public ActionBlockItem ActionBlockItem { get; } = new ActionBlockItem(BlockAction.Show);
|
||||||
|
|
||||||
public ObservableCollection<IItemFilterBlockItem> BlockItems { get; }
|
public ObservableCollection<IItemFilterBlockItem> BlockItems { get; }
|
||||||
|
|
||||||
|
|
|
@ -37,6 +37,7 @@ namespace Filtration.ObjectModel
|
||||||
public class ItemFilterScript : IItemFilterScriptInternal
|
public class ItemFilterScript : IItemFilterScriptInternal
|
||||||
{
|
{
|
||||||
private bool _isDirty;
|
private bool _isDirty;
|
||||||
|
private string _description;
|
||||||
|
|
||||||
internal ItemFilterScript()
|
internal ItemFilterScript()
|
||||||
{
|
{
|
||||||
|
@ -65,7 +66,18 @@ namespace Filtration.ObjectModel
|
||||||
public IItemFilterScriptSettings ItemFilterScriptSettings { get; }
|
public IItemFilterScriptSettings ItemFilterScriptSettings { get; }
|
||||||
|
|
||||||
public string FilePath { get; set; }
|
public string FilePath { get; set; }
|
||||||
public string Description { get; set; }
|
|
||||||
|
public string Description
|
||||||
|
{
|
||||||
|
get => _description;
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (value == _description) return;
|
||||||
|
_description = value;
|
||||||
|
OnPropertyChanged();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public DateTime DateModified { get; set; }
|
public DateTime DateModified { get; set; }
|
||||||
|
|
||||||
public bool IsDirty
|
public bool IsDirty
|
||||||
|
|
|
@ -5,10 +5,11 @@ namespace Filtration.Parser.Interface.Services
|
||||||
{
|
{
|
||||||
public interface IItemFilterBlockTranslator
|
public interface IItemFilterBlockTranslator
|
||||||
{
|
{
|
||||||
IItemFilterBlock TranslateStringToItemFilterBlock(string inputString, IItemFilterScriptSettings itemFilterScriptSettings);
|
IItemFilterBlock TranslateStringToItemFilterBlock(string inputString, IItemFilterScript parentItemFilterScript, bool initialiseBlockGroupHierarchyBuilder = false);
|
||||||
|
IItemFilterCommentBlock TranslateStringToItemFilterCommentBlock(string inputString, IItemFilterScript parentItemFilterScript);
|
||||||
|
|
||||||
string TranslateItemFilterBlockToString(IItemFilterBlock block);
|
string TranslateItemFilterBlockToString(IItemFilterBlock block);
|
||||||
void ReplaceAudioVisualBlockItemsFromString(ObservableCollection<IItemFilterBlockItem> blockItems, string inputString);
|
void ReplaceAudioVisualBlockItemsFromString(ObservableCollection<IItemFilterBlockItem> blockItems, string inputString);
|
||||||
IItemFilterCommentBlock TranslateStringToItemFilterCommentBlock(string inputString);
|
|
||||||
string TranslateItemFilterCommentBlockToString(IItemFilterCommentBlock itemFilterCommentBlock);
|
string TranslateItemFilterCommentBlockToString(IItemFilterCommentBlock itemFilterCommentBlock);
|
||||||
string TranslateItemFilterBlockBaseToString(IItemFilterBlockBase itemFilterBlockBase);
|
string TranslateItemFilterBlockBaseToString(IItemFilterBlockBase itemFilterBlockBase);
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,7 +33,7 @@ namespace Filtration.Parser.Tests.Services
|
||||||
var testInputString = "# This is a comment\r\n# Line 2 \r\n # Test";
|
var testInputString = "# This is a comment\r\n# Line 2 \r\n # Test";
|
||||||
|
|
||||||
//Act
|
//Act
|
||||||
var result = _testUtility.Translator.TranslateStringToItemFilterCommentBlock(testInputString);
|
var result = _testUtility.Translator.TranslateStringToItemFilterCommentBlock(testInputString, Mock.Of<IItemFilterScript>());
|
||||||
|
|
||||||
//Assert
|
//Assert
|
||||||
Assert.AreEqual(" This is a comment\r\n Line 2 \r\n Test", result.Comment);
|
Assert.AreEqual(" This is a comment\r\n Line 2 \r\n Test", result.Comment);
|
||||||
|
@ -52,7 +52,7 @@ namespace Filtration.Parser.Tests.Services
|
||||||
.Returns(inputBlockGroup);
|
.Returns(inputBlockGroup);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, Mock.Of<IItemFilterScriptSettings>(i => i.BlockGroupsEnabled));
|
var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, Mock.Of<IItemFilterScript>(i => i.ItemFilterScriptSettings.BlockGroupsEnabled));
|
||||||
|
|
||||||
//Assert
|
//Assert
|
||||||
Assert.IsTrue(string.IsNullOrEmpty(result.ActionBlockItem.Comment));
|
Assert.IsTrue(string.IsNullOrEmpty(result.ActionBlockItem.Comment));
|
||||||
|
@ -68,7 +68,7 @@ namespace Filtration.Parser.Tests.Services
|
||||||
var inputString = $"Show #{testInputExpectedComment}" + Environment.NewLine;
|
var inputString = $"Show #{testInputExpectedComment}" + Environment.NewLine;
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, Mock.Of<IItemFilterScriptSettings>(i => i.BlockGroupsEnabled == false));
|
var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, Mock.Of<IItemFilterScript>(i => i.ItemFilterScriptSettings.BlockGroupsEnabled == false));
|
||||||
|
|
||||||
//Assert
|
//Assert
|
||||||
Assert.AreEqual(testInputExpectedComment, result.ActionBlockItem.Comment);
|
Assert.AreEqual(testInputExpectedComment, result.ActionBlockItem.Comment);
|
||||||
|
@ -82,7 +82,7 @@ namespace Filtration.Parser.Tests.Services
|
||||||
" ItemLevel >= 55";
|
" ItemLevel >= 55";
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, Mock.Of<IItemFilterScriptSettings>());
|
var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, _testUtility.MockItemFilterScript);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.AreEqual(true, result.Enabled);
|
Assert.AreEqual(true, result.Enabled);
|
||||||
|
@ -96,7 +96,7 @@ namespace Filtration.Parser.Tests.Services
|
||||||
" ItemLevel >= 55";
|
" ItemLevel >= 55";
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, Mock.Of<IItemFilterScriptSettings>());
|
var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, _testUtility.MockItemFilterScript);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.AreEqual(2, result.BlockItems.Count);
|
Assert.AreEqual(2, result.BlockItems.Count);
|
||||||
|
@ -112,7 +112,7 @@ namespace Filtration.Parser.Tests.Services
|
||||||
" ItemLevel >= 55";
|
" ItemLevel >= 55";
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, Mock.Of<IItemFilterScriptSettings>());
|
var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, _testUtility.MockItemFilterScript);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.AreEqual(1, result.BlockItems.Count(b => b is ItemLevelBlockItem));
|
Assert.AreEqual(1, result.BlockItems.Count(b => b is ItemLevelBlockItem));
|
||||||
|
@ -130,7 +130,7 @@ namespace Filtration.Parser.Tests.Services
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
_testUtility.MockBlockGroupHierarchyBuilder.Setup(b => b.IntegrateStringListIntoBlockGroupHierarchy(It.IsAny<IEnumerable<string>>())).Returns(inputBlockGroup).Verifiable();
|
_testUtility.MockBlockGroupHierarchyBuilder.Setup(b => b.IntegrateStringListIntoBlockGroupHierarchy(It.IsAny<IEnumerable<string>>())).Returns(inputBlockGroup).Verifiable();
|
||||||
_testUtility.Translator.TranslateStringToItemFilterBlock(inputString, Mock.Of<IItemFilterScriptSettings>(i => i.BlockGroupsEnabled));
|
_testUtility.Translator.TranslateStringToItemFilterBlock(inputString, Mock.Of<IItemFilterScript>(i => i.ItemFilterScriptSettings.BlockGroupsEnabled));
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.AreEqual(true, inputBlockGroup.IsChecked);
|
Assert.AreEqual(true, inputBlockGroup.IsChecked);
|
||||||
|
@ -145,7 +145,7 @@ namespace Filtration.Parser.Tests.Services
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
_testUtility.MockBlockGroupHierarchyBuilder.Setup(b => b.IntegrateStringListIntoBlockGroupHierarchy(It.IsAny<IEnumerable<string>>())).Returns(inputBlockGroup).Verifiable();
|
_testUtility.MockBlockGroupHierarchyBuilder.Setup(b => b.IntegrateStringListIntoBlockGroupHierarchy(It.IsAny<IEnumerable<string>>())).Returns(inputBlockGroup).Verifiable();
|
||||||
_testUtility.Translator.TranslateStringToItemFilterBlock(inputString, Mock.Of<IItemFilterScriptSettings>(i => i.BlockGroupsEnabled));
|
_testUtility.Translator.TranslateStringToItemFilterBlock(inputString, Mock.Of<IItemFilterScript>(i => i.ItemFilterScriptSettings.BlockGroupsEnabled));
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.AreEqual(false, inputBlockGroup.IsChecked);
|
Assert.AreEqual(false, inputBlockGroup.IsChecked);
|
||||||
|
@ -160,7 +160,7 @@ namespace Filtration.Parser.Tests.Services
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
_testUtility.MockBlockGroupHierarchyBuilder.Setup(b => b.IntegrateStringListIntoBlockGroupHierarchy(It.IsAny<IEnumerable<string>>())).Returns(inputBlockGroup).Verifiable();
|
_testUtility.MockBlockGroupHierarchyBuilder.Setup(b => b.IntegrateStringListIntoBlockGroupHierarchy(It.IsAny<IEnumerable<string>>())).Returns(inputBlockGroup).Verifiable();
|
||||||
_testUtility.Translator.TranslateStringToItemFilterBlock(inputString, Mock.Of<IItemFilterScriptSettings>(i => i.BlockGroupsEnabled));
|
_testUtility.Translator.TranslateStringToItemFilterBlock(inputString, Mock.Of<IItemFilterScript>(i => i.ItemFilterScriptSettings.BlockGroupsEnabled));
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
_testUtility.MockBlockGroupHierarchyBuilder.Verify();
|
_testUtility.MockBlockGroupHierarchyBuilder.Verify();
|
||||||
|
@ -174,7 +174,7 @@ namespace Filtration.Parser.Tests.Services
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
_testUtility.MockBlockGroupHierarchyBuilder.Setup(b => b.IntegrateStringListIntoBlockGroupHierarchy(It.IsAny<IEnumerable<string>>())).Verifiable();
|
_testUtility.MockBlockGroupHierarchyBuilder.Setup(b => b.IntegrateStringListIntoBlockGroupHierarchy(It.IsAny<IEnumerable<string>>())).Verifiable();
|
||||||
_testUtility.Translator.TranslateStringToItemFilterBlock(inputString, Mock.Of<IItemFilterScriptSettings>(i => i.BlockGroupsEnabled));
|
_testUtility.Translator.TranslateStringToItemFilterBlock(inputString, Mock.Of<IItemFilterScript>(i => i.ItemFilterScriptSettings.BlockGroupsEnabled));
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
_testUtility.MockBlockGroupHierarchyBuilder.Verify(b => b.IntegrateStringListIntoBlockGroupHierarchy(It.IsAny<IEnumerable<string>>()), Times.Never);
|
_testUtility.MockBlockGroupHierarchyBuilder.Verify(b => b.IntegrateStringListIntoBlockGroupHierarchy(It.IsAny<IEnumerable<string>>()), Times.Never);
|
||||||
|
@ -187,7 +187,7 @@ namespace Filtration.Parser.Tests.Services
|
||||||
var inputString = "Show #" + Environment.NewLine;
|
var inputString = "Show #" + Environment.NewLine;
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
_testUtility.Translator.TranslateStringToItemFilterBlock(inputString, Mock.Of<IItemFilterScriptSettings>(i => i.BlockGroupsEnabled));
|
_testUtility.Translator.TranslateStringToItemFilterBlock(inputString, Mock.Of<IItemFilterScript>(i => i.ItemFilterScriptSettings.BlockGroupsEnabled));
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
_testUtility.MockBlockGroupHierarchyBuilder.Verify(b => b.IntegrateStringListIntoBlockGroupHierarchy(It.IsAny<IEnumerable<string>>()), Times.Never);
|
_testUtility.MockBlockGroupHierarchyBuilder.Verify(b => b.IntegrateStringListIntoBlockGroupHierarchy(It.IsAny<IEnumerable<string>>()), Times.Never);
|
||||||
|
@ -206,7 +206,7 @@ namespace Filtration.Parser.Tests.Services
|
||||||
.Returns(testBlockGroup)
|
.Returns(testBlockGroup)
|
||||||
.Verifiable();
|
.Verifiable();
|
||||||
|
|
||||||
var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, Mock.Of<IItemFilterScriptSettings>(i => i.BlockGroupsEnabled));
|
var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, Mock.Of<IItemFilterScript>(i => i.ItemFilterScriptSettings.BlockGroupsEnabled));
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.AreEqual(testBlockGroup, result.BlockGroup);
|
Assert.AreEqual(testBlockGroup, result.BlockGroup);
|
||||||
|
@ -226,7 +226,7 @@ namespace Filtration.Parser.Tests.Services
|
||||||
.Returns(testBlockGroup)
|
.Returns(testBlockGroup)
|
||||||
.Verifiable();
|
.Verifiable();
|
||||||
|
|
||||||
var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, Mock.Of<IItemFilterScriptSettings>(i => i.BlockGroupsEnabled));
|
var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, Mock.Of<IItemFilterScript>(i => i.ItemFilterScriptSettings.BlockGroupsEnabled));
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.AreEqual(testBlockGroup, result.BlockGroup);
|
Assert.AreEqual(testBlockGroup, result.BlockGroup);
|
||||||
|
@ -240,7 +240,7 @@ namespace Filtration.Parser.Tests.Services
|
||||||
var inputString = "Show # AAA - BBB - CCC" + Environment.NewLine;
|
var inputString = "Show # AAA - BBB - CCC" + Environment.NewLine;
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, Mock.Of<IItemFilterScriptSettings>(i => i.BlockGroupsEnabled == false));
|
var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, Mock.Of<IItemFilterScript>(i => i.ItemFilterScriptSettings.BlockGroupsEnabled == false));
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.IsNull(result.BlockGroup);
|
Assert.IsNull(result.BlockGroup);
|
||||||
|
@ -254,7 +254,7 @@ namespace Filtration.Parser.Tests.Services
|
||||||
var inputString = "Hide" + Environment.NewLine;
|
var inputString = "Hide" + Environment.NewLine;
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, Mock.Of<IItemFilterScriptSettings>());
|
var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, _testUtility.MockItemFilterScript);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.AreEqual(1, result.BlockItems.Count(b => b is ActionBlockItem));
|
Assert.AreEqual(1, result.BlockItems.Count(b => b is ActionBlockItem));
|
||||||
|
@ -270,7 +270,7 @@ namespace Filtration.Parser.Tests.Services
|
||||||
" ItemLevel >= 55";
|
" ItemLevel >= 55";
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, Mock.Of<IItemFilterScriptSettings>());
|
var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, _testUtility.MockItemFilterScript);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.AreEqual("This is a test Block", result.Description);
|
Assert.AreEqual("This is a test Block", result.Description);
|
||||||
|
@ -290,7 +290,7 @@ namespace Filtration.Parser.Tests.Services
|
||||||
" ItemLevel >= 55";
|
" ItemLevel >= 55";
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, Mock.Of<IItemFilterScriptSettings>());
|
var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, _testUtility.MockItemFilterScript);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.AreEqual("Second Line", result.Description);
|
Assert.AreEqual("Second Line", result.Description);
|
||||||
|
@ -308,7 +308,7 @@ namespace Filtration.Parser.Tests.Services
|
||||||
" DropLevel = 40";
|
" DropLevel = 40";
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, Mock.Of<IItemFilterScriptSettings>());
|
var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, _testUtility.MockItemFilterScript);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
|
|
||||||
|
@ -326,7 +326,7 @@ namespace Filtration.Parser.Tests.Services
|
||||||
" Corrupted True";
|
" Corrupted True";
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, Mock.Of<IItemFilterScriptSettings>());
|
var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, _testUtility.MockItemFilterScript);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
|
|
||||||
|
@ -343,7 +343,7 @@ namespace Filtration.Parser.Tests.Services
|
||||||
" Identified True";
|
" Identified True";
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, Mock.Of<IItemFilterScriptSettings>());
|
var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, _testUtility.MockItemFilterScript);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
|
|
||||||
|
@ -360,7 +360,7 @@ namespace Filtration.Parser.Tests.Services
|
||||||
" Quality < 18";
|
" Quality < 18";
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, Mock.Of<IItemFilterScriptSettings>());
|
var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, _testUtility.MockItemFilterScript);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
|
|
||||||
|
@ -378,7 +378,7 @@ namespace Filtration.Parser.Tests.Services
|
||||||
" Rarity > Normal";
|
" Rarity > Normal";
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, Mock.Of<IItemFilterScriptSettings>());
|
var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, _testUtility.MockItemFilterScript);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
|
|
||||||
|
@ -396,7 +396,7 @@ namespace Filtration.Parser.Tests.Services
|
||||||
" Rarity Normal";
|
" Rarity Normal";
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, Mock.Of<IItemFilterScriptSettings>());
|
var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, _testUtility.MockItemFilterScript);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.AreEqual(1, result.BlockItems.Count(b => b is RarityBlockItem));
|
Assert.AreEqual(1, result.BlockItems.Count(b => b is RarityBlockItem));
|
||||||
|
@ -413,7 +413,7 @@ namespace Filtration.Parser.Tests.Services
|
||||||
@" Class ""Test Class 1"" ""TestOneWordClassInQuotes"" TestOneWordClassNotInQuotes ""Test Class 2""";
|
@" Class ""Test Class 1"" ""TestOneWordClassInQuotes"" TestOneWordClassNotInQuotes ""Test Class 2""";
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, Mock.Of<IItemFilterScriptSettings>());
|
var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, _testUtility.MockItemFilterScript);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.AreEqual(1, result.BlockItems.Count(b => b is ClassBlockItem));
|
Assert.AreEqual(1, result.BlockItems.Count(b => b is ClassBlockItem));
|
||||||
|
@ -432,7 +432,7 @@ namespace Filtration.Parser.Tests.Services
|
||||||
@" BaseType ""Test Base Type 1"" ""TestOneWordBaseTypeInQuotes"" TestOneWordBaseTypeNotInQuotes ""Test BaseType 2""";
|
@" BaseType ""Test Base Type 1"" ""TestOneWordBaseTypeInQuotes"" TestOneWordBaseTypeNotInQuotes ""Test BaseType 2""";
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, Mock.Of<IItemFilterScriptSettings>());
|
var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, _testUtility.MockItemFilterScript);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.AreEqual(1, result.BlockItems.Count(b => b is BaseTypeBlockItem));
|
Assert.AreEqual(1, result.BlockItems.Count(b => b is BaseTypeBlockItem));
|
||||||
|
@ -451,7 +451,7 @@ namespace Filtration.Parser.Tests.Services
|
||||||
" Sockets > 2";
|
" Sockets > 2";
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, Mock.Of<IItemFilterScriptSettings>());
|
var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, _testUtility.MockItemFilterScript);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
|
|
||||||
|
@ -469,7 +469,7 @@ namespace Filtration.Parser.Tests.Services
|
||||||
" LinkedSockets > 1";
|
" LinkedSockets > 1";
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, Mock.Of<IItemFilterScriptSettings>());
|
var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, _testUtility.MockItemFilterScript);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
|
|
||||||
|
@ -487,7 +487,7 @@ namespace Filtration.Parser.Tests.Services
|
||||||
" Width = 1";
|
" Width = 1";
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, Mock.Of<IItemFilterScriptSettings>());
|
var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, _testUtility.MockItemFilterScript);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
|
|
||||||
|
@ -505,7 +505,7 @@ namespace Filtration.Parser.Tests.Services
|
||||||
" Height <= 3";
|
" Height <= 3";
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, Mock.Of<IItemFilterScriptSettings>());
|
var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, _testUtility.MockItemFilterScript);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
|
|
||||||
|
@ -523,7 +523,7 @@ namespace Filtration.Parser.Tests.Services
|
||||||
" Height <=3";
|
" Height <=3";
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, Mock.Of<IItemFilterScriptSettings>());
|
var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, _testUtility.MockItemFilterScript);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.AreEqual(1, result.BlockItems.Count(b => b is HeightBlockItem));
|
Assert.AreEqual(1, result.BlockItems.Count(b => b is HeightBlockItem));
|
||||||
|
@ -540,7 +540,7 @@ namespace Filtration.Parser.Tests.Services
|
||||||
" SocketGroup RRGB";
|
" SocketGroup RRGB";
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, Mock.Of<IItemFilterScriptSettings>());
|
var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, _testUtility.MockItemFilterScript);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.AreEqual(1, result.BlockItems.Count(b => b is SocketGroupBlockItem));
|
Assert.AreEqual(1, result.BlockItems.Count(b => b is SocketGroupBlockItem));
|
||||||
|
@ -558,7 +558,7 @@ namespace Filtration.Parser.Tests.Services
|
||||||
" SetTextColor 255 20 100";
|
" SetTextColor 255 20 100";
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, Mock.Of<IItemFilterScriptSettings>());
|
var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, _testUtility.MockItemFilterScript);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.AreEqual(1, result.BlockItems.Count(b => b is TextColorBlockItem));
|
Assert.AreEqual(1, result.BlockItems.Count(b => b is TextColorBlockItem));
|
||||||
|
@ -576,7 +576,7 @@ namespace Filtration.Parser.Tests.Services
|
||||||
" SetTextColor 65 0 255 12";
|
" SetTextColor 65 0 255 12";
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, Mock.Of<IItemFilterScriptSettings>());
|
var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, _testUtility.MockItemFilterScript);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.AreEqual(1, result.BlockItems.Count(b => b is TextColorBlockItem));
|
Assert.AreEqual(1, result.BlockItems.Count(b => b is TextColorBlockItem));
|
||||||
|
@ -595,7 +595,7 @@ namespace Filtration.Parser.Tests.Services
|
||||||
" SetBackgroundColor 255 20 100";
|
" SetBackgroundColor 255 20 100";
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, Mock.Of<IItemFilterScriptSettings>());
|
var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, _testUtility.MockItemFilterScript);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.AreEqual(1, result.BlockItems.Count(b => b is BackgroundColorBlockItem));
|
Assert.AreEqual(1, result.BlockItems.Count(b => b is BackgroundColorBlockItem));
|
||||||
|
@ -614,7 +614,7 @@ namespace Filtration.Parser.Tests.Services
|
||||||
" SetBorderColor 255 20 100";
|
" SetBorderColor 255 20 100";
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, Mock.Of<IItemFilterScriptSettings>());
|
var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, _testUtility.MockItemFilterScript);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.AreEqual(1, result.BlockItems.Count(b => b is BorderColorBlockItem));
|
Assert.AreEqual(1, result.BlockItems.Count(b => b is BorderColorBlockItem));
|
||||||
|
@ -633,8 +633,8 @@ namespace Filtration.Parser.Tests.Services
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
|
|
||||||
Assert.DoesNotThrow(() => _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, Mock.Of<IItemFilterScriptSettings>()));
|
Assert.DoesNotThrow(() => _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, _testUtility.MockItemFilterScript));
|
||||||
var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, Mock.Of<IItemFilterScriptSettings>());
|
var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, _testUtility.MockItemFilterScript);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.AreEqual(1, result.BlockItems.Count(b => b is BorderColorBlockItem));
|
Assert.AreEqual(1, result.BlockItems.Count(b => b is BorderColorBlockItem));
|
||||||
|
@ -652,10 +652,9 @@ namespace Filtration.Parser.Tests.Services
|
||||||
" SetTextColor 255 20 100 # Rare Item Text";
|
" SetTextColor 255 20 100 # Rare Item Text";
|
||||||
var testComponent = new ThemeComponent(ThemeComponentType.TextColor, "Rare Item Text", new Color { R = 255, G = 20, B = 100});
|
var testComponent = new ThemeComponent(ThemeComponentType.TextColor, "Rare Item Text", new Color { R = 255, G = 20, B = 100});
|
||||||
var testInputThemeComponentCollection = new ThemeComponentCollection { testComponent };
|
var testInputThemeComponentCollection = new ThemeComponentCollection { testComponent };
|
||||||
var testInputItemFilterScriptSettings = Mock.Of<IItemFilterScriptSettings>(i => i.ThemeComponentCollection == testInputThemeComponentCollection);
|
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, testInputItemFilterScriptSettings);
|
var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, Mock.Of<IItemFilterScript>(i => i.ItemFilterScriptSettings.ThemeComponentCollection == testInputThemeComponentCollection));
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
var blockItem = result.BlockItems.OfType<TextColorBlockItem>().First();
|
var blockItem = result.BlockItems.OfType<TextColorBlockItem>().First();
|
||||||
|
@ -673,7 +672,7 @@ namespace Filtration.Parser.Tests.Services
|
||||||
" SetFontSize 15";
|
" SetFontSize 15";
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, Mock.Of<IItemFilterScriptSettings>());
|
var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, _testUtility.MockItemFilterScript);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.AreEqual(1, result.BlockItems.Count(b => b is FontSizeBlockItem));
|
Assert.AreEqual(1, result.BlockItems.Count(b => b is FontSizeBlockItem));
|
||||||
|
@ -690,7 +689,7 @@ namespace Filtration.Parser.Tests.Services
|
||||||
" PlayAlertSound 4";
|
" PlayAlertSound 4";
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, Mock.Of<IItemFilterScriptSettings>());
|
var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, _testUtility.MockItemFilterScript);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.AreEqual(1, result.BlockItems.Count(b => b is SoundBlockItem));
|
Assert.AreEqual(1, result.BlockItems.Count(b => b is SoundBlockItem));
|
||||||
|
@ -708,7 +707,7 @@ namespace Filtration.Parser.Tests.Services
|
||||||
" PlayAlertSound 2 95";
|
" PlayAlertSound 2 95";
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, Mock.Of<IItemFilterScriptSettings>());
|
var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, _testUtility.MockItemFilterScript);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.AreEqual(1, result.BlockItems.Count(b => b is SoundBlockItem));
|
Assert.AreEqual(1, result.BlockItems.Count(b => b is SoundBlockItem));
|
||||||
|
@ -745,7 +744,7 @@ namespace Filtration.Parser.Tests.Services
|
||||||
" PlayAlertSound 3";
|
" PlayAlertSound 3";
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, Mock.Of<IItemFilterScriptSettings>());
|
var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, _testUtility.MockItemFilterScript);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.AreEqual("Test filter with everything", result.Description);
|
Assert.AreEqual("Test filter with everything", result.Description);
|
||||||
|
@ -833,7 +832,7 @@ namespace Filtration.Parser.Tests.Services
|
||||||
" Quality < 17";
|
" Quality < 17";
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, Mock.Of<IItemFilterScriptSettings>());
|
var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, _testUtility.MockItemFilterScript);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.AreEqual(2, result.BlockItems.Count(b => b is ItemLevelBlockItem));
|
Assert.AreEqual(2, result.BlockItems.Count(b => b is ItemLevelBlockItem));
|
||||||
|
@ -862,7 +861,7 @@ namespace Filtration.Parser.Tests.Services
|
||||||
" SetTextColor 255 20 100";
|
" SetTextColor 255 20 100";
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, Mock.Of<IItemFilterScriptSettings>());
|
var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, _testUtility.MockItemFilterScript);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.AreEqual(1, result.BlockItems.Count(b => b is TextColorBlockItem));
|
Assert.AreEqual(1, result.BlockItems.Count(b => b is TextColorBlockItem));
|
||||||
|
@ -883,7 +882,7 @@ namespace Filtration.Parser.Tests.Services
|
||||||
" SetFontSize 27" + Environment.NewLine;
|
" SetFontSize 27" + Environment.NewLine;
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, Mock.Of<IItemFilterScriptSettings>());
|
var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, _testUtility.MockItemFilterScript);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.AreEqual(1, result.BlockItems.Count(b => b is FontSizeBlockItem));
|
Assert.AreEqual(1, result.BlockItems.Count(b => b is FontSizeBlockItem));
|
||||||
|
@ -902,7 +901,7 @@ namespace Filtration.Parser.Tests.Services
|
||||||
" PlayAlertSound 2" + Environment.NewLine;
|
" PlayAlertSound 2" + Environment.NewLine;
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, Mock.Of<IItemFilterScriptSettings>());
|
var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, _testUtility.MockItemFilterScript);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.AreEqual(1, result.BlockItems.Count(b => b is SoundBlockItem));
|
Assert.AreEqual(1, result.BlockItems.Count(b => b is SoundBlockItem));
|
||||||
|
@ -920,7 +919,7 @@ namespace Filtration.Parser.Tests.Services
|
||||||
" SetBackgroundColor 255 20 100";
|
" SetBackgroundColor 255 20 100";
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, Mock.Of<IItemFilterScriptSettings>());
|
var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, _testUtility.MockItemFilterScript);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.AreEqual(1, result.BlockItems.Count(b => b is BackgroundColorBlockItem));
|
Assert.AreEqual(1, result.BlockItems.Count(b => b is BackgroundColorBlockItem));
|
||||||
|
@ -939,7 +938,7 @@ namespace Filtration.Parser.Tests.Services
|
||||||
" SetBorderColor 255 20 100";
|
" SetBorderColor 255 20 100";
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, Mock.Of<IItemFilterScriptSettings>());
|
var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, _testUtility.MockItemFilterScript);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.AreEqual(1, result.BlockItems.Count(b => b is BorderColorBlockItem));
|
Assert.AreEqual(1, result.BlockItems.Count(b => b is BorderColorBlockItem));
|
||||||
|
@ -967,7 +966,7 @@ namespace Filtration.Parser.Tests.Services
|
||||||
_testUtility.TestBlock.BlockItems.Add(new WidthBlockItem(FilterPredicateOperator.Equal, 4));
|
_testUtility.TestBlock.BlockItems.Add(new WidthBlockItem(FilterPredicateOperator.Equal, 4));
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, Mock.Of<IItemFilterScriptSettings>());
|
var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, _testUtility.MockItemFilterScript);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.AreEqual(1, result.BlockItems.Count(b => b is RarityBlockItem));
|
Assert.AreEqual(1, result.BlockItems.Count(b => b is RarityBlockItem));
|
||||||
|
@ -994,7 +993,7 @@ namespace Filtration.Parser.Tests.Services
|
||||||
_testUtility.TestBlock.BlockItems.Add(new WidthBlockItem(FilterPredicateOperator.Equal, 4));
|
_testUtility.TestBlock.BlockItems.Add(new WidthBlockItem(FilterPredicateOperator.Equal, 4));
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, Mock.Of<IItemFilterScriptSettings>());
|
var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, _testUtility.MockItemFilterScript);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.AreEqual(1, result.BlockItems.Count(b => b is ActionBlockItem));
|
Assert.AreEqual(1, result.BlockItems.Count(b => b is ActionBlockItem));
|
||||||
|
@ -1029,7 +1028,7 @@ namespace Filtration.Parser.Tests.Services
|
||||||
_testUtility.TestBlock.BlockItems.Add(new WidthBlockItem(FilterPredicateOperator.Equal, 4));
|
_testUtility.TestBlock.BlockItems.Add(new WidthBlockItem(FilterPredicateOperator.Equal, 4));
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, Mock.Of<IItemFilterScriptSettings>());
|
var result = _testUtility.Translator.TranslateStringToItemFilterBlock(inputString, _testUtility.MockItemFilterScript);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.AreEqual(1, result.BlockItems.Count(b => b is ActionBlockItem));
|
Assert.AreEqual(1, result.BlockItems.Count(b => b is ActionBlockItem));
|
||||||
|
@ -1870,6 +1869,7 @@ namespace Filtration.Parser.Tests.Services
|
||||||
|
|
||||||
// Mock setups
|
// Mock setups
|
||||||
MockBlockGroupHierarchyBuilder = new Mock<IBlockGroupHierarchyBuilder>();
|
MockBlockGroupHierarchyBuilder = new Mock<IBlockGroupHierarchyBuilder>();
|
||||||
|
MockItemFilterScript = Mock.Of<IItemFilterScript>(i => i.ItemFilterScriptSettings.ThemeComponentCollection == new ThemeComponentCollection());
|
||||||
|
|
||||||
// Class under test instantiation
|
// Class under test instantiation
|
||||||
Translator = new ItemFilterBlockTranslator(MockBlockGroupHierarchyBuilder.Object);
|
Translator = new ItemFilterBlockTranslator(MockBlockGroupHierarchyBuilder.Object);
|
||||||
|
@ -1878,6 +1878,8 @@ namespace Filtration.Parser.Tests.Services
|
||||||
public ItemFilterBlock TestBlock { get; set; }
|
public ItemFilterBlock TestBlock { get; set; }
|
||||||
public Mock<IBlockGroupHierarchyBuilder> MockBlockGroupHierarchyBuilder { get; }
|
public Mock<IBlockGroupHierarchyBuilder> MockBlockGroupHierarchyBuilder { get; }
|
||||||
public ItemFilterBlockTranslator Translator { get; }
|
public ItemFilterBlockTranslator Translator { get; }
|
||||||
|
|
||||||
|
public IItemFilterScript MockItemFilterScript { get; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -40,7 +40,7 @@ namespace Filtration.Parser.Tests.Services
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.AreEqual(5, script.ItemFilterBlocks.Count);
|
Assert.AreEqual(5, script.ItemFilterBlocks.Count);
|
||||||
mockItemFilterBlockTranslator.Verify(t => t.TranslateStringToItemFilterBlock(It.IsAny<string>(), It.IsAny<IItemFilterScriptSettings>()));
|
mockItemFilterBlockTranslator.Verify(t => t.TranslateStringToItemFilterBlock(It.IsAny<string>(), It.IsAny<IItemFilterScript>(), false));
|
||||||
}
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
|
|
|
@ -30,9 +30,9 @@ namespace Filtration.Parser.Services
|
||||||
}
|
}
|
||||||
|
|
||||||
// Converts a string into an ItemFilterCommentBlock maintaining newlines and spaces but removing # characters
|
// Converts a string into an ItemFilterCommentBlock maintaining newlines and spaces but removing # characters
|
||||||
public IItemFilterCommentBlock TranslateStringToItemFilterCommentBlock(string inputString)
|
public IItemFilterCommentBlock TranslateStringToItemFilterCommentBlock(string inputString, IItemFilterScript parentItemFilterScript)
|
||||||
{
|
{
|
||||||
var itemFilterCommentBlock = new ItemFilterCommentBlock();
|
var itemFilterCommentBlock = new ItemFilterCommentBlock(parentItemFilterScript);
|
||||||
|
|
||||||
foreach (var line in new LineReader(() => new StringReader(inputString)))
|
foreach (var line in new LineReader(() => new StringReader(inputString)))
|
||||||
{
|
{
|
||||||
|
@ -47,10 +47,15 @@ namespace Filtration.Parser.Services
|
||||||
|
|
||||||
// This method converts a string into a ItemFilterBlock. This is used for pasting ItemFilterBlocks
|
// This method converts a string into a ItemFilterBlock. This is used for pasting ItemFilterBlocks
|
||||||
// and reading ItemFilterScripts from a file.
|
// and reading ItemFilterScripts from a file.
|
||||||
public IItemFilterBlock TranslateStringToItemFilterBlock(string inputString, IItemFilterScriptSettings itemFilterScriptSettings)
|
public IItemFilterBlock TranslateStringToItemFilterBlock(string inputString, IItemFilterScript parentItemFilterScript, bool initialiseBlockGroupHierarchyBuilder = false)
|
||||||
{
|
{
|
||||||
_masterComponentCollection = itemFilterScriptSettings.ThemeComponentCollection;
|
if (initialiseBlockGroupHierarchyBuilder)
|
||||||
var block = new ItemFilterBlock();
|
{
|
||||||
|
_blockGroupHierarchyBuilder.Initialise(parentItemFilterScript.ItemFilterBlockGroups.First());
|
||||||
|
}
|
||||||
|
|
||||||
|
_masterComponentCollection = parentItemFilterScript.ItemFilterScriptSettings.ThemeComponentCollection;
|
||||||
|
var block = new ItemFilterBlock(parentItemFilterScript);
|
||||||
var showHideFound = false;
|
var showHideFound = false;
|
||||||
|
|
||||||
foreach (var line in new LineReader(() => new StringReader(inputString)))
|
foreach (var line in new LineReader(() => new StringReader(inputString)))
|
||||||
|
@ -78,7 +83,7 @@ namespace Filtration.Parser.Services
|
||||||
|
|
||||||
// If block groups are enabled for this script, the comment after Show/Hide is parsed as a block
|
// If block groups are enabled for this script, the comment after Show/Hide is parsed as a block
|
||||||
// group hierarchy, if block groups are disabled it is preserved as a simple text comment.
|
// group hierarchy, if block groups are disabled it is preserved as a simple text comment.
|
||||||
if (itemFilterScriptSettings.BlockGroupsEnabled)
|
if (parentItemFilterScript.ItemFilterScriptSettings.BlockGroupsEnabled)
|
||||||
{
|
{
|
||||||
AddBlockGroupToBlock(block, trimmedLine);
|
AddBlockGroupToBlock(block, trimmedLine);
|
||||||
}
|
}
|
||||||
|
|
|
@ -154,11 +154,11 @@ namespace Filtration.Parser.Services
|
||||||
|
|
||||||
if (boundary.Value.BoundaryType == ItemFilterBlockBoundaryType.ItemFilterBlock)
|
if (boundary.Value.BoundaryType == ItemFilterBlockBoundaryType.ItemFilterBlock)
|
||||||
{
|
{
|
||||||
script.ItemFilterBlocks.Add(_blockTranslator.TranslateStringToItemFilterBlock(blockString, script.ItemFilterScriptSettings));
|
script.ItemFilterBlocks.Add(_blockTranslator.TranslateStringToItemFilterBlock(blockString, script));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
script.ItemFilterBlocks.Add(_blockTranslator.TranslateStringToItemFilterCommentBlock(blockString));
|
script.ItemFilterBlocks.Add(_blockTranslator.TranslateStringToItemFilterCommentBlock(blockString, script));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -6,6 +6,7 @@ using Filtration.ObjectModel.Factories;
|
||||||
using Filtration.Repositories;
|
using Filtration.Repositories;
|
||||||
using Filtration.Services;
|
using Filtration.Services;
|
||||||
using Filtration.ViewModels;
|
using Filtration.ViewModels;
|
||||||
|
using Filtration.ViewModels.Factories;
|
||||||
using FluentAssertions;
|
using FluentAssertions;
|
||||||
using Moq;
|
using Moq;
|
||||||
using NUnit.Framework;
|
using NUnit.Framework;
|
||||||
|
|
|
@ -184,11 +184,14 @@
|
||||||
<Compile Include="Utility\RoutedCommandHandler.cs" />
|
<Compile Include="Utility\RoutedCommandHandler.cs" />
|
||||||
<Compile Include="Utility\RoutedCommandHandlers.cs" />
|
<Compile Include="Utility\RoutedCommandHandlers.cs" />
|
||||||
<Compile Include="ViewModels\AvalonDockWorkspaceViewModel.cs" />
|
<Compile Include="ViewModels\AvalonDockWorkspaceViewModel.cs" />
|
||||||
<Compile Include="ViewModels\IItemFilterCommentBlockViewModelFactory.cs" />
|
<Compile Include="ViewModels\Factories\IItemFilterCommentBlockViewModelFactory.cs" />
|
||||||
|
<Compile Include="ViewModels\Factories\ItemFilterBlockBaseViewModelFactory.cs" />
|
||||||
|
<Compile Include="ViewModels\ItemFilterBlockViewModelBase.cs" />
|
||||||
|
<Compile Include="ViewModels\ItemFilterCommentBlockViewModel.cs" />
|
||||||
<Compile Include="ViewModels\SettingsPageViewModel.cs" />
|
<Compile Include="ViewModels\SettingsPageViewModel.cs" />
|
||||||
<Compile Include="ViewModels\ToolPanes\BlockGroupBrowserViewModel.cs" />
|
<Compile Include="ViewModels\ToolPanes\BlockGroupBrowserViewModel.cs" />
|
||||||
<Compile Include="ViewModels\IItemFilterScriptViewModelFactory.cs" />
|
<Compile Include="ViewModels\Factories\IItemFilterScriptViewModelFactory.cs" />
|
||||||
<Compile Include="ViewModels\IItemFilterBlockViewModelFactory.cs" />
|
<Compile Include="ViewModels\Factories\IItemFilterBlockViewModelFactory.cs" />
|
||||||
<Compile Include="ViewModels\ItemFilterBlockGroupViewModel.cs" />
|
<Compile Include="ViewModels\ItemFilterBlockGroupViewModel.cs" />
|
||||||
<Compile Include="ViewModels\ItemFilterBlockViewModel.cs" />
|
<Compile Include="ViewModels\ItemFilterBlockViewModel.cs" />
|
||||||
<Compile Include="ViewModels\ItemFilterScriptViewModel.cs" />
|
<Compile Include="ViewModels\ItemFilterScriptViewModel.cs" />
|
||||||
|
@ -443,6 +446,8 @@
|
||||||
<Resource Include="Resources\Icons\ThemeComponentDelete.ico" />
|
<Resource Include="Resources\Icons\ThemeComponentDelete.ico" />
|
||||||
<Resource Include="Resources\Icons\standby_disabled_icon.png" />
|
<Resource Include="Resources\Icons\standby_disabled_icon.png" />
|
||||||
<Resource Include="Resources\Icons\standby_enabled_icon.png" />
|
<Resource Include="Resources\Icons\standby_enabled_icon.png" />
|
||||||
|
<Resource Include="Resources\Icons\redo_icon.png" />
|
||||||
|
<Resource Include="Resources\Icons\undo_icon.png" />
|
||||||
<Content Include="Resources\ItemBaseTypes.txt" />
|
<Content Include="Resources\ItemBaseTypes.txt" />
|
||||||
<Content Include="Resources\ItemClasses.txt" />
|
<Content Include="Resources\ItemClasses.txt" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
|
@ -3,6 +3,7 @@ using Filtration.ObjectModel;
|
||||||
using Filtration.ObjectModel.Factories;
|
using Filtration.ObjectModel.Factories;
|
||||||
using Filtration.Services;
|
using Filtration.Services;
|
||||||
using Filtration.ViewModels;
|
using Filtration.ViewModels;
|
||||||
|
using Filtration.ViewModels.Factories;
|
||||||
|
|
||||||
namespace Filtration.Repositories
|
namespace Filtration.Repositories
|
||||||
{
|
{
|
||||||
|
|
Binary file not shown.
After Width: | Height: | Size: 579 B |
Binary file not shown.
After Width: | Height: | Size: 339 B |
|
@ -1,4 +1,4 @@
|
||||||
namespace Filtration.ViewModels
|
namespace Filtration.ViewModels.Factories
|
||||||
{
|
{
|
||||||
internal interface IItemFilterBlockViewModelFactory
|
internal interface IItemFilterBlockViewModelFactory
|
||||||
{
|
{
|
|
@ -1,4 +1,4 @@
|
||||||
namespace Filtration.ViewModels
|
namespace Filtration.ViewModels.Factories
|
||||||
{
|
{
|
||||||
internal interface IItemFilterCommentBlockViewModelFactory
|
internal interface IItemFilterCommentBlockViewModelFactory
|
||||||
{
|
{
|
|
@ -1,4 +1,4 @@
|
||||||
namespace Filtration.ViewModels
|
namespace Filtration.ViewModels.Factories
|
||||||
{
|
{
|
||||||
internal interface IItemFilterScriptViewModelFactory
|
internal interface IItemFilterScriptViewModelFactory
|
||||||
{
|
{
|
|
@ -0,0 +1,37 @@
|
||||||
|
using System;
|
||||||
|
using Filtration.ObjectModel;
|
||||||
|
|
||||||
|
namespace Filtration.ViewModels.Factories
|
||||||
|
{
|
||||||
|
internal interface IItemFilterBlockBaseViewModelFactory
|
||||||
|
{
|
||||||
|
IItemFilterBlockViewModelBase Create(IItemFilterBlockBase itemFilterBlockBase);
|
||||||
|
}
|
||||||
|
|
||||||
|
internal class ItemFilterBlockBaseViewModelFactory : IItemFilterBlockBaseViewModelFactory
|
||||||
|
{
|
||||||
|
private readonly IItemFilterBlockViewModelFactory _itemFilterBlockViewModelFactory;
|
||||||
|
private readonly IItemFilterCommentBlockViewModelFactory _itemFilterCommentBlockViewModelFactory;
|
||||||
|
|
||||||
|
public ItemFilterBlockBaseViewModelFactory(IItemFilterBlockViewModelFactory itemFilterBlockViewModelFactory,
|
||||||
|
IItemFilterCommentBlockViewModelFactory itemFilterCommentBlockViewModelFactory)
|
||||||
|
{
|
||||||
|
_itemFilterBlockViewModelFactory = itemFilterBlockViewModelFactory;
|
||||||
|
_itemFilterCommentBlockViewModelFactory = itemFilterCommentBlockViewModelFactory;
|
||||||
|
}
|
||||||
|
|
||||||
|
public IItemFilterBlockViewModelBase Create(IItemFilterBlockBase itemFilterBlockBase)
|
||||||
|
{
|
||||||
|
if (itemFilterBlockBase is IItemFilterBlock)
|
||||||
|
{
|
||||||
|
return _itemFilterBlockViewModelFactory.Create();
|
||||||
|
}
|
||||||
|
if (itemFilterBlockBase is IItemFilterCommentBlock)
|
||||||
|
{
|
||||||
|
return _itemFilterCommentBlockViewModelFactory.Create();
|
||||||
|
}
|
||||||
|
|
||||||
|
throw new InvalidOperationException("Unknown IItemFilterBlockBase type");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -9,7 +9,6 @@ using Filtration.ObjectModel.BlockItemBaseTypes;
|
||||||
using Filtration.ObjectModel.BlockItemTypes;
|
using Filtration.ObjectModel.BlockItemTypes;
|
||||||
using Filtration.Services;
|
using Filtration.Services;
|
||||||
using Filtration.Views;
|
using Filtration.Views;
|
||||||
using GalaSoft.MvvmLight;
|
|
||||||
using GalaSoft.MvvmLight.CommandWpf;
|
using GalaSoft.MvvmLight.CommandWpf;
|
||||||
using Xceed.Wpf.Toolkit;
|
using Xceed.Wpf.Toolkit;
|
||||||
|
|
||||||
|
@ -17,7 +16,6 @@ namespace Filtration.ViewModels
|
||||||
{
|
{
|
||||||
internal interface IItemFilterBlockViewModel : IItemFilterBlockViewModelBase
|
internal interface IItemFilterBlockViewModel : IItemFilterBlockViewModelBase
|
||||||
{
|
{
|
||||||
void Initialise(IItemFilterBlock itemFilterBlock, ItemFilterScriptViewModel parentScriptViewModel);
|
|
||||||
bool IsExpanded { get; set; }
|
bool IsExpanded { get; set; }
|
||||||
IItemFilterBlock Block { get; }
|
IItemFilterBlock Block { get; }
|
||||||
bool BlockEnabled { get; set; }
|
bool BlockEnabled { get; set; }
|
||||||
|
@ -25,72 +23,12 @@ namespace Filtration.ViewModels
|
||||||
void RefreshBlockPreview();
|
void RefreshBlockPreview();
|
||||||
}
|
}
|
||||||
|
|
||||||
internal interface IItemFilterBlockViewModelBase
|
|
||||||
{
|
|
||||||
IItemFilterBlockBase BaseBlock { get; }
|
|
||||||
bool IsDirty { get; set; }
|
|
||||||
event EventHandler BlockBecameDirty;
|
|
||||||
}
|
|
||||||
|
|
||||||
internal abstract class ItemFilterBlockViewModelBase : ViewModelBase, IItemFilterBlockViewModelBase
|
|
||||||
{
|
|
||||||
private bool _isDirty;
|
|
||||||
|
|
||||||
protected void Initialise(IItemFilterBlockBase itemfilterBlock)
|
|
||||||
{
|
|
||||||
BaseBlock = itemfilterBlock;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public event EventHandler BlockBecameDirty;
|
|
||||||
|
|
||||||
public IItemFilterBlockBase BaseBlock { get; protected set; }
|
|
||||||
|
|
||||||
public bool IsDirty
|
|
||||||
{
|
|
||||||
get => _isDirty;
|
|
||||||
set
|
|
||||||
{
|
|
||||||
if (value != _isDirty)
|
|
||||||
{
|
|
||||||
_isDirty = value;
|
|
||||||
RaisePropertyChanged();
|
|
||||||
BlockBecameDirty?.Invoke(this, EventArgs.Empty);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
internal interface IItemFilterCommentBlockViewModel : IItemFilterBlockViewModelBase
|
|
||||||
{
|
|
||||||
void Initialise(IItemFilterCommentBlock itemFilterCommentBlock);
|
|
||||||
IItemFilterCommentBlock ItemFilterCommentBlock { get; }
|
|
||||||
string Comment { get; }
|
|
||||||
}
|
|
||||||
|
|
||||||
internal class ItemFilterCommentBlockViewModel : ItemFilterBlockViewModelBase, IItemFilterCommentBlockViewModel
|
|
||||||
{
|
|
||||||
public ItemFilterCommentBlockViewModel()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
public void Initialise(IItemFilterCommentBlock itemFilterCommentBlock)
|
|
||||||
{
|
|
||||||
ItemFilterCommentBlock = itemFilterCommentBlock;
|
|
||||||
BaseBlock = itemFilterCommentBlock;
|
|
||||||
}
|
|
||||||
|
|
||||||
public IItemFilterCommentBlock ItemFilterCommentBlock { get; private set; }
|
|
||||||
|
|
||||||
public string Comment => ItemFilterCommentBlock.Comment;
|
|
||||||
}
|
|
||||||
|
|
||||||
internal class ItemFilterBlockViewModel : ItemFilterBlockViewModelBase, IItemFilterBlockViewModel
|
internal class ItemFilterBlockViewModel : ItemFilterBlockViewModelBase, IItemFilterBlockViewModel
|
||||||
{
|
{
|
||||||
private readonly IStaticDataService _staticDataService;
|
private readonly IStaticDataService _staticDataService;
|
||||||
private readonly IReplaceColorsViewModel _replaceColorsViewModel;
|
private readonly IReplaceColorsViewModel _replaceColorsViewModel;
|
||||||
private readonly MediaPlayer _mediaPlayer = new MediaPlayer();
|
private readonly MediaPlayer _mediaPlayer = new MediaPlayer();
|
||||||
private ItemFilterScriptViewModel _parentScriptViewModel;
|
private IItemFilterScriptViewModel _parentScriptViewModel;
|
||||||
|
|
||||||
private bool _displaySettingsPopupOpen;
|
private bool _displaySettingsPopupOpen;
|
||||||
private bool _isExpanded;
|
private bool _isExpanded;
|
||||||
|
@ -120,8 +58,9 @@ namespace Filtration.ViewModels
|
||||||
PlaySoundCommand = new RelayCommand(OnPlaySoundCommand, () => HasSound);
|
PlaySoundCommand = new RelayCommand(OnPlaySoundCommand, () => HasSound);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Initialise(IItemFilterBlock itemFilterBlock, ItemFilterScriptViewModel parentScriptViewModel)
|
public override void Initialise(IItemFilterBlockBase itemFilterBlockBase, IItemFilterScriptViewModel parentScriptViewModel)
|
||||||
{
|
{
|
||||||
|
var itemFilterBlock = itemFilterBlockBase as IItemFilterBlock;
|
||||||
if (itemFilterBlock == null || parentScriptViewModel == null)
|
if (itemFilterBlock == null || parentScriptViewModel == null)
|
||||||
{
|
{
|
||||||
throw new ArgumentNullException(nameof(itemFilterBlock));
|
throw new ArgumentNullException(nameof(itemFilterBlock));
|
||||||
|
@ -139,7 +78,7 @@ namespace Filtration.ViewModels
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
base.Initialise(itemFilterBlock);
|
base.Initialise(itemFilterBlock, parentScriptViewModel);
|
||||||
}
|
}
|
||||||
|
|
||||||
public RelayCommand CopyBlockCommand { get; }
|
public RelayCommand CopyBlockCommand { get; }
|
||||||
|
@ -350,7 +289,7 @@ namespace Filtration.ViewModels
|
||||||
|
|
||||||
private void OnAddSectionCommand()
|
private void OnAddSectionCommand()
|
||||||
{
|
{
|
||||||
_parentScriptViewModel.AddSection(this);
|
_parentScriptViewModel.AddCommentBlock(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnDeleteBlockCommand()
|
private void OnDeleteBlockCommand()
|
||||||
|
|
|
@ -0,0 +1,42 @@
|
||||||
|
using System;
|
||||||
|
using Filtration.ObjectModel;
|
||||||
|
using GalaSoft.MvvmLight;
|
||||||
|
|
||||||
|
namespace Filtration.ViewModels
|
||||||
|
{
|
||||||
|
internal interface IItemFilterBlockViewModelBase
|
||||||
|
{
|
||||||
|
void Initialise(IItemFilterBlockBase itemfilterBlock, IItemFilterScriptViewModel itemFilterScriptViewModel);
|
||||||
|
IItemFilterBlockBase BaseBlock { get; }
|
||||||
|
bool IsDirty { get; set; }
|
||||||
|
event EventHandler BlockBecameDirty;
|
||||||
|
}
|
||||||
|
|
||||||
|
internal abstract class ItemFilterBlockViewModelBase : ViewModelBase, IItemFilterBlockViewModelBase
|
||||||
|
{
|
||||||
|
private bool _isDirty;
|
||||||
|
|
||||||
|
public virtual void Initialise(IItemFilterBlockBase itemfilterBlock, IItemFilterScriptViewModel itemFilterScriptViewModel)
|
||||||
|
{
|
||||||
|
BaseBlock = itemfilterBlock;
|
||||||
|
}
|
||||||
|
|
||||||
|
public event EventHandler BlockBecameDirty;
|
||||||
|
|
||||||
|
public IItemFilterBlockBase BaseBlock { get; protected set; }
|
||||||
|
|
||||||
|
public bool IsDirty
|
||||||
|
{
|
||||||
|
get => _isDirty;
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (value != _isDirty)
|
||||||
|
{
|
||||||
|
_isDirty = value;
|
||||||
|
RaisePropertyChanged();
|
||||||
|
BlockBecameDirty?.Invoke(this, EventArgs.Empty);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,29 @@
|
||||||
|
using Filtration.ObjectModel;
|
||||||
|
|
||||||
|
namespace Filtration.ViewModels
|
||||||
|
{
|
||||||
|
internal interface IItemFilterCommentBlockViewModel : IItemFilterBlockViewModelBase
|
||||||
|
{
|
||||||
|
IItemFilterCommentBlock ItemFilterCommentBlock { get; }
|
||||||
|
string Comment { get; }
|
||||||
|
}
|
||||||
|
|
||||||
|
internal class ItemFilterCommentBlockViewModel : ItemFilterBlockViewModelBase, IItemFilterCommentBlockViewModel
|
||||||
|
{
|
||||||
|
public ItemFilterCommentBlockViewModel()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void Initialise(IItemFilterBlockBase itemfilterBlock, IItemFilterScriptViewModel itemFilterScriptViewModel)
|
||||||
|
{
|
||||||
|
ItemFilterCommentBlock = itemfilterBlock as IItemFilterCommentBlock;
|
||||||
|
BaseBlock = ItemFilterCommentBlock;
|
||||||
|
|
||||||
|
base.Initialise(itemfilterBlock, itemFilterScriptViewModel);
|
||||||
|
}
|
||||||
|
|
||||||
|
public IItemFilterCommentBlock ItemFilterCommentBlock { get; private set; }
|
||||||
|
|
||||||
|
public string Comment => ItemFilterCommentBlock.Comment;
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,6 +1,7 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Collections.ObjectModel;
|
using System.Collections.ObjectModel;
|
||||||
|
using System.Collections.Specialized;
|
||||||
using System.ComponentModel;
|
using System.ComponentModel;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
|
@ -15,8 +16,11 @@ using Filtration.Common.ViewModels;
|
||||||
using Filtration.Interface;
|
using Filtration.Interface;
|
||||||
using Filtration.ObjectModel;
|
using Filtration.ObjectModel;
|
||||||
using Filtration.ObjectModel.BlockItemBaseTypes;
|
using Filtration.ObjectModel.BlockItemBaseTypes;
|
||||||
|
using Filtration.ObjectModel.Commands;
|
||||||
|
using Filtration.ObjectModel.Commands.ItemFilterScript;
|
||||||
using Filtration.Parser.Interface.Services;
|
using Filtration.Parser.Interface.Services;
|
||||||
using Filtration.Services;
|
using Filtration.Services;
|
||||||
|
using Filtration.ViewModels.Factories;
|
||||||
using GalaSoft.MvvmLight.CommandWpf;
|
using GalaSoft.MvvmLight.CommandWpf;
|
||||||
using GalaSoft.MvvmLight.Messaging;
|
using GalaSoft.MvvmLight.Messaging;
|
||||||
using NLog;
|
using NLog;
|
||||||
|
@ -59,21 +63,25 @@ namespace Filtration.ViewModels
|
||||||
RelayCommand<bool> ToggleShowAdvancedCommand { get; }
|
RelayCommand<bool> ToggleShowAdvancedCommand { get; }
|
||||||
RelayCommand ClearFilterCommand { get; }
|
RelayCommand ClearFilterCommand { get; }
|
||||||
|
|
||||||
void AddSection(IItemFilterBlockViewModelBase targetBlockViewModel);
|
void AddCommentBlock(IItemFilterBlockViewModelBase targetBlockViewModel);
|
||||||
void AddBlock(IItemFilterBlockViewModelBase targetBlockViewModel);
|
void AddBlock(IItemFilterBlockViewModelBase targetBlockViewModel);
|
||||||
void CopyBlock(IItemFilterBlockViewModelBase targetBlockViewModel);
|
void CopyBlock(IItemFilterBlockViewModelBase targetBlockViewModel);
|
||||||
void CopyBlockStyle(IItemFilterBlockViewModel targetBlockViewModel);
|
void CopyBlockStyle(IItemFilterBlockViewModel targetBlockViewModel);
|
||||||
void PasteBlock(IItemFilterBlockViewModelBase targetBlockViewModel);
|
void PasteBlock(IItemFilterBlockViewModelBase targetBlockViewModel);
|
||||||
void PasteBlockStyle(IItemFilterBlockViewModel targetBlockViewModel);
|
void PasteBlockStyle(IItemFilterBlockViewModel targetBlockViewModel);
|
||||||
|
void DeleteBlock(IItemFilterBlockViewModelBase targetBlockViewModelBase);
|
||||||
|
void MoveBlockToTop(IItemFilterBlockViewModelBase targetBlockViewModelBase);
|
||||||
|
void MoveBlockUp(IItemFilterBlockViewModelBase targetBlockViewModelBase);
|
||||||
|
void MoveBlockDown(IItemFilterBlockViewModelBase targetBlockViewModelBase);
|
||||||
|
void MoveBlockToBottom(IItemFilterBlockViewModelBase targetBlockViewModelBase);
|
||||||
}
|
}
|
||||||
|
|
||||||
internal class ItemFilterScriptViewModel : PaneViewModel, IItemFilterScriptViewModel
|
internal class ItemFilterScriptViewModel : PaneViewModel, IItemFilterScriptViewModel
|
||||||
{
|
{
|
||||||
private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
|
private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
|
||||||
|
|
||||||
private readonly IItemFilterBlockViewModelFactory _itemFilterBlockViewModelFactory;
|
private readonly IItemFilterBlockBaseViewModelFactory _itemFilterBlockBaseViewModelFactory;
|
||||||
private readonly IItemFilterBlockTranslator _blockTranslator;
|
private readonly IItemFilterBlockTranslator _blockTranslator;
|
||||||
private readonly IItemFilterCommentBlockViewModelFactory _itemFilterCommentBlockViewModelFactory;
|
|
||||||
private readonly IAvalonDockWorkspaceViewModel _avalonDockWorkspaceViewModel;
|
private readonly IAvalonDockWorkspaceViewModel _avalonDockWorkspaceViewModel;
|
||||||
private readonly IItemFilterPersistenceService _persistenceService;
|
private readonly IItemFilterPersistenceService _persistenceService;
|
||||||
private readonly IMessageBoxService _messageBoxService;
|
private readonly IMessageBoxService _messageBoxService;
|
||||||
|
@ -86,19 +94,18 @@ namespace Filtration.ViewModels
|
||||||
private readonly ObservableCollection<IItemFilterBlockViewModelBase> _itemFilterBlockViewModels;
|
private readonly ObservableCollection<IItemFilterBlockViewModelBase> _itemFilterBlockViewModels;
|
||||||
private ICollectionView _itemFilterBlockViewModelsCollectionView;
|
private ICollectionView _itemFilterBlockViewModelsCollectionView;
|
||||||
private Predicate<IItemFilterBlockViewModel> _blockFilterPredicate;
|
private Predicate<IItemFilterBlockViewModel> _blockFilterPredicate;
|
||||||
|
private ICommandManager _scriptCommandManager;
|
||||||
|
|
||||||
public ItemFilterScriptViewModel(IItemFilterBlockViewModelFactory itemFilterBlockViewModelFactory,
|
public ItemFilterScriptViewModel(IItemFilterBlockBaseViewModelFactory itemFilterBlockBaseViewModelFactory,
|
||||||
IItemFilterBlockTranslator blockTranslator,
|
IItemFilterBlockTranslator blockTranslator,
|
||||||
IItemFilterCommentBlockViewModelFactory itemFilterCommentBlockViewModelFactory,
|
|
||||||
IAvalonDockWorkspaceViewModel avalonDockWorkspaceViewModel,
|
IAvalonDockWorkspaceViewModel avalonDockWorkspaceViewModel,
|
||||||
IItemFilterPersistenceService persistenceService,
|
IItemFilterPersistenceService persistenceService,
|
||||||
IMessageBoxService messageBoxService,
|
IMessageBoxService messageBoxService,
|
||||||
IClipboardService clipboardService,
|
IClipboardService clipboardService,
|
||||||
IBlockGroupHierarchyBuilder blockGroupHierarchyBuilder)
|
IBlockGroupHierarchyBuilder blockGroupHierarchyBuilder)
|
||||||
{
|
{
|
||||||
_itemFilterBlockViewModelFactory = itemFilterBlockViewModelFactory;
|
_itemFilterBlockBaseViewModelFactory = itemFilterBlockBaseViewModelFactory;
|
||||||
_blockTranslator = blockTranslator;
|
_blockTranslator = blockTranslator;
|
||||||
_itemFilterCommentBlockViewModelFactory = itemFilterCommentBlockViewModelFactory;
|
|
||||||
_avalonDockWorkspaceViewModel = avalonDockWorkspaceViewModel;
|
_avalonDockWorkspaceViewModel = avalonDockWorkspaceViewModel;
|
||||||
_avalonDockWorkspaceViewModel.ActiveDocumentChanged += OnActiveDocumentChanged;
|
_avalonDockWorkspaceViewModel.ActiveDocumentChanged += OnActiveDocumentChanged;
|
||||||
_persistenceService = persistenceService;
|
_persistenceService = persistenceService;
|
||||||
|
@ -116,12 +123,12 @@ namespace Filtration.ViewModels
|
||||||
ClearFilterCommand = new RelayCommand(OnClearFilterCommand, () => BlockFilterPredicate != null);
|
ClearFilterCommand = new RelayCommand(OnClearFilterCommand, () => BlockFilterPredicate != null);
|
||||||
CloseCommand = new RelayCommand(async () => await OnCloseCommand());
|
CloseCommand = new RelayCommand(async () => await OnCloseCommand());
|
||||||
DeleteBlockCommand = new RelayCommand(OnDeleteBlockCommand, () => SelectedBlockViewModel != null);
|
DeleteBlockCommand = new RelayCommand(OnDeleteBlockCommand, () => SelectedBlockViewModel != null);
|
||||||
MoveBlockToTopCommand = new RelayCommand(OnMoveBlockToTopCommand, () => SelectedBlockViewModel != null);
|
MoveBlockToTopCommand = new RelayCommand(OnMoveBlockToTopCommand, () => SelectedBlockViewModel != null && ItemFilterBlockViewModels.IndexOf(SelectedBlockViewModel) > 0);
|
||||||
MoveBlockUpCommand = new RelayCommand(OnMoveBlockUpCommand, () => SelectedBlockViewModel != null);
|
MoveBlockUpCommand = new RelayCommand(OnMoveBlockUpCommand, () => SelectedBlockViewModel != null && ItemFilterBlockViewModels.IndexOf(SelectedBlockViewModel) > 0);
|
||||||
MoveBlockDownCommand = new RelayCommand(OnMoveBlockDownCommand, () => SelectedBlockViewModel != null);
|
MoveBlockDownCommand = new RelayCommand(OnMoveBlockDownCommand, () => SelectedBlockViewModel != null && ItemFilterBlockViewModels.IndexOf(SelectedBlockViewModel) < ItemFilterBlockViewModels.Count);
|
||||||
MoveBlockToBottomCommand = new RelayCommand(OnMoveBlockToBottomCommand, () => SelectedBlockViewModel != null);
|
MoveBlockToBottomCommand = new RelayCommand(OnMoveBlockToBottomCommand, () => SelectedBlockViewModel != null && ItemFilterBlockViewModels.IndexOf(SelectedBlockViewModel) < ItemFilterBlockViewModels.Count);
|
||||||
AddBlockCommand = new RelayCommand(OnAddBlockCommand);
|
AddBlockCommand = new RelayCommand(OnAddBlockCommand);
|
||||||
AddSectionCommand = new RelayCommand(OnAddSectionCommand, () => SelectedBlockViewModel != null);
|
AddSectionCommand = new RelayCommand(OnAddCommentBlockCommand, () => SelectedBlockViewModel != null);
|
||||||
DisableBlockCommand = new RelayCommand(OnDisableBlockCommand, HasSelectedEnabledBlock);
|
DisableBlockCommand = new RelayCommand(OnDisableBlockCommand, HasSelectedEnabledBlock);
|
||||||
EnableBlockCommand = new RelayCommand(OnEnableBlockCommand, HasSelectedDisabledBlock);
|
EnableBlockCommand = new RelayCommand(OnEnableBlockCommand, HasSelectedDisabledBlock);
|
||||||
CopyBlockCommand = new RelayCommand(OnCopyBlockCommand, () => SelectedBlockViewModel != null);
|
CopyBlockCommand = new RelayCommand(OnCopyBlockCommand, () => SelectedBlockViewModel != null);
|
||||||
|
@ -138,6 +145,94 @@ namespace Filtration.ViewModels
|
||||||
IconSource = icon;
|
IconSource = icon;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void Initialise(IItemFilterScript itemFilterScript, bool newScript)
|
||||||
|
{
|
||||||
|
ItemFilterBlockViewModels.Clear();
|
||||||
|
|
||||||
|
Script = itemFilterScript;
|
||||||
|
_scriptCommandManager = Script.CommandManager;
|
||||||
|
AddItemFilterBlockViewModels(Script.ItemFilterBlocks, -1);
|
||||||
|
|
||||||
|
Script.ItemFilterBlocks.CollectionChanged += ItemFilterBlocksOnCollectionChanged;
|
||||||
|
|
||||||
|
_filenameIsFake = newScript;
|
||||||
|
|
||||||
|
if (newScript)
|
||||||
|
{
|
||||||
|
Script.FilePath = "Untitled.filter";
|
||||||
|
}
|
||||||
|
|
||||||
|
Title = Filename;
|
||||||
|
ContentId = "ScriptContentId";
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ItemFilterBlocksOnCollectionChanged(object sender, NotifyCollectionChangedEventArgs notifyCollectionChangedEventArgs)
|
||||||
|
{
|
||||||
|
switch (notifyCollectionChangedEventArgs.Action)
|
||||||
|
{
|
||||||
|
case NotifyCollectionChangedAction.Add:
|
||||||
|
{
|
||||||
|
AddItemFilterBlockViewModels(notifyCollectionChangedEventArgs.NewItems.Cast<IItemFilterBlockBase>(), notifyCollectionChangedEventArgs.NewStartingIndex);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case NotifyCollectionChangedAction.Remove:
|
||||||
|
{
|
||||||
|
RemoveItemFilterBlockviewModels(notifyCollectionChangedEventArgs.OldItems.Cast<IItemFilterBlockBase>());
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
Debugger.Break(); // Unhandled NotifyCollectionChangedAction
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void AddItemFilterBlockViewModels(IEnumerable<IItemFilterBlockBase> itemFilterBlocks, int addAtIndex)
|
||||||
|
{
|
||||||
|
var firstNewViewModel = true;
|
||||||
|
|
||||||
|
foreach (var itemFilterBlock in itemFilterBlocks)
|
||||||
|
{
|
||||||
|
var vm = _itemFilterBlockBaseViewModelFactory.Create(itemFilterBlock);
|
||||||
|
vm.Initialise(itemFilterBlock, this);
|
||||||
|
vm.BlockBecameDirty += OnBlockBecameDirty;
|
||||||
|
|
||||||
|
if (addAtIndex == -1)
|
||||||
|
{
|
||||||
|
ItemFilterBlockViewModels.Add(vm);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ItemFilterBlockViewModels.Insert(addAtIndex, vm);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (firstNewViewModel)
|
||||||
|
{
|
||||||
|
SelectedBlockViewModel = vm;
|
||||||
|
firstNewViewModel = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void RemoveItemFilterBlockviewModels(IEnumerable<IItemFilterBlockBase> itemFilterBlocks)
|
||||||
|
{
|
||||||
|
foreach (var itemFilterBlock in itemFilterBlocks)
|
||||||
|
{
|
||||||
|
var itemFilterBlockViewModel = ItemFilterBlockViewModels.FirstOrDefault(f => f.BaseBlock == itemFilterBlock);
|
||||||
|
if (itemFilterBlockViewModel == null)
|
||||||
|
{
|
||||||
|
throw new InvalidOperationException("Item Filter Block removed from model but does not exist in view model!");
|
||||||
|
}
|
||||||
|
|
||||||
|
ItemFilterBlockViewModels.Remove(itemFilterBlockViewModel);
|
||||||
|
if (SelectedBlockViewModel == itemFilterBlockViewModel)
|
||||||
|
{
|
||||||
|
SelectedBlockViewModel = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public RelayCommand<bool> ToggleShowAdvancedCommand { get; }
|
public RelayCommand<bool> ToggleShowAdvancedCommand { get; }
|
||||||
public RelayCommand ClearFilterCommand { get; }
|
public RelayCommand ClearFilterCommand { get; }
|
||||||
public RelayCommand CloseCommand { get; }
|
public RelayCommand CloseCommand { get; }
|
||||||
|
@ -229,12 +324,7 @@ namespace Filtration.ViewModels
|
||||||
public string Description
|
public string Description
|
||||||
{
|
{
|
||||||
get => Script.Description;
|
get => Script.Description;
|
||||||
set
|
set => _scriptCommandManager.ExecuteCommand(new SetScriptDescriptionCommand(Script, value));
|
||||||
{
|
|
||||||
Script.Description = value;
|
|
||||||
IsDirty = true;
|
|
||||||
RaisePropertyChanged();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool ShowAdvanced
|
public bool ShowAdvanced
|
||||||
|
@ -341,53 +431,6 @@ namespace Filtration.ViewModels
|
||||||
private bool _filenameIsFake;
|
private bool _filenameIsFake;
|
||||||
private bool _showAdvanced;
|
private bool _showAdvanced;
|
||||||
|
|
||||||
public void Initialise(IItemFilterScript itemFilterScript, bool newScript)
|
|
||||||
{
|
|
||||||
ItemFilterBlockViewModels.Clear();
|
|
||||||
|
|
||||||
Script = itemFilterScript;
|
|
||||||
|
|
||||||
foreach (var block in Script.ItemFilterBlocks)
|
|
||||||
{
|
|
||||||
var itemFilterBlock = block as IItemFilterBlock;
|
|
||||||
if (itemFilterBlock != null)
|
|
||||||
{
|
|
||||||
var itemFilterBlockViewModel = _itemFilterBlockViewModelFactory.Create();
|
|
||||||
itemFilterBlockViewModel.Initialise(itemFilterBlock, this);
|
|
||||||
itemFilterBlockViewModel.BlockBecameDirty += OnBlockBecameDirty;
|
|
||||||
ItemFilterBlockViewModels.Add(itemFilterBlockViewModel);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
var itemFilterCommentBlock = block as IItemFilterCommentBlock;
|
|
||||||
if (itemFilterCommentBlock == null)
|
|
||||||
{
|
|
||||||
throw new InvalidOperationException("Unknown item filter block type");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
var itemFilterCommentBlockViewModel = _itemFilterCommentBlockViewModelFactory.Create();
|
|
||||||
itemFilterCommentBlockViewModel.Initialise(itemFilterCommentBlock);
|
|
||||||
itemFilterCommentBlockViewModel.BlockBecameDirty += OnBlockBecameDirty;
|
|
||||||
ItemFilterBlockViewModels.Add(itemFilterCommentBlockViewModel);
|
|
||||||
}
|
|
||||||
|
|
||||||
_filenameIsFake = newScript;
|
|
||||||
|
|
||||||
if (newScript)
|
|
||||||
{
|
|
||||||
Script.FilePath = "Untitled.filter";
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ItemFilterBlockViewModels.Count > 0)
|
|
||||||
{
|
|
||||||
SelectedBlockViewModel = ItemFilterBlockViewModels.First();
|
|
||||||
}
|
|
||||||
|
|
||||||
Title = Filename;
|
|
||||||
ContentId = "ScriptContentId";
|
|
||||||
}
|
|
||||||
|
|
||||||
public async Task SaveAsync()
|
public async Task SaveAsync()
|
||||||
{
|
{
|
||||||
if (!ValidateScript()) return;
|
if (!ValidateScript()) return;
|
||||||
|
@ -602,8 +645,7 @@ namespace Filtration.ViewModels
|
||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
{
|
{
|
||||||
_messageBoxService.Show("Clipboard Error", "Failed to access the clipboard, copy command not completed.",
|
_messageBoxService.Show("Clipboard Error", "Failed to access the clipboard, copy command not completed.", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||||
MessageBoxButton.OK, MessageBoxImage.Error);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -671,39 +713,18 @@ namespace Filtration.ViewModels
|
||||||
{
|
{
|
||||||
var clipboardText = _clipboardService.GetClipboardText();
|
var clipboardText = _clipboardService.GetClipboardText();
|
||||||
if (string.IsNullOrEmpty(clipboardText)) return;
|
if (string.IsNullOrEmpty(clipboardText)) return;
|
||||||
_blockGroupHierarchyBuilder.Initialise(Script.ItemFilterBlockGroups.First());
|
|
||||||
|
|
||||||
var translatedBlock = _blockTranslator.TranslateStringToItemFilterBlock(clipboardText, Script.ItemFilterScriptSettings);
|
var translatedBlock = _blockTranslator.TranslateStringToItemFilterBlock(clipboardText, Script, true); // TODO: Doesn't handle pasting comment blocks?
|
||||||
if (translatedBlock == null) return;
|
if (translatedBlock == null) return;
|
||||||
|
|
||||||
var vm = _itemFilterBlockViewModelFactory.Create();
|
_scriptCommandManager.ExecuteCommand(new PasteBlockCommand(Script, translatedBlock, targetBlockViewModelBase.BaseBlock));
|
||||||
vm.Initialise(translatedBlock, this);
|
|
||||||
|
|
||||||
if (ItemFilterBlockViewModels.Count > 0)
|
|
||||||
{
|
|
||||||
Script.ItemFilterBlocks.Insert(Script.ItemFilterBlocks.IndexOf(targetBlockViewModelBase.BaseBlock) + 1,
|
|
||||||
translatedBlock);
|
|
||||||
ItemFilterBlockViewModels.Insert(ItemFilterBlockViewModels.IndexOf(targetBlockViewModelBase) + 1, vm);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Script.ItemFilterBlocks.Add(translatedBlock);
|
|
||||||
ItemFilterBlockViewModels.Add(vm);
|
|
||||||
}
|
|
||||||
|
|
||||||
vm.BlockBecameDirty += OnBlockBecameDirty;
|
|
||||||
|
|
||||||
SelectedBlockViewModel = vm;
|
|
||||||
IsDirty = true;
|
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
Logger.Error(e);
|
Logger.Error(e);
|
||||||
var innerException = e.InnerException?.Message ?? string.Empty;
|
var innerException = e.InnerException?.Message ?? string.Empty;
|
||||||
|
|
||||||
_messageBoxService.Show("Paste Error",
|
_messageBoxService.Show("Paste Error", e.Message + Environment.NewLine + innerException, MessageBoxButton.OK, MessageBoxImage.Error);
|
||||||
e.Message + Environment.NewLine + innerException, MessageBoxButton.OK,
|
|
||||||
MessageBoxImage.Error);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -712,21 +733,6 @@ namespace Filtration.ViewModels
|
||||||
MoveBlockToTop(SelectedBlockViewModel);
|
MoveBlockToTop(SelectedBlockViewModel);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void MoveBlockToTop(IItemFilterBlockViewModelBase targetBlockViewModelBase)
|
|
||||||
{
|
|
||||||
var currentIndex = ItemFilterBlockViewModels.IndexOf(targetBlockViewModelBase);
|
|
||||||
|
|
||||||
if (currentIndex > 0)
|
|
||||||
{
|
|
||||||
var block = targetBlockViewModelBase.BaseBlock;
|
|
||||||
Script.ItemFilterBlocks.Remove(block);
|
|
||||||
Script.ItemFilterBlocks.Insert(0, block);
|
|
||||||
ItemFilterBlockViewModels.Move(currentIndex, 0);
|
|
||||||
IsDirty = true;
|
|
||||||
RaisePropertyChanged(nameof(ItemFilterCommentBlockViewModels));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void OnMoveBlockUpCommand()
|
private void OnMoveBlockUpCommand()
|
||||||
{
|
{
|
||||||
MoveBlockUp(SelectedBlockViewModel);
|
MoveBlockUp(SelectedBlockViewModel);
|
||||||
|
@ -734,18 +740,7 @@ namespace Filtration.ViewModels
|
||||||
|
|
||||||
public void MoveBlockUp(IItemFilterBlockViewModelBase targetBlockViewModelBase)
|
public void MoveBlockUp(IItemFilterBlockViewModelBase targetBlockViewModelBase)
|
||||||
{
|
{
|
||||||
var currentIndex = ItemFilterBlockViewModels.IndexOf(targetBlockViewModelBase);
|
_scriptCommandManager.ExecuteCommand(new MoveBlockUpCommand(Script, targetBlockViewModelBase?.BaseBlock));
|
||||||
|
|
||||||
if (currentIndex > 0)
|
|
||||||
{
|
|
||||||
var block = targetBlockViewModelBase.BaseBlock;
|
|
||||||
var blockPos = Script.ItemFilterBlocks.IndexOf(block);
|
|
||||||
Script.ItemFilterBlocks.RemoveAt(blockPos);
|
|
||||||
Script.ItemFilterBlocks.Insert(blockPos - 1, block);
|
|
||||||
ItemFilterBlockViewModels.Move(currentIndex, currentIndex - 1);
|
|
||||||
IsDirty = true;
|
|
||||||
RaisePropertyChanged(nameof(ItemFilterCommentBlockViewModels));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnMoveBlockDownCommand()
|
private void OnMoveBlockDownCommand()
|
||||||
|
@ -755,18 +750,7 @@ namespace Filtration.ViewModels
|
||||||
|
|
||||||
public void MoveBlockDown(IItemFilterBlockViewModelBase targetBlockViewModelBase)
|
public void MoveBlockDown(IItemFilterBlockViewModelBase targetBlockViewModelBase)
|
||||||
{
|
{
|
||||||
var currentIndex = ItemFilterBlockViewModels.IndexOf(targetBlockViewModelBase);
|
_scriptCommandManager.ExecuteCommand(new MoveBlockDownCommand(Script, targetBlockViewModelBase?.BaseBlock));
|
||||||
|
|
||||||
if (currentIndex < ItemFilterBlockViewModels.Count - 1)
|
|
||||||
{
|
|
||||||
var block = targetBlockViewModelBase.BaseBlock;
|
|
||||||
var blockPos = Script.ItemFilterBlocks.IndexOf(block);
|
|
||||||
Script.ItemFilterBlocks.RemoveAt(blockPos);
|
|
||||||
Script.ItemFilterBlocks.Insert(blockPos + 1, block);
|
|
||||||
ItemFilterBlockViewModels.Move(currentIndex, currentIndex + 1);
|
|
||||||
IsDirty = true;
|
|
||||||
RaisePropertyChanged(nameof(ItemFilterCommentBlockViewModels));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnMoveBlockToBottomCommand()
|
private void OnMoveBlockToBottomCommand()
|
||||||
|
@ -774,21 +758,6 @@ namespace Filtration.ViewModels
|
||||||
MoveBlockToBottom(SelectedBlockViewModel);
|
MoveBlockToBottom(SelectedBlockViewModel);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void MoveBlockToBottom(IItemFilterBlockViewModelBase targetBlockViewModelBase)
|
|
||||||
{
|
|
||||||
var currentIndex = ItemFilterBlockViewModels.IndexOf(targetBlockViewModelBase);
|
|
||||||
|
|
||||||
if (currentIndex < ItemFilterBlockViewModels.Count - 1)
|
|
||||||
{
|
|
||||||
var block = targetBlockViewModelBase.BaseBlock;
|
|
||||||
Script.ItemFilterBlocks.Remove(block);
|
|
||||||
Script.ItemFilterBlocks.Add(block);
|
|
||||||
ItemFilterBlockViewModels.Move(currentIndex, ItemFilterBlockViewModels.Count - 1);
|
|
||||||
IsDirty = true;
|
|
||||||
RaisePropertyChanged(nameof(ItemFilterCommentBlockViewModels));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void OnAddBlockCommand()
|
private void OnAddBlockCommand()
|
||||||
{
|
{
|
||||||
AddBlock(SelectedBlockViewModel);
|
AddBlock(SelectedBlockViewModel);
|
||||||
|
@ -796,25 +765,28 @@ namespace Filtration.ViewModels
|
||||||
|
|
||||||
public void AddBlock(IItemFilterBlockViewModelBase targetBlockViewModelBase)
|
public void AddBlock(IItemFilterBlockViewModelBase targetBlockViewModelBase)
|
||||||
{
|
{
|
||||||
var vm = _itemFilterBlockViewModelFactory.Create();
|
_scriptCommandManager.ExecuteCommand(new AddBlockCommand(Script, targetBlockViewModelBase?.BaseBlock));
|
||||||
var newBlock = new ItemFilterBlock();
|
// TODO: Expand new viewmodel
|
||||||
vm.Initialise(newBlock, this);
|
|
||||||
|
|
||||||
if (targetBlockViewModelBase != null)
|
|
||||||
{
|
|
||||||
Script.ItemFilterBlocks.Insert(Script.ItemFilterBlocks.IndexOf(targetBlockViewModelBase.BaseBlock) + 1, newBlock);
|
|
||||||
ItemFilterBlockViewModels.Insert(ItemFilterBlockViewModels.IndexOf(targetBlockViewModelBase) + 1, vm);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Script.ItemFilterBlocks.Add(newBlock);
|
|
||||||
ItemFilterBlockViewModels.Add(vm);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
vm.BlockBecameDirty += OnBlockBecameDirty;
|
public void AddCommentBlock(IItemFilterBlockViewModelBase targetBlockViewModelBase)
|
||||||
SelectedBlockViewModel = vm;
|
{
|
||||||
vm.IsExpanded = true;
|
_scriptCommandManager.ExecuteCommand(new AddCommentBlockCommand(Script, targetBlockViewModelBase.BaseBlock));
|
||||||
IsDirty = true;
|
}
|
||||||
|
|
||||||
|
public void DeleteBlock(IItemFilterBlockViewModelBase targetBlockViewModelBase)
|
||||||
|
{
|
||||||
|
_scriptCommandManager.ExecuteCommand(new RemoveBlockCommand(Script, targetBlockViewModelBase.BaseBlock));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void MoveBlockToBottom(IItemFilterBlockViewModelBase targetBlockViewModelBase)
|
||||||
|
{
|
||||||
|
_scriptCommandManager.ExecuteCommand(new MoveBlockToBottomCommand(Script, targetBlockViewModelBase.BaseBlock));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void MoveBlockToTop(IItemFilterBlockViewModelBase targetBlockViewModelBase)
|
||||||
|
{
|
||||||
|
_scriptCommandManager.ExecuteCommand(new MoveBlockToTopCommand(Script, targetBlockViewModelBase.BaseBlock));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnBlockBecameDirty(object sender, EventArgs e)
|
private void OnBlockBecameDirty(object sender, EventArgs e)
|
||||||
|
@ -822,23 +794,9 @@ namespace Filtration.ViewModels
|
||||||
SetDirtyFlag();
|
SetDirtyFlag();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnAddSectionCommand()
|
private void OnAddCommentBlockCommand()
|
||||||
{
|
{
|
||||||
AddSection(SelectedBlockViewModel);
|
AddCommentBlock(SelectedBlockViewModel);
|
||||||
}
|
|
||||||
|
|
||||||
public void AddSection(IItemFilterBlockViewModelBase targetBlockViewModelBase)
|
|
||||||
{
|
|
||||||
var vm = _itemFilterCommentBlockViewModelFactory.Create();
|
|
||||||
var newSection = new ItemFilterCommentBlock { Comment = "New Comment Block" };
|
|
||||||
vm.Initialise(newSection);
|
|
||||||
|
|
||||||
Script.ItemFilterBlocks.Insert(Script.ItemFilterBlocks.IndexOf(targetBlockViewModelBase.BaseBlock), newSection);
|
|
||||||
ItemFilterBlockViewModels.Insert(ItemFilterBlockViewModels.IndexOf(targetBlockViewModelBase), vm);
|
|
||||||
IsDirty = true;
|
|
||||||
SelectedBlockViewModel = vm;
|
|
||||||
RaisePropertyChanged(nameof(ItemFilterCommentBlockViewModels));
|
|
||||||
Messenger.Default.Send(new NotificationMessage("SectionsChanged"));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnExpandAllBlocksCommand()
|
private void OnExpandAllBlocksCommand()
|
||||||
|
@ -862,31 +820,6 @@ namespace Filtration.ViewModels
|
||||||
DeleteBlock(SelectedBlockViewModel);
|
DeleteBlock(SelectedBlockViewModel);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void DeleteBlock(IItemFilterBlockViewModelBase targetBlockViewModelBase)
|
|
||||||
{
|
|
||||||
var result = _messageBoxService.Show("Delete Confirmation", "Are you sure you wish to delete this block?",
|
|
||||||
MessageBoxButton.YesNo,
|
|
||||||
MessageBoxImage.Question);
|
|
||||||
|
|
||||||
if (result == MessageBoxResult.Yes)
|
|
||||||
{
|
|
||||||
var isSection = targetBlockViewModelBase.BaseBlock is ItemFilterCommentBlock;
|
|
||||||
|
|
||||||
Script.ItemFilterBlocks.Remove(targetBlockViewModelBase.BaseBlock);
|
|
||||||
ItemFilterBlockViewModels.Remove(targetBlockViewModelBase);
|
|
||||||
IsDirty = true;
|
|
||||||
|
|
||||||
targetBlockViewModelBase.BlockBecameDirty -= OnBlockBecameDirty;
|
|
||||||
|
|
||||||
if (isSection)
|
|
||||||
{
|
|
||||||
Messenger.Default.Send(new NotificationMessage("SectionsChanged"));
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
SelectedBlockViewModel = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void OnDisableBlockCommand()
|
private void OnDisableBlockCommand()
|
||||||
{
|
{
|
||||||
var selectedBlockViewModel = SelectedBlockViewModel as IItemFilterBlockViewModel;
|
var selectedBlockViewModel = SelectedBlockViewModel as IItemFilterBlockViewModel;
|
||||||
|
|
|
@ -85,6 +85,11 @@ namespace Filtration.ViewModels
|
||||||
PasteCommand = new RelayCommand(OnPasteCommand, () => ActiveDocumentIsScript && ActiveScriptHasSelectedBlock);
|
PasteCommand = new RelayCommand(OnPasteCommand, () => ActiveDocumentIsScript && ActiveScriptHasSelectedBlock);
|
||||||
PasteBlockStyleCommand = new RelayCommand(OnPasteBlockStyleCommand, () => ActiveDocumentIsScript && ActiveScriptHasSelectedBlock);
|
PasteBlockStyleCommand = new RelayCommand(OnPasteBlockStyleCommand, () => ActiveDocumentIsScript && ActiveScriptHasSelectedBlock);
|
||||||
|
|
||||||
|
// TODO: Only enabled if undo/redo available
|
||||||
|
UndoCommand = new RelayCommand(OnUndoCommand, () => ActiveDocumentIsScript);
|
||||||
|
RedoCommand = new RelayCommand(OnRedoCommand, () => ActiveDocumentIsScript);
|
||||||
|
|
||||||
|
|
||||||
MoveBlockUpCommand = new RelayCommand(OnMoveBlockUpCommand, () => ActiveDocumentIsScript && ActiveScriptHasSelectedBlock);
|
MoveBlockUpCommand = new RelayCommand(OnMoveBlockUpCommand, () => ActiveDocumentIsScript && ActiveScriptHasSelectedBlock);
|
||||||
MoveBlockDownCommand = new RelayCommand(OnMoveBlockDownCommand, () => ActiveDocumentIsScript && ActiveScriptHasSelectedBlock);
|
MoveBlockDownCommand = new RelayCommand(OnMoveBlockDownCommand, () => ActiveDocumentIsScript && ActiveScriptHasSelectedBlock);
|
||||||
MoveBlockToTopCommand = new RelayCommand(OnMoveBlockToTopCommand, () => ActiveDocumentIsScript && ActiveScriptHasSelectedBlock);
|
MoveBlockToTopCommand = new RelayCommand(OnMoveBlockToTopCommand, () => ActiveDocumentIsScript && ActiveScriptHasSelectedBlock);
|
||||||
|
@ -158,9 +163,7 @@ namespace Filtration.ViewModels
|
||||||
}
|
}
|
||||||
case "OpenScript":
|
case "OpenScript":
|
||||||
{
|
{
|
||||||
#pragma warning disable 4014
|
OnOpenScriptCommand();
|
||||||
Task.Run(OnOpenScriptCommand).GetAwaiter().GetResult();
|
|
||||||
#pragma warning restore 4014
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case "ShowLoadingBanner":
|
case "ShowLoadingBanner":
|
||||||
|
@ -191,6 +194,9 @@ namespace Filtration.ViewModels
|
||||||
public RelayCommand OpenAboutWindowCommand { get; }
|
public RelayCommand OpenAboutWindowCommand { get; }
|
||||||
public RelayCommand ReplaceColorsCommand { get; }
|
public RelayCommand ReplaceColorsCommand { get; }
|
||||||
|
|
||||||
|
public RelayCommand UndoCommand { get;}
|
||||||
|
public RelayCommand RedoCommand { get; }
|
||||||
|
|
||||||
public RelayCommand EditMasterThemeCommand { get; }
|
public RelayCommand EditMasterThemeCommand { get; }
|
||||||
public RelayCommand CreateThemeCommand { get; }
|
public RelayCommand CreateThemeCommand { get; }
|
||||||
public RelayCommand ApplyThemeToScriptCommand { get; }
|
public RelayCommand ApplyThemeToScriptCommand { get; }
|
||||||
|
@ -521,6 +527,16 @@ namespace Filtration.ViewModels
|
||||||
_avalonDockWorkspaceViewModel.ActiveScriptViewModel.PasteBlockStyleCommand.Execute(null);
|
_avalonDockWorkspaceViewModel.ActiveScriptViewModel.PasteBlockStyleCommand.Execute(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void OnUndoCommand()
|
||||||
|
{
|
||||||
|
_avalonDockWorkspaceViewModel.ActiveScriptViewModel.Script.CommandManager.Undo();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnRedoCommand()
|
||||||
|
{
|
||||||
|
_avalonDockWorkspaceViewModel.ActiveScriptViewModel.Script.CommandManager.Redo();
|
||||||
|
}
|
||||||
|
|
||||||
private void OnNewScriptCommand()
|
private void OnNewScriptCommand()
|
||||||
{
|
{
|
||||||
var newViewModel = _itemFilterScriptRepository.NewScript();
|
var newViewModel = _itemFilterScriptRepository.NewScript();
|
||||||
|
|
|
@ -30,6 +30,8 @@
|
||||||
<Image Source="/Filtration;component/Resources/Icons/PasteStyle.ico" x:Key="PasteStyleIcon" x:Shared="False" />
|
<Image Source="/Filtration;component/Resources/Icons/PasteStyle.ico" x:Key="PasteStyleIcon" x:Shared="False" />
|
||||||
<Image Source="/Filtration;component/Resources/Icons/filtration_icon.png" x:Key="FiltrationIcon" x:Shared="False" />
|
<Image Source="/Filtration;component/Resources/Icons/filtration_icon.png" x:Key="FiltrationIcon" x:Shared="False" />
|
||||||
<Image Source="/Filtration;component/Resources/Icons/Add.ico" x:Key="AddIcon" x:Shared="False" />
|
<Image Source="/Filtration;component/Resources/Icons/Add.ico" x:Key="AddIcon" x:Shared="False" />
|
||||||
|
<Image Source="/Filtration;component/Resources/Icons/undo_icon.png" x:Key="UndoIcon" x:Shared="False" />
|
||||||
|
<Image Source="/Filtration;component/Resources/Icons/redo_icon.png" x:Key="RedoIcon" x:Shared="False" />
|
||||||
<Image Source="/Filtration;component/Resources/Icons/ThemeComponentDelete.ico" x:Key="ThemeComponentDeleteIcon" x:Shared="False" />
|
<Image Source="/Filtration;component/Resources/Icons/ThemeComponentDelete.ico" x:Key="ThemeComponentDeleteIcon" x:Shared="False" />
|
||||||
<Image Source="/Filtration;component/Resources/Icons/standby_enabled_icon.png" x:Key="StandbyEnabledIcon" x:Shared="False" />
|
<Image Source="/Filtration;component/Resources/Icons/standby_enabled_icon.png" x:Key="StandbyEnabledIcon" x:Shared="False" />
|
||||||
<Image Source="/Filtration;component/Resources/Icons/standby_disabled_icon.png" x:Key="StandbyDisabledIcon" x:Shared="False" />
|
<Image Source="/Filtration;component/Resources/Icons/standby_disabled_icon.png" x:Key="StandbyDisabledIcon" x:Shared="False" />
|
||||||
|
|
|
@ -19,6 +19,10 @@
|
||||||
<KeyBinding Command="{Binding SaveCommand}" Modifiers="Control" Key="S" />
|
<KeyBinding Command="{Binding SaveCommand}" Modifiers="Control" Key="S" />
|
||||||
<KeyBinding Command="{Binding OpenScriptCommand}" Modifiers="Control" Key="O" />
|
<KeyBinding Command="{Binding OpenScriptCommand}" Modifiers="Control" Key="O" />
|
||||||
<KeyBinding Command="{Binding NewScriptCommand}" Modifiers="Control" Key="N" />
|
<KeyBinding Command="{Binding NewScriptCommand}" Modifiers="Control" Key="N" />
|
||||||
|
|
||||||
|
<!-- Undo/Redo support incomplete -->
|
||||||
|
<!--<KeyBinding Command="{Binding UndoCommand}" Modifiers="Control" Key="Z" />
|
||||||
|
<KeyBinding Command="{Binding RedoCommand}" Modifiers="Control" Key="Y" />-->
|
||||||
</fluent:RibbonWindow.InputBindings>
|
</fluent:RibbonWindow.InputBindings>
|
||||||
<utility:RoutedCommandHandlers.Commands>
|
<utility:RoutedCommandHandlers.Commands>
|
||||||
<utility:RoutedCommandHandler RoutedCommand="{StaticResource OpenScriptRoutedCommand}" Command="{Binding OpenScriptCommand}" />
|
<utility:RoutedCommandHandler RoutedCommand="{StaticResource OpenScriptRoutedCommand}" Command="{Binding OpenScriptCommand}" />
|
||||||
|
@ -85,6 +89,12 @@
|
||||||
<fluent:Button Header="Paste Style" Command="{Binding PasteBlockStyleCommand}" Icon="{StaticResource PasteStyleIcon}" LargeIcon="{StaticResource PasteIcon}" SizeDefinition="Middle" ToolTip="Paste Style (Ctrl+Shift+V)" />
|
<fluent:Button Header="Paste Style" Command="{Binding PasteBlockStyleCommand}" Icon="{StaticResource PasteStyleIcon}" LargeIcon="{StaticResource PasteIcon}" SizeDefinition="Middle" ToolTip="Paste Style (Ctrl+Shift+V)" />
|
||||||
<fluent:Button Header="Copy Script" Command="{Binding CopyScriptCommand}" Icon="{StaticResource CopyIcon}" LargeIcon="{StaticResource PasteIcon}" SizeDefinition="Middle" />
|
<fluent:Button Header="Copy Script" Command="{Binding CopyScriptCommand}" Icon="{StaticResource CopyIcon}" LargeIcon="{StaticResource PasteIcon}" SizeDefinition="Middle" />
|
||||||
</fluent:RibbonGroupBox>
|
</fluent:RibbonGroupBox>
|
||||||
|
|
||||||
|
<!-- Undo/Redo support incomplete -->
|
||||||
|
<!--<fluent:RibbonGroupBox Header="Undo">
|
||||||
|
<fluent:Button Header="Undo" Command="{Binding UndoCommand}" ToolTip="Undo" SizeDefinition="Middle" Icon="{StaticResource UndoIcon}" />
|
||||||
|
<fluent:Button Header="Redo" Command="{Binding RedoCommand}" ToolTip="Redo" SizeDefinition="Middle" Icon="{StaticResource RedoIcon}" />
|
||||||
|
</fluent:RibbonGroupBox>-->
|
||||||
<fluent:RibbonGroupBox Header="Blocks">
|
<fluent:RibbonGroupBox Header="Blocks">
|
||||||
<fluent:Button Header="Add Block" Command="{Binding AddBlockCommand}" SizeDefinition="Middle" Icon="{StaticResource AddBlockIcon}" />
|
<fluent:Button Header="Add Block" Command="{Binding AddBlockCommand}" SizeDefinition="Middle" Icon="{StaticResource AddBlockIcon}" />
|
||||||
<fluent:Button Header="Add Section" Command="{Binding AddSectionCommand}" SizeDefinition="Middle" Icon="{StaticResource AddSectionIcon}" />
|
<fluent:Button Header="Add Section" Command="{Binding AddSectionCommand}" SizeDefinition="Middle" Icon="{StaticResource AddSectionIcon}" />
|
||||||
|
|
|
@ -3,6 +3,7 @@ using Castle.MicroKernel.Registration;
|
||||||
using Castle.MicroKernel.SubSystems.Configuration;
|
using Castle.MicroKernel.SubSystems.Configuration;
|
||||||
using Castle.Windsor;
|
using Castle.Windsor;
|
||||||
using Filtration.ViewModels;
|
using Filtration.ViewModels;
|
||||||
|
using Filtration.ViewModels.Factories;
|
||||||
using Filtration.ViewModels.ToolPanes;
|
using Filtration.ViewModels.ToolPanes;
|
||||||
|
|
||||||
namespace Filtration.WindsorInstallers
|
namespace Filtration.WindsorInstallers
|
||||||
|
@ -79,6 +80,11 @@ namespace Filtration.WindsorInstallers
|
||||||
|
|
||||||
container.Register(
|
container.Register(
|
||||||
Component.For<IItemFilterScriptViewModelFactory>().AsFactory());
|
Component.For<IItemFilterScriptViewModelFactory>().AsFactory());
|
||||||
|
|
||||||
|
container.Register(
|
||||||
|
Component.For<IItemFilterBlockBaseViewModelFactory>()
|
||||||
|
.ImplementedBy<ItemFilterBlockBaseViewModelFactory>()
|
||||||
|
.LifeStyle.Singleton);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue