diff --git a/Filtration/App.xaml.cs b/Filtration/App.xaml.cs index 87ea227..4be2f28 100644 --- a/Filtration/App.xaml.cs +++ b/Filtration/App.xaml.cs @@ -17,7 +17,7 @@ using NLog; namespace Filtration { - public partial class App + public partial class App : Application { private IWindsorContainer _container; private static readonly Logger _logger = LogManager.GetCurrentClassLogger(); diff --git a/Filtration/ViewModels/ItemFilterScriptViewModel.cs b/Filtration/ViewModels/ItemFilterScriptViewModel.cs index 4990bb4..b6b49cc 100644 --- a/Filtration/ViewModels/ItemFilterScriptViewModel.cs +++ b/Filtration/ViewModels/ItemFilterScriptViewModel.cs @@ -490,7 +490,7 @@ namespace Filtration.ViewModels else { var result = _messageBoxService.Show("Filtration", - "Want to save your changes to this script?", MessageBoxButton.YesNoCancel, MessageBoxImage.Question); + "Save script \"" + Filename + "\"?", MessageBoxButton.YesNoCancel, MessageBoxImage.Question); switch (result) { diff --git a/Filtration/ViewModels/MainWindowViewModel.cs b/Filtration/ViewModels/MainWindowViewModel.cs index dde7dc0..b2f7648 100644 --- a/Filtration/ViewModels/MainWindowViewModel.cs +++ b/Filtration/ViewModels/MainWindowViewModel.cs @@ -1,6 +1,7 @@ using System; using System.Diagnostics; using System.IO; +using System.Linq; using System.Reflection; using System.Windows; using System.Windows.Forms; @@ -33,6 +34,7 @@ namespace Filtration.ViewModels { RelayCommand OpenScriptCommand { get; } RelayCommand NewScriptCommand { get; } + bool CloseAllDocuments(); } internal class MainWindowViewModel : FiltrationViewModelBase, IMainWindowViewModel @@ -626,5 +628,22 @@ namespace Filtration.ViewModels _avalonDockWorkspaceViewModel.ActiveThemeViewModel.DeleteThemeComponentCommand.Execute( _avalonDockWorkspaceViewModel.ActiveThemeViewModel.SelectedThemeComponent); } + + public bool CloseAllDocuments() + { + var openDocuments = _avalonDockWorkspaceViewModel.OpenDocuments.OfType().ToList(); + + foreach (var document in openDocuments) + { + var docCount = _avalonDockWorkspaceViewModel.OpenDocuments.OfType().Count(); + document.Close(); + if (_avalonDockWorkspaceViewModel.OpenDocuments.OfType().Count() == docCount) + { + return false; + } + } + + return true; + } } } diff --git a/Filtration/Views/MainWindow.xaml b/Filtration/Views/MainWindow.xaml index 237c2de..0bb1344 100644 --- a/Filtration/Views/MainWindow.xaml +++ b/Filtration/Views/MainWindow.xaml @@ -10,7 +10,8 @@ xmlns:views="clr-namespace:Filtration.Views" mc:Ignorable="d" d:DataContext="{d:DesignInstance Type=viewModels:MainWindowViewModel}" - Title="{Binding WindowTitle}" Height="762" Width="1126" IsIconVisible="True" > + Title="{Binding WindowTitle}" Height="762" Width="1126" IsIconVisible="True" + Closing="MainWindow_OnClosing"> diff --git a/Filtration/Views/MainWindow.xaml.cs b/Filtration/Views/MainWindow.xaml.cs index 1b33e7f..0109b31 100644 --- a/Filtration/Views/MainWindow.xaml.cs +++ b/Filtration/Views/MainWindow.xaml.cs @@ -1,4 +1,7 @@ -using System.Windows; +using System; +using System.ComponentModel; +using System.Windows; +using Filtration.Annotations; using Filtration.ViewModels; namespace Filtration.Views @@ -10,8 +13,11 @@ namespace Filtration.Views internal partial class MainWindow : IMainWindow { + private IMainWindowViewModel _mainWindowViewModel; + public MainWindow(IMainWindowViewModel mainWindowViewModel) { + _mainWindowViewModel = mainWindowViewModel; InitializeComponent(); DataContext = mainWindowViewModel; } @@ -31,5 +37,15 @@ namespace Filtration.Views RibbonRoot.SelectedTabItem = ThemeToolsTabItem; } } + + private void MainWindow_OnClosing(object sender, CancelEventArgs e) + { + var allDocumentsClosed = _mainWindowViewModel.CloseAllDocuments(); + + if (!allDocumentsClosed) + { + e.Cancel = true; + } + } } }