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