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 @@
+