Browse Source

Refactoring the WorkflowDesignerLoaders

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@2386 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Russell Wilkins 19 years ago
parent
commit
fb453bac9f
  1. 2
      src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/Gui/ViewContentControl.cs
  2. 155
      src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/Loaders/BasicWorkflowDesignerLoader.cs
  3. 156
      src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/Loaders/CodeDesignerLoader.cs
  4. 2
      src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/Loaders/WorkflowDesignerLoadException.cs
  5. 10
      src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/Loaders/XomlCodeSeparationDesignerLoader.cs
  6. 117
      src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/Loaders/XomlDesignerLoader.cs
  7. 6
      src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/PrimaryView/PrimaryViewContent.cs
  8. 8
      src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/SecondaryView/SecondaryViewContent.cs
  9. 2
      src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/Services/EventBindingService/WorkflowDesignerEventBindingService.cs
  10. 63
      src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/Services/IdentifierCreationService.cs
  11. 4
      src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/Services/MemberCreationService.cs
  12. 22
      src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/Services/TypeProviderService.cs
  13. 4
      src/AddIns/DisplayBindings/WorkflowDesigner/Project/WorkflowDesigner.csproj

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

@ -22,6 +22,8 @@ using ICSharpCode.SharpDevelop.Gui;
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;
using WorkflowDesigner.Loaders;
#endregion #endregion
namespace WorkflowDesigner namespace WorkflowDesigner

155
src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/Loaders/BasicWorkflowDesignerLoader.cs

@ -0,0 +1,155 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Russell Wilkins" email=""/>
// <version>$Revision$</version>
// </file>
#region Using
using System;
using System.ComponentModel.Design;
using System.ComponentModel.Design.Serialization;
using System.Drawing.Design;
using System.Globalization;
using System.IO;
using System.Text;
using System.Workflow.ComponentModel.Design;
using System.Workflow.ComponentModel.Compiler;
using ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.SharpDevelop.Project;
#endregion
namespace WorkflowDesigner.Loaders
{
/// <summary>
/// Description of BasicWorkflowDesignerLoader.
/// </summary>
public abstract class BasicWorkflowDesignerLoader : WorkflowDesignerLoader
{
private IViewContent viewContent;
private string ruleFileName = string.Empty;
private StringBuilder rules;
public BasicWorkflowDesignerLoader(IViewContent viewContent)
{
this.viewContent = viewContent;
ruleFileName = Path.Combine(Path.GetDirectoryName(FileName),
Path.GetFileNameWithoutExtension(FileName) + ".rules");
}
#region Property Accessors
public IViewContent ViewContent {
get { return viewContent; }
}
public override string FileName {
get {
return viewContent.PrimaryFileName;
}
}
public IProject Project {
get {
return ProjectService.OpenSolution.FindProjectContainingFile(FileName);
}
}
#endregion
public override TextReader GetFileReader(string filePath)
{
return new StringReader(rules.ToString());
}
public override TextWriter GetFileWriter(string filePath)
{
if (rules == null) {
rules = new StringBuilder();
CreateRulesProjectItem();
}
return new StringWriter(rules, CultureInfo.CurrentCulture);
}
private void LoadRules()
{
// Load the rules
if (File.Exists(ruleFileName)) {
rules = new StringBuilder(File.ReadAllText(ruleFileName));
CreateRulesProjectItem();
}
}
private void UpdateRules()
{
if ((rules != null) && (rules.Length > 0))
File.WriteAllText(ruleFileName, rules.ToString());
}
private void CreateRulesProjectItem()
{
if (Project != null){
if (!Project.IsFileInProject(ruleFileName)) {
FileProjectItem fpi = Project.FindFile(FileName);
FileProjectItem rfpi = new FileProjectItem(Project,ItemType.EmbeddedResource);
rfpi.FileName = Path.Combine(Path.GetDirectoryName(FileName), Path.GetFileName(ruleFileName));
rfpi.DependentUpon = Path.GetFileName(FileName);
ProjectService.AddProjectItem(Project, rfpi);
ProjectBrowserPad.Instance.ProjectBrowserControl.RefreshView();
Project.Save();
}
}
}
protected override void Initialize()
{
base.Initialize();
// Add the basic service required by all designers
LoaderHost.AddService(typeof(IToolboxService), new WorkflowToolboxService(LoaderHost));
LoaderHost.AddService(typeof(ITypeProvider), TypeProviderService.GetTypeProvider(Project));
LoaderHost.AddService(typeof(IMenuCommandService), new WorkflowMenuCommandService(LoaderHost));
LoaderHost.AddService(typeof(ITypeResolutionService), new TypeResolutionService(Project,LoaderHost));
LoaderHost.AddService(typeof(IPropertyValueUIService), new PropertyValueUIService());
}
public override void Dispose()
{
try {
// Remove all the services from the from the host designer.
if (LoaderHost != null) {
LoaderHost.RemoveService(typeof(IToolboxService));
LoaderHost.RemoveService(typeof(ITypeProvider));
LoaderHost.RemoveService(typeof(IEventBindingService));
LoaderHost.RemoveService(typeof(IMenuCommandService));
LoaderHost.RemoveService(typeof(IPropertyValueUIService));
LoaderHost.RemoveService(typeof(ITypeResolutionService));
LoaderHost.RemoveService(typeof(IMemberCreationService));
}
} finally {
base.Dispose();
}
}
protected override void PerformLoad(IDesignerSerializationManager serializationManager)
{
base.PerformLoad(serializationManager);
DoPerformLoad(serializationManager);
LoadRules();
LoaderHost.Activate();
}
protected abstract void DoPerformLoad(IDesignerSerializationManager serializationManager);
protected override void PerformFlush(IDesignerSerializationManager serializationManager)
{
DoPerformFlush(serializationManager);
UpdateRules();
}
protected abstract void DoPerformFlush(IDesignerSerializationManager serializationManager);
}
}

156
src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/Loaders/NRefactoryDesignerLoader.cs → src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/Loaders/CodeDesignerLoader.cs

@ -6,116 +6,81 @@
// </file> // </file>
#region Using #region Using
using ICSharpCode.Core;
using ICSharpCode.NRefactory;
using ICSharpCode.NRefactory.Ast;
using ICSharpCode.NRefactory.Visitors;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.TextEditor;
using ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.SharpDevelop.Project;
using System; using System;
using System.CodeDom; using System.CodeDom;
using System.CodeDom.Compiler;
using System.Collections;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel.Design; using System.ComponentModel.Design;
using System.ComponentModel.Design.Serialization; using System.ComponentModel.Design.Serialization;
using System.Drawing.Design;
using System.IO; using System.IO;
using System.Reflection; using System.Workflow.ComponentModel;
using System.Workflow.ComponentModel.Compiler;
using System.Workflow.ComponentModel.Design; using System.Workflow.ComponentModel.Design;
using System.Windows.Forms;
#endregion
namespace WorkflowDesigner using ICSharpCode.Core;
{ using ICSharpCode.SharpDevelop;
public class DefaultMemberRelationshipService : MemberRelationshipService using ICSharpCode.SharpDevelop.Gui;
{ using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.NRefactory;
using ICSharpCode.NRefactory.Ast;
using ICSharpCode.NRefactory.Visitors;
#endregion
public override bool SupportsRelationship(MemberRelationship source, MemberRelationship relationship) namespace WorkflowDesigner.Loaders
{ {
return true;
}
protected override MemberRelationship GetRelationship(MemberRelationship source)
{
return base.GetRelationship(source);
}
}
/// <summary> /// <summary>
/// Description of CodeDomLoader. /// Description of CodeDesignerLoader.
/// </summary> /// </summary>
public class NRefactoryDesignerLoader : CodeDomDesignerLoader public class CodeDesignerLoader : BasicWorkflowDesignerLoader
{ {
TextEditorControl textEditorControl; public CodeDesignerLoader(IViewContent viewContent) : base(viewContent)
//IDesignerGenerator generator = new CSharpDesignerGenerator();
IViewContent viewContent;
#region Constructors
public NRefactoryDesignerLoader(TextEditorControl textEditorControl, IViewContent viewContent) : base()
{ {
this.textEditorControl = textEditorControl;
this.viewContent = viewContent;
} }
#endregion
CodeDomProvider codeDomProvider = Microsoft.CSharp.CSharpCodeProvider.CreateProvider("CSharp");
protected override CodeDomProvider CodeDomProvider {
get {
return codeDomProvider;
}
}
protected override ITypeResolutionService TypeResolutionService {
get {
return GetService(typeof(ITypeResolutionService)) as ITypeResolutionService;
}
}
protected override void Write(CodeCompileUnit unit)
{
LoggingService.Debug("NRefactoryDesignerLoader.Write()");
throw new NotImplementedException();
}
protected override void Initialize() protected override void Initialize()
{ {
ITypeProvider typeProvider = TypeProviderService.GetTypeProvider(ProjectService.OpenSolution.FindProjectContainingFile(viewContent.PrimaryFileName)); base.Initialize();
try {
typeProvider.GetType("System.ComponentModel.Design.Serialization.CodeDomSerializer", true);
} catch (Exception ex) {
MessageService.ShowErrorFormatted("Unable to find class CodeDomSerializer, make sure the project has a reference to assembly System.Design");
throw ex;
}
LoaderHost.AddService(typeof(ITypeProvider), typeProvider);
LoaderHost.AddService(typeof(IIdentifierCreationService), new IdentifierCreationService());
LoaderHost.AddService(typeof(IMemberCreationService), new MemberCreationService(LoaderHost)); LoaderHost.AddService(typeof(IMemberCreationService), new MemberCreationService(LoaderHost));
LoaderHost.AddService(typeof(IEventBindingService), new CSharpWorkflowDesignerEventBindingService(LoaderHost, viewContent.PrimaryFileName)); LoaderHost.AddService(typeof(IEventBindingService), new CSharpWorkflowDesignerEventBindingService(LoaderHost, ViewContent.PrimaryFileName));
LoaderHost.AddService(typeof(IToolboxService), new WorkflowToolboxService(LoaderHost)); }
LoaderHost.AddService(typeof(MemberRelationshipService), new DefaultMemberRelationshipService());
LoaderHost.AddService(typeof(IMenuCommandService), new WorkflowMenuCommandService(LoaderHost)); protected override void DoPerformLoad(IDesignerSerializationManager serializationManager)
LoaderHost.AddService(typeof(ITypeResolutionService), new TypeResolutionService(ProjectService.OpenSolution.FindProjectContainingFile(this.textEditorControl.FileName),LoaderHost)); {
LoaderHost.AddService(typeof(IPropertyValueUIService), new PropertyValueUIService());
// Step 1, Get the CodeDom
CodeCompileUnit ccu = Parse();
// Step 2, Find the first class
CodeTypeDeclaration cdt = ccu.Namespaces[0].Types[0];
TypeResolutionService srv = GetService(typeof(ITypeResolutionService)) as TypeResolutionService;
Type t = srv.GetType(cdt.BaseTypes[0].BaseType);
if (t == null)
throw new WorkflowDesignerLoadException("Unable to resolve type " + cdt.BaseTypes[0].BaseType);
// Step 3, Deserialize it!
TypeCodeDomSerializer cds = serializationManager.GetSerializer(t, typeof(TypeCodeDomSerializer)) as TypeCodeDomSerializer;
// Step 4, load up the designer.
Activity rootActivity = null;
rootActivity = cds.Deserialize(serializationManager, cdt) as Activity;
rootActivity.Name = cdt.Name;
LoaderHost.Container.Add(rootActivity, rootActivity.QualifiedName);
SetBaseComponentClassName(ccu.Namespaces[0].Name + "." + cdt.Name);
}
protected override void DoPerformFlush(IDesignerSerializationManager serializationManager)
{
base.Initialize();
} }
#region Taken from FormDesigner.NRefactoryDesignerLoad to get a CodeCompileUnit for the activity. #region Taken from FormDesigner.NRefactoryDesignerLoad to get a single CodeCompileUnit for the activity.
string lastTextContent; protected CodeCompileUnit Parse()
protected override CodeCompileUnit Parse()
{ {
LoggingService.Debug("NRefactoryDesignerLoader.Parse()"); ParseInformation parseInfo = ParserService.GetParseInformation(FileName);
lastTextContent = textEditorControl.Document.TextContent;
ParseInformation parseInfo = ParserService.GetParseInformation(textEditorControl.FileName);
IClass formClass; IClass formClass;
bool isFirstClassInFile; bool isFirstClassInFile;
@ -191,17 +156,6 @@ namespace WorkflowDesigner
visitor.EnvironmentInformationProvider = new ICSharpCode.SharpDevelop.Dom.NRefactoryResolver.NRefactoryInformationProvider(formClass.ProjectContent); visitor.EnvironmentInformationProvider = new ICSharpCode.SharpDevelop.Dom.NRefactoryResolver.NRefactoryInformationProvider(formClass.ProjectContent);
visitor.VisitCompilationUnit(combinedCu, null); visitor.VisitCompilationUnit(combinedCu, null);
// output generated CodeDOM to the console :
#if DEBUG
// if ((Control.ModifierKeys & Keys.Control) == Keys.Control) {
// CodeDomVerboseOutputGenerator outputGenerator = new CodeDomVerboseOutputGenerator();
// outputGenerator.GenerateCodeFromMember(visitor.codeCompileUnit.Namespaces[0].Types[0], Console.Out, null);
// this.CodeDomProvider.GenerateCodeFromCompileUnit(visitor.codeCompileUnit, Console.Out, null);
// }
#endif
LoggingService.Debug("NRefactoryDesignerLoader.Parse() finished");
if (!isFirstClassInFile) { if (!isFirstClassInFile) {
MessageService.ShowWarning("The form must be the first class in the file in order for form resources be compiled correctly.\n" + MessageService.ShowWarning("The form must be the first class in the file in order for form resources be compiled correctly.\n" +
"Please move other classes below the form class definition or move them to other files."); "Please move other classes below the form class definition or move them to other files.");
@ -212,11 +166,6 @@ namespace WorkflowDesigner
public static IList<IClass> FindFormClassParts(ParseInformation parseInfo, out IClass formClass, out bool isFirstClassInFile) public static IList<IClass> FindFormClassParts(ParseInformation parseInfo, out IClass formClass, out bool isFirstClassInFile)
{ {
#if DEBUG
if ((Control.ModifierKeys & (Keys.Alt | Keys.Control)) == (Keys.Alt | Keys.Control)) {
System.Diagnostics.Debugger.Break();
}
#endif
formClass = null; formClass = null;
isFirstClassInFile = true; isFirstClassInFile = true;
@ -317,5 +266,6 @@ namespace WorkflowDesigner
} }
#endregion #endregion
} }
} }

2
src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/Loaders/WorkflowDesignerLoadException.cs

@ -8,7 +8,7 @@
using System; using System;
using System.Runtime.Serialization; using System.Runtime.Serialization;
namespace WorkflowDesigner namespace WorkflowDesigner.Loaders
{ {
/// <summary> /// <summary>
/// Description of WorkflowDesignerLoaderException. /// Description of WorkflowDesignerLoaderException.

10
src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/Loaders/XomlCodeSeparationDesignerLoader.cs

@ -20,7 +20,7 @@ using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor; using ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor;
#endregion #endregion
namespace WorkflowDesigner namespace WorkflowDesigner.Loaders
{ {
/// <summary> /// <summary>
/// Description of XomlCodeSeparationDesignerLoader. /// Description of XomlCodeSeparationDesignerLoader.
@ -29,7 +29,7 @@ namespace WorkflowDesigner
{ {
private string codeFileName; private string codeFileName;
public XomlCodeSeparationDesignerLoader(IViewContent viewContent, string fileName, Stream stream, string codeFileName) : base(viewContent, fileName, stream) public XomlCodeSeparationDesignerLoader(IViewContent viewContent, Stream stream, string codeFileName) : base(viewContent, stream)
{ {
this.codeFileName = codeFileName; this.codeFileName = codeFileName;
} }
@ -43,14 +43,12 @@ namespace WorkflowDesigner
LoaderHost.AddService(typeof(IEventBindingService), new CSharpWorkflowDesignerEventBindingService(LoaderHost,codeFileName)); LoaderHost.AddService(typeof(IEventBindingService), new CSharpWorkflowDesignerEventBindingService(LoaderHost,codeFileName));
} }
protected override void Load(IDesignerSerializationManager serializationManager) protected override void DoPerformLoad(IDesignerSerializationManager serializationManager)
{ {
IWorkflowDesignerEventBindingService srv = LoaderHost.GetService(typeof(IEventBindingService)) as IWorkflowDesignerEventBindingService; IWorkflowDesignerEventBindingService srv = LoaderHost.GetService(typeof(IEventBindingService)) as IWorkflowDesignerEventBindingService;
srv.UpdateCodeCompileUnit(); srv.UpdateCodeCompileUnit();
LoadFromXoml(serializationManager); LoadXoml(serializationManager);
LoaderHost.Activate();
} }

117
src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/Loaders/XomlDesignerLoader.cs

@ -28,28 +28,21 @@ using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Dom; using ICSharpCode.SharpDevelop.Dom;
#endregion #endregion
namespace WorkflowDesigner namespace WorkflowDesigner.Loaders
{ {
/// <summary> /// <summary>
/// Description of XomlDesignerLoader. /// Description of XomlDesignerLoader.
/// </summary> /// </summary>
public class XomlDesignerLoader : WorkflowDesignerLoader public class XomlDesignerLoader : BasicWorkflowDesignerLoader
{ {
private string xoml = string.Empty; private string xoml = string.Empty;
private StringBuilder rules;
private string fileName = string.Empty;
private string rulesFileName = string.Empty;
private IViewContent viewContent;
public XomlDesignerLoader(IViewContent viewContent) public XomlDesignerLoader(IViewContent viewContent) : base(viewContent)
{ {
this.viewContent = viewContent;
} }
public XomlDesignerLoader(IViewContent viewContent, string fileName, Stream stream) : this(viewContent) public XomlDesignerLoader(IViewContent viewContent, Stream stream) : this(viewContent)
{ {
this.fileName = fileName;
rulesFileName = Path.Combine(Path.GetDirectoryName(fileName), Path.GetFileNameWithoutExtension(fileName) + ".rules");
Encoding encoding = ICSharpCode.SharpDevelop.ParserService.DefaultFileEncoding; Encoding encoding = ICSharpCode.SharpDevelop.ParserService.DefaultFileEncoding;
xoml = ICSharpCode.TextEditor.Util.FileReader.ReadFileContent(stream, ref encoding, encoding); xoml = ICSharpCode.TextEditor.Util.FileReader.ReadFileContent(stream, ref encoding, encoding);
} }
@ -59,50 +52,8 @@ namespace WorkflowDesigner
set { xoml = value; } set { xoml = value; }
} }
public override string FileName {
get {
return fileName;
}
}
public IProject Project {
get {
return ProjectService.OpenSolution.FindProjectContainingFile(fileName);
}
}
public override TextReader GetFileReader(string filePath)
{
return new StringReader(rules.ToString());
}
public override TextWriter GetFileWriter(string filePath)
{
if (rules == null) {
rules = new StringBuilder();
CreateRulesProjectItem();
}
return new StringWriter(rules, CultureInfo.CurrentCulture);
}
private void CreateRulesProjectItem()
{
IProject project = ProjectService.OpenSolution.FindProjectContainingFile(this.fileName);
if (project != null){
if (!project.IsFileInProject(rulesFileName)) {
FileProjectItem fpi = project.FindFile(fileName);
FileProjectItem rfpi = new FileProjectItem(project,ItemType.EmbeddedResource);
rfpi.FileName = Path.Combine(Path.GetDirectoryName(fileName), Path.GetFileName(rulesFileName));
rfpi.DependentUpon = Path.GetFileName(fileName);
ProjectService.AddProjectItem(project, rfpi);
ProjectBrowserPad.Instance.ProjectBrowserControl.RefreshView();
project.Save();
}
}
}
protected override void PerformFlush(IDesignerSerializationManager serializationManager) protected override void DoPerformFlush(IDesignerSerializationManager serializationManager)
{ {
Activity rootActivity = LoaderHost.RootComponent as Activity; Activity rootActivity = LoaderHost.RootComponent as Activity;
if (rootActivity != null) { if (rootActivity != null) {
@ -116,41 +67,14 @@ namespace WorkflowDesigner
xmlWriter.Close(); xmlWriter.Close();
} }
} }
// Update the rules if any exist.
if ((rules != null) && (rules.Length > 0))
File.WriteAllText(rulesFileName, rules.ToString());
}
protected override void Initialize()
{
LoaderHost.AddService(typeof(IToolboxService), new WorkflowToolboxService(LoaderHost));
LoaderHost.AddService(typeof(ITypeProvider), TypeProviderService.GetTypeProvider(Project));
LoaderHost.AddService(typeof(IMenuCommandService), new WorkflowMenuCommandService(LoaderHost));
LoaderHost.AddService(typeof(ITypeResolutionService), new TypeResolutionService(ProjectService.OpenSolution.FindProjectContainingFile(this.FileName),LoaderHost));
LoaderHost.AddService(typeof(IPropertyValueUIService), new PropertyValueUIService());
base.Initialize();
}
protected override void PerformLoad(IDesignerSerializationManager serializationManager)
{
base.PerformLoad(serializationManager);
Load(serializationManager);
} }
protected virtual void Load(IDesignerSerializationManager serializationManager) protected override void DoPerformLoad(IDesignerSerializationManager serializationManager)
{ {
LoadFromXoml(serializationManager); LoadXoml(serializationManager);
LoaderHost.Activate();
} }
protected void LoadFromXoml(IDesignerSerializationManager serializationManager) protected void LoadXoml(IDesignerSerializationManager serializationManager)
{ {
// get the root activity from the xml. // get the root activity from the xml.
XmlReader reader = new XmlTextReader(new StringReader(xoml)); XmlReader reader = new XmlTextReader(new StringReader(xoml));
@ -169,12 +93,6 @@ namespace WorkflowDesigner
SetBaseComponentClassName(rootActivity.GetValue(WorkflowMarkupSerializer.XClassProperty) as string); SetBaseComponentClassName(rootActivity.GetValue(WorkflowMarkupSerializer.XClassProperty) as string);
// Load the rules
if (File.Exists(rulesFileName)) {
rules = new StringBuilder(File.ReadAllText(rulesFileName));
CreateRulesProjectItem();
}
} }
protected void AddChildren(CompositeActivity compositeActivity) protected void AddChildren(CompositeActivity compositeActivity)
@ -188,22 +106,5 @@ namespace WorkflowDesigner
} }
} }
public override void Dispose()
{
try {
// Remove all the services from the from the host designer.
if (LoaderHost != null) {
LoaderHost.RemoveService(typeof(IToolboxService));
LoaderHost.RemoveService(typeof(ITypeProvider));
LoaderHost.RemoveService(typeof(IEventBindingService));
LoaderHost.RemoveService(typeof(IMemberCreationService));
LoaderHost.RemoveService(typeof(IMenuCommandService));
LoaderHost.RemoveService(typeof(IPropertyValueUIService));
LoaderHost.RemoveService(typeof(ITypeResolutionService));
}
} finally {
base.Dispose();
}
}
} }
} }

6
src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/PrimaryView/PrimaryViewContent.cs

@ -14,6 +14,8 @@ using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Gui; using ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.SharpDevelop.Project; using ICSharpCode.SharpDevelop.Project;
using WorkflowDesigner.Loaders;
namespace WorkflowDesigner namespace WorkflowDesigner
{ {
/// <summary> /// <summary>
@ -54,13 +56,13 @@ namespace WorkflowDesigner
string codeFileName = file.FileName + "." + project.LanguageProperties.CodeDomProvider.FileExtension; string codeFileName = file.FileName + "." + project.LanguageProperties.CodeDomProvider.FileExtension;
FileProjectItem dfpi = project.FindFile(codeFileName); FileProjectItem dfpi = project.FindFile(codeFileName);
if (dfpi.DependentUpon == Path.GetFileName(fpi.VirtualName)) { if (dfpi.DependentUpon == Path.GetFileName(fpi.VirtualName)) {
loader = new XomlCodeSeparationDesignerLoader(this, file.FileName, stream, dfpi.FileName); loader = new XomlCodeSeparationDesignerLoader(this, stream, dfpi.FileName);
} }
} }
// No separation file so the nocode loader will be used. // No separation file so the nocode loader will be used.
if (loader == null) if (loader == null)
loader = new XomlDesignerLoader(this, file.FileName, stream); loader = new XomlDesignerLoader(this, stream);
control.LoadWorkflow(loader); control.LoadWorkflow(loader);
} }

8
src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/SecondaryView/SecondaryViewContent.cs

@ -12,6 +12,8 @@ using ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.SharpDevelop; using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor; using ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor;
using ICSharpCode.SharpDevelop.Widgets.SideBar; using ICSharpCode.SharpDevelop.Widgets.SideBar;
using WorkflowDesigner.Loaders;
#endregion #endregion
namespace WorkflowDesigner namespace WorkflowDesigner
@ -21,17 +23,13 @@ namespace WorkflowDesigner
/// </summary> /// </summary>
public class WorkflowDesignerSecondaryViewContent : AbstractSecondaryViewContent, IHasPropertyContainer public class WorkflowDesignerSecondaryViewContent : AbstractSecondaryViewContent, IHasPropertyContainer
{ {
IViewContent viewContent;
ViewContentControl control; ViewContentControl control;
#region Constructors #region Constructors
public WorkflowDesignerSecondaryViewContent(IViewContent primaryViewContent) : base(primaryViewContent) public WorkflowDesignerSecondaryViewContent(IViewContent primaryViewContent) : base(primaryViewContent)
{ {
this.TabPageText = "Workflow"; this.TabPageText = "Workflow";
this.viewContent = primaryViewContent;
control = new ViewContentControl(primaryViewContent); control = new ViewContentControl(primaryViewContent);
} }
#endregion #endregion
@ -52,7 +50,7 @@ namespace WorkflowDesigner
protected override void LoadFromPrimary() protected override void LoadFromPrimary()
{ {
control.LoadWorkflow(new NRefactoryDesignerLoader(((ITextEditorControlProvider)viewContent).TextEditorControl, viewContent)); control.LoadWorkflow(new CodeDesignerLoader(this.PrimaryViewContent));
} }
protected override void SaveToPrimary() protected override void SaveToPrimary()

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

@ -32,6 +32,8 @@ using ICSharpCode.NRefactory;
using ICSharpCode.NRefactory.Ast; using ICSharpCode.NRefactory.Ast;
using ICSharpCode.SharpDevelop.Project; using ICSharpCode.SharpDevelop.Project;
using WorkflowDesigner.Loaders;
#endregion #endregion
namespace WorkflowDesigner namespace WorkflowDesigner

63
src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/Services/IdentifierCreationService.cs

@ -1,63 +0,0 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Russell Wilkins" email=""/>
// <version>$Revision$</version>
// </file>
#region Using
using System;
using System.Workflow.ComponentModel.Design;
using ICSharpCode.Core;
using System.Collections;
using System.Collections.Generic;
using System.Workflow.Activities;
using System.Workflow.ComponentModel;
using System.ComponentModel;
using System.Text;
#endregion
namespace WorkflowDesigner
{
/// <summary>
/// Description of IdentifierCreationService.
/// </summary>
public class IdentifierCreationService : IIdentifierCreationService
{
public IdentifierCreationService()
{
}
public void EnsureUniqueIdentifiers(CompositeActivity parentActivity, System.Collections.ICollection childActivities)
{
if (parentActivity == null)
throw new ArgumentNullException("parentActivity");
if (childActivities == null)
throw new ArgumentNullException("childActivities");
LoggingService.DebugFormatted("EnsureUniqueIdentifiers(parentActivity={0}, childActivities={1})", parentActivity, childActivities);
foreach (Activity activity in childActivities)
{
LoggingService.DebugFormatted("{0}", activity.Name);
// TODO: Something here?
}
}
public void ValidateIdentifier(Activity activity, string identifier)
{
if (activity == null)
throw new ArgumentNullException("activity");
if (identifier == null)
throw new ArgumentNullException("identifier");
LoggingService.DebugFormatted("ValidateIdentifier(ValidateIdentifier={0}, identifier={1})", activity, identifier);
//TODO: Something here?
}
}
}

4
src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/Services/MemberCreationService.cs

@ -21,6 +21,8 @@ namespace WorkflowDesigner
/// </summary> /// </summary>
public class MemberCreationService : IMemberCreationService, IServiceProvider public class MemberCreationService : IMemberCreationService, IServiceProvider
{ {
private string typeName = string.Empty;
#region IServiceProvider implementation #region IServiceProvider implementation
IServiceProvider provider; IServiceProvider provider;
public object GetService(Type serviceType) public object GetService(Type serviceType)
@ -52,7 +54,7 @@ namespace WorkflowDesigner
public void UpdateTypeName(string oldClassName, string newClassName) public void UpdateTypeName(string oldClassName, string newClassName)
{ {
LoggingService.DebugFormatted("UpdateTypeName(oldClassName={0}, newClassName={1})", oldClassName, newClassName); LoggingService.DebugFormatted("UpdateTypeName(oldClassName={0}, newClassName={1})", oldClassName, newClassName);
throw new NotImplementedException(); typeName = newClassName;
} }
public void UpdateBaseType(string className, Type baseType) public void UpdateBaseType(string className, Type baseType)

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

@ -85,7 +85,7 @@ namespace WorkflowDesigner
typeProvider.AddAssembly(typeof(System.Object).Assembly); typeProvider.AddAssembly(typeof(System.Object).Assembly);
typeProvider.AddAssembly(typeof(System.ComponentModel.Design.Serialization.CodeDomSerializer).Assembly); typeProvider.AddAssembly(typeof(System.ComponentModel.Design.Serialization.CodeDomSerializer).Assembly);
typeProvider.AddAssembly(typeof(System.Workflow.ComponentModel.DependencyObject).Assembly); typeProvider.AddAssembly(typeof(System.Workflow.ComponentModel.DependencyObject).Assembly);
typeProvider.AddAssembly(typeof(System.Workflow.Activities.CodeActivity).Assembly); typeProvider.AddAssembly(typeof(System.Workflow.Activities.SequentialWorkflowActivity).Assembly);
typeProvider.AddAssembly(typeof(System.Workflow.Runtime.WorkflowRuntime).Assembly); typeProvider.AddAssembly(typeof(System.Workflow.Runtime.WorkflowRuntime).Assembly);
// Just return the basic provider if not related to a project. // Just return the basic provider if not related to a project.
@ -221,14 +221,18 @@ namespace WorkflowDesigner
files.AddRange(GetRelatedFiles(project, item.FileName)); files.AddRange(GetRelatedFiles(project, item.FileName));
} }
string[] s = new string[files.Count]; CodeCompileUnit ccu;
for (int i = 0; i < files.Count; i++)
s[i] = files[i]; if (files.Count > 0) {
string[] s = new string[files.Count];
CodeCompileUnit ccu = ParseXoml(project, s); for (int i = 0; i < files.Count; i++)
if (ccu != null) { s[i] = files[i];
typeProvider.AddCodeCompileUnit(ccu);
cp.UserCodeCompileUnits.Add(ccu); ccu = ParseXoml(project, s);
if (ccu != null) {
typeProvider.AddCodeCompileUnit(ccu);
cp.UserCodeCompileUnits.Add(ccu);
}
} }
// Now create one ccu for each source file. // Now create one ccu for each source file.

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

@ -93,7 +93,8 @@
<Compile Include="Src\Gui\ViewContentControl.Designer.cs"> <Compile Include="Src\Gui\ViewContentControl.Designer.cs">
<DependentUpon>ViewContentControl.cs</DependentUpon> <DependentUpon>ViewContentControl.cs</DependentUpon>
</Compile> </Compile>
<Compile Include="Src\Loaders\NRefactoryDesignerLoader.cs" /> <Compile Include="Src\Loaders\BasicWorkflowDesignerLoader.cs" />
<Compile Include="Src\Loaders\CodeDesignerLoader.cs" />
<Compile Include="Src\Loaders\WorkflowDesignerLoadException.cs" /> <Compile Include="Src\Loaders\WorkflowDesignerLoadException.cs" />
<Compile Include="Src\Loaders\XomlCodeSeparationDesignerLoader.cs" /> <Compile Include="Src\Loaders\XomlCodeSeparationDesignerLoader.cs" />
<Compile Include="Src\Loaders\XomlDesignerLoader.cs" /> <Compile Include="Src\Loaders\XomlDesignerLoader.cs" />
@ -105,7 +106,6 @@
<Compile Include="Src\Services\EventBindingService\EventPropertyDescriptor.cs" /> <Compile Include="Src\Services\EventBindingService\EventPropertyDescriptor.cs" />
<Compile Include="Src\Services\EventBindingService\IWorkflowDesignerEventBindingService.cs" /> <Compile Include="Src\Services\EventBindingService\IWorkflowDesignerEventBindingService.cs" />
<Compile Include="Src\Services\EventBindingService\WorkflowDesignerEventBindingService.cs" /> <Compile Include="Src\Services\EventBindingService\WorkflowDesignerEventBindingService.cs" />
<Compile Include="Src\Services\IdentifierCreationService.cs" />
<Compile Include="Src\Services\MemberCreationService.cs" /> <Compile Include="Src\Services\MemberCreationService.cs" />
<Compile Include="Src\Services\PropertyValueUIService.cs" /> <Compile Include="Src\Services\PropertyValueUIService.cs" />
<Compile Include="Src\Services\TypeProviderService.cs" /> <Compile Include="Src\Services\TypeProviderService.cs" />

Loading…
Cancel
Save