From 3cbcab3bf6fd1758420b7915267113f26452d13d Mon Sep 17 00:00:00 2001 From: Matt Ward Date: Tue, 16 Jan 2007 19:53:40 +0000 Subject: [PATCH] Custom components side tab is now updated when a new reference is added to the project. It is also disposed before creating a new instance when the toolbox side tabs are reloaded. git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/branches/2.1@2299 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61 --- .../Src/Gui/CustomComponentsSideTab.cs | 26 ++++++++++++++++--- .../Project/Src/ToolboxProvider.cs | 11 +++++--- 2 files changed, 31 insertions(+), 6 deletions(-) diff --git a/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Gui/CustomComponentsSideTab.cs b/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Gui/CustomComponentsSideTab.cs index 3de5106cc5..2ab64c7c44 100644 --- a/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Gui/CustomComponentsSideTab.cs +++ b/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Gui/CustomComponentsSideTab.cs @@ -21,16 +21,29 @@ using ICSharpCode.SharpDevelop.Widgets.SideBar; namespace ICSharpCode.FormsDesigner.Gui { - public class CustomComponentsSideTab : SideTabDesigner + public class CustomComponentsSideTab : SideTabDesigner, IDisposable { + bool disposed; + ///Load an assembly's controls public CustomComponentsSideTab(SideBarControl sideTab, string name, IToolboxService toolboxService) : base(sideTab, name, toolboxService) { this.DisplayName = StringParser.Parse(this.Name); ScanProjectAssemblies(); - ProjectService.EndBuild += RescanProjectAssemblies; - ProjectService.SolutionLoaded += RescanProjectAssemblies; + ProjectService.EndBuild += RescanProjectAssemblies; + ProjectService.SolutionLoaded += RescanProjectAssemblies; + ProjectService.ProjectItemAdded += ProjectItemAdded; + } + + public void Dispose() + { + if (!disposed) { + disposed = true; + ProjectService.EndBuild -= RescanProjectAssemblies; + ProjectService.SolutionLoaded -= RescanProjectAssemblies; + ProjectService.ProjectItemAdded -= ProjectItemAdded; + } } void RescanProjectAssemblies(object sender, EventArgs e) @@ -41,6 +54,13 @@ namespace ICSharpCode.FormsDesigner.Gui SharpDevelopSideBar.SideBar.Refresh(); } + void ProjectItemAdded(object sender, ProjectItemEventArgs e) + { + if (e.ProjectItem is ReferenceProjectItem) { + RescanProjectAssemblies(sender, e); + } + } + void ScanProjectAssemblies() { // custom user controls don't need custom images diff --git a/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/ToolboxProvider.cs b/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/ToolboxProvider.cs index 7282fa0712..42385ccae2 100644 --- a/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/ToolboxProvider.cs +++ b/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/ToolboxProvider.cs @@ -26,8 +26,10 @@ namespace ICSharpCode.FormsDesigner static ICSharpCode.FormsDesigner.Services.ToolboxService toolboxService = null; public static List SideTabs = new List(); - static ComponentLibraryLoader componentLibraryLoader = new ComponentLibraryLoader(); + static CustomComponentsSideTab customTab; + static ComponentLibraryLoader componentLibraryLoader = new ComponentLibraryLoader(); + public static ComponentLibraryLoader ComponentLibraryLoader { get { return componentLibraryLoader; @@ -90,7 +92,7 @@ namespace ICSharpCode.FormsDesigner tab.ItemsExchanged -= SideTabItemsExchanged; if (SharpDevelopSideBar.SideBar.Tabs.Contains(tab)) { SharpDevelopSideBar.SideBar.Tabs.Remove(tab); - reInsertTabs = true;; + reInsertTabs = true; } } reInsertTabs &= doInsert; @@ -108,7 +110,10 @@ namespace ICSharpCode.FormsDesigner } } } - SideTabDesigner customTab = new CustomComponentsSideTab(SharpDevelopSideBar.SideBar, ResourceService.GetString("ICSharpCode.SharpDevelop.FormDesigner.ToolboxProvider.CustomComponents"), toolboxService); + if (customTab != null) { + customTab.Dispose(); + } + customTab = new CustomComponentsSideTab(SharpDevelopSideBar.SideBar, ResourceService.GetString("ICSharpCode.SharpDevelop.FormDesigner.ToolboxProvider.CustomComponents"), toolboxService); customTab.ItemRemoved += SideTabItemRemoved; customTab.ItemsExchanged += SideTabItemsExchanged; SideTabs.Add(customTab);