Browse Source

SideTab updates

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@2668 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Russell Wilkins 18 years ago
parent
commit
c52097bcb7
  1. 17
      src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/Gui/ViewContentControl.cs
  2. 73
      src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/Services/EventBindingService/WorkflowDesignerEventBindingService.cs
  3. 30
      src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/Services/TypeProviderService.cs
  4. 13
      src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/Services/WorkflowSideTabService.cs
  5. 5
      src/AddIns/DisplayBindings/WorkflowDesigner/Project/WorkflowDesigner.csproj

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

@ -19,6 +19,7 @@ using System.Drawing.Design;
using ICSharpCode.Core; using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Project; using ICSharpCode.SharpDevelop.Project;
using ICSharpCode.SharpDevelop.Gui; using ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.SharpDevelop;
using ICSharpCode.TextEditor; using ICSharpCode.TextEditor;
using ICSharpCode.TextEditor.Document; using ICSharpCode.TextEditor.Document;
using ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor; using ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor;
@ -37,6 +38,7 @@ namespace WorkflowDesigner
private DesignSurface designSurface; private DesignSurface designSurface;
private BasicDesignerLoader loader; private BasicDesignerLoader loader;
private IViewContent viewContent; private IViewContent viewContent;
private bool addedSideTab;
public ViewContentControl(IViewContent viewContent) public ViewContentControl(IViewContent viewContent)
{ {
@ -46,8 +48,6 @@ namespace WorkflowDesigner
InitializeComponent(); InitializeComponent();
this.viewContent = viewContent; this.viewContent = viewContent;
WorkflowSideTabService.AddViewContent(this.viewContent);
} }
@ -80,7 +80,16 @@ namespace WorkflowDesigner
internal void LoadWorkflow(BasicDesignerLoader loader) 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; this.loader = loader;
try { try {
@ -96,6 +105,7 @@ namespace WorkflowDesigner
} catch (Exception e) { } catch (Exception e) {
TextBox errorText = new TextBox(); TextBox errorText = new TextBox();
errorText.Multiline = true; errorText.Multiline = true;
errorText.ScrollBars = ScrollBars.Both;
if (!designSurface.IsLoaded && designSurface.LoadErrors != null) { if (!designSurface.IsLoaded && designSurface.LoadErrors != null) {
errorText.Text = "Error loading designer:\r\n\r\n"; errorText.Text = "Error loading designer:\r\n\r\n";
foreach(Exception le in designSurface.LoadErrors) { 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.Text = "Failed to load designer. Check the source code for syntax errors and check if all references are available.";
title.Dock = DockStyle.Top; title.Dock = DockStyle.Top;
Controls.Add(title); Controls.Add(title);
} finally {
StatusBarService.SetMessage(String.Empty);
Application.UseWaitCursor = false;
} }
} }

73
src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/Services/EventBindingService/WorkflowDesignerEventBindingService.cs

@ -45,14 +45,14 @@ namespace WorkflowDesigner
{ {
string codeFileName; string codeFileName;
protected WorkflowDesignerEventBindingService(IServiceProvider provider, string codeSeparationFileName) protected WorkflowDesignerEventBindingService(IServiceProvider provider, string codeFileName)
{ {
this.provider = provider; this.provider = provider;
this.codeFileName = codeSeparationFileName; this.codeFileName = codeFileName;
} }
#region IWorkflowDesignerEventBinginService implementation #region IWorkflowDesignerEventBindingService implementation
public void UpdateCodeCompileUnit() public void UpdateCodeCompileUnit()
{ {
LoggingService.Debug("UpdateCCU"); LoggingService.Debug("UpdateCCU");
@ -368,6 +368,7 @@ namespace WorkflowDesigner
public bool UseMethod(IComponent component, EventDescriptor eventDescriptor, string methodName) public bool UseMethod(IComponent component, EventDescriptor eventDescriptor, string methodName)
{ {
LoggingService.DebugFormatted("UseMethod {0}", methodName); LoggingService.DebugFormatted("UseMethod {0}", methodName);
LoggingService.DebugFormatted("CodeFileName={0}", this.codeFileName);
IClass completeClass; IClass completeClass;
IDesignerHost designerHost = (IDesignerHost)this.GetService(typeof(IDesignerHost)); IDesignerHost designerHost = (IDesignerHost)this.GetService(typeof(IDesignerHost));
@ -382,45 +383,41 @@ namespace WorkflowDesigner
ICompilationUnit cu = (ICompilationUnit)info.BestCompilationUnit; ICompilationUnit cu = (ICompilationUnit)info.BestCompilationUnit;
MethodInfo methodInfo = eventDescriptor.EventType.GetMethod("Invoke"); MethodInfo methodInfo = eventDescriptor.EventType.GetMethod("Invoke");
foreach (IClass c in cu.Classes) { completeClass = cu.Classes[0].GetCompoundClass();
if (c.Name == rootDesigner.Component.Site.Name){
LoggingService.DebugFormatted("Got designer class!"); LoggingService.DebugFormatted("Looking for matching methods...");
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)) {
foreach (IMethod method in completeClass.Methods) { bool found = true;
if ((method.Name == methodName) && LoggingService.DebugFormatted("Name & nbr parms match, checking types...");
(method.Parameters.Count == methodInfo.GetParameters().Length)) { for (int i = 0; i < methodInfo.GetParameters().Length; ++i) {
bool found = true; ParameterInfo pInfo = methodInfo.GetParameters()[i];
LoggingService.DebugFormatted("Name & nbr parms match, checking types..."); IParameter p = method.Parameters[i];
for (int i = 0; i < methodInfo.GetParameters().Length; ++i) { if (p.ReturnType.FullyQualifiedName != pInfo.ParameterType.ToString()) {
ParameterInfo pInfo = methodInfo.GetParameters()[i]; found = false;
IParameter p = method.Parameters[i]; break;
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;
}
} }
} }
if (found) {
LoggingService.DebugFormatted("Creating new method..."); LoggingService.DebugFormatted("Found matching method {0}", method.Name);
int line = GetEventHandlerInsertionLine(c); int position = GetCursorLine(t.TextEditorControl.Document, method);
int offset = t.TextEditorControl.Document.GetLineSegment(line - 1).Offset; t.TextEditorControl.ActiveTextAreaControl.JumpTo(position-1);
t.TextEditorControl.Document.Insert(offset, CreateEventHandler(completeClass, eventDescriptor, methodName, "", "\t\t"));
UpdateCodeCompileUnit(); return true;
return ShowCode(component, eventDescriptor, methodName); }
} }
} }
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; return false;

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

@ -160,12 +160,13 @@ namespace WorkflowDesigner
if (item is ProjectReferenceProjectItem) { if (item is ProjectReferenceProjectItem) {
ProjectReferenceProjectItem pitem = item as 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. // 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. // 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) { } else if (item is ReferenceProjectItem) {
assembly = ReflectionLoader.ReflectionLoadGacAssembly(item.Include, false); assembly = ReflectionLoader.ReflectionLoadGacAssembly(item.Include, false);
@ -184,10 +185,8 @@ namespace WorkflowDesigner
private static void SolutionClosingEventHandler(object sender, SolutionEventArgs e) private static void SolutionClosingEventHandler(object sender, SolutionEventArgs e)
{ {
// Remove unsed providers for closed projects. // Remove unsed providers for closed projects.
foreach (IProject project in e.Solution.Projects) foreach (IProject project in e.Solution.Projects) {
{ if (Providers.ContainsKey(project)) {
if (Providers.ContainsKey(project))
{
Providers[project].Dispose(); Providers[project].Dispose();
Providers.Remove(project); Providers.Remove(project);
} }
@ -222,7 +221,7 @@ namespace WorkflowDesigner
} }
CodeCompileUnit ccu; CodeCompileUnit ccu;
if (files.Count > 0) { if (files.Count > 0) {
string[] s = new string[files.Count]; string[] s = new string[files.Count];
for (int i = 0; i < files.Count; i++) for (int i = 0; i < files.Count; i++)
@ -238,12 +237,14 @@ namespace WorkflowDesigner
// Now create one ccu for each source file. // Now create one ccu for each source file.
foreach (ProjectItem item in project.GetItemsOfType(ItemType.Compile)){ foreach (ProjectItem item in project.GetItemsOfType(ItemType.Compile)){
ICSharpCode.Core.LoggingService.Debug(item.FileName); ICSharpCode.Core.LoggingService.Debug(item.FileName);
if (item is FileProjectItem) { if (item is FileProjectItem){
ccu = Parse(item.FileName); if (!Path.GetFileName(item.FileName).StartsWith("AssemblyInfo")){
if (ccu != null) { ccu = Parse(item.FileName);
typeProvider.AddCodeCompileUnit(ccu); if (ccu != null) {
cp.UserCodeCompileUnits.Add(ccu); typeProvider.AddCodeCompileUnit(ccu);
CodeCompileUnits.Add(item as FileProjectItem, ccu); cp.UserCodeCompileUnits.Add(ccu);
CodeCompileUnits.Add(item as FileProjectItem, ccu);
}
} }
} }
} }
@ -344,4 +345,5 @@ namespace WorkflowDesigner
} }
} }
} }

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

@ -89,7 +89,8 @@ namespace WorkflowDesigner
Debug.Assert(WorkbenchSingleton.InvokeRequired == false); Debug.Assert(WorkbenchSingleton.InvokeRequired == false);
if (workflowSideBar == null) { if (workflowSideBar == null) {
workflowSideBar = new SharpDevelopSideBar(); workflowSideBar = new SharpDevelopSideBar();
workflowSideBar.Tabs.Add(standardSideTab);
WorkflowSideBar.ActiveTab = standardSideTab;
} }
return workflowSideBar; return workflowSideBar;
} }
@ -105,6 +106,7 @@ namespace WorkflowDesigner
ProjectService.SolutionClosing += SolutionClosingEventHandler; ProjectService.SolutionClosing += SolutionClosingEventHandler;
initialised = true; initialised = true;
} }
public static void AddViewContent(IViewContent viewContent) public static void AddViewContent(IViewContent viewContent)
@ -117,13 +119,13 @@ namespace WorkflowDesigner
// Make sure the standard workflow sidebar exists // Make sure the standard workflow sidebar exists
if (standardSideTab == null) { 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")); 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); LoadSideTabItemsFromAssembly(new AssemblyName("System.Workflow.ComponentModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"), standardSideTab);
} }
// Attach the handlers. // Attach the handlers.
//viewContent.SwitchedTo += ViewContentActivatedEventHandler; //viewContent.Disposed += ViewContentDisposedEventHandler;
viewContent.Disposed += ViewContentDisposedEventHandler;
ViewCount++; ViewCount++;
} }
@ -289,7 +291,9 @@ namespace WorkflowDesigner
{ {
foreach (ProjectItem item in project.Items) { foreach (ProjectItem item in project.Items) {
if (item is ProjectReferenceProjectItem) { 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) { } else if (item is ReferenceProjectItem) {
if (!item.Include.StartsWith("System")){ if (!item.Include.StartsWith("System")){
@ -306,7 +310,6 @@ namespace WorkflowDesigner
if (item is ProjectReferenceProjectItem) { if (item is ProjectReferenceProjectItem) {
ProjectReferenceProjectItem pitem = item as ProjectReferenceProjectItem; ProjectReferenceProjectItem pitem = item as ProjectReferenceProjectItem;
assemblyName = new AssemblyName(); assemblyName = new AssemblyName();
assemblyName.CodeBase = pitem.ReferencedProject.OutputAssemblyFullPath; assemblyName.CodeBase = pitem.ReferencedProject.OutputAssemblyFullPath;
return CreateSideTabFromAssembly(pitem.ReferencedProject.Name, assemblyName); return CreateSideTabFromAssembly(pitem.ReferencedProject.Name, assemblyName);

5
src/AddIns/DisplayBindings/WorkflowDesigner/Project/WorkflowDesigner.csproj

@ -142,6 +142,11 @@
<Name>ICSharpCode.SharpDevelop.Dom</Name> <Name>ICSharpCode.SharpDevelop.Dom</Name>
<Private>False</Private> <Private>False</Private>
</ProjectReference> </ProjectReference>
<ProjectReference Include="..\..\..\..\Main\ICSharpCode.SharpDevelop.Sda\ICSharpCode.SharpDevelop.Sda.csproj">
<Project>{80318B5F-A25D-45AB-8A95-EF31D2370A4C}</Project>
<Name>ICSharpCode.SharpDevelop.Sda</Name>
<Private>False</Private>
</ProjectReference>
<ProjectReference Include="..\..\..\..\Main\ICSharpCode.SharpDevelop.Widgets\Project\ICSharpCode.SharpDevelop.Widgets.csproj"> <ProjectReference Include="..\..\..\..\Main\ICSharpCode.SharpDevelop.Widgets\Project\ICSharpCode.SharpDevelop.Widgets.csproj">
<Project>{8035765F-D51F-4A0C-A746-2FD100E19419}</Project> <Project>{8035765F-D51F-4A0C-A746-2FD100E19419}</Project>
<Name>ICSharpCode.SharpDevelop.Widgets</Name> <Name>ICSharpCode.SharpDevelop.Widgets</Name>

Loading…
Cancel
Save