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; @@ -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 @@ -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 @@ -46,8 +48,6 @@ namespace WorkflowDesigner
InitializeComponent();
this.viewContent = viewContent;
WorkflowSideTabService.AddViewContent(this.viewContent);
}
@ -80,7 +80,16 @@ namespace WorkflowDesigner @@ -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 @@ -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 @@ -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;
}
}

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

@ -45,14 +45,14 @@ namespace WorkflowDesigner @@ -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 @@ -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 @@ -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;

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

@ -160,12 +160,13 @@ namespace WorkflowDesigner @@ -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 @@ -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 @@ -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 @@ -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 @@ -344,4 +345,5 @@ namespace WorkflowDesigner
}
}
}

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

@ -89,7 +89,8 @@ namespace WorkflowDesigner @@ -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 @@ -105,6 +106,7 @@ namespace WorkflowDesigner
ProjectService.SolutionClosing += SolutionClosingEventHandler;
initialised = true;
}
public static void AddViewContent(IViewContent viewContent)
@ -117,13 +119,13 @@ namespace WorkflowDesigner @@ -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 @@ -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 @@ -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);

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

@ -142,6 +142,11 @@ @@ -142,6 +142,11 @@
<Name>ICSharpCode.SharpDevelop.Dom</Name>
<Private>False</Private>
</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">
<Project>{8035765F-D51F-4A0C-A746-2FD100E19419}</Project>
<Name>ICSharpCode.SharpDevelop.Widgets</Name>

Loading…
Cancel
Save