From af3c2e2d765db3037d5171557791588f9d3100df Mon Sep 17 00:00:00 2001 From: Matt Ward Date: Tue, 21 Feb 2006 18:28:32 +0000 Subject: [PATCH] SD2-693 - ToolstripContainer designer loading problem. Applied Christian Hornung's patch that adds a Deselecting event handler for the IBaseViewContent interface, which is called before the view has been deselected, allowing the forms designer to read the correct ToolStripPanelVisible properties before the designed form is hidden. git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/branches/2.0@1172 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61 --- .../Project/Src/DesignerViewContent.cs | 6 +-- .../Src/Gui/AbstractBaseViewContent.cs | 4 ++ .../Base/Project/Src/Gui/IBaseViewContent.cs | 6 +++ .../Workbench/Layouts/SdiWorkspaceWindow.cs | 46 ++++++++++++------- 4 files changed, 42 insertions(+), 20 deletions(-) diff --git a/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerViewContent.cs b/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerViewContent.cs index e89daaecb0..1292f5c7c7 100644 --- a/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerViewContent.cs +++ b/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerViewContent.cs @@ -347,17 +347,17 @@ namespace ICSharpCode.FormsDesigner { disposing = true; if (IsFormsDesignerVisible) { - Deselected(); + Deselecting(); } base.Dispose(); } - public override void Deselected() + public override void Deselecting() { // can happen if form designer is disposed and then deselected if (!IsFormsDesignerVisible) return; - LoggingService.Info("Deselected form designer, unloading..." + viewContent.TitleName); + LoggingService.Info("Deselecting form designer, unloading..." + viewContent.TitleName); PropertyPad.PropertyValueChanged -= PropertyValueChanged; propertyContainer.Clear(); IsFormsDesignerVisible = false; diff --git a/src/Main/Base/Project/Src/Gui/AbstractBaseViewContent.cs b/src/Main/Base/Project/Src/Gui/AbstractBaseViewContent.cs index de368d1cf5..45af29e452 100644 --- a/src/Main/Base/Project/Src/Gui/AbstractBaseViewContent.cs +++ b/src/Main/Base/Project/Src/Gui/AbstractBaseViewContent.cs @@ -55,6 +55,10 @@ namespace ICSharpCode.SharpDevelop.Gui public virtual void Deselected() { } + + public virtual void Deselecting() + { + } public virtual void RedrawContent() { diff --git a/src/Main/Base/Project/Src/Gui/IBaseViewContent.cs b/src/Main/Base/Project/Src/Gui/IBaseViewContent.cs index 5d471b5430..ae20de4306 100644 --- a/src/Main/Base/Project/Src/Gui/IBaseViewContent.cs +++ b/src/Main/Base/Project/Src/Gui/IBaseViewContent.cs @@ -50,6 +50,12 @@ namespace ICSharpCode.SharpDevelop.Gui /// tab. NOT when the windows is selected. /// void Selected(); + + /// + /// Is called just before the view content is deselected inside the window + /// tab before the other window is selected. NOT when the windows is deselected. + /// + void Deselecting(); /// /// Is called when the view content is deselected inside the window diff --git a/src/Main/Base/Project/Src/Gui/Workbench/Layouts/SdiWorkspaceWindow.cs b/src/Main/Base/Project/Src/Gui/Workbench/Layouts/SdiWorkspaceWindow.cs index 45bcf34bb0..0a508fbba3 100644 --- a/src/Main/Base/Project/Src/Gui/Workbench/Layouts/SdiWorkspaceWindow.cs +++ b/src/Main/Base/Project/Src/Gui/Workbench/Layouts/SdiWorkspaceWindow.cs @@ -136,7 +136,9 @@ namespace ICSharpCode.SharpDevelop.Gui viewTabControl = new TabControl(); viewTabControl.Alignment = TabAlignment.Bottom; viewTabControl.Dock = DockStyle.Fill; - viewTabControl.SelectedIndexChanged += new EventHandler(viewTabControlIndexChanged); + viewTabControl.Selected += viewTabControlSelected; + viewTabControl.Deselecting += viewTabControlDeselecting; + viewTabControl.Deselected += viewTabControlDeselected; } internal void InitControls() @@ -200,11 +202,6 @@ namespace ICSharpCode.SharpDevelop.Gui WorkbenchSingleton.SafeThreadAsyncCall(new MethodInvoker(this.RefreshSecondaryViewContents)); } - void LeaveTabPage(object sender, EventArgs e) - { - OnWindowDeselected(EventArgs.Empty); - } - public IViewContent ViewContent { get { return content; @@ -260,6 +257,9 @@ namespace ICSharpCode.SharpDevelop.Gui if (viewTabControl != null) { foreach (TabPage page in viewTabControl.TabPages) { + if (viewTabControl.SelectedTab == page && page.Tag is IBaseViewContent) { + ((IBaseViewContent)page.Tag).Deselecting(); + } page.Controls.Clear(); if (viewTabControl.SelectedTab == page && page.Tag is IBaseViewContent) { ((IBaseViewContent)page.Tag).Deselected(); @@ -319,28 +319,40 @@ namespace ICSharpCode.SharpDevelop.Gui return content.SecondaryViewContents[index - 1]; } - int oldIndex = 0; - void viewTabControlIndexChanged(object sender, EventArgs e) + void viewTabControlSelected(object sender, TabControlEventArgs e) { - if (oldIndex >= 0) { - IBaseViewContent secondaryViewContent = GetSubViewContent(oldIndex); + if (e.Action == TabControlAction.Selected && e.TabPageIndex >= 0) { + IBaseViewContent secondaryViewContent = GetSubViewContent(e.TabPageIndex); if (secondaryViewContent != null) { secondaryViewContent.Deselected(); - } - } - - if (viewTabControl.SelectedIndex >= 0) { - IBaseViewContent secondaryViewContent = GetSubViewContent(viewTabControl.SelectedIndex); - if (secondaryViewContent != null) { secondaryViewContent.SwitchedTo(); secondaryViewContent.Selected(); } } - oldIndex = viewTabControl.SelectedIndex; WorkbenchSingleton.Workbench.WorkbenchLayout.OnActiveWorkbenchWindowChanged(EventArgs.Empty); ActiveViewContent.Control.Focus(); } + void viewTabControlDeselecting(object sender, TabControlCancelEventArgs e) + { + if (e.Action == TabControlAction.Deselecting && e.TabPageIndex >= 0) { + IBaseViewContent secondaryViewContent = GetSubViewContent(e.TabPageIndex); + if (secondaryViewContent != null) { + secondaryViewContent.Deselecting(); + } + } + } + + void viewTabControlDeselected(object sender, TabControlEventArgs e) + { + if (e.Action == TabControlAction.Deselected && e.TabPageIndex >= 0) { + IBaseViewContent secondaryViewContent = GetSubViewContent(e.TabPageIndex); + if (secondaryViewContent != null) { + secondaryViewContent.Deselected(); + } + } + } + public virtual void RedrawContent() { if (viewTabControl != null) {