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 @@
-