Improved dirty script detection to include modifications to blocks rather than just block additions/removals

This commit is contained in:
Ben Wallis 2016-08-20 21:17:12 +01:00
parent f75095ba72
commit f947cd02da
41 changed files with 277 additions and 178 deletions

View File

@ -35,12 +35,12 @@
<HintPath>..\packages\Castle.Core.3.3.3\lib\net45\Castle.Core.dll</HintPath> <HintPath>..\packages\Castle.Core.3.3.3\lib\net45\Castle.Core.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="Moq, Version=4.5.9.0, Culture=neutral, PublicKeyToken=69f491c39445e920, processorArchitecture=MSIL"> <Reference Include="Moq, Version=4.5.21.0, Culture=neutral, PublicKeyToken=69f491c39445e920, processorArchitecture=MSIL">
<HintPath>..\packages\Moq.4.5.9\lib\net45\Moq.dll</HintPath> <HintPath>..\packages\Moq.4.5.21\lib\net45\Moq.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="nunit.framework, Version=3.2.1.0, Culture=neutral, PublicKeyToken=2638cd05610744eb, processorArchitecture=MSIL"> <Reference Include="nunit.framework, Version=3.4.1.0, Culture=neutral, PublicKeyToken=2638cd05610744eb, processorArchitecture=MSIL">
<HintPath>..\packages\NUnit.3.2.1\lib\net45\nunit.framework.dll</HintPath> <HintPath>..\packages\NUnit.3.4.1\lib\net45\nunit.framework.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="System" /> <Reference Include="System" />

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<packages> <packages>
<package id="Castle.Core" version="3.3.3" targetFramework="net461" /> <package id="Castle.Core" version="3.3.3" targetFramework="net461" />
<package id="Moq" version="4.5.9" targetFramework="net461" /> <package id="Moq" version="4.5.21" targetFramework="net461" />
<package id="NUnit" version="3.2.1" targetFramework="net461" /> <package id="NUnit" version="3.4.1" targetFramework="net461" />
</packages> </packages>

View File

@ -22,10 +22,10 @@
<connectionStrings> <connectionStrings>
<add name="FiltrationDbContext" connectionString="data source=&quot;D:\C# Projects\Filtration\Filtration.db&quot;" providerName="System.Data.SQLite.EF6" /> <add name="FiltrationDbContext" connectionString="data source=&quot;D:\C# Projects\Filtration\Filtration.db&quot;" providerName="System.Data.SQLite.EF6" />
</connectionStrings> </connectionStrings>
<system.data> <system.data>
<DbProviderFactories> <DbProviderFactories>
<remove invariant="System.Data.SQLite.EF6" /> <remove invariant="System.Data.SQLite.EF6" />
<add name="SQLite Data Provider (Entity Framework 6)" invariant="System.Data.SQLite.EF6" description=".NET Framework Data Provider for SQLite (Entity Framework 6)" type="System.Data.SQLite.EF6.SQLiteProviderFactory, System.Data.SQLite.EF6" /> <add name="SQLite Data Provider (Entity Framework 6)" invariant="System.Data.SQLite.EF6" description=".NET Framework Data Provider for SQLite (Entity Framework 6)" type="System.Data.SQLite.EF6.SQLiteProviderFactory, System.Data.SQLite.EF6" />
<remove invariant="System.Data.SQLite" /><add name="SQLite Data Provider" invariant="System.Data.SQLite" description=".NET Framework Data Provider for SQLite" type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite" /></DbProviderFactories> <remove invariant="System.Data.SQLite" /><add name="SQLite Data Provider" invariant="System.Data.SQLite" description=".NET Framework Data Provider for SQLite" type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite" /></DbProviderFactories>
</system.data> </system.data></configuration>
</configuration>

View File

@ -46,22 +46,22 @@
<HintPath>..\packages\EntityFramework.6.1.3\lib\net45\EntityFramework.SqlServer.dll</HintPath> <HintPath>..\packages\EntityFramework.6.1.3\lib\net45\EntityFramework.SqlServer.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="nunit.framework, Version=3.2.1.0, Culture=neutral, PublicKeyToken=2638cd05610744eb, processorArchitecture=MSIL"> <Reference Include="nunit.framework, Version=3.4.1.0, Culture=neutral, PublicKeyToken=2638cd05610744eb, processorArchitecture=MSIL">
<HintPath>..\packages\NUnit.3.2.1\lib\net45\nunit.framework.dll</HintPath> <HintPath>..\packages\NUnit.3.4.1\lib\net45\nunit.framework.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="System" /> <Reference Include="System" />
<Reference Include="System.ComponentModel.DataAnnotations" /> <Reference Include="System.ComponentModel.DataAnnotations" />
<Reference Include="System.Data.SQLite, Version=1.0.101.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=MSIL"> <Reference Include="System.Data.SQLite, Version=1.0.102.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=MSIL">
<HintPath>..\packages\System.Data.SQLite.Core.1.0.101.0\lib\net46\System.Data.SQLite.dll</HintPath> <HintPath>..\packages\System.Data.SQLite.Core.1.0.102.0\lib\net46\System.Data.SQLite.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="System.Data.SQLite.EF6, Version=1.0.101.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=MSIL"> <Reference Include="System.Data.SQLite.EF6, Version=1.0.102.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=MSIL">
<HintPath>..\packages\System.Data.SQLite.EF6.1.0.101.0\lib\net46\System.Data.SQLite.EF6.dll</HintPath> <HintPath>..\packages\System.Data.SQLite.EF6.1.0.102.0\lib\net46\System.Data.SQLite.EF6.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="System.Data.SQLite.Linq, Version=1.0.101.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=MSIL"> <Reference Include="System.Data.SQLite.Linq, Version=1.0.102.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=MSIL">
<HintPath>..\packages\System.Data.SQLite.Linq.1.0.101.0\lib\net46\System.Data.SQLite.Linq.dll</HintPath> <HintPath>..\packages\System.Data.SQLite.Linq.1.0.102.0\lib\net46\System.Data.SQLite.Linq.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
</ItemGroup> </ItemGroup>
@ -115,12 +115,12 @@
</Choose> </Choose>
<Import Project="$(VSToolsPath)\TeamTest\Microsoft.TestTools.targets" Condition="Exists('$(VSToolsPath)\TeamTest\Microsoft.TestTools.targets')" /> <Import Project="$(VSToolsPath)\TeamTest\Microsoft.TestTools.targets" Condition="Exists('$(VSToolsPath)\TeamTest\Microsoft.TestTools.targets')" />
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<Import Project="..\packages\System.Data.SQLite.Core.1.0.101.0\build\net46\System.Data.SQLite.Core.targets" Condition="Exists('..\packages\System.Data.SQLite.Core.1.0.101.0\build\net46\System.Data.SQLite.Core.targets')" /> <Import Project="..\packages\System.Data.SQLite.Core.1.0.102.0\build\net46\System.Data.SQLite.Core.targets" Condition="Exists('..\packages\System.Data.SQLite.Core.1.0.102.0\build\net46\System.Data.SQLite.Core.targets')" />
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild"> <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
<PropertyGroup> <PropertyGroup>
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText> <ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
</PropertyGroup> </PropertyGroup>
<Error Condition="!Exists('..\packages\System.Data.SQLite.Core.1.0.101.0\build\net46\System.Data.SQLite.Core.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\System.Data.SQLite.Core.1.0.101.0\build\net46\System.Data.SQLite.Core.targets'))" /> <Error Condition="!Exists('..\packages\System.Data.SQLite.Core.1.0.102.0\build\net46\System.Data.SQLite.Core.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\System.Data.SQLite.Core.1.0.102.0\build\net46\System.Data.SQLite.Core.targets'))" />
</Target> </Target>
<!-- To modify your build process, add your task inside one of the targets below and uncomment it. <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets. Other similar extension points exist, see Microsoft.Common.targets.

View File

@ -1,9 +1,9 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<packages> <packages>
<package id="EntityFramework" version="6.1.3" targetFramework="net461" /> <package id="EntityFramework" version="6.1.3" targetFramework="net461" />
<package id="NUnit" version="3.2.1" targetFramework="net461" /> <package id="NUnit" version="3.4.1" targetFramework="net461" />
<package id="System.Data.SQLite" version="1.0.101.0" targetFramework="net461" /> <package id="System.Data.SQLite" version="1.0.102.0" targetFramework="net461" />
<package id="System.Data.SQLite.Core" version="1.0.101.0" targetFramework="net461" /> <package id="System.Data.SQLite.Core" version="1.0.102.0" targetFramework="net461" />
<package id="System.Data.SQLite.EF6" version="1.0.101.0" targetFramework="net461" /> <package id="System.Data.SQLite.EF6" version="1.0.102.0" targetFramework="net461" />
<package id="System.Data.SQLite.Linq" version="1.0.101.0" targetFramework="net461" /> <package id="System.Data.SQLite.Linq" version="1.0.102.0" targetFramework="net461" />
</packages> </packages>

View File

@ -40,16 +40,16 @@
<Reference Include="System" /> <Reference Include="System" />
<Reference Include="System.ComponentModel.DataAnnotations" /> <Reference Include="System.ComponentModel.DataAnnotations" />
<Reference Include="System.Core" /> <Reference Include="System.Core" />
<Reference Include="System.Data.SQLite, Version=1.0.101.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=MSIL"> <Reference Include="System.Data.SQLite, Version=1.0.102.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=MSIL">
<HintPath>..\packages\System.Data.SQLite.Core.1.0.101.0\lib\net46\System.Data.SQLite.dll</HintPath> <HintPath>..\packages\System.Data.SQLite.Core.1.0.102.0\lib\net46\System.Data.SQLite.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="System.Data.SQLite.EF6, Version=1.0.101.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=MSIL"> <Reference Include="System.Data.SQLite.EF6, Version=1.0.102.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=MSIL">
<HintPath>..\packages\System.Data.SQLite.EF6.1.0.101.0\lib\net46\System.Data.SQLite.EF6.dll</HintPath> <HintPath>..\packages\System.Data.SQLite.EF6.1.0.102.0\lib\net46\System.Data.SQLite.EF6.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="System.Data.SQLite.Linq, Version=1.0.101.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=MSIL"> <Reference Include="System.Data.SQLite.Linq, Version=1.0.102.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=MSIL">
<HintPath>..\packages\System.Data.SQLite.Linq.1.0.101.0\lib\net46\System.Data.SQLite.Linq.dll</HintPath> <HintPath>..\packages\System.Data.SQLite.Linq.1.0.102.0\lib\net46\System.Data.SQLite.Linq.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="System.Runtime.Serialization" /> <Reference Include="System.Runtime.Serialization" />
@ -78,12 +78,12 @@
</ProjectReference> </ProjectReference>
</ItemGroup> </ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<Import Project="..\packages\System.Data.SQLite.Core.1.0.101.0\build\net46\System.Data.SQLite.Core.targets" Condition="Exists('..\packages\System.Data.SQLite.Core.1.0.101.0\build\net46\System.Data.SQLite.Core.targets')" /> <Import Project="..\packages\System.Data.SQLite.Core.1.0.102.0\build\net46\System.Data.SQLite.Core.targets" Condition="Exists('..\packages\System.Data.SQLite.Core.1.0.102.0\build\net46\System.Data.SQLite.Core.targets')" />
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild"> <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
<PropertyGroup> <PropertyGroup>
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText> <ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
</PropertyGroup> </PropertyGroup>
<Error Condition="!Exists('..\packages\System.Data.SQLite.Core.1.0.101.0\build\net46\System.Data.SQLite.Core.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\System.Data.SQLite.Core.1.0.101.0\build\net46\System.Data.SQLite.Core.targets'))" /> <Error Condition="!Exists('..\packages\System.Data.SQLite.Core.1.0.102.0\build\net46\System.Data.SQLite.Core.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\System.Data.SQLite.Core.1.0.102.0\build\net46\System.Data.SQLite.Core.targets'))" />
</Target> </Target>
<!-- To modify your build process, add your task inside one of the targets below and uncomment it. <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets. Other similar extension points exist, see Microsoft.Common.targets.

View File

@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<packages> <packages>
<package id="EntityFramework" version="6.1.3" targetFramework="net46" /> <package id="EntityFramework" version="6.1.3" targetFramework="net46" />
<package id="System.Data.SQLite" version="1.0.101.0" targetFramework="net461" /> <package id="System.Data.SQLite" version="1.0.102.0" targetFramework="net461" />
<package id="System.Data.SQLite.Core" version="1.0.101.0" targetFramework="net461" /> <package id="System.Data.SQLite.Core" version="1.0.102.0" targetFramework="net461" />
<package id="System.Data.SQLite.EF6" version="1.0.101.0" targetFramework="net461" /> <package id="System.Data.SQLite.EF6" version="1.0.102.0" targetFramework="net461" />
<package id="System.Data.SQLite.Linq" version="1.0.101.0" targetFramework="net461" /> <package id="System.Data.SQLite.Linq" version="1.0.102.0" targetFramework="net461" />
</packages> </packages>

View File

@ -46,20 +46,20 @@
<HintPath>..\packages\Castle.Core.3.3.3\lib\net45\Castle.Core.dll</HintPath> <HintPath>..\packages\Castle.Core.3.3.3\lib\net45\Castle.Core.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="FluentAssertions, Version=4.8.0.0, Culture=neutral, PublicKeyToken=33f2691a05b67b6a, processorArchitecture=MSIL"> <Reference Include="FluentAssertions, Version=4.13.0.0, Culture=neutral, PublicKeyToken=33f2691a05b67b6a, processorArchitecture=MSIL">
<HintPath>..\packages\FluentAssertions.4.8.0\lib\net45\FluentAssertions.dll</HintPath> <HintPath>..\packages\FluentAssertions.4.13.0\lib\net45\FluentAssertions.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="FluentAssertions.Core, Version=4.8.0.0, Culture=neutral, PublicKeyToken=33f2691a05b67b6a, processorArchitecture=MSIL"> <Reference Include="FluentAssertions.Core, Version=4.13.0.0, Culture=neutral, PublicKeyToken=33f2691a05b67b6a, processorArchitecture=MSIL">
<HintPath>..\packages\FluentAssertions.4.8.0\lib\net45\FluentAssertions.Core.dll</HintPath> <HintPath>..\packages\FluentAssertions.4.13.0\lib\net45\FluentAssertions.Core.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="Moq, Version=4.5.9.0, Culture=neutral, PublicKeyToken=69f491c39445e920, processorArchitecture=MSIL"> <Reference Include="Moq, Version=4.5.21.0, Culture=neutral, PublicKeyToken=69f491c39445e920, processorArchitecture=MSIL">
<HintPath>..\packages\Moq.4.5.9\lib\net45\Moq.dll</HintPath> <HintPath>..\packages\Moq.4.5.21\lib\net45\Moq.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="nunit.framework, Version=3.2.1.0, Culture=neutral, PublicKeyToken=2638cd05610744eb, processorArchitecture=MSIL"> <Reference Include="nunit.framework, Version=3.4.1.0, Culture=neutral, PublicKeyToken=2638cd05610744eb, processorArchitecture=MSIL">
<HintPath>..\packages\NUnit.3.2.1\lib\net45\nunit.framework.dll</HintPath> <HintPath>..\packages\NUnit.3.4.1\lib\net45\nunit.framework.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="System" /> <Reference Include="System" />

View File

@ -4,7 +4,11 @@
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly> <dependentAssembly>
<assemblyIdentity name="Xceed.Wpf.AvalonDock" publicKeyToken="3e4669d2f30244f4" culture="neutral" /> <assemblyIdentity name="Xceed.Wpf.AvalonDock" publicKeyToken="3e4669d2f30244f4" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.8.0.0" newVersion="2.8.0.0" /> <bindingRedirect oldVersion="0.0.0.0-2.9.0.0" newVersion="2.9.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="ControlzEx" publicKeyToken="f08b075e934b7045" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.1.2.3" newVersion="2.1.2.3" />
</dependentAssembly> </dependentAssembly>
</assemblyBinding> </assemblyBinding>
</runtime> </runtime>

View File

@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<packages> <packages>
<package id="Castle.Core" version="3.3.3" targetFramework="net461" /> <package id="Castle.Core" version="3.3.3" targetFramework="net461" />
<package id="FluentAssertions" version="4.8.0" targetFramework="net461" /> <package id="FluentAssertions" version="4.13.0" targetFramework="net461" />
<package id="Moq" version="4.5.9" targetFramework="net461" /> <package id="Moq" version="4.5.21" targetFramework="net461" />
<package id="NUnit" version="3.2.1" targetFramework="net461" /> <package id="NUnit" version="3.4.1" targetFramework="net461" />
<package id="YamlDotNet" version="3.9.0" targetFramework="net461" /> <package id="YamlDotNet" version="3.9.0" targetFramework="net461" />
</packages> </packages>

View File

@ -60,8 +60,8 @@
<HintPath>..\packages\CommonServiceLocator.1.3\lib\portable-net4+sl5+netcore45+wpa81+wp8\Microsoft.Practices.ServiceLocation.dll</HintPath> <HintPath>..\packages\CommonServiceLocator.1.3\lib\portable-net4+sl5+netcore45+wpa81+wp8\Microsoft.Practices.ServiceLocation.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="Moq, Version=4.5.9.0, Culture=neutral, PublicKeyToken=69f491c39445e920, processorArchitecture=MSIL"> <Reference Include="Moq, Version=4.5.21.0, Culture=neutral, PublicKeyToken=69f491c39445e920, processorArchitecture=MSIL">
<HintPath>..\packages\Moq.4.5.9\lib\net45\Moq.dll</HintPath> <HintPath>..\packages\Moq.4.5.21\lib\net45\Moq.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="System" /> <Reference Include="System" />

View File

@ -3,6 +3,6 @@
<package id="Castle.Core" version="3.3.3" targetFramework="net461" /> <package id="Castle.Core" version="3.3.3" targetFramework="net461" />
<package id="Castle.Windsor" version="3.3.0" targetFramework="net461" /> <package id="Castle.Windsor" version="3.3.0" targetFramework="net461" />
<package id="CommonServiceLocator" version="1.3" targetFramework="net461" /> <package id="CommonServiceLocator" version="1.3" targetFramework="net461" />
<package id="Moq" version="4.5.9" targetFramework="net461" /> <package id="Moq" version="4.5.21" targetFramework="net461" />
<package id="MvvmLightLibs" version="5.3.0.0" targetFramework="net461" /> <package id="MvvmLightLibs" version="5.3.0.0" targetFramework="net461" />
</packages> </packages>

View File

@ -35,12 +35,12 @@
<HintPath>..\packages\Castle.Core.3.3.3\lib\net45\Castle.Core.dll</HintPath> <HintPath>..\packages\Castle.Core.3.3.3\lib\net45\Castle.Core.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="Moq, Version=4.5.9.0, Culture=neutral, PublicKeyToken=69f491c39445e920, processorArchitecture=MSIL"> <Reference Include="Moq, Version=4.5.21.0, Culture=neutral, PublicKeyToken=69f491c39445e920, processorArchitecture=MSIL">
<HintPath>..\packages\Moq.4.5.9\lib\net45\Moq.dll</HintPath> <HintPath>..\packages\Moq.4.5.21\lib\net45\Moq.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="nunit.framework, Version=3.2.1.0, Culture=neutral, PublicKeyToken=2638cd05610744eb, processorArchitecture=MSIL"> <Reference Include="nunit.framework, Version=3.4.1.0, Culture=neutral, PublicKeyToken=2638cd05610744eb, processorArchitecture=MSIL">
<HintPath>..\packages\NUnit.3.2.1\lib\net45\nunit.framework.dll</HintPath> <HintPath>..\packages\NUnit.3.4.1\lib\net45\nunit.framework.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="PresentationCore" /> <Reference Include="PresentationCore" />

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<packages> <packages>
<package id="Castle.Core" version="3.3.3" targetFramework="net461" /> <package id="Castle.Core" version="3.3.3" targetFramework="net461" />
<package id="Moq" version="4.5.9" targetFramework="net461" /> <package id="Moq" version="4.5.21" targetFramework="net461" />
<package id="NUnit" version="3.2.1" targetFramework="net461" /> <package id="NUnit" version="3.4.1" targetFramework="net461" />
</packages> </packages>

View File

@ -4,9 +4,10 @@ using Filtration.ObjectModel.Extensions;
namespace Filtration.ObjectModel.BlockItemBaseTypes namespace Filtration.ObjectModel.BlockItemBaseTypes
{ {
public class ActionBlockItem : BlockItemBase public sealed class ActionBlockItem : BlockItemBase
{ {
private BlockAction _action; private BlockAction _action;
private bool _isDirty;
public ActionBlockItem(BlockAction action) public ActionBlockItem(BlockAction action)
{ {
@ -19,10 +20,11 @@ namespace Filtration.ObjectModel.BlockItemBaseTypes
set set
{ {
_action = value; _action = value;
IsDirty = true;
OnPropertyChanged(); OnPropertyChanged();
OnPropertyChanged("SummaryText"); OnPropertyChanged(nameof(SummaryText));
OnPropertyChanged("SummaryBackgroundColor"); OnPropertyChanged(nameof(SummaryBackgroundColor));
OnPropertyChanged("SummaryTextColor"); OnPropertyChanged(nameof(SummaryText));
} }
} }
@ -42,6 +44,16 @@ namespace Filtration.ObjectModel.BlockItemBaseTypes
public override int SortOrder => 0; public override int SortOrder => 0;
public override bool IsDirty
{
get { return _isDirty; }
protected set
{
_isDirty = value;
OnPropertyChanged();
}
}
public void ToggleAction() public void ToggleAction()
{ {
Action = Action == BlockAction.Show ? BlockAction.Hide : BlockAction.Show; Action = Action == BlockAction.Show ? BlockAction.Hide : BlockAction.Show;

View File

@ -15,6 +15,7 @@ namespace Filtration.ObjectModel.BlockItemBaseTypes
public abstract Color SummaryBackgroundColor { get; } public abstract Color SummaryBackgroundColor { get; }
public abstract Color SummaryTextColor { get; } public abstract Color SummaryTextColor { get; }
public abstract int SortOrder { get; } public abstract int SortOrder { get; }
public abstract bool IsDirty { get; protected set; }
public event PropertyChangedEventHandler PropertyChanged; public event PropertyChangedEventHandler PropertyChanged;

View File

@ -24,6 +24,8 @@ namespace Filtration.ObjectModel.BlockItemBaseTypes
public override string SummaryText => string.Empty; public override string SummaryText => string.Empty;
public override bool IsDirty { get; protected set; }
public ThemeComponent ThemeComponent public ThemeComponent ThemeComponent
{ {
get { return _themeComponent; } get { return _themeComponent; }
@ -56,6 +58,7 @@ namespace Filtration.ObjectModel.BlockItemBaseTypes
set set
{ {
_color = value; _color = value;
IsDirty = true;
OnPropertyChanged(); OnPropertyChanged();
} }
} }

View File

@ -23,12 +23,15 @@ namespace Filtration.ObjectModel.BlockItemBaseTypes
public override Color SummaryBackgroundColor => Colors.Transparent; public override Color SummaryBackgroundColor => Colors.Transparent;
public override Color SummaryTextColor => Colors.Transparent; public override Color SummaryTextColor => Colors.Transparent;
public override bool IsDirty { get; protected set; }
public int Value public int Value
{ {
get { return _value; } get { return _value; }
set set
{ {
_value = value; _value = value;
IsDirty = true;
OnPropertyChanged(); OnPropertyChanged();
} }
} }
@ -39,6 +42,7 @@ namespace Filtration.ObjectModel.BlockItemBaseTypes
set set
{ {
_secondValue = value; _secondValue = value;
IsDirty = true;
OnPropertyChanged(); OnPropertyChanged();
} }
} }

View File

@ -24,12 +24,15 @@ namespace Filtration.ObjectModel.BlockItemBaseTypes
public abstract int Minimum { get; } public abstract int Minimum { get; }
public abstract int Maximum { get; } public abstract int Maximum { get; }
public override bool IsDirty { get; protected set; }
public int Value public int Value
{ {
get { return _value; } get { return _value; }
set set
{ {
_value = value; _value = value;
IsDirty = true;
OnPropertyChanged(); OnPropertyChanged();
} }
} }

View File

@ -26,6 +26,8 @@ namespace Filtration.ObjectModel.BlockItemBaseTypes
public abstract int Minimum { get; } public abstract int Minimum { get; }
public abstract int Maximum { get; } public abstract int Maximum { get; }
public override bool IsDirty { get; protected set; }
public NumericFilterPredicate FilterPredicate public NumericFilterPredicate FilterPredicate
{ {
get { return _filterPredicate; } get { return _filterPredicate; }
@ -38,8 +40,9 @@ namespace Filtration.ObjectModel.BlockItemBaseTypes
private void OnFilterPredicateChanged(object sender, EventArgs e) private void OnFilterPredicateChanged(object sender, EventArgs e)
{ {
OnPropertyChanged("FilterPredicate"); IsDirty = true;
OnPropertyChanged("SummaryText"); OnPropertyChanged(nameof(FilterPredicate));
OnPropertyChanged(nameof(SummaryText));
} }
} }
} }

View File

@ -30,10 +30,13 @@ namespace Filtration.ObjectModel.BlockItemBaseTypes
public ObservableCollection<string> Items { get; protected set; } public ObservableCollection<string> Items { get; protected set; }
public override bool IsDirty { get; protected set; }
private void OnItemsCollectionChanged(object sender, NotifyCollectionChangedEventArgs e) private void OnItemsCollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{ {
OnPropertyChanged("Items"); IsDirty = true;
OnPropertyChanged("SummaryText"); OnPropertyChanged(nameof(Items));
OnPropertyChanged(nameof(SummaryText));
} }
} }
} }

View File

@ -2,8 +2,7 @@
namespace Filtration.ObjectModel namespace Filtration.ObjectModel
{ {
public interface IAudioVisualBlockItem public interface IAudioVisualBlockItem : IItemFilterBlockItem
{ {
event PropertyChangedEventHandler PropertyChanged;
} }
} }

View File

@ -5,6 +5,8 @@ namespace Filtration.ObjectModel
{ {
public interface IItemFilterBlockItem : INotifyPropertyChanged public interface IItemFilterBlockItem : INotifyPropertyChanged
{ {
event PropertyChangedEventHandler PropertyChanged;
string PrefixText { get; } string PrefixText { get; }
string OutputText { get; } string OutputText { get; }
string DisplayHeading { get; } string DisplayHeading { get; }
@ -13,5 +15,6 @@ namespace Filtration.ObjectModel
Color SummaryTextColor { get; } Color SummaryTextColor { get; }
int MaximumAllowed { get; } int MaximumAllowed { get; }
int SortOrder { get; } int SortOrder { get; }
bool IsDirty { get; }
} }
} }

View File

@ -40,20 +40,20 @@
<HintPath>..\packages\Castle.Core.3.3.3\lib\net45\Castle.Core.dll</HintPath> <HintPath>..\packages\Castle.Core.3.3.3\lib\net45\Castle.Core.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="FluentAssertions, Version=4.8.0.0, Culture=neutral, PublicKeyToken=33f2691a05b67b6a, processorArchitecture=MSIL"> <Reference Include="FluentAssertions, Version=4.13.0.0, Culture=neutral, PublicKeyToken=33f2691a05b67b6a, processorArchitecture=MSIL">
<HintPath>..\packages\FluentAssertions.4.8.0\lib\net45\FluentAssertions.dll</HintPath> <HintPath>..\packages\FluentAssertions.4.13.0\lib\net45\FluentAssertions.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="FluentAssertions.Core, Version=4.8.0.0, Culture=neutral, PublicKeyToken=33f2691a05b67b6a, processorArchitecture=MSIL"> <Reference Include="FluentAssertions.Core, Version=4.13.0.0, Culture=neutral, PublicKeyToken=33f2691a05b67b6a, processorArchitecture=MSIL">
<HintPath>..\packages\FluentAssertions.4.8.0\lib\net45\FluentAssertions.Core.dll</HintPath> <HintPath>..\packages\FluentAssertions.4.13.0\lib\net45\FluentAssertions.Core.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="Moq, Version=4.5.9.0, Culture=neutral, PublicKeyToken=69f491c39445e920, processorArchitecture=MSIL"> <Reference Include="Moq, Version=4.5.21.0, Culture=neutral, PublicKeyToken=69f491c39445e920, processorArchitecture=MSIL">
<HintPath>..\packages\Moq.4.5.9\lib\net45\Moq.dll</HintPath> <HintPath>..\packages\Moq.4.5.21\lib\net45\Moq.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="nunit.framework, Version=3.2.1.0, Culture=neutral, PublicKeyToken=2638cd05610744eb, processorArchitecture=MSIL"> <Reference Include="nunit.framework, Version=3.4.1.0, Culture=neutral, PublicKeyToken=2638cd05610744eb, processorArchitecture=MSIL">
<HintPath>..\packages\NUnit.3.2.1\lib\net45\nunit.framework.dll</HintPath> <HintPath>..\packages\NUnit.3.4.1\lib\net45\nunit.framework.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="PresentationCore" /> <Reference Include="PresentationCore" />

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<packages> <packages>
<package id="Castle.Core" version="3.3.3" targetFramework="net461" /> <package id="Castle.Core" version="3.3.3" targetFramework="net461" />
<package id="FluentAssertions" version="4.8.0" targetFramework="net461" /> <package id="FluentAssertions" version="4.13.0" targetFramework="net461" />
<package id="Moq" version="4.5.9" targetFramework="net461" /> <package id="Moq" version="4.5.21" targetFramework="net461" />
<package id="NUnit" version="3.2.1" targetFramework="net461" /> <package id="NUnit" version="3.4.1" targetFramework="net461" />
</packages> </packages>

View File

@ -35,20 +35,20 @@
<HintPath>..\packages\Castle.Core.3.3.3\lib\net45\Castle.Core.dll</HintPath> <HintPath>..\packages\Castle.Core.3.3.3\lib\net45\Castle.Core.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="FluentAssertions, Version=4.8.0.0, Culture=neutral, PublicKeyToken=33f2691a05b67b6a, processorArchitecture=MSIL"> <Reference Include="FluentAssertions, Version=4.13.0.0, Culture=neutral, PublicKeyToken=33f2691a05b67b6a, processorArchitecture=MSIL">
<HintPath>..\packages\FluentAssertions.4.8.0\lib\net45\FluentAssertions.dll</HintPath> <HintPath>..\packages\FluentAssertions.4.13.0\lib\net45\FluentAssertions.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="FluentAssertions.Core, Version=4.8.0.0, Culture=neutral, PublicKeyToken=33f2691a05b67b6a, processorArchitecture=MSIL"> <Reference Include="FluentAssertions.Core, Version=4.13.0.0, Culture=neutral, PublicKeyToken=33f2691a05b67b6a, processorArchitecture=MSIL">
<HintPath>..\packages\FluentAssertions.4.8.0\lib\net45\FluentAssertions.Core.dll</HintPath> <HintPath>..\packages\FluentAssertions.4.13.0\lib\net45\FluentAssertions.Core.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="Moq, Version=4.5.9.0, Culture=neutral, PublicKeyToken=69f491c39445e920, processorArchitecture=MSIL"> <Reference Include="Moq, Version=4.5.21.0, Culture=neutral, PublicKeyToken=69f491c39445e920, processorArchitecture=MSIL">
<HintPath>..\packages\Moq.4.5.9\lib\net45\Moq.dll</HintPath> <HintPath>..\packages\Moq.4.5.21\lib\net45\Moq.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="nunit.framework, Version=3.2.1.0, Culture=neutral, PublicKeyToken=2638cd05610744eb, processorArchitecture=MSIL"> <Reference Include="nunit.framework, Version=3.4.1.0, Culture=neutral, PublicKeyToken=2638cd05610744eb, processorArchitecture=MSIL">
<HintPath>..\packages\NUnit.3.2.1\lib\net45\nunit.framework.dll</HintPath> <HintPath>..\packages\NUnit.3.4.1\lib\net45\nunit.framework.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="PresentationCore" /> <Reference Include="PresentationCore" />

View File

@ -4,7 +4,11 @@
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly> <dependentAssembly>
<assemblyIdentity name="Xceed.Wpf.AvalonDock" publicKeyToken="3e4669d2f30244f4" culture="neutral" /> <assemblyIdentity name="Xceed.Wpf.AvalonDock" publicKeyToken="3e4669d2f30244f4" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.8.0.0" newVersion="2.8.0.0" /> <bindingRedirect oldVersion="0.0.0.0-2.9.0.0" newVersion="2.9.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="ControlzEx" publicKeyToken="f08b075e934b7045" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.1.2.3" newVersion="2.1.2.3" />
</dependentAssembly> </dependentAssembly>
</assemblyBinding> </assemblyBinding>
</runtime> </runtime>

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<packages> <packages>
<package id="Castle.Core" version="3.3.3" targetFramework="net461" /> <package id="Castle.Core" version="3.3.3" targetFramework="net461" />
<package id="FluentAssertions" version="4.8.0" targetFramework="net461" /> <package id="FluentAssertions" version="4.13.0" targetFramework="net461" />
<package id="Moq" version="4.5.9" targetFramework="net461" /> <package id="Moq" version="4.5.21" targetFramework="net461" />
<package id="NUnit" version="3.2.1" targetFramework="net461" /> <package id="NUnit" version="3.4.1" targetFramework="net461" />
</packages> </packages>

View File

@ -35,12 +35,12 @@
<HintPath>..\packages\Castle.Core.3.3.3\lib\net45\Castle.Core.dll</HintPath> <HintPath>..\packages\Castle.Core.3.3.3\lib\net45\Castle.Core.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="Moq, Version=4.5.9.0, Culture=neutral, PublicKeyToken=69f491c39445e920, processorArchitecture=MSIL"> <Reference Include="Moq, Version=4.5.21.0, Culture=neutral, PublicKeyToken=69f491c39445e920, processorArchitecture=MSIL">
<HintPath>..\packages\Moq.4.5.9\lib\net45\Moq.dll</HintPath> <HintPath>..\packages\Moq.4.5.21\lib\net45\Moq.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="nunit.framework, Version=3.2.1.0, Culture=neutral, PublicKeyToken=2638cd05610744eb, processorArchitecture=MSIL"> <Reference Include="nunit.framework, Version=3.4.1.0, Culture=neutral, PublicKeyToken=2638cd05610744eb, processorArchitecture=MSIL">
<HintPath>..\packages\NUnit.3.2.1\lib\net45\nunit.framework.dll</HintPath> <HintPath>..\packages\NUnit.3.4.1\lib\net45\nunit.framework.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="PresentationCore" /> <Reference Include="PresentationCore" />

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<packages> <packages>
<package id="Castle.Core" version="3.3.3" targetFramework="net461" /> <package id="Castle.Core" version="3.3.3" targetFramework="net461" />
<package id="Moq" version="4.5.9" targetFramework="net461" /> <package id="Moq" version="4.5.21" targetFramework="net461" />
<package id="NUnit" version="3.2.1" targetFramework="net461" /> <package id="NUnit" version="3.4.1" targetFramework="net461" />
</packages> </packages>

View File

@ -58,7 +58,7 @@
<HintPath>..\packages\CommonServiceLocator.1.3\lib\portable-net4+sl5+netcore45+wpa81+wp8\Microsoft.Practices.ServiceLocation.dll</HintPath> <HintPath>..\packages\CommonServiceLocator.1.3\lib\portable-net4+sl5+netcore45+wpa81+wp8\Microsoft.Practices.ServiceLocation.dll</HintPath>
</Reference> </Reference>
<Reference Include="NLog, Version=4.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL"> <Reference Include="NLog, Version=4.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
<HintPath>..\packages\NLog.4.3.4\lib\net45\NLog.dll</HintPath> <HintPath>..\packages\NLog.4.3.7\lib\net45\NLog.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="PresentationCore" /> <Reference Include="PresentationCore" />
@ -78,28 +78,28 @@
<Reference Include="System.Data" /> <Reference Include="System.Data" />
<Reference Include="System.Xml" /> <Reference Include="System.Xml" />
<Reference Include="WindowsBase" /> <Reference Include="WindowsBase" />
<Reference Include="Xceed.Wpf.AvalonDock, Version=2.8.0.0, Culture=neutral, PublicKeyToken=3e4669d2f30244f4, processorArchitecture=MSIL"> <Reference Include="Xceed.Wpf.AvalonDock, Version=2.9.0.0, Culture=neutral, PublicKeyToken=3e4669d2f30244f4, processorArchitecture=MSIL">
<HintPath>..\packages\Extended.Wpf.Toolkit.2.8\lib\net40\Xceed.Wpf.AvalonDock.dll</HintPath> <HintPath>..\packages\Extended.Wpf.Toolkit.2.9\lib\net40\Xceed.Wpf.AvalonDock.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="Xceed.Wpf.AvalonDock.Themes.Aero, Version=2.8.0.0, Culture=neutral, PublicKeyToken=3e4669d2f30244f4, processorArchitecture=MSIL"> <Reference Include="Xceed.Wpf.AvalonDock.Themes.Aero, Version=2.9.0.0, Culture=neutral, PublicKeyToken=3e4669d2f30244f4, processorArchitecture=MSIL">
<HintPath>..\packages\Extended.Wpf.Toolkit.2.8\lib\net40\Xceed.Wpf.AvalonDock.Themes.Aero.dll</HintPath> <HintPath>..\packages\Extended.Wpf.Toolkit.2.9\lib\net40\Xceed.Wpf.AvalonDock.Themes.Aero.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="Xceed.Wpf.AvalonDock.Themes.Metro, Version=2.8.0.0, Culture=neutral, PublicKeyToken=3e4669d2f30244f4, processorArchitecture=MSIL"> <Reference Include="Xceed.Wpf.AvalonDock.Themes.Metro, Version=2.9.0.0, Culture=neutral, PublicKeyToken=3e4669d2f30244f4, processorArchitecture=MSIL">
<HintPath>..\packages\Extended.Wpf.Toolkit.2.8\lib\net40\Xceed.Wpf.AvalonDock.Themes.Metro.dll</HintPath> <HintPath>..\packages\Extended.Wpf.Toolkit.2.9\lib\net40\Xceed.Wpf.AvalonDock.Themes.Metro.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="Xceed.Wpf.AvalonDock.Themes.VS2010, Version=2.8.0.0, Culture=neutral, PublicKeyToken=3e4669d2f30244f4, processorArchitecture=MSIL"> <Reference Include="Xceed.Wpf.AvalonDock.Themes.VS2010, Version=2.9.0.0, Culture=neutral, PublicKeyToken=3e4669d2f30244f4, processorArchitecture=MSIL">
<HintPath>..\packages\Extended.Wpf.Toolkit.2.8\lib\net40\Xceed.Wpf.AvalonDock.Themes.VS2010.dll</HintPath> <HintPath>..\packages\Extended.Wpf.Toolkit.2.9\lib\net40\Xceed.Wpf.AvalonDock.Themes.VS2010.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="Xceed.Wpf.DataGrid, Version=2.8.0.0, Culture=neutral, PublicKeyToken=3e4669d2f30244f4, processorArchitecture=MSIL"> <Reference Include="Xceed.Wpf.DataGrid, Version=2.9.0.0, Culture=neutral, PublicKeyToken=3e4669d2f30244f4, processorArchitecture=MSIL">
<HintPath>..\packages\Extended.Wpf.Toolkit.2.8\lib\net40\Xceed.Wpf.DataGrid.dll</HintPath> <HintPath>..\packages\Extended.Wpf.Toolkit.2.9\lib\net40\Xceed.Wpf.DataGrid.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="Xceed.Wpf.Toolkit, Version=2.8.0.0, Culture=neutral, PublicKeyToken=3e4669d2f30244f4, processorArchitecture=MSIL"> <Reference Include="Xceed.Wpf.Toolkit, Version=2.9.0.0, Culture=neutral, PublicKeyToken=3e4669d2f30244f4, processorArchitecture=MSIL">
<HintPath>..\packages\Extended.Wpf.Toolkit.2.8\lib\net40\Xceed.Wpf.Toolkit.dll</HintPath> <HintPath>..\packages\Extended.Wpf.Toolkit.2.9\lib\net40\Xceed.Wpf.Toolkit.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
</ItemGroup> </ItemGroup>

View File

@ -4,7 +4,7 @@
<package id="Castle.Core" version="3.3.3" targetFramework="net451" /> <package id="Castle.Core" version="3.3.3" targetFramework="net451" />
<package id="Castle.Windsor" version="3.3.0" targetFramework="net451" /> <package id="Castle.Windsor" version="3.3.0" targetFramework="net451" />
<package id="CommonServiceLocator" version="1.3" targetFramework="net451" /> <package id="CommonServiceLocator" version="1.3" targetFramework="net451" />
<package id="Extended.Wpf.Toolkit" version="2.8" targetFramework="net461" /> <package id="Extended.Wpf.Toolkit" version="2.9" targetFramework="net461" />
<package id="MvvmLightLibs" version="5.3.0.0" targetFramework="net461" /> <package id="MvvmLightLibs" version="5.3.0.0" targetFramework="net461" />
<package id="NLog" version="4.3.4" targetFramework="net461" /> <package id="NLog" version="4.3.7" targetFramework="net461" />
</packages> </packages>

Binary file not shown.

View File

@ -31,7 +31,11 @@
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly> <dependentAssembly>
<assemblyIdentity name="Xceed.Wpf.AvalonDock" publicKeyToken="3e4669d2f30244f4" culture="neutral" /> <assemblyIdentity name="Xceed.Wpf.AvalonDock" publicKeyToken="3e4669d2f30244f4" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.8.0.0" newVersion="2.8.0.0" /> <bindingRedirect oldVersion="0.0.0.0-2.9.0.0" newVersion="2.9.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="ControlzEx" publicKeyToken="f08b075e934b7045" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.1.2.3" newVersion="2.1.2.3" />
</dependentAssembly> </dependentAssembly>
</assemblyBinding> </assemblyBinding>
</runtime> </runtime>

View File

@ -53,8 +53,8 @@
<Reference Include="Castle.Windsor"> <Reference Include="Castle.Windsor">
<HintPath>..\packages\Castle.Windsor.3.3.0\lib\net45\Castle.Windsor.dll</HintPath> <HintPath>..\packages\Castle.Windsor.3.3.0\lib\net45\Castle.Windsor.dll</HintPath>
</Reference> </Reference>
<Reference Include="ControlzEx, Version=2.0.1.61, Culture=neutral, PublicKeyToken=f08b075e934b7045, processorArchitecture=MSIL"> <Reference Include="ControlzEx, Version=2.1.2.3, Culture=neutral, PublicKeyToken=f08b075e934b7045, processorArchitecture=MSIL">
<HintPath>..\packages\ControlzEx.2.0.1.61\lib\net45\ControlzEx.dll</HintPath> <HintPath>..\packages\ControlzEx.2.1.2.3\lib\net45\ControlzEx.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="Fluent, Version=4.0.3.394, Culture=neutral, PublicKeyToken=3e436e32a8c5546f, processorArchitecture=MSIL"> <Reference Include="Fluent, Version=4.0.3.394, Culture=neutral, PublicKeyToken=3e436e32a8c5546f, processorArchitecture=MSIL">
@ -79,7 +79,7 @@
</Reference> </Reference>
<Reference Include="Microsoft.CSharp" /> <Reference Include="Microsoft.CSharp" />
<Reference Include="NLog, Version=4.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL"> <Reference Include="NLog, Version=4.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
<HintPath>..\packages\NLog.4.3.4\lib\net45\NLog.dll</HintPath> <HintPath>..\packages\NLog.4.3.7\lib\net45\NLog.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="System" /> <Reference Include="System" />
@ -94,7 +94,7 @@
</Reference> </Reference>
<Reference Include="System.Windows.Forms" /> <Reference Include="System.Windows.Forms" />
<Reference Include="System.Windows.Interactivity, Version=4.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> <Reference Include="System.Windows.Interactivity, Version=4.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\MvvmLightLibs.5.3.0.0\lib\net45\System.Windows.Interactivity.dll</HintPath> <HintPath>..\packages\ControlzEx.2.1.2.3\lib\net45\System.Windows.Interactivity.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="System.Xml" /> <Reference Include="System.Xml" />
@ -113,32 +113,32 @@
<SpecificVersion>False</SpecificVersion> <SpecificVersion>False</SpecificVersion>
<HintPath>..\packages\WPFToolkit.3.5.50211.1\lib\WPFToolkit.dll</HintPath> <HintPath>..\packages\WPFToolkit.3.5.50211.1\lib\WPFToolkit.dll</HintPath>
</Reference> </Reference>
<Reference Include="Xceed.Wpf.AvalonDock, Version=2.8.0.0, Culture=neutral, PublicKeyToken=3e4669d2f30244f4, processorArchitecture=MSIL"> <Reference Include="Xceed.Wpf.AvalonDock, Version=2.9.0.0, Culture=neutral, PublicKeyToken=3e4669d2f30244f4, processorArchitecture=MSIL">
<HintPath>..\packages\Extended.Wpf.Toolkit.2.8\lib\net40\Xceed.Wpf.AvalonDock.dll</HintPath> <HintPath>..\packages\Extended.Wpf.Toolkit.2.9\lib\net40\Xceed.Wpf.AvalonDock.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="Xceed.Wpf.AvalonDock.Themes.Aero, Version=2.8.0.0, Culture=neutral, PublicKeyToken=3e4669d2f30244f4, processorArchitecture=MSIL"> <Reference Include="Xceed.Wpf.AvalonDock.Themes.Aero, Version=2.9.0.0, Culture=neutral, PublicKeyToken=3e4669d2f30244f4, processorArchitecture=MSIL">
<HintPath>..\packages\Extended.Wpf.Toolkit.2.8\lib\net40\Xceed.Wpf.AvalonDock.Themes.Aero.dll</HintPath> <HintPath>..\packages\Extended.Wpf.Toolkit.2.9\lib\net40\Xceed.Wpf.AvalonDock.Themes.Aero.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="Xceed.Wpf.AvalonDock.Themes.Metro, Version=2.8.0.0, Culture=neutral, PublicKeyToken=3e4669d2f30244f4, processorArchitecture=MSIL"> <Reference Include="Xceed.Wpf.AvalonDock.Themes.Metro, Version=2.9.0.0, Culture=neutral, PublicKeyToken=3e4669d2f30244f4, processorArchitecture=MSIL">
<HintPath>..\packages\Extended.Wpf.Toolkit.2.8\lib\net40\Xceed.Wpf.AvalonDock.Themes.Metro.dll</HintPath> <HintPath>..\packages\Extended.Wpf.Toolkit.2.9\lib\net40\Xceed.Wpf.AvalonDock.Themes.Metro.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="Xceed.Wpf.AvalonDock.Themes.VS2010, Version=2.8.0.0, Culture=neutral, PublicKeyToken=3e4669d2f30244f4, processorArchitecture=MSIL"> <Reference Include="Xceed.Wpf.AvalonDock.Themes.VS2010, Version=2.9.0.0, Culture=neutral, PublicKeyToken=3e4669d2f30244f4, processorArchitecture=MSIL">
<HintPath>..\packages\Extended.Wpf.Toolkit.2.8\lib\net40\Xceed.Wpf.AvalonDock.Themes.VS2010.dll</HintPath> <HintPath>..\packages\Extended.Wpf.Toolkit.2.9\lib\net40\Xceed.Wpf.AvalonDock.Themes.VS2010.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="Xceed.Wpf.AvalonDock.Themes.VS2013, Version=2.0.0.0, Culture=neutral, PublicKeyToken=3e4669d2f30244f4, processorArchitecture=MSIL"> <Reference Include="Xceed.Wpf.AvalonDock.Themes.VS2013, Version=2.0.0.0, Culture=neutral, PublicKeyToken=3e4669d2f30244f4, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion> <SpecificVersion>False</SpecificVersion>
<HintPath>libs\Xceed.Wpf.AvalonDock.Themes.VS2013.dll</HintPath> <HintPath>libs\Xceed.Wpf.AvalonDock.Themes.VS2013.dll</HintPath>
</Reference> </Reference>
<Reference Include="Xceed.Wpf.DataGrid, Version=2.8.0.0, Culture=neutral, PublicKeyToken=3e4669d2f30244f4, processorArchitecture=MSIL"> <Reference Include="Xceed.Wpf.DataGrid, Version=2.9.0.0, Culture=neutral, PublicKeyToken=3e4669d2f30244f4, processorArchitecture=MSIL">
<HintPath>..\packages\Extended.Wpf.Toolkit.2.8\lib\net40\Xceed.Wpf.DataGrid.dll</HintPath> <HintPath>..\packages\Extended.Wpf.Toolkit.2.9\lib\net40\Xceed.Wpf.DataGrid.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="Xceed.Wpf.Toolkit, Version=2.8.0.0, Culture=neutral, PublicKeyToken=3e4669d2f30244f4, processorArchitecture=MSIL"> <Reference Include="Xceed.Wpf.Toolkit, Version=2.9.0.0, Culture=neutral, PublicKeyToken=3e4669d2f30244f4, processorArchitecture=MSIL">
<HintPath>..\packages\Extended.Wpf.Toolkit.2.8\lib\net40\Xceed.Wpf.Toolkit.dll</HintPath> <HintPath>..\packages\Extended.Wpf.Toolkit.2.9\lib\net40\Xceed.Wpf.Toolkit.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
</ItemGroup> </ItemGroup>

View File

@ -232,7 +232,6 @@
</xs:extension> </xs:extension>
</xs:complexContent> </xs:complexContent>
</xs:complexType> </xs:complexType>
<xs:complexType name="Layout"></xs:complexType>
<xs:complexType name="Filter" abstract="true"></xs:complexType> <xs:complexType name="Filter" abstract="true"></xs:complexType>
<xs:complexType name="TimeSource" abstract="true"></xs:complexType> <xs:complexType name="TimeSource" abstract="true"></xs:complexType>
<xs:simpleType name="SimpleLayoutAttribute"> <xs:simpleType name="SimpleLayoutAttribute">
@ -1020,8 +1019,8 @@
<xs:element name="archiveFileName" minOccurs="0" maxOccurs="1" type="Layout" /> <xs:element name="archiveFileName" minOccurs="0" maxOccurs="1" type="Layout" />
<xs:element name="archiveEvery" minOccurs="0" maxOccurs="1" type="NLog.Targets.FileArchivePeriod" /> <xs:element name="archiveEvery" minOccurs="0" maxOccurs="1" type="NLog.Targets.FileArchivePeriod" />
<xs:element name="archiveAboveSize" minOccurs="0" maxOccurs="1" type="xs:long" /> <xs:element name="archiveAboveSize" minOccurs="0" maxOccurs="1" type="xs:long" />
<xs:element name="maxArchiveFiles" minOccurs="0" maxOccurs="1" type="xs:integer" />
<xs:element name="enableArchiveFileCompression" minOccurs="0" maxOccurs="1" type="xs:boolean" /> <xs:element name="enableArchiveFileCompression" minOccurs="0" maxOccurs="1" type="xs:boolean" />
<xs:element name="maxArchiveFiles" minOccurs="0" maxOccurs="1" type="xs:integer" />
<xs:element name="forceManaged" minOccurs="0" maxOccurs="1" type="xs:boolean" /> <xs:element name="forceManaged" minOccurs="0" maxOccurs="1" type="xs:boolean" />
<xs:element name="cleanupFileName" minOccurs="0" maxOccurs="1" type="xs:boolean" /> <xs:element name="cleanupFileName" minOccurs="0" maxOccurs="1" type="xs:boolean" />
<xs:element name="fileName" minOccurs="0" maxOccurs="1" type="Layout" /> <xs:element name="fileName" minOccurs="0" maxOccurs="1" type="Layout" />
@ -1093,16 +1092,16 @@
<xs:documentation>Size in bytes above which log files will be automatically archived. Warning: combining this with isn't supported. We cannot create multiple archive files, if they should have the same name. Choose: </xs:documentation> <xs:documentation>Size in bytes above which log files will be automatically archived. Warning: combining this with isn't supported. We cannot create multiple archive files, if they should have the same name. Choose: </xs:documentation>
</xs:annotation> </xs:annotation>
</xs:attribute> </xs:attribute>
<xs:attribute name="maxArchiveFiles" type="xs:integer">
<xs:annotation>
<xs:documentation>Maximum number of archive files that should be kept.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="enableArchiveFileCompression" type="xs:boolean"> <xs:attribute name="enableArchiveFileCompression" type="xs:boolean">
<xs:annotation> <xs:annotation>
<xs:documentation>Indicates whether to compress archive files into the zip archive format.</xs:documentation> <xs:documentation>Indicates whether to compress archive files into the zip archive format.</xs:documentation>
</xs:annotation> </xs:annotation>
</xs:attribute> </xs:attribute>
<xs:attribute name="maxArchiveFiles" type="xs:integer">
<xs:annotation>
<xs:documentation>Maximum number of archive files that should be kept.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="forceManaged" type="xs:boolean"> <xs:attribute name="forceManaged" type="xs:boolean">
<xs:annotation> <xs:annotation>
<xs:documentation>Gets or set a value indicating whether a managed file stream is forced, instead of used the native implementation.</xs:documentation> <xs:documentation>Gets or set a value indicating whether a managed file stream is forced, instead of used the native implementation.</xs:documentation>
@ -2238,6 +2237,18 @@
<xs:enumeration value="HttpGet" /> <xs:enumeration value="HttpGet" />
</xs:restriction> </xs:restriction>
</xs:simpleType> </xs:simpleType>
<xs:complexType name="CompoundLayout">
<xs:complexContent>
<xs:extension base="Layout">
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="layout" minOccurs="0" maxOccurs="unbounded" type="Layout" />
</xs:choice>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="Layout">
<xs:choice minOccurs="0" maxOccurs="unbounded" />
</xs:complexType>
<xs:complexType name="CsvLayout"> <xs:complexType name="CsvLayout">
<xs:complexContent> <xs:complexContent>
<xs:extension base="Layout"> <xs:extension base="Layout">
@ -2334,8 +2345,14 @@
<xs:extension base="Layout"> <xs:extension base="Layout">
<xs:choice minOccurs="0" maxOccurs="unbounded"> <xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="attribute" minOccurs="0" maxOccurs="unbounded" type="NLog.Layouts.JsonAttribute" /> <xs:element name="attribute" minOccurs="0" maxOccurs="unbounded" type="NLog.Layouts.JsonAttribute" />
<xs:element name="renderEmptyObject" minOccurs="0" maxOccurs="1" type="xs:boolean" />
<xs:element name="suppressSpaces" minOccurs="0" maxOccurs="1" type="xs:boolean" /> <xs:element name="suppressSpaces" minOccurs="0" maxOccurs="1" type="xs:boolean" />
</xs:choice> </xs:choice>
<xs:attribute name="renderEmptyObject" type="xs:boolean">
<xs:annotation>
<xs:documentation>Option to render the empty object value {}</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="suppressSpaces" type="xs:boolean"> <xs:attribute name="suppressSpaces" type="xs:boolean">
<xs:annotation> <xs:annotation>
<xs:documentation>Option to suppress the extra spaces in the output json</xs:documentation> <xs:documentation>Option to suppress the extra spaces in the output json</xs:documentation>

View File

@ -18,6 +18,7 @@ namespace Filtration.ViewModels
{ {
internal interface IItemFilterBlockViewModel internal interface IItemFilterBlockViewModel
{ {
event EventHandler BlockBecameDirty;
void Initialise(IItemFilterBlock itemFilterBlock, ItemFilterScriptViewModel parentScriptViewModel); void Initialise(IItemFilterBlock itemFilterBlock, ItemFilterScriptViewModel parentScriptViewModel);
bool IsDirty { get; set; } bool IsDirty { get; set; }
bool IsExpanded { get; set; } bool IsExpanded { get; set; }
@ -36,6 +37,7 @@ namespace Filtration.ViewModels
private bool _displaySettingsPopupOpen; private bool _displaySettingsPopupOpen;
private bool _isExpanded; private bool _isExpanded;
private bool _audioVisualBlockItemsGridVisible; private bool _audioVisualBlockItemsGridVisible;
private bool _isDirty;
public ItemFilterBlockViewModel(IStaticDataService staticDataService, IReplaceColorsViewModel replaceColorsViewModel) public ItemFilterBlockViewModel(IStaticDataService staticDataService, IReplaceColorsViewModel replaceColorsViewModel)
{ {
@ -56,12 +58,13 @@ namespace Filtration.ViewModels
ReplaceColorsCommand = new RelayCommand(OnReplaceColorsCommand); ReplaceColorsCommand = new RelayCommand(OnReplaceColorsCommand);
AddFilterBlockItemCommand = new RelayCommand<Type>(OnAddFilterBlockItemCommand); AddFilterBlockItemCommand = new RelayCommand<Type>(OnAddFilterBlockItemCommand);
ToggleBlockActionCommand = new RelayCommand(OnToggleBlockActionCommand); ToggleBlockActionCommand = new RelayCommand(OnToggleBlockActionCommand);
AddAudioVisualBlockItemCommand = new RelayCommand<Type>(OnAddAudioVisualBlockItemCommand);
RemoveFilterBlockItemCommand = new RelayCommand<IItemFilterBlockItem>(OnRemoveFilterBlockItemCommand); RemoveFilterBlockItemCommand = new RelayCommand<IItemFilterBlockItem>(OnRemoveFilterBlockItemCommand);
SwitchBlockItemsViewCommand = new RelayCommand(OnSwitchBlockItemsViewCommand); SwitchBlockItemsViewCommand = new RelayCommand(OnSwitchBlockItemsViewCommand);
PlaySoundCommand = new RelayCommand(OnPlaySoundCommand, () => HasSound); PlaySoundCommand = new RelayCommand(OnPlaySoundCommand, () => HasSound);
} }
public event EventHandler BlockBecameDirty;
public void Initialise(IItemFilterBlock itemFilterBlock, ItemFilterScriptViewModel parentScriptViewModel) public void Initialise(IItemFilterBlock itemFilterBlock, ItemFilterScriptViewModel parentScriptViewModel)
{ {
if (itemFilterBlock == null || parentScriptViewModel == null) if (itemFilterBlock == null || parentScriptViewModel == null)
@ -74,9 +77,9 @@ namespace Filtration.ViewModels
Block = itemFilterBlock; Block = itemFilterBlock;
itemFilterBlock.BlockItems.CollectionChanged += OnBlockItemsCollectionChanged; itemFilterBlock.BlockItems.CollectionChanged += OnBlockItemsCollectionChanged;
foreach (var blockItem in itemFilterBlock.BlockItems.OfType<IAudioVisualBlockItem>()) foreach (var blockItem in itemFilterBlock.BlockItems)
{ {
blockItem.PropertyChanged += OnAudioVisualBlockItemChanged; blockItem.PropertyChanged += OnBlockItemChanged;
} }
} }
@ -101,7 +104,19 @@ namespace Filtration.ViewModels
public IItemFilterBlock Block { get; private set; } public IItemFilterBlock Block { get; private set; }
public bool IsDirty { get; set; } public bool IsDirty
{
get { return _isDirty; }
set
{
if (value != _isDirty)
{
_isDirty = value;
RaisePropertyChanged();
BlockBecameDirty?.Invoke(this, EventArgs.Empty);
}
}
}
public bool IsExpanded public bool IsExpanded
{ {
@ -242,33 +257,35 @@ namespace Filtration.ViewModels
if (!AddBlockItemAllowed(blockItemType)) return; if (!AddBlockItemAllowed(blockItemType)) return;
var newBlockItem = (IItemFilterBlockItem) Activator.CreateInstance(blockItemType); var newBlockItem = (IItemFilterBlockItem) Activator.CreateInstance(blockItemType);
newBlockItem.PropertyChanged += OnBlockItemChanged;
BlockItems.Add(newBlockItem); BlockItems.Add(newBlockItem);
OnBlockItemChanged(this, EventArgs.Empty);
IsDirty = true; IsDirty = true;
} }
private void OnRemoveFilterBlockItemCommand(IItemFilterBlockItem blockItem) private void OnRemoveFilterBlockItemCommand(IItemFilterBlockItem blockItem)
{ {
BlockItems.Remove(blockItem); BlockItems.Remove(blockItem);
blockItem.PropertyChanged -= OnBlockItemChanged;
if (blockItem is IAudioVisualBlockItem) if (blockItem is IAudioVisualBlockItem)
{ {
blockItem.PropertyChanged -= OnAudioVisualBlockItemChanged; OnBlockItemChanged(this, EventArgs.Empty);
OnAudioVisualBlockItemChanged(this, EventArgs.Empty);
} }
IsDirty = true; IsDirty = true;
} }
private void OnAddAudioVisualBlockItemCommand(Type blockItemType) //private void OnAddAudioVisualBlockItemCommand(Type blockItemType)
{ //{
if (!AddBlockItemAllowed(blockItemType)) return; // if (!AddBlockItemAllowed(blockItemType)) return;
var newBlockItem = (IItemFilterBlockItem) Activator.CreateInstance(blockItemType); // var newBlockItem = (IItemFilterBlockItem) Activator.CreateInstance(blockItemType);
newBlockItem.PropertyChanged += OnAudioVisualBlockItemChanged; // newBlockItem.PropertyChanged += OnBlockItemChanged;
BlockItems.Add(newBlockItem); // BlockItems.Add(newBlockItem);
OnAudioVisualBlockItemChanged(this, EventArgs.Empty); // OnBlockItemChanged(this, EventArgs.Empty);
IsDirty = true; // IsDirty = true;
} //}
private void OnCopyBlockCommand() private void OnCopyBlockCommand()
{ {
@ -346,26 +363,35 @@ namespace Filtration.ViewModels
_mediaPlayer.Play(); _mediaPlayer.Play();
} }
private void OnAudioVisualBlockItemChanged(object sender, EventArgs e) private void OnBlockItemChanged(object sender, EventArgs e)
{
var itemFilterBlockItem = sender as IItemFilterBlockItem;
if ( itemFilterBlockItem != null && itemFilterBlockItem.IsDirty)
{
IsDirty = true;
}
if (sender is IAudioVisualBlockItem)
{ {
RefreshBlockPreview(); RefreshBlockPreview();
} }
}
public void RefreshBlockPreview() public void RefreshBlockPreview()
{ {
RaisePropertyChanged("DisplayTextColor"); RaisePropertyChanged(nameof(DisplayTextColor));
RaisePropertyChanged("DisplayBackgroundColor"); RaisePropertyChanged(nameof(DisplayBackgroundColor));
RaisePropertyChanged("DisplayBorderColor"); RaisePropertyChanged(nameof(DisplayBorderColor));
RaisePropertyChanged("DisplayFontSize"); RaisePropertyChanged(nameof(DisplayFontSize));
RaisePropertyChanged("HasSound"); RaisePropertyChanged(nameof(HasSound));
} }
private void OnBlockItemsCollectionChanged(object sender, NotifyCollectionChangedEventArgs e) private void OnBlockItemsCollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{ {
RaisePropertyChanged("RegularBlockItems"); RaisePropertyChanged(nameof(RegularBlockItems));
RaisePropertyChanged("SummaryBlockItems"); RaisePropertyChanged(nameof(SummaryBlockItems));
RaisePropertyChanged("AudioVisualBlockItems"); RaisePropertyChanged(nameof(AudioVisualBlockItems));
RaisePropertyChanged("HasAudioVisualBlockItems"); RaisePropertyChanged(nameof(HasAudioVisualBlockItems));
} }
} }
} }

View File

@ -324,6 +324,7 @@ namespace Filtration.ViewModels
{ {
var vm = _itemFilterBlockViewModelFactory.Create(); var vm = _itemFilterBlockViewModelFactory.Create();
vm.Initialise(block, this); vm.Initialise(block, this);
vm.BlockBecameDirty += OnBlockBecameDirty;
ItemFilterBlockViewModels.Add(vm); ItemFilterBlockViewModels.Add(vm);
} }
@ -639,6 +640,8 @@ namespace Filtration.ViewModels
ItemFilterBlockViewModels.Add(vm); ItemFilterBlockViewModels.Add(vm);
} }
vm.BlockBecameDirty += OnBlockBecameDirty;
SelectedBlockViewModel = vm; SelectedBlockViewModel = vm;
IsDirty = true; IsDirty = true;
} }
@ -757,11 +760,17 @@ namespace Filtration.ViewModels
ItemFilterBlockViewModels.Add(vm); ItemFilterBlockViewModels.Add(vm);
} }
vm.BlockBecameDirty += OnBlockBecameDirty;
SelectedBlockViewModel = vm; SelectedBlockViewModel = vm;
vm.IsExpanded = true; vm.IsExpanded = true;
IsDirty = true; IsDirty = true;
} }
private void OnBlockBecameDirty(object sender, EventArgs e)
{
SetDirtyFlag();
}
private void OnAddSectionCommand() private void OnAddSectionCommand()
{ {
AddSection(SelectedBlockViewModel); AddSection(SelectedBlockViewModel);
@ -816,6 +825,8 @@ namespace Filtration.ViewModels
ItemFilterBlockViewModels.Remove(targetBlockViewModel); ItemFilterBlockViewModels.Remove(targetBlockViewModel);
IsDirty = true; IsDirty = true;
targetBlockViewModel.BlockBecameDirty -= OnBlockBecameDirty;
if (isSection) if (isSection)
{ {
Messenger.Default.Send(new NotificationMessage("SectionsChanged")); Messenger.Default.Send(new NotificationMessage("SectionsChanged"));

View File

@ -26,6 +26,7 @@
DocumentsSource="{Binding OpenDocuments}" DocumentsSource="{Binding OpenDocuments}"
ActiveContent="{Binding ActiveDocument, Mode=TwoWay, Converter={StaticResource ActiveDocumentConverter}}" > ActiveContent="{Binding ActiveDocument, Mode=TwoWay, Converter={StaticResource ActiveDocumentConverter}}" >
<xcad:DockingManager.Theme> <xcad:DockingManager.Theme>
<xcad:Vs2013LightTheme /> <xcad:Vs2013LightTheme />
</xcad:DockingManager.Theme> </xcad:DockingManager.Theme>
<xcad:DockingManager.LayoutItemTemplateSelector> <xcad:DockingManager.LayoutItemTemplateSelector>

View File

@ -1,5 +1,6 @@
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vsm ="clr-namespace:System.Windows;assembly=PresentationFramework">
<Style TargetType="{x:Type CheckBox}"> <Style TargetType="{x:Type CheckBox}">
<Setter Property="SnapsToDevicePixels" Value="true" /> <Setter Property="SnapsToDevicePixels" Value="true" />
<Setter Property="OverridesDefaultStyle" Value="true" /> <Setter Property="OverridesDefaultStyle" Value="true" />
@ -70,28 +71,28 @@
Fill="#808080" /> Fill="#808080" />
</Grid> </Grid>
</BulletDecorator.Bullet> </BulletDecorator.Bullet>
<VisualStateManager.VisualStateGroups> <vsm:VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="CheckStates"> <vsm:VisualStateGroup x:Name="CheckStates">
<VisualState x:Name="Checked"> <vsm:VisualState x:Name="Checked">
<Storyboard> <Storyboard>
<DoubleAnimation Storyboard.TargetProperty="Opacity" <DoubleAnimation Storyboard.TargetProperty="Opacity"
Storyboard.TargetName="CheckMark" Duration="0:0:0.2" To="1" /> Storyboard.TargetName="CheckMark" Duration="0:0:0.2" To="1" />
</Storyboard> </Storyboard>
</VisualState> </vsm:VisualState>
<VisualState x:Name="Unchecked" > <vsm:VisualState x:Name="Unchecked" >
<Storyboard> <Storyboard>
<DoubleAnimation Storyboard.TargetProperty="Opacity" <DoubleAnimation Storyboard.TargetProperty="Opacity"
Storyboard.TargetName="CheckMark" Duration="0:0:0.2" To="0" /> Storyboard.TargetName="CheckMark" Duration="0:0:0.2" To="0" />
</Storyboard> </Storyboard>
</VisualState> </vsm:VisualState>
<VisualState x:Name="Indeterminate"> <vsm:VisualState x:Name="Indeterminate">
<Storyboard> <Storyboard>
<DoubleAnimation Storyboard.TargetProperty="Opacity" <DoubleAnimation Storyboard.TargetProperty="Opacity"
Storyboard.TargetName="InderminateMark" Duration="0:0:0.2" To="1" /> Storyboard.TargetName="InderminateMark" Duration="0:0:0.2" To="1" />
</Storyboard> </Storyboard>
</VisualState> </vsm:VisualState>
</VisualStateGroup> </vsm:VisualStateGroup>
</VisualStateManager.VisualStateGroups> </vsm:VisualStateManager.VisualStateGroups>
<ContentPresenter Margin="4,0,4,0" <ContentPresenter Margin="4,0,4,0"
VerticalAlignment="Center" VerticalAlignment="Center"
HorizontalAlignment="Left" HorizontalAlignment="Left"

View File

@ -4,14 +4,14 @@
<package id="Castle.Core" version="3.3.3" targetFramework="net451" /> <package id="Castle.Core" version="3.3.3" targetFramework="net451" />
<package id="Castle.Windsor" version="3.3.0" targetFramework="net451" /> <package id="Castle.Windsor" version="3.3.0" targetFramework="net451" />
<package id="CommonServiceLocator" version="1.3" targetFramework="net451" /> <package id="CommonServiceLocator" version="1.3" targetFramework="net451" />
<package id="ControlzEx" version="2.0.1.61" targetFramework="net461" /> <package id="ControlzEx" version="2.1.2.3" targetFramework="net461" />
<package id="Extended.Wpf.Toolkit" version="2.8" targetFramework="net461" /> <package id="Extended.Wpf.Toolkit" version="2.9" targetFramework="net461" />
<package id="Fluent.Ribbon" version="4.0.3.394" targetFramework="net461" /> <package id="Fluent.Ribbon" version="4.0.3.394" targetFramework="net461" />
<package id="MahApps.Metro" version="1.2.4.0" targetFramework="net461" /> <package id="MahApps.Metro" version="1.2.4.0" targetFramework="net461" />
<package id="MvvmLightLibs" version="5.3.0.0" targetFramework="net461" /> <package id="MvvmLightLibs" version="5.3.0.0" targetFramework="net461" />
<package id="NLog" version="4.3.4" targetFramework="net461" /> <package id="NLog" version="4.3.7" targetFramework="net461" />
<package id="NLog.Config" version="4.3.4" targetFramework="net461" /> <package id="NLog.Config" version="4.3.7" targetFramework="net461" />
<package id="NLog.Schema" version="4.3.4" targetFramework="net461" /> <package id="NLog.Schema" version="4.3.7" targetFramework="net461" />
<package id="WpfAnimatedGif" version="1.4.14" targetFramework="net461" /> <package id="WpfAnimatedGif" version="1.4.14" targetFramework="net461" />
<package id="WPFToolkit" version="3.5.50211.1" targetFramework="net451" /> <package id="WPFToolkit" version="3.5.50211.1" targetFramework="net451" />
</packages> </packages>