Implemented ThemeComponent reading/saving in translation layer
This commit is contained in:
@@ -140,6 +140,7 @@
|
||||
<Compile Include="Translators\BlockGroupHierarchyBuilder.cs" />
|
||||
<Compile Include="Translators\ItemFilterBlockTranslator.cs" />
|
||||
<Compile Include="Translators\ItemFilterScriptTranslator.cs" />
|
||||
<Compile Include="Translators\ThemeComponentListBuilder.cs" />
|
||||
<Compile Include="UserControls\AutoScrollingListBox.cs" />
|
||||
<Compile Include="UserControls\CrossButton.cs" />
|
||||
<Compile Include="UserControls\EditableListBoxControl.xaml.cs">
|
||||
@@ -425,9 +426,7 @@
|
||||
<Name>Filtration.ObjectModel</Name>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Folder Include="Models\" />
|
||||
</ItemGroup>
|
||||
<ItemGroup />
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
<Import Project="$(XamlSpyInstallPath)MSBuild\FirstFloor.XamlSpy.WPF.targets" Condition="'$(XamlSpyInstallPath)' != '' and '$(Configuration)' == 'DEBUG'" />
|
||||
<Import Project="..\packages\AutoMapper.3.3.1\tools\AutoMapper.targets" Condition="Exists('..\packages\AutoMapper.3.3.1\tools\AutoMapper.targets')" />
|
||||
|
||||
@@ -22,12 +22,14 @@ namespace Filtration.Translators
|
||||
internal class ItemFilterBlockTranslator : IItemFilterBlockTranslator
|
||||
{
|
||||
private readonly IBlockGroupHierarchyBuilder _blockGroupHierarchyBuilder;
|
||||
private readonly IThemeComponentListBuilder _themeComponentListBuilder;
|
||||
private const string Indent = " ";
|
||||
private readonly string _newLine = Environment.NewLine + Indent;
|
||||
|
||||
public ItemFilterBlockTranslator(IBlockGroupHierarchyBuilder blockGroupHierarchyBuilder)
|
||||
public ItemFilterBlockTranslator(IBlockGroupHierarchyBuilder blockGroupHierarchyBuilder, IThemeComponentListBuilder themeComponentListBuilder)
|
||||
{
|
||||
_blockGroupHierarchyBuilder = blockGroupHierarchyBuilder;
|
||||
_themeComponentListBuilder = themeComponentListBuilder;
|
||||
}
|
||||
|
||||
// This method converts a string into a ItemFilterBlock. This is used for pasting ItemFilterBlocks
|
||||
@@ -257,13 +259,20 @@ namespace Filtration.Translators
|
||||
}
|
||||
}
|
||||
|
||||
private static void AddColorItemToBlockItems<T>(ItemFilterBlock block, string inputString) where T : ColorBlockItem
|
||||
private void AddColorItemToBlockItems<T>(ItemFilterBlock block, string inputString) where T : ColorBlockItem
|
||||
{
|
||||
var blockItem = Activator.CreateInstance<T>();
|
||||
var result = Regex.Matches(inputString, @"([\w\s]*)[#]?(.*)");
|
||||
|
||||
// When Theme support is added result[0].Groups[2].Value will contain the ColorGroup in the comment if it exists.
|
||||
blockItem.Color = GetColorFromString(result[0].Groups[1].Value);
|
||||
|
||||
var componentName = result[0].Groups[2].Value.Trim();
|
||||
if (!string.IsNullOrEmpty(componentName))
|
||||
{
|
||||
blockItem.ThemeComponent = _themeComponentListBuilder.AddComponent(typeof(T), componentName, blockItem.Color);
|
||||
}
|
||||
|
||||
block.BlockItems.Add(blockItem);
|
||||
}
|
||||
|
||||
|
||||
@@ -20,11 +20,15 @@ namespace Filtration.Translators
|
||||
{
|
||||
private readonly IItemFilterBlockTranslator _blockTranslator;
|
||||
private readonly IBlockGroupHierarchyBuilder _blockGroupHierarchyBuilder;
|
||||
private readonly IThemeComponentListBuilder _themeComponentListBuilder;
|
||||
|
||||
public ItemFilterScriptTranslator(IItemFilterBlockTranslator blockTranslator, IBlockGroupHierarchyBuilder blockGroupHierarchyBuilder)
|
||||
public ItemFilterScriptTranslator(IItemFilterBlockTranslator blockTranslator,
|
||||
IBlockGroupHierarchyBuilder blockGroupHierarchyBuilder,
|
||||
IThemeComponentListBuilder themeComponentListBuilder)
|
||||
{
|
||||
_blockTranslator = blockTranslator;
|
||||
_blockGroupHierarchyBuilder = blockGroupHierarchyBuilder;
|
||||
_themeComponentListBuilder = themeComponentListBuilder;
|
||||
}
|
||||
|
||||
public ItemFilterScript TranslateStringToItemFilterScript(string inputString)
|
||||
@@ -51,6 +55,8 @@ namespace Filtration.Translators
|
||||
script.Description = script.Description.TrimEnd('\n').TrimEnd('\r');
|
||||
}
|
||||
|
||||
_themeComponentListBuilder.Initialise();
|
||||
|
||||
// Extract each block from between boundaries and translate it into a ItemFilterBlock object
|
||||
// and add that object to the ItemFilterBlocks list
|
||||
for (var boundary = conditionBoundaries.First; boundary != null; boundary = boundary.Next)
|
||||
@@ -63,6 +69,8 @@ namespace Filtration.Translators
|
||||
script.ItemFilterBlocks.Add(_blockTranslator.TranslateStringToItemFilterBlock(blockString));
|
||||
}
|
||||
|
||||
script.ThemeComponents = _themeComponentListBuilder.GetComponents();
|
||||
|
||||
return script;
|
||||
}
|
||||
|
||||
|
||||
53
Filtration/Translators/ThemeComponentListBuilder.cs
Normal file
53
Filtration/Translators/ThemeComponentListBuilder.cs
Normal file
@@ -0,0 +1,53 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Windows.Media;
|
||||
using Filtration.ThemeEditor.Models;
|
||||
|
||||
namespace Filtration.Translators
|
||||
{
|
||||
internal interface IThemeComponentListBuilder
|
||||
{
|
||||
void Initialise();
|
||||
ThemeComponent AddComponent(Type targetType, string componentName, Color componentColor);
|
||||
List<ThemeComponent> GetComponents();
|
||||
}
|
||||
|
||||
internal class ThemeComponentListBuilder : IThemeComponentListBuilder
|
||||
{
|
||||
private List<ThemeComponent> _themeComponents;
|
||||
|
||||
public ThemeComponentListBuilder()
|
||||
{
|
||||
_themeComponents = new List<ThemeComponent>();
|
||||
}
|
||||
|
||||
public void Initialise()
|
||||
{
|
||||
_themeComponents = new List<ThemeComponent>();
|
||||
}
|
||||
|
||||
public ThemeComponent AddComponent(Type targetType, string componentName, Color componentColor)
|
||||
{
|
||||
if (ComponentExists(targetType, componentName))
|
||||
{
|
||||
return _themeComponents.FirstOrDefault(t => t.ComponentName == componentName && t.TargetType == targetType);
|
||||
}
|
||||
|
||||
var component = new ThemeComponent(targetType, componentName, componentColor);
|
||||
_themeComponents.Add(component);
|
||||
|
||||
return component;
|
||||
}
|
||||
|
||||
public List<ThemeComponent> GetComponents()
|
||||
{
|
||||
return _themeComponents;
|
||||
}
|
||||
|
||||
private bool ComponentExists(Type targetType, string componentName)
|
||||
{
|
||||
return _themeComponents.Exists(c => c.ComponentName == componentName && c.TargetType == targetType);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -101,14 +101,8 @@ namespace Filtration.ViewModels
|
||||
{
|
||||
_itemFilterBlockViewModelsCollectionView =
|
||||
CollectionViewSource.GetDefaultView(_itemFilterBlockViewModels);
|
||||
if (BlockFilterPredicate != null)
|
||||
{
|
||||
_itemFilterBlockViewModelsCollectionView.Filter = BlockFilter;
|
||||
}
|
||||
else
|
||||
{
|
||||
_itemFilterBlockViewModelsCollectionView.Filter = null;
|
||||
}
|
||||
_itemFilterBlockViewModelsCollectionView.Filter = BlockFilter;
|
||||
|
||||
return _itemFilterBlockViewModels;
|
||||
}
|
||||
}
|
||||
@@ -116,7 +110,29 @@ namespace Filtration.ViewModels
|
||||
private bool BlockFilter(object item)
|
||||
{
|
||||
var blockViewModel = item as IItemFilterBlockViewModel;
|
||||
return BlockFilterPredicate(blockViewModel);
|
||||
|
||||
if (BlockFilterPredicate != null)
|
||||
{
|
||||
return BlockFilterPredicate(blockViewModel) && ShowBlockBasedOnAdvanced(blockViewModel);
|
||||
}
|
||||
|
||||
return ShowBlockBasedOnAdvanced(blockViewModel);
|
||||
}
|
||||
|
||||
private bool ShowBlockBasedOnAdvanced(IItemFilterBlockViewModel blockViewModel)
|
||||
{
|
||||
if (ShowAdvanced)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
if (blockViewModel.Block.BlockGroup == null)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
return !blockViewModel.Block.BlockGroup.Advanced;
|
||||
|
||||
}
|
||||
|
||||
public Predicate<IItemFilterBlockViewModel> BlockFilterPredicate
|
||||
@@ -157,6 +173,7 @@ namespace Filtration.ViewModels
|
||||
{
|
||||
_showAdvanced = value;
|
||||
RaisePropertyChanged();
|
||||
RaisePropertyChanged("ItemFilterBlockViewModels");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -54,7 +54,7 @@ namespace Filtration.ViewModels
|
||||
OnRequestClose(this, new EventArgs());
|
||||
}
|
||||
}
|
||||
catch (DirectoryNotFoundException e)
|
||||
catch (DirectoryNotFoundException)
|
||||
{
|
||||
MessageBox.Show("The entered Default Filter Directory is invalid or does not exist.", "Error",
|
||||
MessageBoxButton.OK, MessageBoxImage.Exclamation);
|
||||
|
||||
@@ -23,6 +23,11 @@ namespace Filtration.WindsorInstallers
|
||||
Component.For<IBlockGroupHierarchyBuilder>()
|
||||
.ImplementedBy<BlockGroupHierarchyBuilder>()
|
||||
.LifeStyle.Singleton);
|
||||
|
||||
container.Register(
|
||||
Component.For<IThemeComponentListBuilder>()
|
||||
.ImplementedBy<ThemeComponentListBuilder>()
|
||||
.LifeStyle.Singleton);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user