From d6bd1678b4858988148d169ef1619e1ef3ccc996 Mon Sep 17 00:00:00 2001 From: Ben Date: Mon, 6 Jul 2015 12:01:48 +0100 Subject: [PATCH] Fixed contextual tabs --- .../Converters/BooleanVisibilityConverter.cs | 4 +- Filtration.Common/Filtration.Common.csproj | 1 + .../ThemeEditor/ThemeComponent.cs | 49 ++++++++-- .../ThemeComponentTypeToStringConverter.cs | 17 +++- .../Views/ThemeComponentControl.xaml | 27 +++++- .../BooleanVisibilityConverterCopy.cs | 43 --------- Filtration/Filtration.csproj | 2 - .../ViewModels/ItemFilterScriptViewModel.cs | 25 +++++ Filtration/ViewModels/MainWindowViewModel.cs | 93 ++++++++++++------- Filtration/Views/MainWindow.xaml | 39 ++++---- Filtration/Views/MainWindow.xaml.cs | 19 +++- .../Views/SharedResourcesDictionary.xaml | 3 +- 12 files changed, 207 insertions(+), 115 deletions(-) rename {Filtration => Filtration.Common}/Converters/BooleanVisibilityConverter.cs (91%) delete mode 100644 Filtration/Converters/BooleanVisibilityConverterCopy.cs diff --git a/Filtration/Converters/BooleanVisibilityConverter.cs b/Filtration.Common/Converters/BooleanVisibilityConverter.cs similarity index 91% rename from Filtration/Converters/BooleanVisibilityConverter.cs rename to Filtration.Common/Converters/BooleanVisibilityConverter.cs index 3be867a..a5be81c 100644 --- a/Filtration/Converters/BooleanVisibilityConverter.cs +++ b/Filtration.Common/Converters/BooleanVisibilityConverter.cs @@ -3,9 +3,9 @@ using System.Globalization; using System.Windows; using System.Windows.Data; -namespace Filtration.Converters +namespace Filtration.Common.Converters { - internal class BooleanVisibilityConverterCopy : IValueConverter + public class BooleanVisibilityConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { diff --git a/Filtration.Common/Filtration.Common.csproj b/Filtration.Common/Filtration.Common.csproj index 5b368c2..fad75f1 100644 --- a/Filtration.Common/Filtration.Common.csproj +++ b/Filtration.Common/Filtration.Common.csproj @@ -64,6 +64,7 @@ + diff --git a/Filtration.ObjectModel/ThemeEditor/ThemeComponent.cs b/Filtration.ObjectModel/ThemeEditor/ThemeComponent.cs index 19835ae..27ab695 100644 --- a/Filtration.ObjectModel/ThemeEditor/ThemeComponent.cs +++ b/Filtration.ObjectModel/ThemeEditor/ThemeComponent.cs @@ -11,12 +11,9 @@ namespace Filtration.ObjectModel.ThemeEditor public class ThemeComponent : INotifyPropertyChanged { private Color _color; - - public ThemeComponent() - { - - } - + private EventHandler _themeComponentUpdatedEventHandler; + private readonly object _eventLock = new object(); + public ThemeComponent(ThemeComponentType componentType, string componentName, Color componentColor) { if (componentName == null || componentColor == null) @@ -29,7 +26,28 @@ namespace Filtration.ObjectModel.ThemeEditor ComponentName = componentName; } - public event EventHandler ThemeComponentUpdated; + // By implementing a custom event accessor here we can keep the UsageCount up to date. + public event EventHandler ThemeComponentUpdated + { + add + { + lock (_eventLock) + { + _themeComponentUpdatedEventHandler += value; + OnPropertyChanged("UsageCount"); + } + } + remove + { + lock (_eventLock) + { + // ReSharper disable once DelegateSubtraction + _themeComponentUpdatedEventHandler -= value; + OnPropertyChanged("UsageCount"); + } + } + } + public event EventHandler ThemeComponentDeleted; public string ComponentName { get; set; } @@ -42,13 +60,26 @@ namespace Filtration.ObjectModel.ThemeEditor { _color = value; OnPropertyChanged(); - if (ThemeComponentUpdated != null) + if (_themeComponentUpdatedEventHandler != null) { - ThemeComponentUpdated.Invoke(this, EventArgs.Empty); + _themeComponentUpdatedEventHandler.Invoke(this, EventArgs.Empty); } } } + public int UsageCount + { + get + { + if (_themeComponentUpdatedEventHandler == null) + { + return 0; + } + + return _themeComponentUpdatedEventHandler.GetInvocationList().Length; + } + } + public void TerminateComponent() { if (ThemeComponentDeleted != null) diff --git a/Filtration.ThemeEditor/Converters/ThemeComponentTypeToStringConverter.cs b/Filtration.ThemeEditor/Converters/ThemeComponentTypeToStringConverter.cs index c71dd6b..264a599 100644 --- a/Filtration.ThemeEditor/Converters/ThemeComponentTypeToStringConverter.cs +++ b/Filtration.ThemeEditor/Converters/ThemeComponentTypeToStringConverter.cs @@ -1,7 +1,6 @@ using System; using System.Globalization; using System.Windows.Data; -using Filtration.ObjectModel.BlockItemTypes; using Filtration.ObjectModel.Enums; using Filtration.ObjectModel.Extensions; @@ -18,6 +17,22 @@ namespace Filtration.ThemeEditor.Converters } var type = (ThemeComponentType) value; + switch (type.GetAttributeDescription()) + { + case "TextColor": + { + return "Text"; + } + case "BorderColor": + { + return "Border"; + } + case "BackgroundColor": + { + return "Background"; + } + } + return type.GetAttributeDescription(); } diff --git a/Filtration.ThemeEditor/Views/ThemeComponentControl.xaml b/Filtration.ThemeEditor/Views/ThemeComponentControl.xaml index bc323b3..18c9b9c 100644 --- a/Filtration.ThemeEditor/Views/ThemeComponentControl.xaml +++ b/Filtration.ThemeEditor/Views/ThemeComponentControl.xaml @@ -5,6 +5,7 @@ xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:xctk="http://schemas.xceed.com/wpf/xaml/toolkit" xmlns:converters="clr-namespace:Filtration.ThemeEditor.Converters" + xmlns:commonConverters="clr-namespace:Filtration.Common.Converters;assembly=Filtration.Common" xmlns:themeEditor="clr-namespace:Filtration.ObjectModel.ThemeEditor;assembly=Filtration.ObjectModel" xmlns:views="clr-namespace:Filtration.ThemeEditor.Views" mc:Ignorable="d" @@ -12,6 +13,7 @@ d:DesignHeight="40" d:DesignWidth="200"> + @@ -19,6 +21,10 @@ + + + + @@ -27,8 +33,23 @@ - - + + + + + +