From 9bf7c7b6f6c6e055369aede6f9a03894838d01a8 Mon Sep 17 00:00:00 2001 From: Russell Wilkins Date: Tue, 13 Feb 2007 14:49:47 +0000 Subject: [PATCH] Template updates. Do not load/lock assemblies in WorkflowSideTabService. git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@2381 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61 --- .../Project/Src/Gui/ViewContentControl.cs | 1 + .../Src/Services/TypeProviderService.cs | 16 ++-- .../Src/Services/WorkflowSideTabService.cs | 88 +++++++++++++------ .../CodeSeparationSequentialWorkflow.xft | 2 +- .../Projects/CSharp/ActivityLibrary.xpt | 8 +- .../Projects/CSharp/ConsoleProject.xpt | 12 ++- .../Projects/CSharp/EmptyProject.xpt | 18 ++-- 7 files changed, 97 insertions(+), 48 deletions(-) diff --git a/src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/Gui/ViewContentControl.cs b/src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/Gui/ViewContentControl.cs index fda2b23cf7..4f17d0cfbb 100644 --- a/src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/Gui/ViewContentControl.cs +++ b/src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/Gui/ViewContentControl.cs @@ -163,6 +163,7 @@ namespace WorkflowDesigner void ComponentAddedHandler(object sender, ComponentEventArgs args) { UpdateCodeCompileUniteCompileUnit(); + viewContent.PrimaryFile.MakeDirty(); LoggingService.Debug("ComponentAddedHandler"); } diff --git a/src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/Services/TypeProviderService.cs b/src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/Services/TypeProviderService.cs index 9cb29e97ae..1279488781 100644 --- a/src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/Services/TypeProviderService.cs +++ b/src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/Services/TypeProviderService.cs @@ -7,6 +7,7 @@ #region Using using System; +using System.IO; using System.Collections; using System.Collections.Generic; using System.Workflow.ComponentModel.Compiler; @@ -134,14 +135,13 @@ namespace WorkflowDesigner Assembly assembly = null; if (item is ProjectReferenceProjectItem) { - throw new NotImplementedException("ProjectReferenceProjectItem references not implemented yet!"); - - - //ProjectReferenceProjectItem pitem = item as ProjectReferenceProjectItem; + ProjectReferenceProjectItem pitem = item as ProjectReferenceProjectItem; + AssemblyName name = new AssemblyName(); + name.CodeBase = pitem.ReferencedProject.OutputAssemblyFullPath; - //AssemblyName name = new AssemblyName(); - //name.CodeBase = pitem.ReferencedProject.OutputAssemblyFullPath; - //assembly = appDomain.Load(name); + // TODO: This is only a temporary solution so the assembly is not locked. + // Need to look at this in terms of using a separate domain. + assembly = appDomain.Load(File.ReadAllBytes(pitem.ReferencedProject.OutputAssemblyFullPath)); } else if (item is ReferenceProjectItem) { assembly = ReflectionLoader.ReflectionLoadGacAssembly(item.Include, false); @@ -152,7 +152,7 @@ namespace WorkflowDesigner assembly = appDomain.Load(name); } - } + } return assembly; } diff --git a/src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/Services/WorkflowSideTabService.cs b/src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/Services/WorkflowSideTabService.cs index e01676a8f9..36004b4aeb 100644 --- a/src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/Services/WorkflowSideTabService.cs +++ b/src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/Services/WorkflowSideTabService.cs @@ -7,6 +7,7 @@ #region Using using System; +using System.IO; using System.Drawing; using System.Reflection; using System.Collections; @@ -50,7 +51,7 @@ namespace WorkflowDesigner RemoveAllSideTabs(); else { if (activeProject != null) - RemoveSideTabsForProject(activeProject); + RemoveProjectSideTabs(activeProject); ShowSideTabsForProject(value); } @@ -95,6 +96,7 @@ namespace WorkflowDesigner ProjectService.ProjectItemRemoved += ProjectItemRemovedEventHandler; ProjectService.ProjectItemAdded += ProjectItemAddedEventHandler; + ProjectService.SolutionClosing += SolutionClosingEventHandler; initialised = true; } @@ -109,10 +111,8 @@ namespace WorkflowDesigner // Make sure the standard workflow sidebar exists if (standardSideTab == null) { - Assembly assembly = AppDomain.CurrentDomain.Load("System.Workflow.Activities, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"); - standardSideTab = CreateSideTabFromAssembly("Workflow", assembly); - assembly = AppDomain.CurrentDomain.Load("System.Workflow.ComponentModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"); - LoadSideTabItemsFromAssembly(assembly, standardSideTab); + standardSideTab = CreateSideTabFromAssembly("Workflow", new AssemblyName("System.Workflow.Activities, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35")); + LoadSideTabItemsFromAssembly(new AssemblyName("System.Workflow.ComponentModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"), standardSideTab); } // Attach the handlers. @@ -123,7 +123,7 @@ namespace WorkflowDesigner } - #region ProjectService ProjectItems added/removed handlers + #region ProjectService event handlers private static void ProjectItemAddedEventHandler(object sender, ProjectItemEventArgs e) { if (e.Project == null) return; @@ -141,7 +141,7 @@ namespace WorkflowDesigner if (!e.ProjectItem.Include.StartsWith("System")){ references.Add(item, CreateSideTabForProjectItem(item)); } - + } else { return; } @@ -171,6 +171,18 @@ namespace WorkflowDesigner references.Remove(item); } } + + private static void SolutionClosingEventHandler(object sender, SolutionEventArgs e) + { + foreach (IProject project in e.Solution.Projects) { + if (Projects.ContainsKey(project)) { + RemoveProjectSideTabs(project); + Projects.Remove(project); + } + } + } + + #endregion #region IViewContent event handlers @@ -194,10 +206,10 @@ namespace WorkflowDesigner SharpDevelopSideBar.SideBar.Tabs.Add(standardSideTab); } - ActiveProject = ProjectService.CurrentProject; LoggingService.DebugFormatted("ViewActivated {0}", sender); activeViewContent = sender as IViewContent; + ActiveProject = ProjectService.OpenSolution.FindProjectContainingFile(activeViewContent.PrimaryFileName); SharpDevelopSideBar.SideBar.Refresh(); } @@ -207,26 +219,47 @@ namespace WorkflowDesigner { if (!Projects.ContainsKey(project)){ Dictionary tabs = new Dictionary(); + tabs.Add(new ReferenceProjectItem(project), CreateCustomComponentsSideTab(project)); LoadProjectReferenceSideTabs(project, tabs); Projects.Add(project, tabs); } Dictionary references = Projects[project]; foreach (SideTab sideTab in references.Values) { - if (!SharpDevelopSideBar.SideBar.Tabs.Contains(sideTab)) { - SharpDevelopSideBar.SideBar.Tabs.Add(sideTab); + if (sideTab.Items.Count > 1) { + if (!SharpDevelopSideBar.SideBar.Tabs.Contains(sideTab)) { + SharpDevelopSideBar.SideBar.Tabs.Add(sideTab); + } } } } + private static SideTab CreateCustomComponentsSideTab(IProject project) + { + AssemblyName assemblyName = new AssemblyName(); + assemblyName.CodeBase = project.OutputAssemblyFullPath; + + SideTab sideTab = new SideTab("Project components"); + sideTab.CanSaved = false; + AddPointerToSideTab(sideTab); + + // TODO: Need to load the sidetab with activities from the current project. + // Cannot use LoadSideTabFromAssembly as it will only + // load public components from the assembly. + + + SortSideTabItems(sideTab); + return sideTab; + } + private static void RemoveAllSideTabs() { foreach (IProject project in Projects.Keys) { - RemoveSideTabsForProject(project); + RemoveProjectSideTabs(project); } } - private static void RemoveSideTabsForProject(IProject project) + private static void RemoveProjectSideTabs(IProject project) { if (!Projects.ContainsKey(project)) return; @@ -255,35 +288,35 @@ namespace WorkflowDesigner private static SideTab CreateSideTabForProjectItem(ProjectItem item) { - Assembly assembly = null; + AssemblyName assemblyName = null; if (item is ProjectReferenceProjectItem) { ProjectReferenceProjectItem pitem = item as ProjectReferenceProjectItem; - AssemblyName name = new AssemblyName(); + assemblyName = new AssemblyName(); - name.CodeBase = pitem.ReferencedProject.OutputAssemblyFullPath; - assembly = AppDomain.CurrentDomain.Load(name); + assemblyName.CodeBase = pitem.ReferencedProject.OutputAssemblyFullPath; + return CreateSideTabFromAssembly(pitem.ReferencedProject.Name, assemblyName); } else if (item is ReferenceProjectItem) { - AssemblyName name = new AssemblyName(); - name.CodeBase = item.FileName; - assembly = AppDomain.CurrentDomain.Load(name); + assemblyName = new AssemblyName(); + assemblyName.CodeBase = item.FileName; + return CreateSideTabFromAssembly(Path.GetFileNameWithoutExtension(item.FileName) + " components",assemblyName); } - return CreateSideTabFromAssembly(assembly); + return null; } - private static SideTab CreateSideTabFromAssembly(Assembly assembly) + private static SideTab CreateSideTabFromAssembly(AssemblyName assemblyName) { - return CreateSideTabFromAssembly(assembly.GetName().Name + " components", assembly); + return CreateSideTabFromAssembly(assemblyName.FullName + " components", assemblyName); } - private static SideTab CreateSideTabFromAssembly(string name, Assembly assembly) + private static SideTab CreateSideTabFromAssembly(string name, AssemblyName assemblyName) { SideTab sideTab = new SideTab(name); sideTab.CanSaved = false; AddPointerToSideTab(sideTab); - LoadSideTabItemsFromAssembly(assembly, sideTab); + LoadSideTabItemsFromAssembly(assemblyName, sideTab); SortSideTabItems(sideTab); return sideTab; } @@ -300,9 +333,10 @@ namespace WorkflowDesigner sideTab.Items.Add(sti); } - private static void LoadSideTabItemsFromAssembly(Assembly assembly, SideTab sideTab) + private static void LoadSideTabItemsFromAssembly(AssemblyName assemblyName, SideTab sideTab) { - ICollection toolboxItems = System.Drawing.Design.ToolboxService.GetToolboxItems(assembly.GetName()); + ICollection toolboxItems = System.Drawing.Design.ToolboxService.GetToolboxItems(assemblyName); + foreach (ToolboxItem tbi in toolboxItems) { //TODO: Add further checking to see if this component can actually be put on the sidetab. @@ -314,6 +348,8 @@ namespace WorkflowDesigner sti.Icon = tbi.Bitmap; sideTab.Items.Add(sti); } + + System.Drawing.Design.ToolboxService.UnloadToolboxItems(); } private static void SortSideTabItems(SideTab sideTab) diff --git a/src/AddIns/DisplayBindings/WorkflowDesigner/Project/Templates/Files/CSharp/CodeSeparationSequentialWorkflow.xft b/src/AddIns/DisplayBindings/WorkflowDesigner/Project/Templates/Files/CSharp/CodeSeparationSequentialWorkflow.xft index 3a9ffb5261..3d6ddd511a 100644 --- a/src/AddIns/DisplayBindings/WorkflowDesigner/Project/Templates/Files/CSharp/CodeSeparationSequentialWorkflow.xft +++ b/src/AddIns/DisplayBindings/WorkflowDesigner/Project/Templates/Files/CSharp/CodeSeparationSequentialWorkflow.xft @@ -20,7 +20,7 @@ using System.Workflow.Activities; namespace ${StandardNamespace} { - partial class ${ClassName} : SequentialWorkflowActivity + public partial class ${ClassName} : SequentialWorkflowActivity { } diff --git a/src/AddIns/DisplayBindings/WorkflowDesigner/Project/Templates/Projects/CSharp/ActivityLibrary.xpt b/src/AddIns/DisplayBindings/WorkflowDesigner/Project/Templates/Projects/CSharp/ActivityLibrary.xpt index d5b3d4c43e..4196d5ce67 100644 --- a/src/AddIns/DisplayBindings/WorkflowDesigner/Project/Templates/Projects/CSharp/ActivityLibrary.xpt +++ b/src/AddIns/DisplayBindings/WorkflowDesigner/Project/Templates/Projects/CSharp/ActivityLibrary.xpt @@ -30,6 +30,10 @@ Library + + {14822709-B5A1-4724-98CA-57A101D1B079};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + + @@ -70,7 +74,7 @@ using System.Runtime.InteropServices; - + - + - + @@ -26,6 +26,10 @@ + + {14822709-B5A1-4724-98CA-57A101D1B079};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + + @@ -103,7 +107,7 @@ using System.Runtime.InteropServices; - + - + - - - - - + {14822709-B5A1-4724-98CA-57A101D1B079};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + + + + + + - - + +