More theme changes

This commit is contained in:
Ben 2015-07-06 13:41:46 +01:00
parent d6bd1678b4
commit cbbc7c25fa
24 changed files with 174 additions and 101 deletions

View File

@ -2,7 +2,7 @@
using System.Globalization; using System.Globalization;
using System.Windows.Data; using System.Windows.Data;
namespace Filtration.Converters namespace Filtration.Common.Converters
{ {
internal class BoolInverterConverter : IValueConverter internal class BoolInverterConverter : IValueConverter
{ {

View File

@ -2,7 +2,7 @@
using System.Windows.Data; using System.Windows.Data;
using System.Windows.Media; using System.Windows.Media;
namespace Filtration.Converters namespace Filtration.Common.Converters
{ {
public class ColorToSolidColorBrushConverter : IValueConverter public class ColorToSolidColorBrushConverter : IValueConverter
{ {

View File

@ -3,7 +3,7 @@ using System.Globalization;
using System.Windows; using System.Windows;
using System.Windows.Data; using System.Windows.Data;
namespace Filtration.Converters namespace Filtration.Common.Converters
{ {
internal class InverseBooleanVisibilityConverter : IValueConverter internal class InverseBooleanVisibilityConverter : IValueConverter
{ {

View File

@ -3,7 +3,7 @@ using System.Globalization;
using System.Windows; using System.Windows;
using System.Windows.Data; using System.Windows.Data;
namespace Filtration.Converters namespace Filtration.Common.Converters
{ {
internal class StringToVisibilityConverter : IValueConverter internal class StringToVisibilityConverter : IValueConverter
{ {

View File

@ -64,7 +64,12 @@
<Reference Include="WindowsBase" /> <Reference Include="WindowsBase" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Compile Include="Converters\BooleanInverterConverter.cs" />
<Compile Include="Converters\BooleanVisibilityConverter.cs" /> <Compile Include="Converters\BooleanVisibilityConverter.cs" />
<Compile Include="Converters\ColorToSolidColorBrushConverter.cs" />
<Compile Include="Converters\InverseBooleanVisibilityConverter.cs" />
<Compile Include="Converters\StringToVisibilityConverter.cs" />
<Compile Include="Messages\ThemeClosedMessage.cs" />
<Compile Include="Properties\AssemblyInfo.cs" /> <Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Services\FileSystemService.cs" /> <Compile Include="Services\FileSystemService.cs" />
<Compile Include="Services\MessageBoxService.cs" /> <Compile Include="Services\MessageBoxService.cs" />
@ -81,6 +86,12 @@
<Name>Filtration.ObjectModel</Name> <Name>Filtration.ObjectModel</Name>
</ProjectReference> </ProjectReference>
</ItemGroup> </ItemGroup>
<ItemGroup>
<Page Include="Styles\SharedResourcesDictionary.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</Page>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- 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

@ -0,0 +1,12 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Filtration.Common.Messages
{
class ThemeClosedMessage
{
}
}

View File

@ -1,9 +1,8 @@
<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:converters="clr-namespace:Filtration.Converters"
xmlns:commonConverters="clr-namespace:Filtration.Common.Converters;assembly=Filtration.Common"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:converters="clr-namespace:Filtration.Common.Converters"
mc:Ignorable="d" > mc:Ignorable="d" >
<ResourceDictionary.MergedDictionaries> <ResourceDictionary.MergedDictionaries>
<ResourceDictionary> <ResourceDictionary>
@ -32,18 +31,19 @@
</Setter.Value> </Setter.Value>
</Setter> </Setter>
</Style> </Style>
<converters:IntToItemRarityConverter x:Key="IntToItemRarityConverter" /> <Style TargetType="{x:Type Border}" x:Key="BlockItemBorder">
<Setter Property="BorderThickness" Value="1" />
<Setter Property="BorderBrush" Value="Black" />
<Setter Property="CornerRadius" Value="3" />
<Setter Property="Margin" Value="0,0,5,5" />
</Style>
<converters:StringToVisibilityConverter x:Key="StringToVisibilityConverter" /> <converters:StringToVisibilityConverter x:Key="StringToVisibilityConverter" />
<converters:BoolInverterConverter x:Key="BoolInverterConverter" /> <converters:BoolInverterConverter x:Key="BoolInverterConverter" />
<converters:ColorToSolidColorBrushConverter x:Key="ColorToSolidColorBrushConverter" /> <converters:ColorToSolidColorBrushConverter x:Key="ColorToSolidColorBrushConverter" />
<converters:BooleanToBlockActionConverter x:Key="BooleanToBlockActionConverter" /> <converters:BooleanVisibilityConverter x:Key="BooleanVisibilityConverter" />
<converters:BooleanToBlockActionInverseConverter x:Key="BooleanToBlockActionInverseConverter" />
<converters:BlockItemTypeToStringConverter x:Key="BlockItemTypeToStringConverter" />
<commonConverters:BooleanVisibilityConverter x:Key="BooleanVisibilityConverter" />
<converters:InverseBooleanVisibilityConverter x:Key="InverseBooleanVisibilityConverter" /> <converters:InverseBooleanVisibilityConverter x:Key="InverseBooleanVisibilityConverter" />
<converters:BlockItemToRemoveEnabledVisibilityConverter x:Key="BlockItemToRemoveEnabledVisibilityConverter" />
<converters:AvailableThemeComponentsConverter x:Key="AvailableThemeComponentsConverter" />
</ResourceDictionary> </ResourceDictionary>
<ResourceDictionary Source="ExpanderStyle.xaml" />
</ResourceDictionary.MergedDictionaries> </ResourceDictionary.MergedDictionaries>
</ResourceDictionary> </ResourceDictionary>

View File

@ -19,17 +19,17 @@ namespace Filtration.ThemeEditor.Converters
switch (type.GetAttributeDescription()) switch (type.GetAttributeDescription())
{ {
case "TextColor": case "Text":
{ {
return "Text"; return "Text Color Theme Components";
} }
case "BorderColor": case "Border":
{ {
return "Border"; return "Border Color Theme Components";
} }
case "BackgroundColor": case "Background":
{ {
return "Background"; return "Background Color Theme Components";
} }
} }

View File

@ -95,6 +95,7 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Compile Include="Converters\ThemeComponentTypeToStringConverter.cs" /> <Compile Include="Converters\ThemeComponentTypeToStringConverter.cs" />
<Compile Include="Messages\ThemeClosedMessage.cs" />
<Compile Include="Properties\AssemblyInfo.cs" /> <Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Providers\ThemeProvider.cs" /> <Compile Include="Providers\ThemeProvider.cs" />
<Compile Include="Services\ThemePersistenceService.cs" /> <Compile Include="Services\ThemePersistenceService.cs" />

View File

@ -0,0 +1,9 @@
using Filtration.ThemeEditor.ViewModels;
namespace Filtration.ThemeEditor.Messages
{
public class ThemeClosedMessage
{
public IThemeEditorViewModel ClosedViewModel { get; set; }
}
}

View File

@ -39,7 +39,7 @@ namespace Filtration.ThemeEditor.Providers
}); });
var themeViewModel = _themeViewModelFactory.Create(); var themeViewModel = _themeViewModelFactory.Create();
themeViewModel.Initialise(themeComponentCollection, true); themeViewModel.InitialiseForNewTheme(themeComponentCollection);
themeViewModel.FilePath = "Untitled.filtertheme"; themeViewModel.FilePath = "Untitled.filtertheme";
return themeViewModel; return themeViewModel;
@ -48,7 +48,7 @@ namespace Filtration.ThemeEditor.Providers
public IThemeEditorViewModel MasterThemeForScript(ItemFilterScript script) public IThemeEditorViewModel MasterThemeForScript(ItemFilterScript script)
{ {
var themeViewModel = _themeViewModelFactory.Create(); var themeViewModel = _themeViewModelFactory.Create();
themeViewModel.Initialise(script.ThemeComponents, true); themeViewModel.InitialiseForMasterTheme(script);
themeViewModel.FilePath = "<Master Theme> " + Path.GetFileName(script.FilePath); themeViewModel.FilePath = "<Master Theme> " + Path.GetFileName(script.FilePath);
return themeViewModel; return themeViewModel;

View File

@ -7,10 +7,13 @@ using System.Windows.Media.Imaging;
using Filtration.Common.Services; using Filtration.Common.Services;
using Filtration.Common.ViewModels; using Filtration.Common.ViewModels;
using Filtration.Interface; using Filtration.Interface;
using Filtration.ObjectModel;
using Filtration.ObjectModel.Enums; using Filtration.ObjectModel.Enums;
using Filtration.ObjectModel.ThemeEditor; using Filtration.ObjectModel.ThemeEditor;
using Filtration.ThemeEditor.Messages;
using Filtration.ThemeEditor.Providers; using Filtration.ThemeEditor.Providers;
using GalaSoft.MvvmLight.CommandWpf; using GalaSoft.MvvmLight.CommandWpf;
using GalaSoft.MvvmLight.Messaging;
using NLog; using NLog;
namespace Filtration.ThemeEditor.ViewModels namespace Filtration.ThemeEditor.ViewModels
@ -19,9 +22,12 @@ namespace Filtration.ThemeEditor.ViewModels
{ {
RelayCommand<ThemeComponentType> AddThemeComponentCommand { get; } RelayCommand<ThemeComponentType> AddThemeComponentCommand { get; }
RelayCommand<ThemeComponent> DeleteThemeComponentCommand { get; } RelayCommand<ThemeComponent> DeleteThemeComponentCommand { get; }
RelayCommand CloseCommand { get; }
void Initialise(ThemeComponentCollection themeComponentCollection, bool newTheme); void InitialiseForNewTheme(ThemeComponentCollection themeComponentCollection);
bool EditEnabled { get; } void InitialiseForMasterTheme(ItemFilterScript script);
bool IsMasterTheme { get; }
ItemFilterScript IsMasterThemeForScript { get; }
string Title { get; } string Title { get; }
string FilePath { get; set; } string FilePath { get; set; }
string Filename { get; } string Filename { get; }
@ -46,29 +52,42 @@ namespace Filtration.ThemeEditor.ViewModels
_themeProvider = themeProvider; _themeProvider = themeProvider;
_messageBoxService = messageBoxService; _messageBoxService = messageBoxService;
AddThemeComponentCommand = new RelayCommand<ThemeComponentType>(OnAddThemeComponentCommand, t => EditEnabled); AddThemeComponentCommand = new RelayCommand<ThemeComponentType>(OnAddThemeComponentCommand, t => IsMasterTheme);
DeleteThemeComponentCommand = new RelayCommand<ThemeComponent>(OnDeleteThemeComponentCommand, DeleteThemeComponentCommand = new RelayCommand<ThemeComponent>(OnDeleteThemeComponentCommand,
t => EditEnabled && SelectedThemeComponent != null); t => IsMasterTheme && SelectedThemeComponent != null);
CloseCommand = new RelayCommand(OnCloseCommand);
var icon = new BitmapImage(); var icon = new BitmapImage();
icon.BeginInit(); icon.BeginInit();
icon.UriSource = new Uri("pack://application:,,,/Filtration;component/Resources/Icons/Theme.ico"); icon.UriSource = new Uri("pack://application:,,,/Filtration;component/Resources/Icons/Theme.ico");
icon.EndInit(); icon.EndInit();
IconSource = icon; IconSource = icon;
} }
public RelayCommand<ThemeComponentType> AddThemeComponentCommand { get; private set; } public RelayCommand<ThemeComponentType> AddThemeComponentCommand { get; private set; }
public RelayCommand<ThemeComponent> DeleteThemeComponentCommand { get; private set; } public RelayCommand<ThemeComponent> DeleteThemeComponentCommand { get; private set; }
public RelayCommand CloseCommand { get; private set; }
public bool EditEnabled public bool IsMasterTheme
{ {
get { return Components.IsMasterCollection; } get { return Components.IsMasterCollection; }
} }
public void Initialise(ThemeComponentCollection themeComponentCollection, bool newTheme) public ItemFilterScript IsMasterThemeForScript { get; private set; }
public void InitialiseForNewTheme(ThemeComponentCollection themeComponentCollection)
{ {
Components = themeComponentCollection; Components = themeComponentCollection;
_filenameIsFake = newTheme; _filenameIsFake = true;
}
public void InitialiseForMasterTheme(ItemFilterScript script)
{
Components = script.ThemeComponents;
IsMasterThemeForScript = script;
_filenameIsFake = true;
} }
public bool IsScript { get { return false; } } public bool IsScript { get { return false; } }
@ -106,6 +125,8 @@ namespace Filtration.ThemeEditor.ViewModels
public void Save() public void Save()
{ {
if (IsMasterTheme) return;
if (_filenameIsFake) if (_filenameIsFake)
{ {
SaveAs(); SaveAs();
@ -130,6 +151,8 @@ namespace Filtration.ThemeEditor.ViewModels
public void SaveAs() public void SaveAs()
{ {
if (IsMasterTheme) return;
var saveDialog = new SaveFileDialog var saveDialog = new SaveFileDialog
{ {
DefaultExt = ".filter", DefaultExt = ".filter",
@ -161,9 +184,14 @@ namespace Filtration.ThemeEditor.ViewModels
} }
} }
public void OnCloseCommand()
{
Close();
}
public void Close() public void Close()
{ {
throw new NotImplementedException(); Messenger.Default.Send(new ThemeClosedMessage { ClosedViewModel = this });
} }
private void OnAddThemeComponentCommand(ThemeComponentType themeComponentType) private void OnAddThemeComponentCommand(ThemeComponentType themeComponentType)

View File

@ -4,15 +4,13 @@
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:xctk="http://schemas.xceed.com/wpf/xaml/toolkit" 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:commonConverters="clr-namespace:Filtration.Common.Converters;assembly=Filtration.Common"
xmlns:themeEditor="clr-namespace:Filtration.ObjectModel.ThemeEditor;assembly=Filtration.ObjectModel" xmlns:themeEditor="clr-namespace:Filtration.ObjectModel.ThemeEditor;assembly=Filtration.ObjectModel"
xmlns:views="clr-namespace:Filtration.ThemeEditor.Views" xmlns:views="clr-namespace:Filtration.ThemeEditor.Views"
mc:Ignorable="d" mc:Ignorable="d"
d:DataContext="{d:DesignInstance Type=themeEditor:ThemeComponent}" d:DataContext="{d:DesignInstance Type=themeEditor:ThemeComponent}"
d:DesignHeight="40" d:DesignWidth="200"> d:DesignHeight="100" d:DesignWidth="200">
<UserControl.Resources> <UserControl.Resources>
<converters:ThemeComponentTypeToStringConverter x:Key="ThemeComponentTypeToStringConverter" />
<commonConverters:BooleanVisibilityConverter x:Key="BooleanVisibilityConverter" /> <commonConverters:BooleanVisibilityConverter x:Key="BooleanVisibilityConverter" />
</UserControl.Resources> </UserControl.Resources>
<Grid Width="200"> <Grid Width="200">
@ -53,10 +51,10 @@
<ContentControl.Style> <ContentControl.Style>
<Style TargetType="ContentControl"> <Style TargetType="ContentControl">
<Style.Triggers> <Style.Triggers>
<DataTrigger Binding="{Binding Path=DataContext.EditEnabled, RelativeSource={RelativeSource AncestorType={x:Type views:ThemeEditorView}}}" Value="true"> <DataTrigger Binding="{Binding Path=DataContext.IsMasterTheme, RelativeSource={RelativeSource AncestorType={x:Type views:ThemeEditorView}}}" Value="true">
<Setter Property="ContentTemplate" Value="{StaticResource EditableComponentNameTemplate}" /> <Setter Property="ContentTemplate" Value="{StaticResource EditableComponentNameTemplate}" />
</DataTrigger> </DataTrigger>
<DataTrigger Binding="{Binding Path=DataContext.EditEnabled, RelativeSource={RelativeSource AncestorType={x:Type views:ThemeEditorView}}}" Value="false"> <DataTrigger Binding="{Binding Path=DataContext.IsMasterTheme, RelativeSource={RelativeSource AncestorType={x:Type views:ThemeEditorView}}}" Value="false">
<Setter Property="ContentTemplate" Value="{StaticResource ViewOnlyComponentNameTemplate}" /> <Setter Property="ContentTemplate" Value="{StaticResource ViewOnlyComponentNameTemplate}" />
</DataTrigger> </DataTrigger>
</Style.Triggers> </Style.Triggers>

View File

@ -6,24 +6,33 @@
xmlns:viewModels="clr-namespace:Filtration.ThemeEditor.ViewModels" xmlns:viewModels="clr-namespace:Filtration.ThemeEditor.ViewModels"
xmlns:views="clr-namespace:Filtration.ThemeEditor.Views" xmlns:views="clr-namespace:Filtration.ThemeEditor.Views"
xmlns:componentModel="clr-namespace:System.ComponentModel;assembly=WindowsBase" xmlns:componentModel="clr-namespace:System.ComponentModel;assembly=WindowsBase"
xmlns:converters="clr-namespace:Filtration.ThemeEditor.Converters"
mc:Ignorable="d" mc:Ignorable="d"
d:DataContext="{d:DesignInstance Type=viewModels:ThemeEditorViewModel}" d:DataContext="{d:DesignInstance Type=viewModels:ThemeEditorViewModel}"
d:DesignHeight="300" d:DesignWidth="300"> d:DesignHeight="300" d:DesignWidth="300">
<UserControl.Resources> <UserControl.Resources>
<CollectionViewSource Source="{Binding Components}" x:Key="ComponentsViewSource"> <ResourceDictionary>
<CollectionViewSource.GroupDescriptions> <ResourceDictionary.MergedDictionaries>
<PropertyGroupDescription PropertyName="ComponentType" /> <ResourceDictionary>
</CollectionViewSource.GroupDescriptions> <CollectionViewSource Source="{Binding Components}" x:Key="ComponentsViewSource">
<CollectionViewSource.SortDescriptions> <CollectionViewSource.GroupDescriptions>
<componentModel:SortDescription PropertyName="ComponentType" /> <PropertyGroupDescription PropertyName="ComponentType" />
</CollectionViewSource.SortDescriptions> </CollectionViewSource.GroupDescriptions>
</CollectionViewSource> <CollectionViewSource.SortDescriptions>
<componentModel:SortDescription PropertyName="ComponentType" />
</CollectionViewSource.SortDescriptions>
</CollectionViewSource>
<converters:ThemeComponentTypeToStringConverter x:Key="ThemeComponentTypeToStringConverter" />
</ResourceDictionary>
<ResourceDictionary Source="pack://application:,,,/Filtration.Common;component/Styles/SharedResourcesDictionary.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</UserControl.Resources> </UserControl.Resources>
<Grid> <Grid Margin="10">
<ScrollViewer HorizontalScrollBarVisibility="Disabled"> <ScrollViewer HorizontalScrollBarVisibility="Disabled">
<ListView ItemsSource="{Binding Source={StaticResource ComponentsViewSource}}" <ListView ItemsSource="{Binding Source={StaticResource ComponentsViewSource}}"
SelectedItem="{Binding SelectedThemeComponent}" SelectedItem="{Binding SelectedThemeComponent}"
Margin="10" Margin="5"
ScrollViewer.HorizontalScrollBarVisibility="Disabled"> ScrollViewer.HorizontalScrollBarVisibility="Disabled">
<ListView.Resources> <ListView.Resources>
<Style TargetType="ListViewItem"> <Style TargetType="ListViewItem">
@ -53,7 +62,7 @@
<GroupStyle> <GroupStyle>
<GroupStyle.HeaderTemplate> <GroupStyle.HeaderTemplate>
<DataTemplate> <DataTemplate>
<TextBlock FontWeight="Bold" FontSize="15" Text="{Binding Path=Name}"/> <TextBlock FontWeight="Bold" FontSize="15" Text="{Binding Path=Name, Converter={StaticResource ThemeComponentTypeToStringConverter}}"/>
</DataTemplate> </DataTemplate>
</GroupStyle.HeaderTemplate> </GroupStyle.HeaderTemplate>
</GroupStyle> </GroupStyle>

View File

@ -1,10 +1,13 @@
<Application x:Class="Filtration.App" <Application x:Class="Filtration.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 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:converters="clr-namespace:Filtration.Converters"
Startup="Application_Startup"> Startup="Application_Startup">
<Application.Resources> <Application.Resources>
<ResourceDictionary> <ResourceDictionary>
<ResourceDictionary.MergedDictionaries> <ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/Filtration.Common;component/Styles/SharedResourcesDictionary.xaml" />
<ResourceDictionary Source="pack://application:,,,/Fluent;Component/Themes/Generic.xaml" /> <ResourceDictionary Source="pack://application:,,,/Fluent;Component/Themes/Generic.xaml" />
<ResourceDictionary Source="pack://application:,,,/Fluent;component/Themes/windows8/silver.xaml" /> <ResourceDictionary Source="pack://application:,,,/Fluent;component/Themes/windows8/silver.xaml" />
<ResourceDictionary Source="Views/Styles/Colours.xaml" /> <ResourceDictionary Source="Views/Styles/Colours.xaml" />
@ -24,6 +27,7 @@
<ResourceDictionary Source="Views/CrossButton.xaml" /> <ResourceDictionary Source="Views/CrossButton.xaml" />
<ResourceDictionary Source="Views/IconsDictionary.xaml" /> <ResourceDictionary Source="Views/IconsDictionary.xaml" />
<ResourceDictionary Source="Views/ExpanderStyle.xaml" />
<ResourceDictionary> <ResourceDictionary>
<Style TargetType="ComboBox" BasedOn="{StaticResource MetroComboBox}" /> <Style TargetType="ComboBox" BasedOn="{StaticResource MetroComboBox}" />
@ -31,6 +35,14 @@
<Style TargetType="ScrollBar" BasedOn="{StaticResource MetroScrollBar}" /> <Style TargetType="ScrollBar" BasedOn="{StaticResource MetroScrollBar}" />
<Style TargetType="TextBox" BasedOn="{StaticResource MetroTextBox}" /> <Style TargetType="TextBox" BasedOn="{StaticResource MetroTextBox}" />
</ResourceDictionary> </ResourceDictionary>
<ResourceDictionary>
<converters:BlockItemToRemoveEnabledVisibilityConverter x:Key="BlockItemToRemoveEnabledVisibilityConverter" />
<converters:IntToItemRarityConverter x:Key="IntToItemRarityConverter" />
<converters:BooleanToBlockActionConverter x:Key="BooleanToBlockActionConverter" />
<converters:BlockItemTypeToStringConverter x:Key="BlockItemTypeToStringConverter" />
<converters:BooleanToBlockActionInverseConverter x:Key="BooleanToBlockActionInverseConverter" />
<converters:AvailableThemeComponentsConverter x:Key="AvailableThemeComponentsConverter" />
</ResourceDictionary>
</ResourceDictionary.MergedDictionaries> </ResourceDictionary.MergedDictionaries>
</ResourceDictionary> </ResourceDictionary>
</Application.Resources> </Application.Resources>

View File

@ -134,15 +134,11 @@
<Compile Include="Converters\BlockGroupAdvancedColorConverter.cs" /> <Compile Include="Converters\BlockGroupAdvancedColorConverter.cs" />
<Compile Include="Converters\BlockGroupVisibilityConverter.cs" /> <Compile Include="Converters\BlockGroupVisibilityConverter.cs" />
<Compile Include="Converters\BlockItemTypeToStringConverter.cs" /> <Compile Include="Converters\BlockItemTypeToStringConverter.cs" />
<Compile Include="Converters\BooleanInverterConverter.cs" />
<Compile Include="Converters\BooleanToBlockActionInverseConverter.cs" /> <Compile Include="Converters\BooleanToBlockActionInverseConverter.cs" />
<Compile Include="Converters\BooleanToBlockActionConverter.cs" /> <Compile Include="Converters\BooleanToBlockActionConverter.cs" />
<Compile Include="Converters\BlockItemToRemoveEnabledVisibilityConverter.cs" /> <Compile Include="Converters\BlockItemToRemoveEnabledVisibilityConverter.cs" />
<Compile Include="Converters\ColorToSolidColorBrushConverter.cs" />
<Compile Include="Converters\HashSignRemovalConverter.cs" /> <Compile Include="Converters\HashSignRemovalConverter.cs" />
<Compile Include="Converters\ItemRarityConverter.cs" /> <Compile Include="Converters\ItemRarityConverter.cs" />
<Compile Include="Converters\InverseBooleanVisibilityConverter.cs" />
<Compile Include="Converters\StringToVisibilityConverter.cs" />
<Compile Include="Converters\TreeViewMarginConverter.cs" /> <Compile Include="Converters\TreeViewMarginConverter.cs" />
<Compile Include="Extensions\EnumerationExtension.cs" /> <Compile Include="Extensions\EnumerationExtension.cs" />
<Compile Include="Extensions\HyperlinkExtensions.cs" /> <Compile Include="Extensions\HyperlinkExtensions.cs" />
@ -309,10 +305,6 @@
<SubType>Designer</SubType> <SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator> <Generator>MSBuild:Compile</Generator>
</Page> </Page>
<Page Include="Views\SharedResourcesDictionary.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="Views\ItemFilterScriptView.xaml"> <Page Include="Views\ItemFilterScriptView.xaml">
<SubType>Designer</SubType> <SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator> <Generator>MSBuild:Compile</Generator>

View File

@ -13,21 +13,6 @@
mc:Ignorable="d" mc:Ignorable="d"
d:DataContext="{d:DesignInstance Type=userControls:BlockItemControl}" d:DataContext="{d:DesignInstance Type=userControls:BlockItemControl}"
d:DesignHeight="200" d:DesignWidth="150"> d:DesignHeight="200" d:DesignWidth="150">
<UserControl.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary>
<Style TargetType="{x:Type Border}" x:Key="BlockItemBorder">
<Setter Property="BorderThickness" Value="1" />
<Setter Property="BorderBrush" Value="Black" />
<Setter Property="CornerRadius" Value="3" />
<Setter Property="Margin" Value="0,0,5,5" />
</Style>
</ResourceDictionary>
<ResourceDictionary Source="../Views/SharedResourcesDictionary.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</UserControl.Resources>
<Border Style="{StaticResource BlockItemBorder}" Width="142"> <Border Style="{StaticResource BlockItemBorder}" Width="142">
<Grid> <Grid>
<Grid.RowDefinitions> <Grid.RowDefinitions>

View File

@ -7,9 +7,6 @@
mc:Ignorable="d" mc:Ignorable="d"
d:DataContext="{d:DesignInstance Type=userControls:ItemPreviewControl}" d:DataContext="{d:DesignInstance Type=userControls:ItemPreviewControl}"
d:DesignHeight="35" d:DesignWidth="170"> d:DesignHeight="35" d:DesignWidth="170">
<UserControl.Resources>
<ResourceDictionary Source="../Views/SharedResourcesDictionary.xaml" />
</UserControl.Resources>
<Border BorderBrush="Black" BorderThickness="1"> <Border BorderBrush="Black" BorderThickness="1">
<Grid Width="166" Height="39"> <Grid Width="166" Height="39">
<Image Source="pack://application:,,,/resources/groundtile.png" Stretch="Fill" /> <Image Source="pack://application:,,,/resources/groundtile.png" Stretch="Fill" />

View File

@ -11,8 +11,7 @@
<UserControl.Resources> <UserControl.Resources>
<ResourceDictionary> <ResourceDictionary>
<ResourceDictionary.MergedDictionaries> <ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="..\Views\SharedResourcesDictionary.xaml" /> <ResourceDictionary Source="pack://application:,,,/Filtration.Common;component/Styles/SharedResourcesDictionary.xaml" />
<ResourceDictionary></ResourceDictionary>
</ResourceDictionary.MergedDictionaries> </ResourceDictionary.MergedDictionaries>
</ResourceDictionary> </ResourceDictionary>
</UserControl.Resources> </UserControl.Resources>

View File

@ -1,6 +1,7 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Collections.ObjectModel; using System.Collections.ObjectModel;
using System.Linq;
using Filtration.Common.ViewModels; using Filtration.Common.ViewModels;
using Filtration.Interface; using Filtration.Interface;
using Filtration.ThemeEditor.ViewModels; using Filtration.ThemeEditor.ViewModels;
@ -22,6 +23,7 @@ namespace Filtration.ViewModels
void AddDocument(IDocument document); void AddDocument(IDocument document);
void CloseDocument(IDocument document); void CloseDocument(IDocument document);
void SwitchActiveDocument(IDocument document); void SwitchActiveDocument(IDocument document);
IThemeEditorViewModel OpenMasterThemeForScript(IItemFilterScriptViewModel scriptViewModel);
} }
internal class AvalonDockWorkspaceViewModel : FiltrationViewModelBase, IAvalonDockWorkspaceViewModel internal class AvalonDockWorkspaceViewModel : FiltrationViewModelBase, IAvalonDockWorkspaceViewModel
@ -180,5 +182,19 @@ namespace Filtration.ViewModels
ActiveDocument = document; ActiveDocument = document;
} }
public IThemeEditorViewModel OpenMasterThemeForScript(IItemFilterScriptViewModel scriptViewModel)
{
var existingMasterThemeViewModelCount =
OpenDocuments.OfType<IThemeEditorViewModel>()
.Count(c => c.IsMasterThemeForScript == scriptViewModel.Script);
if (existingMasterThemeViewModelCount > 0)
{
return OpenDocuments.OfType<IThemeEditorViewModel>()
.First(c => c.IsMasterThemeForScript == scriptViewModel.Script);
}
return null;
}
} }
} }

View File

@ -14,7 +14,6 @@ using Filtration.Common.ViewModels;
using Filtration.Interface; using Filtration.Interface;
using Filtration.ObjectModel; using Filtration.ObjectModel;
using Filtration.ObjectModel.BlockItemBaseTypes; using Filtration.ObjectModel.BlockItemBaseTypes;
using Filtration.ObjectModel.ThemeEditor;
using Filtration.Services; using Filtration.Services;
using Filtration.Translators; using Filtration.Translators;
using GalaSoft.MvvmLight.CommandWpf; using GalaSoft.MvvmLight.CommandWpf;
@ -493,6 +492,13 @@ namespace Filtration.ViewModels
private void CloseScript() private void CloseScript()
{ {
var openMasterThemForScript =
_avalonDockWorkspaceViewModel.OpenMasterThemeForScript(this);
if (openMasterThemForScript != null)
{
_avalonDockWorkspaceViewModel.CloseDocument(openMasterThemForScript);
}
_avalonDockWorkspaceViewModel.ActiveDocumentChanged -= OnActiveDocumentChanged; _avalonDockWorkspaceViewModel.ActiveDocumentChanged -= OnActiveDocumentChanged;
_avalonDockWorkspaceViewModel.CloseDocument(this); _avalonDockWorkspaceViewModel.CloseDocument(this);
} }

View File

@ -15,6 +15,7 @@ using Filtration.ObjectModel.ThemeEditor;
using Filtration.Properties; using Filtration.Properties;
using Filtration.Repositories; using Filtration.Repositories;
using Filtration.Services; using Filtration.Services;
using Filtration.ThemeEditor.Messages;
using Filtration.ThemeEditor.Providers; using Filtration.ThemeEditor.Providers;
using Filtration.ThemeEditor.Services; using Filtration.ThemeEditor.Services;
using Filtration.ThemeEditor.ViewModels; using Filtration.ThemeEditor.ViewModels;
@ -128,6 +129,12 @@ namespace Filtration.ViewModels
icon.EndInit(); icon.EndInit();
Icon = icon; Icon = icon;
Messenger.Default.Register<ThemeClosedMessage>(this, message =>
{
if (message.ClosedViewModel == null) return;
AvalonDockWorkspaceViewModel.CloseDocument(message.ClosedViewModel);
});
Messenger.Default.Register<NotificationMessage>(this, message => Messenger.Default.Register<NotificationMessage>(this, message =>
{ {
switch (message.Notification) switch (message.Notification)
@ -294,24 +301,14 @@ namespace Filtration.ViewModels
} }
} }
//public bool ActiveDocumentIsScript
//{
// get { return AvalonDockWorkspaceViewModel.ActiveDocument is ItemFilterScriptViewModel; }
//}
public bool ActiveScriptHasSelectedBlock public bool ActiveScriptHasSelectedBlock
{ {
get { return AvalonDockWorkspaceViewModel.ActiveScriptViewModel.SelectedBlockViewModel != null; } get { return AvalonDockWorkspaceViewModel.ActiveScriptViewModel.SelectedBlockViewModel != null; }
} }
//public bool ActiveDocumentIsTheme
//{
// get { return AvalonDockWorkspaceViewModel.ActiveDocument is ThemeEditorViewModel; }
//}
public bool ActiveThemeIsEditable public bool ActiveThemeIsEditable
{ {
get { return AvalonDockWorkspaceViewModel.ActiveThemeViewModel.EditEnabled; } get { return AvalonDockWorkspaceViewModel.ActiveThemeViewModel.IsMasterTheme; }
} }
private bool ActiveDocumentIsEditable() private bool ActiveDocumentIsEditable()
@ -335,9 +332,19 @@ namespace Filtration.ViewModels
private void OnEditMasterThemeCommand() private void OnEditMasterThemeCommand()
{ {
var themeViewModel = var openMasterThemForScript =
_themeProvider.MasterThemeForScript(AvalonDockWorkspaceViewModel.ActiveScriptViewModel.Script); AvalonDockWorkspaceViewModel.OpenMasterThemeForScript(AvalonDockWorkspaceViewModel.ActiveScriptViewModel);
OpenTheme(themeViewModel);
if (openMasterThemForScript != null)
{
AvalonDockWorkspaceViewModel.SwitchActiveDocument(openMasterThemForScript);
}
else
{
var themeViewModel =
_themeProvider.MasterThemeForScript(AvalonDockWorkspaceViewModel.ActiveScriptViewModel.Script);
OpenTheme(themeViewModel);
}
} }
private void OpenTheme(IThemeEditorViewModel themeEditorViewModel) private void OpenTheme(IThemeEditorViewModel themeEditorViewModel)

View File

@ -15,7 +15,6 @@
<UserControl.Resources> <UserControl.Resources>
<ResourceDictionary> <ResourceDictionary>
<ResourceDictionary.MergedDictionaries> <ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="SharedResourcesDictionary.xaml" />
<ResourceDictionary> <ResourceDictionary>
<views:BindingProxy x:Key="proxy" Data="{Binding}" /> <views:BindingProxy x:Key="proxy" Data="{Binding}" />
<converters:BlockGroupAdvancedFillColorConverter x:Key="BlockGroupAdvancedFillColorConverter" /> <converters:BlockGroupAdvancedFillColorConverter x:Key="BlockGroupAdvancedFillColorConverter" />

View File

@ -11,14 +11,6 @@
Title="Replace Script Colors" Height="280" Width="540" Title="Replace Script Colors" Height="280" Width="540"
BorderThickness="1" BorderBrush="Black" BorderThickness="1" BorderBrush="Black"
Loaded="ReplaceColorsWindow_OnLoaded" ResizeMode="CanMinimize"> Loaded="ReplaceColorsWindow_OnLoaded" ResizeMode="CanMinimize">
<!--ShowMaxRestoreButton="False"-->
<Window.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="SharedResourcesDictionary.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Window.Resources>
<Grid Margin="5"> <Grid Margin="5">
<Grid.RowDefinitions> <Grid.RowDefinitions>
<RowDefinition Height="Auto"></RowDefinition> <RowDefinition Height="Auto"></RowDefinition>