From 89bba2c88c00a8976bcf86b0cff6e8c5218c7ede Mon Sep 17 00:00:00 2001 From: Daniel Grunwald Date: Fri, 22 Jun 2007 16:38:38 +0000 Subject: [PATCH] Fixed use of ActiveWorkbenchWindow / ActiveViewContent / ActiveContent. git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@2563 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61 --- .../Project/Src/Gui/PackageFilesView.cs | 10 +++--- .../Project/Src/Gui/WixDialogDesigner.cs | 35 +++---------------- .../Project/Src/DesignerViewContent.cs | 1 + .../XmlEditor/Project/Src/XPathQueryPad.cs | 6 ++-- src/Main/Base/Project/Src/Gui/IWorkbench.cs | 14 +++++--- .../Pads/ProjectBrowser/ProjectBrowserPad.cs | 6 ++-- .../Src/Gui/Pads/PropertyPad/PropertyPad.cs | 6 ++-- .../Base/Project/Src/Gui/Pads/ToolsPad.cs | 6 ++-- .../Src/Gui/Workbench/DefaultWorkbench.cs | 32 ++++++++++++----- .../Project/Src/Gui/WorkbenchSingleton.cs | 10 ++++++ .../Services/ParserService/ParserService.cs | 4 +-- .../Services/ProjectService/ProjectService.cs | 4 +-- .../Gui/SearchAndReplacePanel.cs | 6 ++-- 13 files changed, 73 insertions(+), 67 deletions(-) diff --git a/src/AddIns/BackendBindings/WixBinding/Project/Src/Gui/PackageFilesView.cs b/src/AddIns/BackendBindings/WixBinding/Project/Src/Gui/PackageFilesView.cs index c3a6c70f38..845bf1f253 100644 --- a/src/AddIns/BackendBindings/WixBinding/Project/Src/Gui/PackageFilesView.cs +++ b/src/AddIns/BackendBindings/WixBinding/Project/Src/Gui/PackageFilesView.cs @@ -44,7 +44,7 @@ namespace ICSharpCode.WixBinding TitleName = StringParser.Parse("${res:ICSharpCode.WixBinding.PackageFilesView.Title}"); this.project = project; - WorkbenchSingleton.Workbench.ActiveWorkbenchWindowChanged += ActiveWorkbenchWindowChanged; + WorkbenchSingleton.Workbench.ActiveViewContentChanged += ActiveViewContentChanged; } public static PackageFilesView ActiveView { @@ -98,7 +98,7 @@ namespace ICSharpCode.WixBinding public override void Dispose() { if (packageFilesControl != null) { - WorkbenchSingleton.Workbench.ActiveWorkbenchWindowChanged -= ActiveWorkbenchWindowChanged; + WorkbenchSingleton.Workbench.ActiveViewContentChanged -= ActiveViewContentChanged; packageFilesControl.Dispose(); packageFilesControl = null; } @@ -214,7 +214,7 @@ namespace ICSharpCode.WixBinding /// Wix document then we update the document's contents. When the user switches /// back we reload the view if the corresponding Wix document is open. /// - void ActiveWorkbenchWindowChanged(object source, EventArgs e) + void ActiveViewContentChanged(object source, EventArgs e) { if (IsWixDocumentWindowActive) { if (IsDirty) { @@ -238,7 +238,7 @@ namespace ICSharpCode.WixBinding get { WixDocument document = packageFilesControl.Document; if (document != null) { - IViewContent view = WorkbenchSingleton.Workbench.ActiveContent as IViewContent; + IViewContent view = WorkbenchSingleton.Workbench.ActiveViewContent; if (view != null) { return FileUtility.IsEqualFileName(view.PrimaryFileName, document.FileName); } @@ -252,7 +252,7 @@ namespace ICSharpCode.WixBinding /// bool IsActiveWindow { get { - return Object.ReferenceEquals(WorkbenchSingleton.Workbench.ActiveContent, this); + return Object.ReferenceEquals(WorkbenchSingleton.Workbench.ActiveViewContent, this); } } diff --git a/src/AddIns/BackendBindings/WixBinding/Project/Src/Gui/WixDialogDesigner.cs b/src/AddIns/BackendBindings/WixBinding/Project/Src/Gui/WixDialogDesigner.cs index 07a2ed321e..61aa640332 100644 --- a/src/AddIns/BackendBindings/WixBinding/Project/Src/Gui/WixDialogDesigner.cs +++ b/src/AddIns/BackendBindings/WixBinding/Project/Src/Gui/WixDialogDesigner.cs @@ -71,9 +71,9 @@ namespace ICSharpCode.WixBinding JumpToDialogElement(id); if (base.IsFormsDesignerVisible) { // Reload so the correct dialog is displayed. - SaveToPrimary(); + base.SaveToPrimary(); DialogId = id; - LoadFromPrimary(); + base.LoadFromPrimary(); } else { // Need to open the designer. DialogId = id; @@ -81,22 +81,7 @@ namespace ICSharpCode.WixBinding } } - /* //DG: - /// - /// Set dialog id to null after calling base.Deselecting since base.Deselecting - /// calls MergeFormChanges which will reference this dialog id. - /// - public override void Deselecting() - { - base.Deselecting(); - DialogId = null; - RemoveWixToolboxSideTab(); - } - - /// - /// Designer has been selected. - /// - public override void Selected() + protected override void LoadFromPrimary() { try { if (!ignoreDialogIdSelectedInTextEditor) { @@ -114,20 +99,8 @@ namespace ICSharpCode.WixBinding DialogId = "InvalidXML"; AddToErrorList(ex); } - base.Selected(); - RemoveFormsDesignerToolboxSideTabs(); - AddWixToolboxSideTab(); - } - - /// - /// Removes the WinForms toolbox side tabs. - /// - public override void SwitchedTo() - { - base.SwitchedTo(); - RemoveFormsDesignerToolboxSideTabs(); + base.LoadFromPrimary(); } - */ /// /// Gets the Wix document filename. diff --git a/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerViewContent.cs b/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerViewContent.cs index 9f4132b177..0ac294373f 100644 --- a/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerViewContent.cs +++ b/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerViewContent.cs @@ -359,6 +359,7 @@ namespace ICSharpCode.FormsDesigner protected override void LoadFromPrimary() { + UnloadDesigner(); Reload(); } diff --git a/src/AddIns/DisplayBindings/XmlEditor/Project/Src/XPathQueryPad.cs b/src/AddIns/DisplayBindings/XmlEditor/Project/Src/XPathQueryPad.cs index f1f34e83ae..8ec5025b6c 100644 --- a/src/AddIns/DisplayBindings/XmlEditor/Project/Src/XPathQueryPad.cs +++ b/src/AddIns/DisplayBindings/XmlEditor/Project/Src/XPathQueryPad.cs @@ -23,7 +23,7 @@ namespace ICSharpCode.XmlEditor public XPathQueryPad() { xPathQueryControl = new XPathQueryControl(); - WorkbenchSingleton.Workbench.ActiveWorkbenchWindowChanged += ActiveWorkbenchWindowChanged; + WorkbenchSingleton.Workbench.ActiveViewContentChanged += ActiveViewContentChanged; Properties properties = PropertyService.Get(XPathQueryControlProperties, new Properties()); xPathQueryControl.SetMemento(properties); instance = this; @@ -48,7 +48,7 @@ namespace ICSharpCode.XmlEditor { if (!disposed) { disposed = true; - WorkbenchSingleton.Workbench.ActiveWorkbenchWindowChanged -= ActiveWorkbenchWindowChanged; + WorkbenchSingleton.Workbench.ActiveViewContentChanged -= ActiveViewContentChanged; Properties properties = xPathQueryControl.CreateMemento(); PropertyService.Set(XPathQueryControlProperties, properties); xPathQueryControl.Dispose(); @@ -60,7 +60,7 @@ namespace ICSharpCode.XmlEditor xPathQueryControl.RemoveXPathNodeTextMarkers(); } - void ActiveWorkbenchWindowChanged(object source, EventArgs e) + void ActiveViewContentChanged(object source, EventArgs e) { xPathQueryControl.ActiveWindowChanged(); } diff --git a/src/Main/Base/Project/Src/Gui/IWorkbench.cs b/src/Main/Base/Project/Src/Gui/IWorkbench.cs index 105b3371bf..47e83282c5 100644 --- a/src/Main/Base/Project/Src/Gui/IWorkbench.cs +++ b/src/Main/Base/Project/Src/Gui/IWorkbench.cs @@ -47,14 +47,14 @@ namespace ICSharpCode.SharpDevelop.Gui /// /// The active workbench window. + /// This is the window containing the active view content. /// IWorkbenchWindow ActiveWorkbenchWindow { get; } /// - /// Is called, when the workbench window which the user has into - /// the foreground (e.g. editable) changed to a new one. + /// Is called, when the ActiveWorkbenchWindow property changes. /// event EventHandler ActiveWorkbenchWindowChanged; @@ -71,13 +71,19 @@ namespace ICSharpCode.SharpDevelop.Gui event EventHandler ActiveViewContentChanged; /// - /// The active content. This can be either a IViewContent or a IPadContent, depending on - /// where the focus currently is. + /// The active content, depending on where the focus currently is. + /// If a document is currently active, this will be equal to ActiveViewContent, + /// if a pad has the focus, this property will return the IPadContent instance. /// object ActiveContent { get; } + /// + /// Is called, when the active content has changed. + /// + event EventHandler ActiveContentChanged; + IWorkbenchLayout WorkbenchLayout { get; set; diff --git a/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/ProjectBrowserPad.cs b/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/ProjectBrowserPad.cs index 1fa2dcd6ab..d6bed2e01d 100644 --- a/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/ProjectBrowserPad.cs +++ b/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/ProjectBrowserPad.cs @@ -82,11 +82,11 @@ namespace ICSharpCode.SharpDevelop.Project ProjectService.SolutionClosed += ProjectServiceSolutionClosed; ProjectService.SolutionPreferencesSaving += ProjectServiceSolutionPreferencesSaving; - WorkbenchSingleton.Workbench.ActiveWorkbenchWindowChanged += ActiveWindowChanged; + WorkbenchSingleton.Workbench.ActiveContentChanged += ActiveContentChanged; if (ProjectService.OpenSolution != null) { ProjectServiceSolutionLoaded(null, new SolutionEventArgs(ProjectService.OpenSolution)); } - ActiveWindowChanged(null, null); + ActiveContentChanged(null, null); } public void StartLabelEdit(ExtTreeNode node) @@ -112,7 +112,7 @@ namespace ICSharpCode.SharpDevelop.Project string lastFileName; - void ActiveWindowChanged(object sender, EventArgs e) + void ActiveContentChanged(object sender, EventArgs e) { if (WorkbenchSingleton.Workbench.ActiveContent == this) { projectBrowserPanel.ProjectBrowserControl.PadActivated(); diff --git a/src/Main/Base/Project/Src/Gui/Pads/PropertyPad/PropertyPad.cs b/src/Main/Base/Project/Src/Gui/Pads/PropertyPad/PropertyPad.cs index a2bcad7047..2b87766fc6 100644 --- a/src/Main/Base/Project/Src/Gui/Pads/PropertyPad/PropertyPad.cs +++ b/src/Main/Base/Project/Src/Gui/Pads/PropertyPad/PropertyPad.cs @@ -97,7 +97,7 @@ namespace ICSharpCode.SharpDevelop.Gui } } - void WorkbenchWindowChanged(object sender, EventArgs e) + void WorkbenchActiveContentChanged(object sender, EventArgs e) { IHasPropertyContainer c = WorkbenchSingleton.Workbench.ActiveContent as IHasPropertyContainer; if (c == null) { @@ -148,8 +148,8 @@ namespace ICSharpCode.SharpDevelop.Gui grid.ContextMenuStrip = MenuService.CreateContextMenu(this, "/SharpDevelop/Views/PropertyPad/ContextMenu"); LoggingService.Debug("PropertyPad created"); - WorkbenchSingleton.Workbench.ActiveWorkbenchWindowChanged += WorkbenchWindowChanged; - WorkbenchWindowChanged(null, null); + WorkbenchSingleton.Workbench.ActiveContentChanged += WorkbenchActiveContentChanged; + WorkbenchActiveContentChanged(null, null); } void CombineClosedEvent(object sender, EventArgs e) diff --git a/src/Main/Base/Project/Src/Gui/Pads/ToolsPad.cs b/src/Main/Base/Project/Src/Gui/Pads/ToolsPad.cs index 6394a33cb6..d4fca007d8 100644 --- a/src/Main/Base/Project/Src/Gui/Pads/ToolsPad.cs +++ b/src/Main/Base/Project/Src/Gui/Pads/ToolsPad.cs @@ -44,8 +44,8 @@ namespace ICSharpCode.SharpDevelop.Gui panel.Controls.Add(noToolsAvailable); child = noToolsAvailable; - WorkbenchSingleton.Workbench.ActiveWorkbenchWindowChanged += WorkbenchWindowChanged; - WorkbenchWindowChanged(null, null); + WorkbenchSingleton.Workbench.ActiveContentChanged += WorkbenchActiveContentChanged; + WorkbenchActiveContentChanged(null, null); } void SetChild(Control newChild) @@ -58,7 +58,7 @@ namespace ICSharpCode.SharpDevelop.Gui } } - void WorkbenchWindowChanged(object sender, EventArgs e) + void WorkbenchActiveContentChanged(object sender, EventArgs e) { IToolsHost th = WorkbenchSingleton.Workbench.ActiveContent as IToolsHost; if (th == null) { diff --git a/src/Main/Base/Project/Src/Gui/Workbench/DefaultWorkbench.cs b/src/Main/Base/Project/Src/Gui/Workbench/DefaultWorkbench.cs index bd4452ed2f..19d3f25193 100644 --- a/src/Main/Base/Project/Src/Gui/Workbench/DefaultWorkbench.cs +++ b/src/Main/Base/Project/Src/Gui/Workbench/DefaultWorkbench.cs @@ -136,8 +136,10 @@ namespace ICSharpCode.SharpDevelop.Gui if (layout == null) { this.ActiveWorkbenchWindow = null; + this.ActiveContent = null; } else { this.ActiveWorkbenchWindow = layout.ActiveWorkbenchWindow; + this.ActiveContent = layout.ActiveContent; } } @@ -157,13 +159,13 @@ namespace ICSharpCode.SharpDevelop.Gui if (activeWorkbenchWindow != null) { activeWorkbenchWindow.ActiveViewContentChanged += OnWorkbenchActiveViewContentChanged; } + + if (ActiveWorkbenchWindowChanged != null) { + ActiveWorkbenchWindowChanged(this, EventArgs.Empty); + } + OnWorkbenchActiveViewContentChanged(null, null); } - // raise even when activeWorkbenchWindow didn't change because we also use - // ActiveWorkbenchWindowChanged to signal changes in ActiveContent (when switching between pads) - if (ActiveWorkbenchWindowChanged != null) { - ActiveWorkbenchWindowChanged(this, EventArgs.Empty); - } } } @@ -175,6 +177,8 @@ namespace ICSharpCode.SharpDevelop.Gui this.ActiveViewContent = window.ActiveViewContent; else this.ActiveViewContent = null; + + this.ActiveContent = layout.ActiveContent; } public event EventHandler ActiveWorkbenchWindowChanged; @@ -204,14 +208,26 @@ namespace ICSharpCode.SharpDevelop.Gui /// public event EventHandler ActiveViewContentChanged; + object activeContent; + public object ActiveContent { get { - if (layout == null) { - return null; + return activeContent; + } + private set { + if (activeContent != value) { + activeContent = value; + if (ActiveContentChanged != null) { + ActiveContentChanged(this, EventArgs.Empty); + } } - return layout.ActiveContent; } } + + /// + /// Is called, when the active content has changed. + /// + public event EventHandler ActiveContentChanged; #endregion public DefaultWorkbench() diff --git a/src/Main/Base/Project/Src/Gui/WorkbenchSingleton.cs b/src/Main/Base/Project/Src/Gui/WorkbenchSingleton.cs index 683f4c756f..e990fb83b7 100644 --- a/src/Main/Base/Project/Src/Gui/WorkbenchSingleton.cs +++ b/src/Main/Base/Project/Src/Gui/WorkbenchSingleton.cs @@ -102,6 +102,16 @@ namespace ICSharpCode.SharpDevelop.Gui // initialize workbench-dependent services: Project.ProjectService.InitializeService(); NavigationService.InitializeService(); + + workbench.ActiveContentChanged += delegate { + Console.WriteLine("ActiveContentChanged to " + workbench.ActiveContent); + }; + workbench.ActiveViewContentChanged += delegate { + Console.WriteLine("ActiveViewContentChanged to " + workbench.ActiveViewContent); + }; + workbench.ActiveWorkbenchWindowChanged += delegate { + Console.WriteLine("ActiveWorkbenchWindowChanged to " + workbench.ActiveWorkbenchWindow); + }; } /// diff --git a/src/Main/Base/Project/Src/Services/ParserService/ParserService.cs b/src/Main/Base/Project/Src/Services/ParserService/ParserService.cs index 319b84e0ae..4f5f0d84cd 100644 --- a/src/Main/Base/Project/Src/Services/ParserService/ParserService.cs +++ b/src/Main/Base/Project/Src/Services/ParserService/ParserService.cs @@ -513,8 +513,8 @@ namespace ICSharpCode.SharpDevelop defaultProjectContent.AddReferencedContent(ParserService.GetProjectContentForReference(item)); } if (WorkbenchSingleton.Workbench != null) { - WorkbenchSingleton.Workbench.ActiveWorkbenchWindowChanged += delegate { - if (WorkbenchSingleton.Workbench.ActiveWorkbenchWindow != null) { + WorkbenchSingleton.Workbench.ActiveViewContentChanged += delegate { + if (WorkbenchSingleton.Workbench.ActiveViewContent != null) { string file = WorkbenchSingleton.Workbench.ActiveViewContent.PrimaryFileName; if (file != null) { IParser parser = GetParser(file); diff --git a/src/Main/Base/Project/Src/Services/ProjectService/ProjectService.cs b/src/Main/Base/Project/Src/Services/ProjectService/ProjectService.cs index 24779b8829..681f857ad5 100644 --- a/src/Main/Base/Project/Src/Services/ProjectService/ProjectService.cs +++ b/src/Main/Base/Project/Src/Services/ProjectService/ProjectService.cs @@ -60,7 +60,7 @@ namespace ICSharpCode.SharpDevelop.Project { if (!initialized) { initialized = true; - WorkbenchSingleton.Workbench.ActiveWorkbenchWindowChanged += ActiveWindowChanged; + WorkbenchSingleton.Workbench.ActiveViewContentChanged += ActiveViewContentChanged; FileService.FileRenamed += FileServiceFileRenamed; FileService.FileRemoved += FileServiceFileRemoved; } @@ -172,7 +172,7 @@ namespace ICSharpCode.SharpDevelop.Project } } - static void ActiveWindowChanged(object sender, EventArgs e) + static void ActiveViewContentChanged(object sender, EventArgs e) { IViewContent viewContent = WorkbenchSingleton.Workbench.ActiveViewContent; if (OpenSolution == null || viewContent == null) { diff --git a/src/Main/Base/Project/Src/TextEditor/SearchAndReplace/Gui/SearchAndReplacePanel.cs b/src/Main/Base/Project/Src/TextEditor/SearchAndReplace/Gui/SearchAndReplacePanel.cs index 0f23ce88dd..3992a43396 100644 --- a/src/Main/Base/Project/Src/TextEditor/SearchAndReplace/Gui/SearchAndReplacePanel.cs +++ b/src/Main/Base/Project/Src/TextEditor/SearchAndReplace/Gui/SearchAndReplacePanel.cs @@ -341,7 +341,7 @@ namespace SearchAndReplace return null; } - void WorkbenchWindowChanged(object source, EventArgs e) + void WorkbenchActiveViewContentChanged(object source, EventArgs e) { TextEditorControl activeTextEditorControl = SearchReplaceUtilities.GetActiveTextEditor(); if (activeTextEditorControl != this.textEditor) { @@ -369,7 +369,7 @@ namespace SearchAndReplace void RemoveActiveWindowChangedHandler() { - WorkbenchSingleton.Workbench.ActiveWorkbenchWindowChanged -= WorkbenchWindowChanged; + WorkbenchSingleton.Workbench.ActiveViewContentChanged -= WorkbenchActiveViewContentChanged; } /// @@ -398,7 +398,7 @@ namespace SearchAndReplace findFirst = true; selection = GetCurrentTextSelection(); AddSelectionChangedHandler(SearchReplaceUtilities.GetActiveTextEditor()); - WorkbenchSingleton.Workbench.ActiveWorkbenchWindowChanged += WorkbenchWindowChanged; + WorkbenchSingleton.Workbench.ActiveViewContentChanged += WorkbenchActiveViewContentChanged; } void RemoveSelectionSearchHandlers()