Index: Core/Common/src/Core.Common.Gui/GuiCore.cs =================================================================== diff -u -r77c0ac1bef69ef7d39d3c05673a015f692b2f71b -r219cfb0a4817b990ca5e7a63b8670effe61669f7 --- Core/Common/src/Core.Common.Gui/GuiCore.cs (.../GuiCore.cs) (revision 77c0ac1bef69ef7d39d3c05673a015f692b2f71b) +++ Core/Common/src/Core.Common.Gui/GuiCore.cs (.../GuiCore.cs) (revision 219cfb0a4817b990ca5e7a63b8670effe61669f7) @@ -125,6 +125,7 @@ ViewPropertyEditor.ViewCommands = ViewCommands; ProjectOpened += ApplicationProjectOpened; + BeforeProjectOpened += ApplicationBeforeProjectOpened; projectObserver = new Observer(UpdateTitle); Project = projectFactory.CreateNewProject(); @@ -378,11 +379,15 @@ mainWindow.ValidateItems(); } - ViewCommands.RemoveAllViewsForItem(project); - projectObserver.Observable = project; + projectObserver.Observable = newProject; UpdateTitle(); } + private void ApplicationBeforeProjectOpened(IProject oldProject) + { + ViewCommands.RemoveAllViewsForItem(project); + } + private static void ConfigureLogging() { // configure logging @@ -585,6 +590,7 @@ #region Implementation: IProjectOwner private IProject project; + public event Action BeforeProjectOpened; public event Action ProjectOpened; public string ProjectFilePath { get; private set; } @@ -604,12 +610,21 @@ if (!ReferenceEquals(project, value)) { + OnBeforeProjectOpened(); project = value; OnProjectOpened(); } } } + private void OnBeforeProjectOpened() + { + if (BeforeProjectOpened != null) + { + BeforeProjectOpened(project); + } + } + private void OnProjectOpened() { if (ProjectOpened != null) Index: Core/Common/src/Core.Common.Gui/IProjectOwner.cs =================================================================== diff -u -r0be8a14b7c545ae5a07d1da6a0fa70829323b0f2 -r219cfb0a4817b990ca5e7a63b8670effe61669f7 --- Core/Common/src/Core.Common.Gui/IProjectOwner.cs (.../IProjectOwner.cs) (revision 0be8a14b7c545ae5a07d1da6a0fa70829323b0f2) +++ Core/Common/src/Core.Common.Gui/IProjectOwner.cs (.../IProjectOwner.cs) (revision 219cfb0a4817b990ca5e7a63b8670effe61669f7) @@ -30,8 +30,13 @@ public interface IProjectOwner { /// - /// Occurs when a new instance is available at . + /// Occurs just before a new instance is available at . /// + event Action BeforeProjectOpened; + + /// + /// Occurs when a new instance is available at . + /// event Action ProjectOpened; /// Index: Core/Common/test/Core.Common.Gui.Test/GuiCoreTest.cs =================================================================== diff -u -r0be8a14b7c545ae5a07d1da6a0fa70829323b0f2 -r219cfb0a4817b990ca5e7a63b8670effe61669f7 --- Core/Common/test/Core.Common.Gui.Test/GuiCoreTest.cs (.../GuiCoreTest.cs) (revision 0be8a14b7c545ae5a07d1da6a0fa70829323b0f2) +++ Core/Common/test/Core.Common.Gui.Test/GuiCoreTest.cs (.../GuiCoreTest.cs) (revision 219cfb0a4817b990ca5e7a63b8670effe61669f7) @@ -1000,27 +1000,33 @@ // Setup var mocks = new MockRepository(); var storeProject = mocks.Stub(); - var projectFactory = CreateProjectFactory(mocks); - var oldProjectMock = mocks.Stub(); - var newProjectMock = mocks.Stub(); + var oldProject = mocks.Stub(); + var newProject = mocks.Stub(); + var projectFactory = mocks.Stub(); + projectFactory.Stub(pf => pf.CreateNewProject()).Return(oldProject); mocks.ReplayAll(); using (var gui = new GuiCore(new MainWindow(), storeProject, projectFactory, new GuiCoreSettings())) { - gui.SetProject(oldProjectMock, null); - int openedCallCount = 0; + int beforeOpenCallCount = 0; + gui.BeforeProjectOpened += project => + { + Assert.AreSame(oldProject, project); + beforeOpenCallCount++; + }; gui.ProjectOpened += project => { - Assert.AreSame(newProjectMock, project); + Assert.AreSame(newProject, project); openedCallCount++; }; // Call - gui.SetProject(newProjectMock, null); + gui.SetProject(newProject, null); // Assert Assert.AreEqual(1, openedCallCount); + Assert.AreEqual(1, beforeOpenCallCount); } mocks.VerifyAll(); }