diff --git a/Filtration.Common.Tests/Properties/AssemblyInfo.cs b/Filtration.Common.Tests/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..8e54ffc --- /dev/null +++ b/Filtration.Common.Tests/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Filtration.Common.Tests")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Microsoft")] +[assembly: AssemblyProduct("Filtration.Common.Tests")] +[assembly: AssemblyCopyright("Copyright © Microsoft 2015")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("23ba4e1b-1cb6-47fc-9a8b-6ce61fc3eb32")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Filtration.Common/Properties/AssemblyInfo.cs b/Filtration.Common/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..b71185b --- /dev/null +++ b/Filtration.Common/Properties/AssemblyInfo.cs @@ -0,0 +1,40 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Filtration.Common")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Microsoft")] +[assembly: AssemblyProduct("Filtration.Common")] +[assembly: AssemblyCopyright("Copyright © Microsoft 2015")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("36a40512-35b4-489c-8e20-f431b9e92dc1")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] + +[assembly: InternalsVisibleTo("Filtration.Tests")] +[assembly: InternalsVisibleTo("Filtration.Common.Tests")] +[assembly: InternalsVisibleTo("DynamicProxyGenAssembly2")] \ No newline at end of file diff --git a/Filtration/Services/FileSystemService.cs b/Filtration.Common/Services/FileSystemService.cs similarity index 92% rename from Filtration/Services/FileSystemService.cs rename to Filtration.Common/Services/FileSystemService.cs index 31ba58a..b86be65 100644 --- a/Filtration/Services/FileSystemService.cs +++ b/Filtration.Common/Services/FileSystemService.cs @@ -1,9 +1,9 @@ using System; using System.IO; -namespace Filtration.Services +namespace Filtration.Common.Services { - internal interface IFileSystemService + public interface IFileSystemService { string ReadFileAsString(string filePath); void WriteFileFromString(string filePath, string inputString); diff --git a/Filtration/ViewModels/FiltrationViewModelBase.cs b/Filtration.Common/ViewModels/FiltrationViewModelBase.cs similarity index 77% rename from Filtration/ViewModels/FiltrationViewModelBase.cs rename to Filtration.Common/ViewModels/FiltrationViewModelBase.cs index 8baf875..8b41456 100644 --- a/Filtration/ViewModels/FiltrationViewModelBase.cs +++ b/Filtration.Common/ViewModels/FiltrationViewModelBase.cs @@ -1,10 +1,10 @@ using System.Runtime.CompilerServices; -using Filtration.Annotations; +using Filtration.ObjectModel.Annotations; using GalaSoft.MvvmLight; -namespace Filtration.ViewModels +namespace Filtration.Common.ViewModels { - internal class FiltrationViewModelBase : ViewModelBase + public class FiltrationViewModelBase : ViewModelBase { /// This gives us the ReSharper option to transform an autoproperty into a property with change notification /// Also leverages .net 4.5 callermembername attribute diff --git a/Filtration/ViewModels/ToolPanes/PaneViewModel.cs b/Filtration.Common/ViewModels/PaneViewModel.cs similarity index 93% rename from Filtration/ViewModels/ToolPanes/PaneViewModel.cs rename to Filtration.Common/ViewModels/PaneViewModel.cs index e912725..af2433e 100644 --- a/Filtration/ViewModels/ToolPanes/PaneViewModel.cs +++ b/Filtration.Common/ViewModels/PaneViewModel.cs @@ -1,8 +1,8 @@ using System.Windows.Media; -namespace Filtration.ViewModels.ToolPanes +namespace Filtration.Common.ViewModels { - class PaneViewModel : FiltrationViewModelBase + public class PaneViewModel : FiltrationViewModelBase { private string _title; public string Title diff --git a/Filtration.Interface/IDocument.cs b/Filtration.Interface/IDocument.cs index 381a51e..68d218e 100644 --- a/Filtration.Interface/IDocument.cs +++ b/Filtration.Interface/IDocument.cs @@ -1,7 +1,11 @@ -namespace Filtration.Interface +using System.Windows.Media; + +namespace Filtration.Interface { public interface IDocument { bool IsScript { get; } + bool IsTheme { get; } + void Close(); } } diff --git a/Filtration.ObjectModel.Tests/Filtration.ObjectModel.Tests.csproj b/Filtration.ObjectModel.Tests/Filtration.ObjectModel.Tests.csproj new file mode 100644 index 0000000..3012e7a --- /dev/null +++ b/Filtration.ObjectModel.Tests/Filtration.ObjectModel.Tests.csproj @@ -0,0 +1,71 @@ + + + + + Debug + AnyCPU + {537BE676-2FF6-4995-B05B-9CFACE852EC9} + Library + Properties + Filtration.ObjectModel.Tests + Filtration.ObjectModel.Tests + v4.5.1 + 512 + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + ..\packages\Moq.4.2.1506.2016\lib\net40\Moq.dll + + + ..\packages\NUnit.2.6.4\lib\nunit.framework.dll + + + + + + + + + + + + + + + + + + + {4aac3beb-1dc1-483e-9d11-0e9334e80227} + Filtration.ObjectModel + + + + + + + + \ No newline at end of file diff --git a/Filtration.ObjectModel/BlockItemBaseTypes/ColorBlockItem.cs b/Filtration.ObjectModel/BlockItemBaseTypes/ColorBlockItem.cs index 9fd71a8..7b77b31 100644 --- a/Filtration.ObjectModel/BlockItemBaseTypes/ColorBlockItem.cs +++ b/Filtration.ObjectModel/BlockItemBaseTypes/ColorBlockItem.cs @@ -1,5 +1,5 @@ using System.Windows.Media; -using Filtration.ThemeEditor.Models; +using Filtration.ObjectModel.ThemeEditor; namespace Filtration.ObjectModel.BlockItemBaseTypes { diff --git a/Filtration.ObjectModel/Enums/ThemeComponentType.cs b/Filtration.ObjectModel/Enums/ThemeComponentType.cs new file mode 100644 index 0000000..4f17dc5 --- /dev/null +++ b/Filtration.ObjectModel/Enums/ThemeComponentType.cs @@ -0,0 +1,14 @@ +using System.ComponentModel; + +namespace Filtration.ObjectModel.Enums +{ + public enum ThemeComponentType + { + [Description("Text")] + TextColor, + [Description("Background")] + BackgroundColor, + [Description("Border")] + BorderColor + } +} diff --git a/Filtration.ObjectModel/Filtration.ObjectModel.csproj b/Filtration.ObjectModel/Filtration.ObjectModel.csproj index 34ccdc5..3e88591 100644 --- a/Filtration.ObjectModel/Filtration.ObjectModel.csproj +++ b/Filtration.ObjectModel/Filtration.ObjectModel.csproj @@ -69,6 +69,7 @@ + diff --git a/Filtration.ObjectModel/ItemFilterScript.cs b/Filtration.ObjectModel/ItemFilterScript.cs index b50b76b..42b1a3c 100644 --- a/Filtration.ObjectModel/ItemFilterScript.cs +++ b/Filtration.ObjectModel/ItemFilterScript.cs @@ -3,7 +3,7 @@ using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using Filtration.ObjectModel.BlockItemTypes; -using Filtration.ThemeEditor.Models; +using Filtration.ObjectModel.ThemeEditor; namespace Filtration.ObjectModel { diff --git a/Filtration.ObjectModel/ThemeEditor/Theme.cs b/Filtration.ObjectModel/ThemeEditor/Theme.cs index fc99256..739c37f 100644 --- a/Filtration.ObjectModel/ThemeEditor/Theme.cs +++ b/Filtration.ObjectModel/ThemeEditor/Theme.cs @@ -1,9 +1,11 @@ using System; using System.Collections.Generic; using System.Windows.Media; +using Filtration.ObjectModel.Enums; -namespace Filtration.ThemeEditor.Models +namespace Filtration.ObjectModel.ThemeEditor { + [Serializable] public class Theme { private readonly List _components; @@ -14,20 +16,21 @@ namespace Filtration.ThemeEditor.Models } public string Name { get; set; } + public string FilePath { get; set; } - public IEnumerable Components + public List Components { get { return _components; } } - public bool ComponentExists(Type targetType, string componentName) + public bool ComponentExists(ThemeComponentType componentType, string componentName) { - return _components.Exists(c => c.ComponentName == componentName && c.TargetType == targetType); + return _components.Exists(c => c.ComponentName == componentName && c.ComponentType == componentType); } - public void AddComponent(Type targetType, string componentName, Color componentColor) + public void AddComponent(ThemeComponentType componentType, string componentName, Color componentColor) { - _components.Add(new ThemeComponent(targetType, componentName, componentColor)); + _components.Add(new ThemeComponent(componentType, componentName, componentColor)); } } } diff --git a/Filtration.ObjectModel/ThemeEditor/ThemeComponent.cs b/Filtration.ObjectModel/ThemeEditor/ThemeComponent.cs index 282722d..fad12ef 100644 --- a/Filtration.ObjectModel/ThemeEditor/ThemeComponent.cs +++ b/Filtration.ObjectModel/ThemeEditor/ThemeComponent.cs @@ -1,24 +1,31 @@ using System; using System.Windows.Media; +using Filtration.ObjectModel.Enums; -namespace Filtration.ThemeEditor.Models +namespace Filtration.ObjectModel.ThemeEditor { + [Serializable] public class ThemeComponent { - public ThemeComponent(Type targetType, string componentName, Color componentColor) + public ThemeComponent() { - if (targetType == null || componentName == null || componentColor == null) + + } + + public ThemeComponent(ThemeComponentType componentType, string componentName, Color componentColor) + { + if (componentName == null || componentColor == null) { throw new ArgumentException("Null parameters not allowed in ThemeComponent constructor"); } - TargetType = targetType; + ComponentType = componentType; Color = componentColor; ComponentName = componentName; } public string ComponentName { get; set; } - public Type TargetType { get; private set; } + public ThemeComponentType ComponentType{ get; set; } public Color Color { get; set; } } } diff --git a/Filtration.Tests/Filtration.Tests.csproj b/Filtration.Tests/Filtration.Tests.csproj index 5c0cdd0..d26871f 100644 --- a/Filtration.Tests/Filtration.Tests.csproj +++ b/Filtration.Tests/Filtration.Tests.csproj @@ -64,6 +64,10 @@ + + {8cb44f28-2956-4c2a-9314-72727262edd4} + Filtration.Common + {0f333344-7695-47b2-b0e6-172e4de74819} Filtration.Interface diff --git a/Filtration.Tests/Services/TestItemFilterPersistenceService.cs b/Filtration.Tests/Services/TestItemFilterPersistenceService.cs index f53ec86..3d8c9e1 100644 --- a/Filtration.Tests/Services/TestItemFilterPersistenceService.cs +++ b/Filtration.Tests/Services/TestItemFilterPersistenceService.cs @@ -1,4 +1,5 @@ using System.IO; +using Filtration.Common.Services; using Filtration.ObjectModel; using Filtration.Services; using Filtration.Translators; diff --git a/Filtration.Tests/Services/TestStaticDataService.cs b/Filtration.Tests/Services/TestStaticDataService.cs index c6dc5c8..e1ddb3f 100644 --- a/Filtration.Tests/Services/TestStaticDataService.cs +++ b/Filtration.Tests/Services/TestStaticDataService.cs @@ -1,4 +1,5 @@ -using Filtration.Services; +using Filtration.Common.Services; +using Filtration.Services; using Moq; using NUnit.Framework; diff --git a/Filtration.Tests/Translators/TestItemFilterBlockTranslator.cs b/Filtration.Tests/Translators/TestItemFilterBlockTranslator.cs index 01e5d09..c844577 100644 --- a/Filtration.Tests/Translators/TestItemFilterBlockTranslator.cs +++ b/Filtration.Tests/Translators/TestItemFilterBlockTranslator.cs @@ -6,7 +6,7 @@ using Filtration.ObjectModel; using Filtration.ObjectModel.BlockItemBaseTypes; using Filtration.ObjectModel.BlockItemTypes; using Filtration.ObjectModel.Enums; -using Filtration.ThemeEditor.Models; +using Filtration.ObjectModel.ThemeEditor; using Filtration.Translators; using Moq; using NUnit.Framework; @@ -499,11 +499,11 @@ namespace Filtration.Tests.Translators // Arrange var inputString = "Show" + Environment.NewLine + " SetTextColor 255 20 100 # Rare Item Text"; - var testComponent = new ThemeComponent(typeof(TextColorBlockItem), "testComponent", new Color()); + var testComponent = new ThemeComponent(ThemeComponentType.TextColor, "testComponent", new Color()); _testUtility.MockThemeComponentListBuilder.Setup( t => - t.AddComponent(typeof (TextColorBlockItem), "Rare Item Text", + t.AddComponent(ThemeComponentType.TextColor, "Rare Item Text", new Color {A = 255, R = 255, G = 20, B = 100})).Returns(testComponent).Verifiable(); // Act @@ -1116,7 +1116,7 @@ namespace Filtration.Tests.Translators var blockItem = new TextColorBlockItem(new Color {A = 255, R = 54, G = 102, B = 255}) { - ThemeComponent = new ThemeComponent(typeof (TextColorBlockItem), "Test Theme Component", new Color()) + ThemeComponent = new ThemeComponent(ThemeComponentType.TextColor, "Test Theme Component", new Color()) }; _testUtility.TestBlock.BlockItems.Add(blockItem); diff --git a/Filtration.Tests/Translators/TestItemFilterScriptTranslator.cs b/Filtration.Tests/Translators/TestItemFilterScriptTranslator.cs index 58e4778..86b5015 100644 --- a/Filtration.Tests/Translators/TestItemFilterScriptTranslator.cs +++ b/Filtration.Tests/Translators/TestItemFilterScriptTranslator.cs @@ -6,8 +6,8 @@ using System.Windows; using Filtration.ObjectModel; using Filtration.ObjectModel.BlockItemTypes; using Filtration.ObjectModel.Enums; +using Filtration.ObjectModel.ThemeEditor; using Filtration.Properties; -using Filtration.ThemeEditor.Models; using Filtration.Translators; using Moq; using NUnit.Framework; diff --git a/Filtration.Tests/Translators/TestThemeComponentListBuilder.cs b/Filtration.Tests/Translators/TestThemeComponentListBuilder.cs index 38299e7..f466143 100644 --- a/Filtration.Tests/Translators/TestThemeComponentListBuilder.cs +++ b/Filtration.Tests/Translators/TestThemeComponentListBuilder.cs @@ -1,5 +1,7 @@ -using System.Windows.Media; +using System.Net.Mime; +using System.Windows.Media; using Filtration.ObjectModel.BlockItemTypes; +using Filtration.ObjectModel.Enums; using Filtration.Translators; using NUnit.Framework; @@ -13,7 +15,7 @@ namespace Filtration.Tests.Translators { // Arrange - var testInputTargetType = typeof (TextColorBlockItem); + var testInputTargetType = ThemeComponentType.TextColor; var testInputComponentName = "testComponent"; var testInputColor = new Color(); diff --git a/Filtration.ThemeEditor.Tests/Providers/TestThemeProvider.cs b/Filtration.ThemeEditor.Tests/Providers/TestThemeProvider.cs new file mode 100644 index 0000000..1b4d55b --- /dev/null +++ b/Filtration.ThemeEditor.Tests/Providers/TestThemeProvider.cs @@ -0,0 +1,14 @@ +using NUnit.Framework; + +namespace Filtration.ThemeEditor.Tests.Providers +{ + [TestFixture] + public class TestThemeProvider + { + [Test] + public void CreateThemeFromScript_() + { + + } + } +} diff --git a/Filtration.ThemeEditor/Filtration.ThemeEditor.csproj b/Filtration.ThemeEditor/Filtration.ThemeEditor.csproj index a50aa7e..65fc4f7 100644 --- a/Filtration.ThemeEditor/Filtration.ThemeEditor.csproj +++ b/Filtration.ThemeEditor/Filtration.ThemeEditor.csproj @@ -30,18 +30,40 @@ 4 + + ..\packages\AutoMapper.3.3.1\lib\net40\AutoMapper.dll + + + ..\packages\AutoMapper.3.3.1\lib\net40\AutoMapper.Net4.dll + ..\packages\Castle.Core.3.3.0\lib\net45\Castle.Core.dll ..\packages\Castle.Windsor.3.3.0\lib\net45\Castle.Windsor.dll + + ..\packages\MvvmLightLibs.5.1.1.0\lib\net45\GalaSoft.MvvmLight.dll + + + ..\packages\MvvmLightLibs.5.1.1.0\lib\net45\GalaSoft.MvvmLight.Extras.dll + + + ..\packages\MvvmLightLibs.5.1.1.0\lib\net45\GalaSoft.MvvmLight.Platform.dll + + + ..\packages\CommonServiceLocator.1.3\lib\portable-net4+sl5+netcore45+wpa81+wp8\Microsoft.Practices.ServiceLocation.dll + + + + ..\packages\MvvmLightLibs.5.1.1.0\lib\net45\System.Windows.Interactivity.dll + @@ -49,16 +71,48 @@ + + ..\packages\Extended.Wpf.Toolkit.2.4\lib\net40\Xceed.Wpf.AvalonDock.dll + + + ..\packages\Extended.Wpf.Toolkit.2.4\lib\net40\Xceed.Wpf.AvalonDock.Themes.Aero.dll + + + ..\packages\Extended.Wpf.Toolkit.2.4\lib\net40\Xceed.Wpf.AvalonDock.Themes.Metro.dll + + + ..\packages\Extended.Wpf.Toolkit.2.4\lib\net40\Xceed.Wpf.AvalonDock.Themes.VS2010.dll + + + ..\packages\Extended.Wpf.Toolkit.2.4\lib\net40\Xceed.Wpf.DataGrid.dll + + + ..\packages\Extended.Wpf.Toolkit.2.4\lib\net40\Xceed.Wpf.Toolkit.dll + + - - - ThemeEditorView.xaml + + + + + + + ThemeComponentControl.xaml + + ThemeControl.xaml + + + + + {8cb44f28-2956-4c2a-9314-72727262edd4} + Filtration.Common + {0f333344-7695-47b2-b0e6-172e4de74819} Filtration.Interface @@ -70,7 +124,11 @@ - + + Designer + MSBuild:Compile + + Designer MSBuild:Compile @@ -79,6 +137,7 @@ +