From 33375311611dffa1f6c7a15b18cecfd606a69d1d Mon Sep 17 00:00:00 2001 From: Ben <ben-wallis@users.noreply.github.com> Date: Sat, 4 Jul 2015 17:28:34 +0100 Subject: [PATCH] Fixed another copy paste bug, changed speaker icon to button --- Filtration.Common/Filtration.Common.csproj | 3 ++ .../Services/MessageBoxService.cs | 17 +++++++++ .../WindsorInstallers/ServicesInstaller.cs | 5 +++ .../Filtration.ThemeEditor.Tests.csproj | 4 +++ .../Services/TestThemeService.cs | 9 +++-- .../Services/ThemeService.cs | 12 +++++-- .../ViewModels/ThemeViewModel.cs | 11 +++--- .../BooleanVisibilityConverterCopy.cs | 1 - .../Translators/ItemFilterBlockTranslator.cs | 7 ++++ .../ViewModels/ItemFilterScriptViewModel.cs | 35 ++++++++++++------- Filtration/ViewModels/MainWindowViewModel.cs | 33 +++++++++-------- .../ViewModels/SettingsPageViewModel.cs | 7 ++-- .../ItemFilterBlockDisplaySettingsView.xaml | 2 +- Filtration/Views/ItemFilterBlockView.xaml | 18 ++++++---- 14 files changed, 119 insertions(+), 45 deletions(-) create mode 100644 Filtration.Common/Services/MessageBoxService.cs diff --git a/Filtration.Common/Filtration.Common.csproj b/Filtration.Common/Filtration.Common.csproj index 1e02c80..5b368c2 100644 --- a/Filtration.Common/Filtration.Common.csproj +++ b/Filtration.Common/Filtration.Common.csproj @@ -49,11 +49,13 @@ <HintPath>..\packages\CommonServiceLocator.1.3\lib\portable-net4+sl5+netcore45+wpa81+wp8\Microsoft.Practices.ServiceLocation.dll</HintPath> </Reference> <Reference Include="PresentationCore" /> + <Reference Include="PresentationFramework" /> <Reference Include="System" /> <Reference Include="System.Core" /> <Reference Include="System.Windows.Interactivity, Version=4.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> <HintPath>..\packages\MvvmLightLibs.5.1.1.0\lib\net45\System.Windows.Interactivity.dll</HintPath> </Reference> + <Reference Include="System.Xaml" /> <Reference Include="System.Xml.Linq" /> <Reference Include="System.Data.DataSetExtensions" /> <Reference Include="Microsoft.CSharp" /> @@ -64,6 +66,7 @@ <ItemGroup> <Compile Include="Properties\AssemblyInfo.cs" /> <Compile Include="Services\FileSystemService.cs" /> + <Compile Include="Services\MessageBoxService.cs" /> <Compile Include="ViewModels\FiltrationViewModelBase.cs" /> <Compile Include="ViewModels\PaneViewModel.cs" /> <Compile Include="WindsorInstallers\ServicesInstaller.cs" /> diff --git a/Filtration.Common/Services/MessageBoxService.cs b/Filtration.Common/Services/MessageBoxService.cs new file mode 100644 index 0000000..a9ab4b0 --- /dev/null +++ b/Filtration.Common/Services/MessageBoxService.cs @@ -0,0 +1,17 @@ +using System.Windows; + +namespace Filtration.Common.Services +{ + public interface IMessageBoxService + { + MessageBoxResult Show(string caption, string message, MessageBoxButton buttons, MessageBoxImage image); + } + + public class MessageBoxService : IMessageBoxService + { + public MessageBoxResult Show(string caption, string message, MessageBoxButton buttons, MessageBoxImage image) + { + return MessageBox.Show(message, caption, buttons, image); + } + } +} diff --git a/Filtration.Common/WindsorInstallers/ServicesInstaller.cs b/Filtration.Common/WindsorInstallers/ServicesInstaller.cs index fffac19..5bcbaa3 100644 --- a/Filtration.Common/WindsorInstallers/ServicesInstaller.cs +++ b/Filtration.Common/WindsorInstallers/ServicesInstaller.cs @@ -13,6 +13,11 @@ namespace Filtration.Common.WindsorInstallers Component.For<IFileSystemService>() .ImplementedBy<FileSystemService>() .LifeStyle.Singleton); + + container.Register( + Component.For<IMessageBoxService>() + .ImplementedBy<MessageBoxService>() + .LifeStyle.Singleton); } } } diff --git a/Filtration.ThemeEditor.Tests/Filtration.ThemeEditor.Tests.csproj b/Filtration.ThemeEditor.Tests/Filtration.ThemeEditor.Tests.csproj index 8c3cd58..cf13d8c 100644 --- a/Filtration.ThemeEditor.Tests/Filtration.ThemeEditor.Tests.csproj +++ b/Filtration.ThemeEditor.Tests/Filtration.ThemeEditor.Tests.csproj @@ -55,6 +55,10 @@ <None Include="packages.config" /> </ItemGroup> <ItemGroup> + <ProjectReference Include="..\Filtration.Common\Filtration.Common.csproj"> + <Project>{8cb44f28-2956-4c2a-9314-72727262edd4}</Project> + <Name>Filtration.Common</Name> + </ProjectReference> <ProjectReference Include="..\Filtration.ObjectModel\Filtration.ObjectModel.csproj"> <Project>{4aac3beb-1dc1-483e-9d11-0e9334e80227}</Project> <Name>Filtration.ObjectModel</Name> diff --git a/Filtration.ThemeEditor.Tests/Services/TestThemeService.cs b/Filtration.ThemeEditor.Tests/Services/TestThemeService.cs index 68c3938..086f4f1 100644 --- a/Filtration.ThemeEditor.Tests/Services/TestThemeService.cs +++ b/Filtration.ThemeEditor.Tests/Services/TestThemeService.cs @@ -1,9 +1,11 @@ using System.Windows.Media; +using Filtration.Common.Services; using Filtration.ObjectModel; using Filtration.ObjectModel.BlockItemTypes; using Filtration.ObjectModel.Enums; using Filtration.ObjectModel.ThemeEditor; using Filtration.ThemeEditor.Services; +using Moq; using NUnit.Framework; namespace Filtration.ThemeEditor.Tests.Services @@ -27,8 +29,9 @@ namespace Filtration.ThemeEditor.Tests.Services var testInputThemeComponent = new ThemeComponent(ThemeComponentType.TextColor, "Test Component 1", testInputThemeComponentColor); testInputTheme.Components.Add(testInputThemeComponent); testInputBlockItem.ThemeComponent = testInputThemeComponent; + var mockMessageBoxService = new Mock<IMessageBoxService>(); - var service = new ThemeService(); + var service = new ThemeService(mockMessageBoxService.Object); // Act service.ApplyThemeToScript(testInputTheme, testInputScript); @@ -54,8 +57,10 @@ namespace Filtration.ThemeEditor.Tests.Services var testInputBlockItemThemeComponent = new ThemeComponent(ThemeComponentType.TextColor, "Different Component", testInputThemeComponentColor); testInputTheme.Components.Add(testInputThemeComponent); testInputBlockItem.ThemeComponent = testInputBlockItemThemeComponent; + + var mockMessageBoxService = new Mock<IMessageBoxService>(); - var service = new ThemeService(); + var service = new ThemeService(mockMessageBoxService.Object); // Act service.ApplyThemeToScript(testInputTheme, testInputScript); diff --git a/Filtration.ThemeEditor/Services/ThemeService.cs b/Filtration.ThemeEditor/Services/ThemeService.cs index 8b82018..95c22b9 100644 --- a/Filtration.ThemeEditor/Services/ThemeService.cs +++ b/Filtration.ThemeEditor/Services/ThemeService.cs @@ -1,6 +1,7 @@ using System; using System.Linq; using System.Windows; +using Filtration.Common.Services; using Filtration.ObjectModel; using Filtration.ObjectModel.BlockItemBaseTypes; using Filtration.ObjectModel.BlockItemTypes; @@ -16,6 +17,13 @@ namespace Filtration.ThemeEditor.Services public class ThemeService : IThemeService { + private readonly IMessageBoxService _messageBoxService; + + public ThemeService(IMessageBoxService messageBoxService) + { + _messageBoxService = messageBoxService; + } + public void ApplyThemeToScript(Theme theme, ItemFilterScript script) { var mismatchedComponents = false; @@ -58,9 +66,9 @@ namespace Filtration.ThemeEditor.Services if (mismatchedComponents) { - MessageBox.Show( + _messageBoxService.Show("Possible Theme Mismatch", "Not all theme components had matches - are you sure this theme is designed for this script?", - "Possible Theme Mismatch", MessageBoxButton.OK, MessageBoxImage.Exclamation); + MessageBoxButton.OK, MessageBoxImage.Exclamation); } } } diff --git a/Filtration.ThemeEditor/ViewModels/ThemeViewModel.cs b/Filtration.ThemeEditor/ViewModels/ThemeViewModel.cs index ce06888..e2ba179 100644 --- a/Filtration.ThemeEditor/ViewModels/ThemeViewModel.cs +++ b/Filtration.ThemeEditor/ViewModels/ThemeViewModel.cs @@ -4,6 +4,7 @@ using System.IO; using System.Windows; using System.Windows.Forms; using System.Windows.Media.Imaging; +using Filtration.Common.Services; using Filtration.Common.ViewModels; using Filtration.Interface; using Filtration.ThemeEditor.Providers; @@ -27,12 +28,15 @@ namespace Filtration.ThemeEditor.ViewModels private static readonly Logger _logger = LogManager.GetCurrentClassLogger(); private readonly IThemeProvider _themeProvider; + private readonly IMessageBoxService _messageBoxService; private bool _filenameIsFake; private string _filePath; - public ThemeViewModel(IThemeProvider themeProvider) + public ThemeViewModel(IThemeProvider themeProvider, + IMessageBoxService messageBoxService) { _themeProvider = themeProvider; + _messageBoxService = messageBoxService; Components = new ObservableCollection<ThemeComponentViewModel>(); @@ -93,8 +97,7 @@ namespace Filtration.ThemeEditor.ViewModels _logger.Error(e); } - MessageBox.Show(@"Error saving filter theme - " + e.Message, @"Save Error", MessageBoxButton.OK, - MessageBoxImage.Error); + _messageBoxService.Show("Save Error", "Error saving filter theme - " + e.Message, MessageBoxButton.OK, MessageBoxImage.Error); } } @@ -125,7 +128,7 @@ namespace Filtration.ThemeEditor.ViewModels _logger.Error(e); } - MessageBox.Show(@"Error saving theme file - " + e.Message, @"Save Error", MessageBoxButton.OK, + _messageBoxService.Show("Save Error", "Error saving theme file - " + e.Message, MessageBoxButton.OK, MessageBoxImage.Error); FilePath = previousFilePath; } diff --git a/Filtration/Converters/BooleanVisibilityConverterCopy.cs b/Filtration/Converters/BooleanVisibilityConverterCopy.cs index 2681bc2..3be867a 100644 --- a/Filtration/Converters/BooleanVisibilityConverterCopy.cs +++ b/Filtration/Converters/BooleanVisibilityConverterCopy.cs @@ -9,7 +9,6 @@ namespace Filtration.Converters { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { - return (bool) value ? Visibility.Visible : Visibility.Hidden; if (value is bool && targetType == typeof (Visibility)) { var val = (bool) value; diff --git a/Filtration/Translators/ItemFilterBlockTranslator.cs b/Filtration/Translators/ItemFilterBlockTranslator.cs index 15e699b..4d32fea 100644 --- a/Filtration/Translators/ItemFilterBlockTranslator.cs +++ b/Filtration/Translators/ItemFilterBlockTranslator.cs @@ -16,6 +16,7 @@ namespace Filtration.Translators { internal interface IItemFilterBlockTranslator { + void InitialiseForExistingScript(ItemFilterScript script); ItemFilterBlock TranslateStringToItemFilterBlock(string inputString); string TranslateItemFilterBlockToString(ItemFilterBlock block); void ReplaceColorBlockItemsFromString(ObservableCollection<IItemFilterBlockItem> blockItems, string inputString); @@ -34,6 +35,12 @@ namespace Filtration.Translators _themeComponentListBuilder = themeComponentListBuilder; } + public void InitialiseForExistingScript(ItemFilterScript script) + { + _themeComponentListBuilder.Initialise(script.ThemeComponents); + _blockGroupHierarchyBuilder.Initialise(script.ItemFilterBlockGroups.First()); + } + // This method converts a string into a ItemFilterBlock. This is used for pasting ItemFilterBlocks // and reading ItemFilterScripts from a file. public ItemFilterBlock TranslateStringToItemFilterBlock(string inputString) diff --git a/Filtration/ViewModels/ItemFilterScriptViewModel.cs b/Filtration/ViewModels/ItemFilterScriptViewModel.cs index 85325f3..7571058 100644 --- a/Filtration/ViewModels/ItemFilterScriptViewModel.cs +++ b/Filtration/ViewModels/ItemFilterScriptViewModel.cs @@ -9,6 +9,7 @@ using System.Windows.Data; using System.Windows.Forms; using System.Windows.Media.Imaging; using Castle.Core.Internal; +using Filtration.Common.Services; using Filtration.Common.ViewModels; using Filtration.Interface; using Filtration.ObjectModel; @@ -18,7 +19,6 @@ using GalaSoft.MvvmLight.CommandWpf; using GalaSoft.MvvmLight.Messaging; using NLog; using Clipboard = System.Windows.Clipboard; -using MessageBox = System.Windows.MessageBox; namespace Filtration.ViewModels { @@ -70,6 +70,7 @@ namespace Filtration.ViewModels private readonly IItemFilterBlockTranslator _blockTranslator; private readonly IAvalonDockWorkspaceViewModel _avalonDockWorkspaceViewModel; private readonly IItemFilterPersistenceService _persistenceService; + private readonly IMessageBoxService _messageBoxService; private bool _isDirty; private IItemFilterBlockViewModel _selectedBlockViewModel; @@ -81,13 +82,15 @@ namespace Filtration.ViewModels public ItemFilterScriptViewModel(IItemFilterBlockViewModelFactory itemFilterBlockViewModelFactory, IItemFilterBlockTranslator blockTranslator, IAvalonDockWorkspaceViewModel avalonDockWorkspaceViewModel, - IItemFilterPersistenceService persistenceService) + IItemFilterPersistenceService persistenceService, + IMessageBoxService messageBoxService) { _itemFilterBlockViewModelFactory = itemFilterBlockViewModelFactory; _blockTranslator = blockTranslator; _avalonDockWorkspaceViewModel = avalonDockWorkspaceViewModel; _avalonDockWorkspaceViewModel.ActiveDocumentChanged += OnActiveDocumentChanged; _persistenceService = persistenceService; + _messageBoxService = messageBoxService; _itemFilterBlockViewModels = new ObservableCollection<IItemFilterBlockViewModel>(); ToggleShowAdvancedCommand = new RelayCommand<bool>(OnToggleShowAdvancedCommand); @@ -342,8 +345,8 @@ namespace Filtration.ViewModels _logger.Error(e); } - MessageBox.Show(@"Error saving filter file - " + e.Message, @"Save Error", MessageBoxButton.OK, - MessageBoxImage.Error); + _messageBoxService.Show("Save Error", "Error saving filter file - " + e.Message, MessageBoxButton.OK, + MessageBoxImage.Error); } } @@ -378,7 +381,7 @@ namespace Filtration.ViewModels _logger.Error(e); } - MessageBox.Show(@"Error saving filter file - " + e.Message, @"Save Error", MessageBoxButton.OK, + _messageBoxService.Show("Save Error", "Error saving filter file - " + e.Message, MessageBoxButton.OK, MessageBoxImage.Error); Script.FilePath = previousFilePath; } @@ -421,7 +424,8 @@ namespace Filtration.ViewModels var messageText = "The following script validation errors occurred:" + Environment.NewLine + failures; - MessageBox.Show(messageText, "Script Validation Failure", MessageBoxButton.OK, MessageBoxImage.Exclamation); + _messageBoxService.Show("Script Validation Failure", messageText, MessageBoxButton.OK, + MessageBoxImage.Exclamation); return false; } @@ -438,8 +442,9 @@ namespace Filtration.ViewModels } else { - var result = MessageBox.Show(@"Want to save your changes to this script?", - @"Filtration", MessageBoxButton.YesNoCancel, MessageBoxImage.Question); + var result = _messageBoxService.Show("Filtration", + "Want to save your changes to this script?", MessageBoxButton.YesNoCancel, MessageBoxImage.Question); + switch (result) { case MessageBoxResult.Yes: @@ -538,6 +543,7 @@ namespace Filtration.ViewModels var clipboardText = Clipboard.GetText(); if (clipboardText.IsNullOrEmpty()) return; + _blockTranslator.InitialiseForExistingScript(Script); var translatedBlock = _blockTranslator.TranslateStringToItemFilterBlock(clipboardText); if (translatedBlock == null) return; @@ -562,8 +568,10 @@ namespace Filtration.ViewModels catch (Exception e) { _logger.Error(e); - MessageBox.Show(e.Message + Environment.NewLine + e.StackTrace + Environment.NewLine + - e.InnerException.Message + Environment.NewLine + e.InnerException.StackTrace, "Paste Error", MessageBoxButton.OK); + _messageBoxService.Show("Paste Error", + e.Message + Environment.NewLine + e.StackTrace + Environment.NewLine + + e.InnerException.Message + Environment.NewLine + e.InnerException.StackTrace, MessageBoxButton.OK, + MessageBoxImage.Error); } } @@ -717,9 +725,10 @@ namespace Filtration.ViewModels public void DeleteBlock(IItemFilterBlockViewModel targetBlockViewModel) { - var result = MessageBox.Show("Are you sure you wish to delete this block?", "Delete Confirmation", - MessageBoxButton.YesNo, MessageBoxImage.Question); - + var result = _messageBoxService.Show("Delete Confirmation", "Are you sure you wish to delete this block?", + MessageBoxButton.YesNo, + MessageBoxImage.Question); + if (result == MessageBoxResult.Yes) { Script.ItemFilterBlocks.Remove(targetBlockViewModel.Block); diff --git a/Filtration/ViewModels/MainWindowViewModel.cs b/Filtration/ViewModels/MainWindowViewModel.cs index c278d34..63f1667 100644 --- a/Filtration/ViewModels/MainWindowViewModel.cs +++ b/Filtration/ViewModels/MainWindowViewModel.cs @@ -1,11 +1,12 @@ using System; using System.Diagnostics; -using System.Globalization; using System.IO; using System.Reflection; +using System.Windows; using System.Windows.Forms; using System.Windows.Media; using System.Windows.Media.Imaging; +using Filtration.Common.Services; using Filtration.Common.ViewModels; using Filtration.Interface; using Filtration.Models; @@ -45,6 +46,7 @@ namespace Filtration.ViewModels private readonly IThemeService _themeService; private readonly IUpdateCheckService _updateCheckService; private readonly IUpdateAvailableViewModel _updateAvailableViewModel; + private readonly IMessageBoxService _messageBoxService; public MainWindowViewModel(IItemFilterScriptRepository itemFilterScriptRepository, IItemFilterScriptTranslator itemFilterScriptTranslator, @@ -54,7 +56,8 @@ namespace Filtration.ViewModels IThemeProvider themeProvider, IThemeService themeService, IUpdateCheckService updateCheckService, - IUpdateAvailableViewModel updateAvailableViewModel) + IUpdateAvailableViewModel updateAvailableViewModel, + IMessageBoxService messageBoxService) { _itemFilterScriptRepository = itemFilterScriptRepository; _itemFilterScriptTranslator = itemFilterScriptTranslator; @@ -65,6 +68,7 @@ namespace Filtration.ViewModels _themeService = themeService; _updateCheckService = updateCheckService; _updateAvailableViewModel = updateAvailableViewModel; + _messageBoxService = messageBoxService; NewScriptCommand = new RelayCommand(OnNewScriptCommand); CopyScriptCommand = new RelayCommand(OnCopyScriptCommand, () => ActiveDocumentIsScript); @@ -319,9 +323,9 @@ namespace Filtration.ViewModels { _logger.Error(e); } - MessageBox.Show(@"Error loading filter script - " + e.Message, @"Script Load Error", - MessageBoxButtons.OK, - MessageBoxIcon.Error); + _messageBoxService.Show("Script Load Error", "Error loading filter script - " + e.Message, + MessageBoxButton.OK, + MessageBoxImage.Error); return; } @@ -349,9 +353,9 @@ namespace Filtration.ViewModels { _logger.Error(e); } - MessageBox.Show(@"Error loading filter theme - " + e.Message, @"Theme Load Error", - MessageBoxButtons.OK, - MessageBoxIcon.Error); + _messageBoxService.Show("Theme Load Error", "Error loading filter theme - " + e.Message, + MessageBoxButton.OK, + MessageBoxImage.Error); return; } @@ -378,15 +382,16 @@ namespace Filtration.ViewModels { _logger.Error(e); } - MessageBox.Show(@"Error loading filter theme - " + e.Message, @"Theme Load Error", - MessageBoxButtons.OK, - MessageBoxIcon.Error); + _messageBoxService.Show("Theme Load Error", "Error loading filter theme - " + e.Message, + MessageBoxButton.OK, + MessageBoxImage.Error); return; } - var result = MessageBox.Show(@"Are you sure you wish to apply this theme to the current filter script?", - @"Confirm", MessageBoxButtons.YesNo, MessageBoxIcon.Question); - if (result == DialogResult.No) + var result = _messageBoxService.Show("Confirm", + "Are you sure you wish to apply this theme to the current filter script?", MessageBoxButton.YesNo, + MessageBoxImage.Question); + if (result == MessageBoxResult.No) { return; } diff --git a/Filtration/ViewModels/SettingsPageViewModel.cs b/Filtration/ViewModels/SettingsPageViewModel.cs index ac99b2a..0247d52 100644 --- a/Filtration/ViewModels/SettingsPageViewModel.cs +++ b/Filtration/ViewModels/SettingsPageViewModel.cs @@ -1,5 +1,6 @@ using System.IO; using System.Windows; +using Filtration.Common.Services; using Filtration.Common.ViewModels; using Filtration.Properties; using Filtration.Services; @@ -14,10 +15,12 @@ namespace Filtration.ViewModels internal class SettingsPageViewModel : FiltrationViewModelBase, ISettingsPageViewModel { private readonly IItemFilterPersistenceService _itemFilterPersistenceService; + private readonly IMessageBoxService _messageBoxService; - public SettingsPageViewModel(IItemFilterPersistenceService itemFilterPersistenceService) + public SettingsPageViewModel(IItemFilterPersistenceService itemFilterPersistenceService, IMessageBoxService messageBoxService) { _itemFilterPersistenceService = itemFilterPersistenceService; + _messageBoxService = messageBoxService; SaveCommand = new RelayCommand(OnSaveCommand); DefaultFilterDirectory = Settings.Default.DefaultFilterDirectory; @@ -41,7 +44,7 @@ namespace Filtration.ViewModels } catch (DirectoryNotFoundException) { - MessageBox.Show("The entered Default Filter Directory is invalid or does not exist.", "Error", + _messageBoxService.Show("Error", "The entered Default Filter Directory is invalid or does not exist.", MessageBoxButton.OK, MessageBoxImage.Exclamation); } } diff --git a/Filtration/Views/ItemFilterBlockDisplaySettingsView.xaml b/Filtration/Views/ItemFilterBlockDisplaySettingsView.xaml index 49b5f7c..46c991f 100644 --- a/Filtration/Views/ItemFilterBlockDisplaySettingsView.xaml +++ b/Filtration/Views/ItemFilterBlockDisplaySettingsView.xaml @@ -91,7 +91,7 @@ </Grid.RowDefinitions> <TextBlock Grid.Column="0" Text="{Binding DisplayHeading}" Style="{StaticResource DisplayHeading}" /> <WrapPanel Grid.Column="1" Grid.Row="0" HorizontalAlignment="Right"> - <Button Command="{Binding ElementName=SettingsGrid, Path=DataContext.PlaySoundCommand}" Width="20" Height="20" Padding="3" Background="Transparent" BorderBrush="Transparent"> + <Button Command="{Binding ElementName=SettingsGrid, Path=DataContext.PlaySoundCommand}" Width="20" Height="20" Background="Transparent" BorderBrush="Transparent"> <Image Source="/Filtration;component/Resources/Icons/speaker_icon.png" VerticalAlignment="Center" HorizontalAlignment="Center" /> </Button> <ComboBox ItemsSource="{Binding ElementName=SettingsGrid, Path=DataContext.SoundsAvailable}" SelectedValue="{Binding Value}" /> diff --git a/Filtration/Views/ItemFilterBlockView.xaml b/Filtration/Views/ItemFilterBlockView.xaml index 3906c19..a2bdac5 100644 --- a/Filtration/Views/ItemFilterBlockView.xaml +++ b/Filtration/Views/ItemFilterBlockView.xaml @@ -111,12 +111,18 @@ <!-- Item Preview Box --> <WrapPanel Grid.Row="0" Grid.Column="1" VerticalAlignment="Center"> - <Image Source="/Filtration;component/Resources/Icons/speaker_icon.png" - VerticalAlignment="Center" - HorizontalAlignment="Center" - Height="15" Width="15" - Margin="0,0,3,0" - Visibility="{Binding HasSound, Converter={StaticResource BooleanVisibilityConverter}}" /> + <Button Command="{Binding PlaySoundCommand}" + Width="25" + Height="25" + VerticalAlignment="Center" + HorizontalAlignment="Center" + Margin="0,0,3,0" + Visibility="{Binding HasSound, Converter={StaticResource BooleanVisibilityConverter}}" + Background="Transparent" + BorderBrush="Transparent" + ToolTip="Click to preview drop sound"> + <Image Source="/Filtration;component/Resources/Icons/speaker_icon.png" VerticalAlignment="Center" HorizontalAlignment="Center" /> + </Button> <ToggleButton Margin="0,2,2,2" Style="{StaticResource ChromelessToggleButton}" x:Name="ItemPreviewButton"