Browse Source

Template updates.

Do not load/lock assemblies in WorkflowSideTabService.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@2381 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Russell Wilkins 19 years ago
parent
commit
9bf7c7b6f6
  1. 1
      src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/Gui/ViewContentControl.cs
  2. 16
      src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/Services/TypeProviderService.cs
  3. 88
      src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/Services/WorkflowSideTabService.cs
  4. 2
      src/AddIns/DisplayBindings/WorkflowDesigner/Project/Templates/Files/CSharp/CodeSeparationSequentialWorkflow.xft
  5. 8
      src/AddIns/DisplayBindings/WorkflowDesigner/Project/Templates/Projects/CSharp/ActivityLibrary.xpt
  6. 12
      src/AddIns/DisplayBindings/WorkflowDesigner/Project/Templates/Projects/CSharp/ConsoleProject.xpt
  7. 18
      src/AddIns/DisplayBindings/WorkflowDesigner/Project/Templates/Projects/CSharp/EmptyProject.xpt

1
src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/Gui/ViewContentControl.cs

@ -163,6 +163,7 @@ namespace WorkflowDesigner @@ -163,6 +163,7 @@ namespace WorkflowDesigner
void ComponentAddedHandler(object sender, ComponentEventArgs args)
{
UpdateCodeCompileUniteCompileUnit();
viewContent.PrimaryFile.MakeDirty();
LoggingService.Debug("ComponentAddedHandler");
}

16
src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/Services/TypeProviderService.cs

@ -7,6 +7,7 @@ @@ -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 @@ -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 @@ -152,7 +152,7 @@ namespace WorkflowDesigner
assembly = appDomain.Load(name);
}
}
}
return assembly;
}

88
src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/Services/WorkflowSideTabService.cs

@ -7,6 +7,7 @@ @@ -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 @@ -50,7 +51,7 @@ namespace WorkflowDesigner
RemoveAllSideTabs();
else {
if (activeProject != null)
RemoveSideTabsForProject(activeProject);
RemoveProjectSideTabs(activeProject);
ShowSideTabsForProject(value);
}
@ -95,6 +96,7 @@ namespace WorkflowDesigner @@ -95,6 +96,7 @@ namespace WorkflowDesigner
ProjectService.ProjectItemRemoved += ProjectItemRemovedEventHandler;
ProjectService.ProjectItemAdded += ProjectItemAddedEventHandler;
ProjectService.SolutionClosing += SolutionClosingEventHandler;
initialised = true;
}
@ -109,10 +111,8 @@ namespace WorkflowDesigner @@ -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 @@ -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 @@ -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 @@ -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 @@ -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 @@ -207,26 +219,47 @@ namespace WorkflowDesigner
{
if (!Projects.ContainsKey(project)){
Dictionary<ReferenceProjectItem, SideTab> tabs = new Dictionary<ReferenceProjectItem, SideTab>();
tabs.Add(new ReferenceProjectItem(project), CreateCustomComponentsSideTab(project));
LoadProjectReferenceSideTabs(project, tabs);
Projects.Add(project, tabs);
}
Dictionary<ReferenceProjectItem, SideTab> 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 @@ -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 @@ -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 @@ -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)

2
src/AddIns/DisplayBindings/WorkflowDesigner/Project/Templates/Files/CSharp/CodeSeparationSequentialWorkflow.xft

@ -20,7 +20,7 @@ using System.Workflow.Activities; @@ -20,7 +20,7 @@ using System.Workflow.Activities;
namespace ${StandardNamespace}
{
partial class ${ClassName} : SequentialWorkflowActivity
public partial class ${ClassName} : SequentialWorkflowActivity
{
}

8
src/AddIns/DisplayBindings/WorkflowDesigner/Project/Templates/Projects/CSharp/ActivityLibrary.xpt

@ -30,6 +30,10 @@ @@ -30,6 +30,10 @@
<OutputType>Library</OutputType>
</PropertyGroup>
<PropertyGroup escapeValue="false">
<ProjectTypeGuids>{14822709-B5A1-4724-98CA-57A101D1B079};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
</PropertyGroup>
<Files>
<!-- Assembly -->
@ -70,7 +74,7 @@ using System.Runtime.InteropServices; @@ -70,7 +74,7 @@ using System.Runtime.InteropServices;
</File>
<!-- Workflow Code -->
<File name="Activities\Activity1.xoml.cs" DependentUpon="Activity1.xoml" language="C#">
<File name="Activity1.xoml.cs" DependentUpon="Activity1.xoml" language="C#">
<![CDATA[${StandardHeader.C#}
using System;
@ -85,7 +89,7 @@ namespace ${StandardNamespace} @@ -85,7 +89,7 @@ namespace ${StandardNamespace}
</File>
<!-- Workflow -->
<File name="Activities\Activity1.xoml" language="Xoml" buildAction="Content" SubType="Component">
<File name="Activity1.xoml" language="Xoml" buildAction="Content" SubType="Component">
<![CDATA[<SequenceActivity
x:Class="${StandardNamespace}.Activity1"
x:Name="Activity1"

12
src/AddIns/DisplayBindings/WorkflowDesigner/Project/Templates/Projects/CSharp/ConsoleProject.xpt

@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@
</TemplateConfiguration>
<Actions>
<Open filename="Main.cs" />
<Open filename="Workflow1.xoml" />
</Actions>
<Project language="C#">
@ -26,6 +26,10 @@ @@ -26,6 +26,10 @@
<Reference Include="System.Workflow.Runtime" />
</ProjectItems>
<PropertyGroup escapeValue="false">
<ProjectTypeGuids>{14822709-B5A1-4724-98CA-57A101D1B079};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
</PropertyGroup>
<Files>
<!-- Main -->
@ -103,7 +107,7 @@ using System.Runtime.InteropServices; @@ -103,7 +107,7 @@ using System.Runtime.InteropServices;
</File>
<!-- Workflow Code -->
<File name="Workflows\Workflow1.xoml.cs" DependentUpon="Workflow1.xoml" language="C#">
<File name="Workflow1.xoml.cs" DependentUpon="Workflow1.xoml" language="C#">
<![CDATA[${StandardHeader.C#}
using System;
@ -111,14 +115,14 @@ using System.Workflow.Activities; @@ -111,14 +115,14 @@ using System.Workflow.Activities;
namespace ${StandardNamespace}
{
partial class Workflow1 : SequentialWorkflowActivity
public partial class Workflow1 : SequentialWorkflowActivity
{
}
}]]>
</File>
<!-- Workflow -->
<File name="Workflows\Workflow1.xoml" language="Xoml" buildAction="Content" SubType="Component">
<File name="Workflow1.xoml" language="Xoml" buildAction="Content" SubType="Component">
<![CDATA[<SequentialWorkflowActivity
x:Class="${StandardNamespace}.Workflow1"
x:Name="Workflow1"

18
src/AddIns/DisplayBindings/WorkflowDesigner/Project/Templates/Projects/CSharp/EmptyProject.xpt

@ -22,11 +22,15 @@ @@ -22,11 +22,15 @@
<Reference Include="System.Workflow.ComponentModel" />
<Reference Include="System.Workflow.Runtime" />
</ProjectItems>
<Files>
<!-- Assembly -->
<File name="Configuration\AssemblyInfo.cs">
<![CDATA[using System.Reflection;
<PropertyGroup escapeValue="false">
<ProjectTypeGuids>{14822709-B5A1-4724-98CA-57A101D1B079};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
</PropertyGroup>
<Files>
<!-- Assembly -->
<File name="Configuration\AssemblyInfo.cs">
<![CDATA[using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
@ -59,7 +63,7 @@ using System.Runtime.InteropServices; @@ -59,7 +63,7 @@ using System.Runtime.InteropServices;
[assembly: AssemblyVersion("1.0.0.0")]
]]>
</File>
</Files>
</File>
</Files>
</Project>
</Template>

Loading…
Cancel
Save