From 606cb75ed5b4e8970ca29e191c3a192c261b6c29 Mon Sep 17 00:00:00 2001 From: Daniel Grunwald Date: Fri, 8 Aug 2008 17:16:52 +0000 Subject: [PATCH] Implemented Active*ContentChanged events. git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/branches/3.0wpf@3322 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61 --- .../Project/FSharpBinding.fsproj | 2 +- .../Project/Src/FormKeyHandler.cs | 6 +- .../Src/InsertPInvokeSignaturesCommand.cs | 4 +- .../Project/Src/Gui/AbstractPadContent.cs | 11 +++ .../Base/Project/Src/Gui/IWorkbenchLayout.cs | 8 +- .../Src/Gui/Workbench/DefaultWorkbench.cs | 4 +- .../Gui/Workbench/Layouts/AvalonDockLayout.cs | 11 ++- .../Project/Src/Gui/Workbench/WpfWorkbench.cs | 86 ++++++++++++++++--- 8 files changed, 105 insertions(+), 27 deletions(-) diff --git a/src/AddIns/BackendBindings/FSharp/FSharpBinding/Project/FSharpBinding.fsproj b/src/AddIns/BackendBindings/FSharp/FSharpBinding/Project/FSharpBinding.fsproj index fb8a62eaf9..bf7bdc848b 100644 --- a/src/AddIns/BackendBindings/FSharp/FSharpBinding/Project/FSharpBinding.fsproj +++ b/src/AddIns/BackendBindings/FSharp/FSharpBinding/Project/FSharpBinding.fsproj @@ -28,7 +28,7 @@ ..\..\RequiredLibraries\FSharp.Build.Tasks.dll - ..\..\..\..\..\..\..\3.0\SharpDevelop\src\Libraries\log4net\log4net.dll + ..\..\..\..\..\Libraries\log4net\log4net.dll False diff --git a/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/FormKeyHandler.cs b/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/FormKeyHandler.cs index a358b1242a..8a4bf520fb 100644 --- a/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/FormKeyHandler.cs +++ b/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/FormKeyHandler.cs @@ -70,11 +70,7 @@ namespace ICSharpCode.FormsDesigner return false; } - if (WorkbenchSingleton.Workbench.ActiveWorkbenchWindow == null) { - return false; - } - - FormsDesignerViewContent formDesigner = WorkbenchSingleton.Workbench.ActiveWorkbenchWindow.ActiveViewContent as FormsDesignerViewContent; + FormsDesignerViewContent formDesigner = WorkbenchSingleton.Workbench.ActiveContent as FormsDesignerViewContent; if (formDesigner == null || formDesigner.Host == null) { return false; diff --git a/src/AddIns/Misc/PInvokeAddIn/Project/Src/InsertPInvokeSignaturesCommand.cs b/src/AddIns/Misc/PInvokeAddIn/Project/Src/InsertPInvokeSignaturesCommand.cs index cdf9b5d841..1658d20d37 100644 --- a/src/AddIns/Misc/PInvokeAddIn/Project/Src/InsertPInvokeSignaturesCommand.cs +++ b/src/AddIns/Misc/PInvokeAddIn/Project/Src/InsertPInvokeSignaturesCommand.cs @@ -16,7 +16,7 @@ namespace ICSharpCode.PInvokeAddIn /// insert one or more of them into the code. /// public class InsertPInvokeSignaturesCommand : AbstractMenuCommand - { + { /// /// Starts the command. /// @@ -24,7 +24,7 @@ namespace ICSharpCode.PInvokeAddIn { // Show PInvoke dialog. using(InsertPInvokeSignaturesForm form = new InsertPInvokeSignaturesForm()) { - form.ShowDialog(WorkbenchSingleton.MainWin32Window); + form.ShowDialog(WorkbenchSingleton.MainWin32Window); } } } diff --git a/src/Main/Base/Project/Src/Gui/AbstractPadContent.cs b/src/Main/Base/Project/Src/Gui/AbstractPadContent.cs index cf1c99c135..afab525ea8 100644 --- a/src/Main/Base/Project/Src/Gui/AbstractPadContent.cs +++ b/src/Main/Base/Project/Src/Gui/AbstractPadContent.cs @@ -23,5 +23,16 @@ namespace ICSharpCode.SharpDevelop.Gui public virtual void Dispose() { } + + protected bool IsVisible { + get { + if (WorkbenchSingleton.Workbench == null || WorkbenchSingleton.Workbench.WorkbenchLayout == null) + return false; + PadDescriptor d = WorkbenchSingleton.Workbench.GetPad(GetType()); + if (d == null) + return false; + return WorkbenchSingleton.Workbench.WorkbenchLayout.IsVisible(d); + } + } } } diff --git a/src/Main/Base/Project/Src/Gui/IWorkbenchLayout.cs b/src/Main/Base/Project/Src/Gui/IWorkbenchLayout.cs index 40e3b8334a..d5a1cab0e1 100644 --- a/src/Main/Base/Project/Src/Gui/IWorkbenchLayout.cs +++ b/src/Main/Base/Project/Src/Gui/IWorkbenchLayout.cs @@ -32,6 +32,8 @@ namespace ICSharpCode.SharpDevelop.Gui get; } + event EventHandler ActiveContentChanged; + /// /// Attaches this layout manager to a workbench object. /// @@ -82,11 +84,5 @@ namespace ICSharpCode.SharpDevelop.Gui void LoadConfiguration(); void StoreConfiguration(); - - /// - /// Is called, when the workbench window which the user has into - /// the foreground (e.g. editable) changed to a new one. - /// - event EventHandler ActiveWorkbenchWindowChanged; } } diff --git a/src/Main/Base/Project/Src/Gui/Workbench/DefaultWorkbench.cs b/src/Main/Base/Project/Src/Gui/Workbench/DefaultWorkbench.cs index c4b987cec0..8886c6262d 100644 --- a/src/Main/Base/Project/Src/Gui/Workbench/DefaultWorkbench.cs +++ b/src/Main/Base/Project/Src/Gui/Workbench/DefaultWorkbench.cs @@ -94,12 +94,12 @@ namespace ICSharpCode.SharpDevelop.Gui } set { if (layout != null) { - layout.ActiveWorkbenchWindowChanged -= OnActiveWindowChanged; + layout.ActiveContentChanged -= OnActiveWindowChanged; layout.Detach(); } value.Attach(this); layout = value; - layout.ActiveWorkbenchWindowChanged += OnActiveWindowChanged; + layout.ActiveContentChanged += OnActiveWindowChanged; OnActiveWindowChanged(null, null); } } diff --git a/src/Main/Base/Project/Src/Gui/Workbench/Layouts/AvalonDockLayout.cs b/src/Main/Base/Project/Src/Gui/Workbench/Layouts/AvalonDockLayout.cs index 6a91590705..86fa427b84 100644 --- a/src/Main/Base/Project/Src/Gui/Workbench/Layouts/AvalonDockLayout.cs +++ b/src/Main/Base/Project/Src/Gui/Workbench/Layouts/AvalonDockLayout.cs @@ -38,9 +38,18 @@ namespace ICSharpCode.SharpDevelop.Gui public AvalonDockLayout() { dockingManager.Content = documentPane; + dockingManager.PropertyChanged += dockingManager_PropertyChanged; } - public event EventHandler ActiveWorkbenchWindowChanged; + void dockingManager_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e) + { + if (e.PropertyName == "ActiveContent") { + if (ActiveContentChanged != null) + ActiveContentChanged(this, e); + } + } + + public event EventHandler ActiveContentChanged; public IWorkbenchWindow ActiveWorkbenchWindow { get { diff --git a/src/Main/Base/Project/Src/Gui/Workbench/WpfWorkbench.cs b/src/Main/Base/Project/Src/Gui/Workbench/WpfWorkbench.cs index 14bc624267..4b596455e7 100644 --- a/src/Main/Base/Project/Src/Gui/Workbench/WpfWorkbench.cs +++ b/src/Main/Base/Project/Src/Gui/Workbench/WpfWorkbench.cs @@ -9,6 +9,7 @@ using ICSharpCode.Core.Presentation; using System; using System.Collections.Generic; using System.ComponentModel; +using System.Linq; using System.Windows; using System.Windows.Controls; using ICSharpCode.Core; @@ -28,7 +29,7 @@ namespace ICSharpCode.SharpDevelop.Gui public event EventHandler ActiveContentChanged; public event ViewContentEventHandler ViewOpened; - protected void OnViewOpened(ViewContentEventArgs e) + void OnViewOpened(ViewContentEventArgs e) { if (ViewOpened != null) { ViewOpened(this, e); @@ -87,7 +88,8 @@ namespace ICSharpCode.SharpDevelop.Gui public IList WorkbenchWindowCollection { get { - return new IWorkbenchWindow[0]; + return viewContentCollection.Select(vc => vc.WorkbenchWindow) + .Distinct().ToList().AsReadOnly(); } } @@ -97,21 +99,85 @@ namespace ICSharpCode.SharpDevelop.Gui } } + IWorkbenchWindow activeWorkbenchWindow; + public IWorkbenchWindow ActiveWorkbenchWindow { get { - return null; + return activeWorkbenchWindow; + } + private set { + if (activeWorkbenchWindow != value) { + if (activeWorkbenchWindow != null) { + activeWorkbenchWindow.ActiveViewContentChanged -= WorkbenchWindowActiveViewContentChanged; + } + + activeWorkbenchWindow = value; + + if (value != null) { + value.ActiveViewContentChanged += WorkbenchWindowActiveViewContentChanged; + } + + if (ActiveWorkbenchWindowChanged != null) { + ActiveWorkbenchWindowChanged(this, EventArgs.Empty); + } + WorkbenchWindowActiveViewContentChanged(null, null); + } + } + } + + void WorkbenchWindowActiveViewContentChanged(object sender, EventArgs e) + { + if (workbenchLayout != null) { + // update ActiveViewContent + IWorkbenchWindow window = this.ActiveWorkbenchWindow; + if (window != null) + this.ActiveViewContent = window.ActiveViewContent; + else + this.ActiveViewContent = null; + + // update ActiveContent + this.ActiveContent = workbenchLayout.ActiveContent; } } + void OnActiveWindowChanged(object sender, EventArgs e) + { + if (workbenchLayout != null) { + this.ActiveContent = workbenchLayout.ActiveContent; + this.ActiveWorkbenchWindow = workbenchLayout.ActiveWorkbenchWindow; + } else { + this.ActiveContent = null; + this.ActiveWorkbenchWindow = null; + } + } + + IViewContent activeViewContent; + public IViewContent ActiveViewContent { - get { - return null; + get { return activeViewContent; } + private set { + if (activeViewContent != value) { + activeViewContent = value; + + if (ActiveViewContentChanged != null) { + ActiveViewContentChanged(this, EventArgs.Empty); + } + } } } + object activeContent; + public object ActiveContent { - get { - return null; + get { return activeContent; } + private set { + if (activeContent != value) { + activeContent = value; + + if (ActiveContentChanged != null) { + ActiveContentChanged(this, EventArgs.Empty); + } + } } } @@ -123,15 +189,15 @@ namespace ICSharpCode.SharpDevelop.Gui } set { if (workbenchLayout != null) { - //workbenchLayout.ActiveWorkbenchWindowChanged -= OnActiveWindowChanged; + workbenchLayout.ActiveContentChanged -= OnActiveWindowChanged; workbenchLayout.Detach(); } if (value != null) { value.Attach(this); + value.ActiveContentChanged += OnActiveWindowChanged; } workbenchLayout = value; - //workbenchLayout.ActiveWorkbenchWindowChanged += OnActiveWindowChanged; - //OnActiveWindowChanged(null, null); + OnActiveWindowChanged(null, null); } }