diff --git a/src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/Gui/ViewContentControl.cs b/src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/Gui/ViewContentControl.cs
index 2978f463ed..8dedc422b1 100644
--- a/src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/Gui/ViewContentControl.cs
+++ b/src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/Gui/ViewContentControl.cs
@@ -19,6 +19,7 @@ using System.Drawing.Design;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Project;
using ICSharpCode.SharpDevelop.Gui;
+using ICSharpCode.SharpDevelop;
using ICSharpCode.TextEditor;
using ICSharpCode.TextEditor.Document;
using ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor;
@@ -37,6 +38,7 @@ namespace WorkflowDesigner
private DesignSurface designSurface;
private BasicDesignerLoader loader;
private IViewContent viewContent;
+ private bool addedSideTab;
public ViewContentControl(IViewContent viewContent)
{
@@ -46,8 +48,6 @@ namespace WorkflowDesigner
InitializeComponent();
this.viewContent = viewContent;
-
- WorkflowSideTabService.AddViewContent(this.viewContent);
}
@@ -80,7 +80,16 @@ namespace WorkflowDesigner
internal void LoadWorkflow(BasicDesignerLoader loader)
{
+
+ StatusBarService.SetMessage("Loading workflow " + Path.GetFileName(viewContent.PrimaryFileName) + "...");
+ Application.UseWaitCursor = true;
+ Application.DoEvents();
+ if (!addedSideTab){
+ WorkflowSideTabService.AddViewContent(this.viewContent);
+ addedSideTab = true;
+ }
+
this.loader = loader;
try {
@@ -96,6 +105,7 @@ namespace WorkflowDesigner
} catch (Exception e) {
TextBox errorText = new TextBox();
errorText.Multiline = true;
+ errorText.ScrollBars = ScrollBars.Both;
if (!designSurface.IsLoaded && designSurface.LoadErrors != null) {
errorText.Text = "Error loading designer:\r\n\r\n";
foreach(Exception le in designSurface.LoadErrors) {
@@ -113,6 +123,9 @@ namespace WorkflowDesigner
title.Text = "Failed to load designer. Check the source code for syntax errors and check if all references are available.";
title.Dock = DockStyle.Top;
Controls.Add(title);
+ } finally {
+ StatusBarService.SetMessage(String.Empty);
+ Application.UseWaitCursor = false;
}
}
diff --git a/src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/Services/EventBindingService/WorkflowDesignerEventBindingService.cs b/src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/Services/EventBindingService/WorkflowDesignerEventBindingService.cs
index 5152aaaff0..9993d098c2 100644
--- a/src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/Services/EventBindingService/WorkflowDesignerEventBindingService.cs
+++ b/src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/Services/EventBindingService/WorkflowDesignerEventBindingService.cs
@@ -45,14 +45,14 @@ namespace WorkflowDesigner
{
string codeFileName;
- protected WorkflowDesignerEventBindingService(IServiceProvider provider, string codeSeparationFileName)
+ protected WorkflowDesignerEventBindingService(IServiceProvider provider, string codeFileName)
{
this.provider = provider;
- this.codeFileName = codeSeparationFileName;
+ this.codeFileName = codeFileName;
}
- #region IWorkflowDesignerEventBinginService implementation
+ #region IWorkflowDesignerEventBindingService implementation
public void UpdateCodeCompileUnit()
{
LoggingService.Debug("UpdateCCU");
@@ -368,6 +368,7 @@ namespace WorkflowDesigner
public bool UseMethod(IComponent component, EventDescriptor eventDescriptor, string methodName)
{
LoggingService.DebugFormatted("UseMethod {0}", methodName);
+ LoggingService.DebugFormatted("CodeFileName={0}", this.codeFileName);
IClass completeClass;
IDesignerHost designerHost = (IDesignerHost)this.GetService(typeof(IDesignerHost));
@@ -382,45 +383,41 @@ namespace WorkflowDesigner
ICompilationUnit cu = (ICompilationUnit)info.BestCompilationUnit;
MethodInfo methodInfo = eventDescriptor.EventType.GetMethod("Invoke");
- foreach (IClass c in cu.Classes) {
- if (c.Name == rootDesigner.Component.Site.Name){
- LoggingService.DebugFormatted("Got designer class!");
- completeClass = c.GetCompoundClass();
-
- LoggingService.DebugFormatted("Looking for matching methods...");
-
-
- foreach (IMethod method in completeClass.Methods) {
- if ((method.Name == methodName) &&
- (method.Parameters.Count == methodInfo.GetParameters().Length)) {
- bool found = true;
- LoggingService.DebugFormatted("Name & nbr parms match, checking types...");
- for (int i = 0; i < methodInfo.GetParameters().Length; ++i) {
- ParameterInfo pInfo = methodInfo.GetParameters()[i];
- IParameter p = method.Parameters[i];
- if (p.ReturnType.FullyQualifiedName != pInfo.ParameterType.ToString()) {
- found = false;
- break;
- }
- }
- if (found) {
- LoggingService.DebugFormatted("Found matching method {0}", method.Name);
- int position = GetCursorLine(t.TextEditorControl.Document, method);
- t.TextEditorControl.ActiveTextAreaControl.JumpTo(position-1);
- return true;
- }
+ completeClass = cu.Classes[0].GetCompoundClass();
+
+ LoggingService.DebugFormatted("Looking for matching methods...");
+
+
+ foreach (IMethod method in completeClass.Methods) {
+ if ((method.Name == methodName) &&
+ (method.Parameters.Count == methodInfo.GetParameters().Length)) {
+ bool found = true;
+ LoggingService.DebugFormatted("Name & nbr parms match, checking types...");
+ for (int i = 0; i < methodInfo.GetParameters().Length; ++i) {
+ ParameterInfo pInfo = methodInfo.GetParameters()[i];
+ IParameter p = method.Parameters[i];
+ if (p.ReturnType.FullyQualifiedName != pInfo.ParameterType.ToString()) {
+ found = false;
+ break;
}
-
}
-
- LoggingService.DebugFormatted("Creating new method...");
- int line = GetEventHandlerInsertionLine(c);
- int offset = t.TextEditorControl.Document.GetLineSegment(line - 1).Offset;
- t.TextEditorControl.Document.Insert(offset, CreateEventHandler(completeClass, eventDescriptor, methodName, "", "\t\t"));
- UpdateCodeCompileUnit();
- return ShowCode(component, eventDescriptor, methodName);
+ if (found) {
+ LoggingService.DebugFormatted("Found matching method {0}", method.Name);
+ int position = GetCursorLine(t.TextEditorControl.Document, method);
+ t.TextEditorControl.ActiveTextAreaControl.JumpTo(position-1);
+
+ return true;
+ }
}
+
}
+
+ LoggingService.DebugFormatted("Creating new method...");
+ int line = GetEventHandlerInsertionLine(cu.Classes[0]);
+ int offset = t.TextEditorControl.Document.GetLineSegment(line - 1).Offset;
+ t.TextEditorControl.Document.Insert(offset, CreateEventHandler(completeClass, eventDescriptor, methodName, "", "\t\t"));
+ UpdateCodeCompileUnit();
+ return ShowCode(component, eventDescriptor, methodName);
}
return false;
diff --git a/src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/Services/TypeProviderService.cs b/src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/Services/TypeProviderService.cs
index a4cac851d7..88ffd40e41 100644
--- a/src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/Services/TypeProviderService.cs
+++ b/src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/Services/TypeProviderService.cs
@@ -160,12 +160,13 @@ namespace WorkflowDesigner
if (item is ProjectReferenceProjectItem) {
ProjectReferenceProjectItem pitem = item as ProjectReferenceProjectItem;
- AssemblyName name = new AssemblyName();
- name.CodeBase = pitem.ReferencedProject.OutputAssemblyFullPath;
// 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));
+ if (File.Exists(pitem.ReferencedProject.OutputAssemblyFullPath))
+ assembly = appDomain.Load(File.ReadAllBytes(pitem.ReferencedProject.OutputAssemblyFullPath));
+
+
} else if (item is ReferenceProjectItem) {
assembly = ReflectionLoader.ReflectionLoadGacAssembly(item.Include, false);
@@ -184,10 +185,8 @@ namespace WorkflowDesigner
private static void SolutionClosingEventHandler(object sender, SolutionEventArgs e)
{
// Remove unsed providers for closed projects.
- foreach (IProject project in e.Solution.Projects)
- {
- if (Providers.ContainsKey(project))
- {
+ foreach (IProject project in e.Solution.Projects) {
+ if (Providers.ContainsKey(project)) {
Providers[project].Dispose();
Providers.Remove(project);
}
@@ -222,7 +221,7 @@ namespace WorkflowDesigner
}
CodeCompileUnit ccu;
-
+
if (files.Count > 0) {
string[] s = new string[files.Count];
for (int i = 0; i < files.Count; i++)
@@ -238,12 +237,14 @@ namespace WorkflowDesigner
// Now create one ccu for each source file.
foreach (ProjectItem item in project.GetItemsOfType(ItemType.Compile)){
ICSharpCode.Core.LoggingService.Debug(item.FileName);
- if (item is FileProjectItem) {
- ccu = Parse(item.FileName);
- if (ccu != null) {
- typeProvider.AddCodeCompileUnit(ccu);
- cp.UserCodeCompileUnits.Add(ccu);
- CodeCompileUnits.Add(item as FileProjectItem, ccu);
+ if (item is FileProjectItem){
+ if (!Path.GetFileName(item.FileName).StartsWith("AssemblyInfo")){
+ ccu = Parse(item.FileName);
+ if (ccu != null) {
+ typeProvider.AddCodeCompileUnit(ccu);
+ cp.UserCodeCompileUnits.Add(ccu);
+ CodeCompileUnits.Add(item as FileProjectItem, ccu);
+ }
}
}
}
@@ -344,4 +345,5 @@ namespace WorkflowDesigner
}
}
+
}
diff --git a/src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/Services/WorkflowSideTabService.cs b/src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/Services/WorkflowSideTabService.cs
index f2d232c13a..53e49d177d 100644
--- a/src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/Services/WorkflowSideTabService.cs
+++ b/src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/Services/WorkflowSideTabService.cs
@@ -89,7 +89,8 @@ namespace WorkflowDesigner
Debug.Assert(WorkbenchSingleton.InvokeRequired == false);
if (workflowSideBar == null) {
workflowSideBar = new SharpDevelopSideBar();
-
+ workflowSideBar.Tabs.Add(standardSideTab);
+ WorkflowSideBar.ActiveTab = standardSideTab;
}
return workflowSideBar;
}
@@ -105,6 +106,7 @@ namespace WorkflowDesigner
ProjectService.SolutionClosing += SolutionClosingEventHandler;
initialised = true;
+
}
public static void AddViewContent(IViewContent viewContent)
@@ -117,13 +119,13 @@ namespace WorkflowDesigner
// Make sure the standard workflow sidebar exists
if (standardSideTab == null) {
+ LoggingService.Debug("Creating standard workflow sidetab");
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.
- //viewContent.SwitchedTo += ViewContentActivatedEventHandler;
- viewContent.Disposed += ViewContentDisposedEventHandler;
+ //viewContent.Disposed += ViewContentDisposedEventHandler;
ViewCount++;
}
@@ -289,7 +291,9 @@ namespace WorkflowDesigner
{
foreach (ProjectItem item in project.Items) {
if (item is ProjectReferenceProjectItem) {
- tabs.Add(item as ReferenceProjectItem, CreateSideTabForProjectItem(item));
+ if (File.Exists(((ProjectReferenceProjectItem)item).ReferencedProject.OutputAssemblyFullPath)){
+ tabs.Add(item as ReferenceProjectItem, CreateSideTabForProjectItem(item));
+ }
} else if (item is ReferenceProjectItem) {
if (!item.Include.StartsWith("System")){
@@ -306,7 +310,6 @@ namespace WorkflowDesigner
if (item is ProjectReferenceProjectItem) {
ProjectReferenceProjectItem pitem = item as ProjectReferenceProjectItem;
assemblyName = new AssemblyName();
-
assemblyName.CodeBase = pitem.ReferencedProject.OutputAssemblyFullPath;
return CreateSideTabFromAssembly(pitem.ReferencedProject.Name, assemblyName);
diff --git a/src/AddIns/DisplayBindings/WorkflowDesigner/Project/WorkflowDesigner.csproj b/src/AddIns/DisplayBindings/WorkflowDesigner/Project/WorkflowDesigner.csproj
index 8451738a8d..3d0608f20c 100644
--- a/src/AddIns/DisplayBindings/WorkflowDesigner/Project/WorkflowDesigner.csproj
+++ b/src/AddIns/DisplayBindings/WorkflowDesigner/Project/WorkflowDesigner.csproj
@@ -142,6 +142,11 @@
ICSharpCode.SharpDevelop.Dom
False
+
+ {80318B5F-A25D-45AB-8A95-EF31D2370A4C}
+ ICSharpCode.SharpDevelop.Sda
+ False
+
{8035765F-D51F-4A0C-A746-2FD100E19419}
ICSharpCode.SharpDevelop.Widgets