diff --git a/Filtration.Tests/Filtration.Tests.csproj b/Filtration.Tests/Filtration.Tests.csproj index 4bee279..60ebff2 100644 --- a/Filtration.Tests/Filtration.Tests.csproj +++ b/Filtration.Tests/Filtration.Tests.csproj @@ -55,6 +55,7 @@ + diff --git a/Filtration.Tests/app.config b/Filtration.Tests/app.config new file mode 100644 index 0000000..cd606f0 --- /dev/null +++ b/Filtration.Tests/app.config @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/Filtration/App.config b/Filtration/App.config index 3a0477b..eee4e61 100644 --- a/Filtration/App.config +++ b/Filtration/App.config @@ -1,7 +1,7 @@ - + - +
@@ -13,6 +13,17 @@ + + True + + + + + + + + + \ No newline at end of file diff --git a/Filtration/Filtration.csproj b/Filtration/Filtration.csproj index 7869f32..60483fc 100644 --- a/Filtration/Filtration.csproj +++ b/Filtration/Filtration.csproj @@ -91,6 +91,21 @@ False .\Xceed.Wpf.AvalonDock.dll + + False + .\Xceed.Wpf.AvalonDock.Themes.Aero.dll + + + False + .\Xceed.Wpf.AvalonDock.Themes.Metro.dll + + + False + .\Xceed.Wpf.AvalonDock.Themes.VS2010.dll + + + .\Xceed.Wpf.AvalonDock.Themes.VS2013.dll + False ..\packages\Extended.Wpf.Toolkit.2.4\lib\net40\Xceed.Wpf.Toolkit.dll @@ -137,6 +152,7 @@ + @@ -158,6 +174,9 @@ + + SettingsWindow.xaml + BlockGroupBrowserView.xaml @@ -209,6 +228,10 @@ Designer MSBuild:Compile + + Designer + MSBuild:Compile + Designer MSBuild:Compile diff --git a/Filtration/Properties/Settings.Designer.cs b/Filtration/Properties/Settings.Designer.cs index eb7c523..72fabbf 100644 --- a/Filtration/Properties/Settings.Designer.cs +++ b/Filtration/Properties/Settings.Designer.cs @@ -34,5 +34,17 @@ namespace Filtration.Properties { this["DefaultFilterDirectory"] = value; } } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("True")] + public bool ExtraLineBetweenBlocks { + get { + return ((bool)(this["ExtraLineBetweenBlocks"])); + } + set { + this["ExtraLineBetweenBlocks"] = value; + } + } } } diff --git a/Filtration/Properties/Settings.settings b/Filtration/Properties/Settings.settings index f44e762..a942e60 100644 --- a/Filtration/Properties/Settings.settings +++ b/Filtration/Properties/Settings.settings @@ -5,5 +5,8 @@ + + True + \ No newline at end of file diff --git a/Filtration/ViewModels/MainWindowViewModel.cs b/Filtration/ViewModels/MainWindowViewModel.cs index ba51540..82fb650 100644 --- a/Filtration/ViewModels/MainWindowViewModel.cs +++ b/Filtration/ViewModels/MainWindowViewModel.cs @@ -24,20 +24,24 @@ namespace Filtration.ViewModels private readonly IItemFilterScriptTranslator _itemFilterScriptTranslator; private readonly IReplaceColorsViewModel _replaceColorsViewModel; private readonly IAvalonDockWorkspaceViewModel _avalonDockWorkspaceViewModel; + private readonly ISettingsWindowViewModel _settingsWindowViewModel; private IDocument _activeDocument; public MainWindowViewModel(IItemFilterScriptRepository itemFilterScriptRepository, IItemFilterScriptTranslator itemFilterScriptTranslator, IReplaceColorsViewModel replaceColorsViewModel, - IAvalonDockWorkspaceViewModel avalonDockWorkspaceViewModel) + IAvalonDockWorkspaceViewModel avalonDockWorkspaceViewModel, + ISettingsWindowViewModel settingsWindowViewModel) { _itemFilterScriptRepository = itemFilterScriptRepository; _itemFilterScriptTranslator = itemFilterScriptTranslator; _replaceColorsViewModel = replaceColorsViewModel; _avalonDockWorkspaceViewModel = avalonDockWorkspaceViewModel; + _settingsWindowViewModel = settingsWindowViewModel; OpenAboutWindowCommand = new RelayCommand(OnOpenAboutWindowCommand); + OpenSettingsWindowCommand = new RelayCommand(OnOpenSettingsWindowCommand); OpenScriptCommand = new RelayCommand(OnOpenScriptCommand); SaveScriptCommand = new RelayCommand(OnSaveScriptCommand, ActiveDocumentIsScript); SaveScriptAsCommand = new RelayCommand(OnSaveScriptAsCommand, ActiveDocumentIsScript); @@ -95,6 +99,7 @@ namespace Filtration.ViewModels public RelayCommand NewScriptCommand { get; private set; } public RelayCommand CloseScriptCommand { get; private set; } public RelayCommand OpenAboutWindowCommand { get; private set; } + public RelayCommand OpenSettingsWindowCommand { get; private set; } public RelayCommand ReplaceColorsCommand { get; private set; } public IAvalonDockWorkspaceViewModel AvalonDockWorkspaceViewModel @@ -123,6 +128,13 @@ namespace Filtration.ViewModels aboutWindow.ShowDialog(); } + private void OnOpenSettingsWindowCommand() + { + var settingsWindow = new SettingsWindow {DataContext = _settingsWindowViewModel}; + _settingsWindowViewModel.OnRequestClose += (s, e) => settingsWindow.Close(); + settingsWindow.ShowDialog(); + } + private void OnOpenScriptCommand() { var openFileDialog = new OpenFileDialog diff --git a/Filtration/ViewModels/SettingsWindowViewModel.cs b/Filtration/ViewModels/SettingsWindowViewModel.cs new file mode 100644 index 0000000..0e4eb26 --- /dev/null +++ b/Filtration/ViewModels/SettingsWindowViewModel.cs @@ -0,0 +1,64 @@ +using System; +using System.IO; +using System.Windows; +using Filtration.Properties; +using Filtration.Services; +using GalaSoft.MvvmLight.CommandWpf; + +namespace Filtration.ViewModels +{ + internal interface ISettingsWindowViewModel + { + event EventHandler OnRequestClose; + } + + internal class SettingsWindowViewModel : FiltrationViewModelBase, ISettingsWindowViewModel + { + private readonly IItemFilterPersistenceService _itemFilterPersistenceService; + + public SettingsWindowViewModel(IItemFilterPersistenceService itemFilterPersistenceService) + { + _itemFilterPersistenceService = itemFilterPersistenceService; + CancelCommand = new RelayCommand(OnCancelCommand); + SaveCommand = new RelayCommand(OnSaveCommand); + + DefaultFilterDirectory = Settings.Default.DefaultFilterDirectory; + ExtraLineBetweenBlocks = Settings.Default.ExtraLineBetweenBlocks; + } + + public event EventHandler OnRequestClose; + + public RelayCommand CancelCommand { get; private set; } + public RelayCommand SaveCommand { get; private set; } + + public string DefaultFilterDirectory { get; set; } + public bool ExtraLineBetweenBlocks { get; set; } + + private void OnCancelCommand() + { + if (OnRequestClose != null) + { + OnRequestClose(this, new EventArgs()); + } + } + + private void OnSaveCommand() + { + try + { + _itemFilterPersistenceService.SetItemFilterScriptDirectory(DefaultFilterDirectory); + + Settings.Default.ExtraLineBetweenBlocks = ExtraLineBetweenBlocks; + if (OnRequestClose != null) + { + OnRequestClose(this, new EventArgs()); + } + } + catch (DirectoryNotFoundException e) + { + MessageBox.Show("The entered Default Filter Directory is invalid or does not exist.", "Error", + MessageBoxButton.OK, MessageBoxImage.Exclamation); + } + } + } +} diff --git a/Filtration/Views/AvalonDock/AvalonDockWorkspaceView.xaml b/Filtration/Views/AvalonDock/AvalonDockWorkspaceView.xaml index 01bfded..b10c34f 100644 --- a/Filtration/Views/AvalonDock/AvalonDockWorkspaceView.xaml +++ b/Filtration/Views/AvalonDock/AvalonDockWorkspaceView.xaml @@ -23,6 +23,9 @@ AllowMixedOrientation="True" DocumentsSource="{Binding OpenDocuments}" ActiveContent="{Binding ActiveDocument, Mode=TwoWay, Converter={StaticResource ActiveDocumentConverter}}" > + + + diff --git a/Filtration/Views/MainWindow.xaml b/Filtration/Views/MainWindow.xaml index 6abad05..8c883ab 100644 --- a/Filtration/Views/MainWindow.xaml +++ b/Filtration/Views/MainWindow.xaml @@ -33,6 +33,7 @@ + diff --git a/Filtration/Views/SettingsWindow.xaml b/Filtration/Views/SettingsWindow.xaml new file mode 100644 index 0000000..20687da --- /dev/null +++ b/Filtration/Views/SettingsWindow.xaml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + Default Filter Directory: + + Add blank line between blocks when saving + + + + + + + + + + + + + diff --git a/Filtration/Views/SettingsWindow.xaml.cs b/Filtration/Views/SettingsWindow.xaml.cs new file mode 100644 index 0000000..dc0ae01 --- /dev/null +++ b/Filtration/Views/SettingsWindow.xaml.cs @@ -0,0 +1,10 @@ +namespace Filtration.Views +{ + public partial class SettingsWindow + { + public SettingsWindow() + { + InitializeComponent(); + } + } +} diff --git a/Filtration/Views/ToolPanes/BlockGroupBrowserView.xaml b/Filtration/Views/ToolPanes/BlockGroupBrowserView.xaml index 1b5ccf1..2c3524c 100644 --- a/Filtration/Views/ToolPanes/BlockGroupBrowserView.xaml +++ b/Filtration/Views/ToolPanes/BlockGroupBrowserView.xaml @@ -26,19 +26,11 @@ - - - - - - diff --git a/Filtration/WindsorInstallers/ViewModelsInstaller.cs b/Filtration/WindsorInstallers/ViewModelsInstaller.cs index 966be9f..9059059 100644 --- a/Filtration/WindsorInstallers/ViewModelsInstaller.cs +++ b/Filtration/WindsorInstallers/ViewModelsInstaller.cs @@ -56,6 +56,11 @@ namespace Filtration.WindsorInstallers .ImplementedBy() .LifeStyle.Singleton); + container.Register( + Component.For() + .ImplementedBy() + .LifeStyle.Transient); + container.AddFacility(); container.Register( Component.For().AsFactory()); diff --git a/Filtration/packages.config b/Filtration/packages.config index 9cc9782..0236025 100644 --- a/Filtration/packages.config +++ b/Filtration/packages.config @@ -1,7 +1,6 @@  -