Index: Application/Application.Ringtoets/app.config =================================================================== diff -u -r48e5d632b4f0c1124a7e574430c6030a290105ce -rcefa4b33b2ee1f5073bc18d6b769ceaf7c727f66 --- Application/Application.Ringtoets/app.config (.../app.config) (revision 48e5d632b4f0c1124a7e574430c6030a290105ce) +++ Application/Application.Ringtoets/app.config (.../app.config) (revision cefa4b33b2ee1f5073bc18d6b769ceaf7c727f66) @@ -16,7 +16,6 @@ - Index: Core/Common/src/Core.Common.Base/ApplicationCore.cs =================================================================== diff -u -rf5f8af6de6466c42cba57df77748b5e848951490 -rcefa4b33b2ee1f5073bc18d6b769ceaf7c727f66 --- Core/Common/src/Core.Common.Base/ApplicationCore.cs (.../ApplicationCore.cs) (revision f5f8af6de6466c42cba57df77748b5e848951490) +++ Core/Common/src/Core.Common.Base/ApplicationCore.cs (.../ApplicationCore.cs) (revision cefa4b33b2ee1f5073bc18d6b769ceaf7c727f66) @@ -1,7 +1,6 @@ using System; using System.Collections.Generic; using System.Collections.Specialized; -using System.ComponentModel; using System.Configuration; using System.Linq; using Core.Common.Base.Workflow; @@ -15,16 +14,12 @@ private readonly ActivityRunner activityRunner; private readonly List plugins; - private bool userSettingsDirty; - private ApplicationSettingsBase userSettings; - public ApplicationCore() { plugins = new List(); activityRunner = new ActivityRunner(); Settings = ConfigurationManager.AppSettings; - UserSettings = Properties.Settings.Default; if (RunningActivityLogAppender.Instance != null) { @@ -48,30 +43,6 @@ } } - public ApplicationSettingsBase UserSettings - { - get - { - return userSettings; - } - set - { - if (userSettings != null) - { - userSettings.PropertyChanged -= UserSettingsPropertyChanged; - } - - userSettings = value; - - if (userSettings != null) - { - userSettings.PropertyChanged += UserSettingsPropertyChanged; - } - - userSettingsDirty = false; - } - } - public NameValueCollection Settings { get; set; } public IEnumerable FileImporters @@ -130,14 +101,6 @@ applicationPlugin.Deactivate(); } - public void Exit() - { - if (userSettingsDirty) - { - UserSettings.Save(); - } - } - public void Dispose() { foreach (var plugin in Plugins.ToList()) @@ -150,10 +113,5 @@ RunningActivityLogAppender.Instance.ActivityRunner = null; } } - - private void UserSettingsPropertyChanged(object sender, PropertyChangedEventArgs e) - { - userSettingsDirty = true; - } } } \ No newline at end of file Index: Core/Common/src/Core.Common.Base/Core.Common.Base.csproj =================================================================== diff -u -rf5f8af6de6466c42cba57df77748b5e848951490 -rcefa4b33b2ee1f5073bc18d6b769ceaf7c727f66 --- Core/Common/src/Core.Common.Base/Core.Common.Base.csproj (.../Core.Common.Base.csproj) (revision f5f8af6de6466c42cba57df77748b5e848951490) +++ Core/Common/src/Core.Common.Base/Core.Common.Base.csproj (.../Core.Common.Base.csproj) (revision cefa4b33b2ee1f5073bc18d6b769ceaf7c727f66) @@ -124,15 +124,6 @@ - - SettingsSingleFileGenerator - Settings.Designer.cs - - - True - True - Settings.settings - Fisheye: Tag cefa4b33b2ee1f5073bc18d6b769ceaf7c727f66 refers to a dead (removed) revision in file `Core/Common/src/Core.Common.Base/Properties/Settings.Designer.cs'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag cefa4b33b2ee1f5073bc18d6b769ceaf7c727f66 refers to a dead (removed) revision in file `Core/Common/src/Core.Common.Base/Properties/Settings.settings'. Fisheye: No comparison available. Pass `N' to diff? Index: Core/Common/src/Core.Common.Gui/Forms/MainWindow/MainWindow.xaml.cs =================================================================== diff -u -r1a47b9ae4db84a33676a0147fca0ec810e6320ef -rcefa4b33b2ee1f5073bc18d6b769ceaf7c727f66 --- Core/Common/src/Core.Common.Gui/Forms/MainWindow/MainWindow.xaml.cs (.../MainWindow.xaml.cs) (revision 1a47b9ae4db84a33676a0147fca0ec810e6320ef) +++ Core/Common/src/Core.Common.Gui/Forms/MainWindow/MainWindow.xaml.cs (.../MainWindow.xaml.cs) (revision cefa4b33b2ee1f5073bc18d6b769ceaf7c727f66) @@ -272,7 +272,7 @@ public void ShowStartPage(bool checkUseSettings = true) { - if (!checkUseSettings || Convert.ToBoolean((object) Gui.ApplicationCore.UserSettings["showStartPage"], CultureInfo.InvariantCulture)) + if (!checkUseSettings || Convert.ToBoolean((object) Gui.UserSettings["showStartPage"], CultureInfo.InvariantCulture)) { log.Info(Properties.Resources.MainWindow_ShowStartPage_Adding_welcome_page_); OpenStartPage(); @@ -947,7 +947,7 @@ { AddRecentlyOpenedProjectsToFileMenu(); - SetColorTheme((string) Gui.ApplicationCore.UserSettings["colorTheme"]); + SetColorTheme((string) Gui.UserSettings["colorTheme"]); FileManualButton.IsEnabled = File.Exists(ConfigurationManager.AppSettings["manualFileName"]); // TODO: Enable as soon as relevant/implemented @@ -1100,8 +1100,8 @@ { return new GeneralOptionsControl { - UserSettings = Gui.ApplicationCore.UserSettings, - ColorTheme = (string) Gui.ApplicationCore.UserSettings["colorTheme"], + UserSettings = Gui.UserSettings, + ColorTheme = (string) Gui.UserSettings["colorTheme"], OnAcceptChanges = ApplyColorTheme }; } @@ -1138,7 +1138,7 @@ DockingManager.Theme = new GenericTheme(); } - Gui.ApplicationCore.UserSettings["colorTheme"] = colorTheme; + Gui.UserSettings["colorTheme"] = colorTheme; } private void ButtonShowProperties_Click(object sender, RoutedEventArgs e) @@ -1215,7 +1215,7 @@ private void OpenStartPage() { - var welcomePageName = (string) Gui.ApplicationCore.UserSettings["startPageName"]; + var welcomePageName = (string) Gui.UserSettings["startPageName"]; var welcomePageUrl = Gui.ApplicationCore.Settings["startPageUrl"]; var url = new Url(welcomePageName, welcomePageUrl); Index: Core/Common/src/Core.Common.Gui/IGui.cs =================================================================== diff -u -ra0af742d946a15bead91b315b77086154f1ed15e -rcefa4b33b2ee1f5073bc18d6b769ceaf7c727f66 --- Core/Common/src/Core.Common.Gui/IGui.cs (.../IGui.cs) (revision a0af742d946a15bead91b315b77086154f1ed15e) +++ Core/Common/src/Core.Common.Gui/IGui.cs (.../IGui.cs) (revision cefa4b33b2ee1f5073bc18d6b769ceaf7c727f66) @@ -7,6 +7,7 @@ using System; using System.Collections.Generic; +using System.Configuration; using Core.Common.Base; using Core.Common.Gui.Forms.MainWindow; @@ -77,6 +78,11 @@ IList Plugins { get; } /// + /// Gets the user settings of the . + /// + ApplicationSettingsBase UserSettings { get; } + + /// /// Suspends view removal on item delete. Useful to avoid unnecessary checks (faster item removal). /// bool IsViewRemoveOnItemDeleteSuspended { get; set; } Index: Core/Common/src/Core.Common.Gui/RingtoetsGui.cs =================================================================== diff -u -ra0af742d946a15bead91b315b77086154f1ed15e -rcefa4b33b2ee1f5073bc18d6b769ceaf7c727f66 --- Core/Common/src/Core.Common.Gui/RingtoetsGui.cs (.../RingtoetsGui.cs) (revision a0af742d946a15bead91b315b77086154f1ed15e) +++ Core/Common/src/Core.Common.Gui/RingtoetsGui.cs (.../RingtoetsGui.cs) (revision cefa4b33b2ee1f5073bc18d6b769ceaf7c727f66) @@ -7,13 +7,15 @@ using System.Diagnostics; using System.Linq; using System.Reflection; +using System.Windows.Forms; using Core.Common.Base; using Core.Common.Base.Workflow; using Core.Common.Controls; using Core.Common.Controls.Swf; using Core.Common.Gui.Forms.MainWindow; using Core.Common.Gui.Forms.MessageWindow; using Core.Common.Gui.Forms.ProgressDialog; +using Core.Common.Gui.Forms.SplashScreen; using Core.Common.Gui.Forms.ViewManager; using Core.Common.Gui.Properties; using Core.Common.Utils; @@ -24,8 +26,6 @@ using log4net; using log4net.Appender; using log4net.Repository.Hierarchy; -using MainWindow = Core.Common.Gui.Forms.MainWindow.MainWindow; -using SplashScreen = Core.Common.Gui.Forms.SplashScreen.SplashScreen; namespace Core.Common.Gui { @@ -35,11 +35,16 @@ public class RingtoetsGui : IGui, IDisposable { public event EventHandler SelectionChanged; // TODO: make it weak + + public event Action ProjectOpened; + public event Action ProjectClosing; private static readonly ILog log = LogManager.GetLogger(typeof(RingtoetsGui)); private static RingtoetsGui instance; private static string instanceCreationStackTrace; + private readonly IList commands = new List(); + private ApplicationCore applicationCore; private MainWindow mainWindow; @@ -49,8 +54,6 @@ private ViewList toolWindowViews; private AvalonDockDockingManager toolWindowViewsDockingManager; - private readonly IList commands = new List(); - private SplashScreen splashScreen; private ProgressDialog progressDialog; @@ -59,16 +62,16 @@ private bool isExiting; private Project project; - public event Action ProjectOpened; - public event Action ProjectClosing; + private bool userSettingsDirty; + private ApplicationSettingsBase userSettings; public RingtoetsGui() { // error detection code, make sure we use only a single instance of RingtoetsGui at a time if (instance != null) { instance = null; // reset to that the consequent creations won't fail. - throw new InvalidOperationException(Resources.RingtoetsGui_Only_a_single_instance_of_Ringtoets_is_allowed_at_the_same_time_per_process_Make_sure_that_the_previous_instance_was_disposed_correctly_stack_trace+ instanceCreationStackTrace); + throw new InvalidOperationException(Resources.RingtoetsGui_Only_a_single_instance_of_Ringtoets_is_allowed_at_the_same_time_per_process_Make_sure_that_the_previous_instance_was_disposed_correctly_stack_trace + instanceCreationStackTrace); } instance = this; @@ -78,23 +81,24 @@ Plugins = new List(); ApplicationCore = new ApplicationCore(); - applicationCore.UserSettings = Settings.Default; + UserSettings = Settings.Default; + applicationCore.Settings = ConfigurationManager.AppSettings; CommandHandler = new GuiCommandHandler(this); - System.Windows.Forms.Application.EnableVisualStyles(); + Application.EnableVisualStyles(); ProjectClosing += ApplicationProjectClosing; ProjectOpened += ApplicationProjectOpened; } - public string ProjectFilePath { get; set; } - public bool SkipDialogsOnExit { get; set; } public Action OnMainWindowLoaded { get; set; } + public string ProjectFilePath { get; set; } + public ApplicationCore ApplicationCore { get @@ -237,6 +241,30 @@ public IList Plugins { get; private set; } + public ApplicationSettingsBase UserSettings + { + get + { + return userSettings; + } + private set + { + if (userSettings != null) + { + userSettings.PropertyChanged -= UserSettingsPropertyChanged; + } + + userSettings = value; + + if (userSettings != null) + { + userSettings.PropertyChanged += UserSettingsPropertyChanged; + } + + userSettingsDirty = false; + } + } + public bool IsViewRemoveOnItemDeleteSuspended { get; set; } public void Dispose() @@ -308,8 +336,13 @@ mainWindow.SaveLayout(); // save before ApplicationCore.Exit - ApplicationCore.Exit(); + if (userSettingsDirty) + { + UserSettings.Save(); + } + UserSettings = null; + // close faster (hide main window) mainWindow.Visible = false; @@ -362,7 +395,7 @@ ApplicationCore.ActivityRunner.CancelAll(); while (ApplicationCore.ActivityRunner.IsRunning) { - System.Windows.Forms.Application.DoEvents(); + Application.DoEvents(); } } } @@ -442,7 +475,7 @@ } } - System.Windows.Forms.Application.ApplicationExit -= HandleApplicationExit; + Application.ApplicationExit -= HandleApplicationExit; // prevent nasty Windows.Forms memory leak (keeps references to databinding objects / controls var systemAssembly = typeof(Component).Assembly; @@ -514,6 +547,11 @@ instance = null; } + private void UserSettingsPropertyChanged(object sender, PropertyChangedEventArgs e) + { + userSettingsDirty = true; + } + private void DeactivatePlugin(GuiPlugin plugin) { try @@ -591,7 +629,7 @@ // wait until all import activities are finished while (ApplicationCore.ActivityRunner.IsRunning) { - System.Windows.Forms.Application.DoEvents(); + Application.DoEvents(); } }; progressDialog.Data = ApplicationCore.ActivityRunner.Activities; @@ -671,7 +709,7 @@ InitializeMenusAndToolbars(); - System.Windows.Forms.Application.ApplicationExit += HandleApplicationExit; + Application.ApplicationExit += HandleApplicationExit; CopyDefaultViewsFromUserSettings(); @@ -695,7 +733,7 @@ private void ShowSplashScreen() { - splashScreen = new SplashScreen() + splashScreen = new SplashScreen { VersionText = SettingsHelper.ApplicationVersion, CopyrightText = ApplicationCore.Settings["copyright"], @@ -718,7 +756,7 @@ } }; - object showSplashScreen = ApplicationCore.UserSettings["showSplashScreen"]; + object showSplashScreen = UserSettings["showSplashScreen"]; if (showSplashScreen != null && bool.Parse(showSplashScreen.ToString())) { splashScreen.Show(); @@ -984,10 +1022,10 @@ { StringCollection defaultViews; StringCollection defaultViewDataTypes; - if (ApplicationCore.UserSettings["defaultViews"] != null) + if (UserSettings["defaultViews"] != null) { - defaultViews = (StringCollection) ApplicationCore.UserSettings["defaultViews"]; - defaultViewDataTypes = (StringCollection) ApplicationCore.UserSettings["defaultViewDataTypes"]; + defaultViews = (StringCollection) UserSettings["defaultViews"]; + defaultViewDataTypes = (StringCollection) UserSettings["defaultViewDataTypes"]; } else { @@ -1020,8 +1058,8 @@ defaultViewDataTypes.Add(objectType.ToString()); } - ApplicationCore.UserSettings["defaultViews"] = defaultViews; - ApplicationCore.UserSettings["defaultViewDataTypes"] = defaultViewDataTypes; + UserSettings["defaultViews"] = defaultViews; + UserSettings["defaultViewDataTypes"] = defaultViewDataTypes; } ~RingtoetsGui() Index: Core/Common/test/Core.Common.Integration.Tests/Ringtoets/Application.Ringtoets/RingtoetsGuiIntegrationTest.cs =================================================================== diff -u -r1a47b9ae4db84a33676a0147fca0ec810e6320ef -rcefa4b33b2ee1f5073bc18d6b769ceaf7c727f66 --- Core/Common/test/Core.Common.Integration.Tests/Ringtoets/Application.Ringtoets/RingtoetsGuiIntegrationTest.cs (.../RingtoetsGuiIntegrationTest.cs) (revision 1a47b9ae4db84a33676a0147fca0ec810e6320ef) +++ Core/Common/test/Core.Common.Integration.Tests/Ringtoets/Application.Ringtoets/RingtoetsGuiIntegrationTest.cs (.../RingtoetsGuiIntegrationTest.cs) (revision cefa4b33b2ee1f5073bc18d6b769ceaf7c727f66) @@ -163,7 +163,7 @@ gui.Run(); - applicationCore.UserSettings["autosaveWindowLayout"] = false; // skip damagin of window layout + gui.UserSettings["autosaveWindowLayout"] = false; // skip damagin of window layout gui.MainWindow.Show(); Index: Core/Plugins/src/Core.Plugins.ProjectExplorer/ProjectExplorerGuiPlugin.cs =================================================================== diff -u -r74cd6b0f11758d33e1cb86f971dbc0ab59d89221 -rcefa4b33b2ee1f5073bc18d6b769ceaf7c727f66 --- Core/Plugins/src/Core.Plugins.ProjectExplorer/ProjectExplorerGuiPlugin.cs (.../ProjectExplorerGuiPlugin.cs) (revision 74cd6b0f11758d33e1cb86f971dbc0ab59d89221) +++ Core/Plugins/src/Core.Plugins.ProjectExplorer/ProjectExplorerGuiPlugin.cs (.../ProjectExplorerGuiPlugin.cs) (revision cefa4b33b2ee1f5073bc18d6b769ceaf7c727f66) @@ -42,9 +42,6 @@ UpdateProjectTreeViewWithRegisteredNodePresenters(); - // todo redesign user settings to expand settings per plugin - //var isSorted = Gui.ApplicationCore.Settings["IsProjectExplorerSorted"]; - //projectExplorer.ProjectTreeView.IsSorted = (isSorted == null || bool.Parse(isSorted)); ProjectExplorer.ProjectTreeView.Project = Gui.Project; ProjectExplorer.Text = Properties.Resources.ProjectExplorerPluginGui_InitializeProjectTreeView_Project_Explorer; } Index: Core/Plugins/test/Core.Plugins.ProjectExplorer.Tests/ProjectExplorerPluginGuiTest.cs =================================================================== diff -u -rd121feba5299c86d7ac04a366ee869b163e43ec7 -rcefa4b33b2ee1f5073bc18d6b769ceaf7c727f66 --- Core/Plugins/test/Core.Plugins.ProjectExplorer.Tests/ProjectExplorerPluginGuiTest.cs (.../ProjectExplorerPluginGuiTest.cs) (revision d121feba5299c86d7ac04a366ee869b163e43ec7) +++ Core/Plugins/test/Core.Plugins.ProjectExplorer.Tests/ProjectExplorerPluginGuiTest.cs (.../ProjectExplorerPluginGuiTest.cs) (revision cefa4b33b2ee1f5073bc18d6b769ceaf7c727f66) @@ -35,6 +35,7 @@ settings["showHiddenDataItems"] = true; + Expect.Call(gui.UserSettings).Return(settings); Expect.Call(gui.ToolWindowViews).Return(mocks.Stub()); Expect.Call(gui.DocumentViews).Return(mocks.Stub()); Expect.Call(gui.Plugins).Return(new List @@ -53,11 +54,7 @@ mocks.ReplayAll(); - applicationCore = new ApplicationCore - { - UserSettings = settings, - Settings = new NameValueCollection { { "IsProjectExplorerSorted", "false" } } - }; + applicationCore = new ApplicationCore(); applicationCore.AddPlugin(plugin); Index: Core/Plugins/test/Core.Plugins.ProjectExplorer.Tests/ProjectTreeViewTest.cs =================================================================== diff -u -r48fe36c87dd40ff715adf4c0cf393f7390e6c993 -rcefa4b33b2ee1f5073bc18d6b769ceaf7c727f66 --- Core/Plugins/test/Core.Plugins.ProjectExplorer.Tests/ProjectTreeViewTest.cs (.../ProjectTreeViewTest.cs) (revision 48fe36c87dd40ff715adf4c0cf393f7390e6c993) +++ Core/Plugins/test/Core.Plugins.ProjectExplorer.Tests/ProjectTreeViewTest.cs (.../ProjectTreeViewTest.cs) (revision cefa4b33b2ee1f5073bc18d6b769ceaf7c727f66) @@ -17,11 +17,12 @@ var documentViews = mocks.Stub(); var settings = mocks.Stub(); + Expect.Call(gui.UserSettings).Return(settings).Repeat.Any(); Expect.Call(gui.DocumentViews).Return(documentViews).Repeat.Any(); mocks.ReplayAll(); - var applicationCore = new ApplicationCore { UserSettings = settings }; + var applicationCore = new ApplicationCore(); gui.ApplicationCore = applicationCore;