From fb453bac9ff080bd1f7bd6c4191f4827df8374b6 Mon Sep 17 00:00:00 2001 From: Russell Wilkins Date: Fri, 16 Feb 2007 12:03:30 +0000 Subject: [PATCH] Refactoring the WorkflowDesignerLoaders git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@2386 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61 --- .../Project/Src/Gui/ViewContentControl.cs | 2 + .../Loaders/BasicWorkflowDesignerLoader.cs | 155 +++++++++++++++++ ...esignerLoader.cs => CodeDesignerLoader.cs} | 156 ++++++------------ .../Loaders/WorkflowDesignerLoadException.cs | 2 +- .../XomlCodeSeparationDesignerLoader.cs | 10 +- .../Project/Src/Loaders/XomlDesignerLoader.cs | 117 +------------ .../Src/PrimaryView/PrimaryViewContent.cs | 6 +- .../Src/SecondaryView/SecondaryViewContent.cs | 8 +- .../WorkflowDesignerEventBindingService.cs | 2 + .../Src/Services/IdentifierCreationService.cs | 63 ------- .../Src/Services/MemberCreationService.cs | 4 +- .../Src/Services/TypeProviderService.cs | 22 ++- .../Project/WorkflowDesigner.csproj | 4 +- 13 files changed, 251 insertions(+), 300 deletions(-) create mode 100644 src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/Loaders/BasicWorkflowDesignerLoader.cs rename src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/Loaders/{NRefactoryDesignerLoader.cs => CodeDesignerLoader.cs} (68%) delete mode 100644 src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/Services/IdentifierCreationService.cs diff --git a/src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/Gui/ViewContentControl.cs b/src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/Gui/ViewContentControl.cs index 00da873a51..f95f706084 100644 --- a/src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/Gui/ViewContentControl.cs +++ b/src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/Gui/ViewContentControl.cs @@ -22,6 +22,8 @@ using ICSharpCode.SharpDevelop.Gui; using ICSharpCode.TextEditor; using ICSharpCode.TextEditor.Document; using ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor; + +using WorkflowDesigner.Loaders; #endregion namespace WorkflowDesigner diff --git a/src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/Loaders/BasicWorkflowDesignerLoader.cs b/src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/Loaders/BasicWorkflowDesignerLoader.cs new file mode 100644 index 0000000000..a9ece324b2 --- /dev/null +++ b/src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/Loaders/BasicWorkflowDesignerLoader.cs @@ -0,0 +1,155 @@ +// +// +// +// +// $Revision$ +// + +#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 +{ + /// + /// Description of BasicWorkflowDesignerLoader. + /// + 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); + } +} diff --git a/src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/Loaders/NRefactoryDesignerLoader.cs b/src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/Loaders/CodeDesignerLoader.cs similarity index 68% rename from src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/Loaders/NRefactoryDesignerLoader.cs rename to src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/Loaders/CodeDesignerLoader.cs index be78855d3a..5cadffe6dd 100644 --- a/src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/Loaders/NRefactoryDesignerLoader.cs +++ b/src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/Loaders/CodeDesignerLoader.cs @@ -6,116 +6,81 @@ // #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.CodeDom; -using System.CodeDom.Compiler; -using System.Collections; using System.Collections.Generic; using System.ComponentModel.Design; using System.ComponentModel.Design.Serialization; -using System.Drawing.Design; using System.IO; -using System.Reflection; -using System.Workflow.ComponentModel.Compiler; +using System.Workflow.ComponentModel; using System.Workflow.ComponentModel.Design; -using System.Windows.Forms; -#endregion -namespace WorkflowDesigner -{ - public class DefaultMemberRelationshipService : MemberRelationshipService - { +using ICSharpCode.Core; +using ICSharpCode.SharpDevelop; +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) - { - return true; - } - protected override MemberRelationship GetRelationship(MemberRelationship source) - { - return base.GetRelationship(source); - } - } - +namespace WorkflowDesigner.Loaders +{ /// - /// Description of CodeDomLoader. + /// Description of CodeDesignerLoader. /// - public class NRefactoryDesignerLoader : CodeDomDesignerLoader + public class CodeDesignerLoader : BasicWorkflowDesignerLoader { - TextEditorControl textEditorControl; - //IDesignerGenerator generator = new CSharpDesignerGenerator(); - IViewContent viewContent; - - #region Constructors - public NRefactoryDesignerLoader(TextEditorControl textEditorControl, IViewContent viewContent) : base() + public CodeDesignerLoader(IViewContent viewContent) : base(viewContent) { - 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() { - ITypeProvider typeProvider = TypeProviderService.GetTypeProvider(ProjectService.OpenSolution.FindProjectContainingFile(viewContent.PrimaryFileName)); - 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; - } + base.Initialize(); - LoaderHost.AddService(typeof(ITypeProvider), typeProvider); - LoaderHost.AddService(typeof(IIdentifierCreationService), new IdentifierCreationService()); LoaderHost.AddService(typeof(IMemberCreationService), new MemberCreationService(LoaderHost)); - 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)); - LoaderHost.AddService(typeof(ITypeResolutionService), new TypeResolutionService(ProjectService.OpenSolution.FindProjectContainingFile(this.textEditorControl.FileName),LoaderHost)); - LoaderHost.AddService(typeof(IPropertyValueUIService), new PropertyValueUIService()); + LoaderHost.AddService(typeof(IEventBindingService), new CSharpWorkflowDesignerEventBindingService(LoaderHost, ViewContent.PrimaryFileName)); + } + + protected override void DoPerformLoad(IDesignerSerializationManager serializationManager) + { + + // 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. - string lastTextContent; - protected override CodeCompileUnit Parse() + #region Taken from FormDesigner.NRefactoryDesignerLoad to get a single CodeCompileUnit for the activity. + protected CodeCompileUnit Parse() { - LoggingService.Debug("NRefactoryDesignerLoader.Parse()"); - - lastTextContent = textEditorControl.Document.TextContent; - - ParseInformation parseInfo = ParserService.GetParseInformation(textEditorControl.FileName); + ParseInformation parseInfo = ParserService.GetParseInformation(FileName); IClass formClass; bool isFirstClassInFile; @@ -191,17 +156,6 @@ namespace WorkflowDesigner visitor.EnvironmentInformationProvider = new ICSharpCode.SharpDevelop.Dom.NRefactoryResolver.NRefactoryInformationProvider(formClass.ProjectContent); 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) { 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."); @@ -212,11 +166,6 @@ namespace WorkflowDesigner public static IList 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; isFirstClassInFile = true; @@ -317,5 +266,6 @@ namespace WorkflowDesigner } #endregion + } } diff --git a/src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/Loaders/WorkflowDesignerLoadException.cs b/src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/Loaders/WorkflowDesignerLoadException.cs index 93df416784..0f375819e9 100644 --- a/src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/Loaders/WorkflowDesignerLoadException.cs +++ b/src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/Loaders/WorkflowDesignerLoadException.cs @@ -8,7 +8,7 @@ using System; using System.Runtime.Serialization; -namespace WorkflowDesigner +namespace WorkflowDesigner.Loaders { /// /// Description of WorkflowDesignerLoaderException. diff --git a/src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/Loaders/XomlCodeSeparationDesignerLoader.cs b/src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/Loaders/XomlCodeSeparationDesignerLoader.cs index 478b5ef5fe..a98bf7388f 100644 --- a/src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/Loaders/XomlCodeSeparationDesignerLoader.cs +++ b/src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/Loaders/XomlCodeSeparationDesignerLoader.cs @@ -20,7 +20,7 @@ using ICSharpCode.SharpDevelop; using ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor; #endregion -namespace WorkflowDesigner +namespace WorkflowDesigner.Loaders { /// /// Description of XomlCodeSeparationDesignerLoader. @@ -29,7 +29,7 @@ namespace WorkflowDesigner { 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; } @@ -43,14 +43,12 @@ namespace WorkflowDesigner 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; srv.UpdateCodeCompileUnit(); - LoadFromXoml(serializationManager); - - LoaderHost.Activate(); + LoadXoml(serializationManager); } diff --git a/src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/Loaders/XomlDesignerLoader.cs b/src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/Loaders/XomlDesignerLoader.cs index 79ab132c20..814ada4819 100644 --- a/src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/Loaders/XomlDesignerLoader.cs +++ b/src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/Loaders/XomlDesignerLoader.cs @@ -28,28 +28,21 @@ using ICSharpCode.SharpDevelop; using ICSharpCode.SharpDevelop.Dom; #endregion -namespace WorkflowDesigner +namespace WorkflowDesigner.Loaders { /// /// Description of XomlDesignerLoader. /// - public class XomlDesignerLoader : WorkflowDesignerLoader + public class XomlDesignerLoader : BasicWorkflowDesignerLoader { 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; xoml = ICSharpCode.TextEditor.Util.FileReader.ReadFileContent(stream, ref encoding, encoding); } @@ -59,50 +52,8 @@ namespace WorkflowDesigner 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; if (rootActivity != null) { @@ -116,41 +67,14 @@ namespace WorkflowDesigner 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); - LoaderHost.Activate(); + LoadXoml(serializationManager); } - protected void LoadFromXoml(IDesignerSerializationManager serializationManager) + protected void LoadXoml(IDesignerSerializationManager serializationManager) { // get the root activity from the xml. XmlReader reader = new XmlTextReader(new StringReader(xoml)); @@ -169,12 +93,6 @@ namespace WorkflowDesigner 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) @@ -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(); - } - } } } diff --git a/src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/PrimaryView/PrimaryViewContent.cs b/src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/PrimaryView/PrimaryViewContent.cs index 812e4da1d4..113d35119e 100644 --- a/src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/PrimaryView/PrimaryViewContent.cs +++ b/src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/PrimaryView/PrimaryViewContent.cs @@ -14,6 +14,8 @@ using ICSharpCode.SharpDevelop; using ICSharpCode.SharpDevelop.Gui; using ICSharpCode.SharpDevelop.Project; +using WorkflowDesigner.Loaders; + namespace WorkflowDesigner { /// @@ -54,13 +56,13 @@ namespace WorkflowDesigner string codeFileName = file.FileName + "." + project.LanguageProperties.CodeDomProvider.FileExtension; FileProjectItem dfpi = project.FindFile(codeFileName); 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. if (loader == null) - loader = new XomlDesignerLoader(this, file.FileName, stream); + loader = new XomlDesignerLoader(this, stream); control.LoadWorkflow(loader); } diff --git a/src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/SecondaryView/SecondaryViewContent.cs b/src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/SecondaryView/SecondaryViewContent.cs index d737d95022..257b6e6a77 100644 --- a/src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/SecondaryView/SecondaryViewContent.cs +++ b/src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/SecondaryView/SecondaryViewContent.cs @@ -12,6 +12,8 @@ using ICSharpCode.SharpDevelop.Gui; using ICSharpCode.SharpDevelop; using ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor; using ICSharpCode.SharpDevelop.Widgets.SideBar; + +using WorkflowDesigner.Loaders; #endregion namespace WorkflowDesigner @@ -21,17 +23,13 @@ namespace WorkflowDesigner /// public class WorkflowDesignerSecondaryViewContent : AbstractSecondaryViewContent, IHasPropertyContainer { - IViewContent viewContent; ViewContentControl control; #region Constructors public WorkflowDesignerSecondaryViewContent(IViewContent primaryViewContent) : base(primaryViewContent) { this.TabPageText = "Workflow"; - this.viewContent = primaryViewContent; control = new ViewContentControl(primaryViewContent); - - } #endregion @@ -52,7 +50,7 @@ namespace WorkflowDesigner protected override void LoadFromPrimary() { - control.LoadWorkflow(new NRefactoryDesignerLoader(((ITextEditorControlProvider)viewContent).TextEditorControl, viewContent)); + control.LoadWorkflow(new CodeDesignerLoader(this.PrimaryViewContent)); } protected override void SaveToPrimary() 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 83a7ab157a..b28dd6384d 100644 --- a/src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/Services/EventBindingService/WorkflowDesignerEventBindingService.cs +++ b/src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/Services/EventBindingService/WorkflowDesignerEventBindingService.cs @@ -32,6 +32,8 @@ using ICSharpCode.NRefactory; using ICSharpCode.NRefactory.Ast; using ICSharpCode.SharpDevelop.Project; +using WorkflowDesigner.Loaders; + #endregion namespace WorkflowDesigner diff --git a/src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/Services/IdentifierCreationService.cs b/src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/Services/IdentifierCreationService.cs deleted file mode 100644 index 929a8aa411..0000000000 --- a/src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/Services/IdentifierCreationService.cs +++ /dev/null @@ -1,63 +0,0 @@ -// -// -// -// -// $Revision$ -// - -#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 -{ - /// - /// Description of IdentifierCreationService. - /// - 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? - } - - } -} diff --git a/src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/Services/MemberCreationService.cs b/src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/Services/MemberCreationService.cs index 4a9370e856..288b364ba6 100644 --- a/src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/Services/MemberCreationService.cs +++ b/src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/Services/MemberCreationService.cs @@ -21,6 +21,8 @@ namespace WorkflowDesigner /// public class MemberCreationService : IMemberCreationService, IServiceProvider { + private string typeName = string.Empty; + #region IServiceProvider implementation IServiceProvider provider; public object GetService(Type serviceType) @@ -52,7 +54,7 @@ namespace WorkflowDesigner public void UpdateTypeName(string oldClassName, string newClassName) { LoggingService.DebugFormatted("UpdateTypeName(oldClassName={0}, newClassName={1})", oldClassName, newClassName); - throw new NotImplementedException(); + typeName = newClassName; } public void UpdateBaseType(string className, Type baseType) diff --git a/src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/Services/TypeProviderService.cs b/src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/Services/TypeProviderService.cs index 65f15e85ee..a720f97d35 100644 --- a/src/AddIns/DisplayBindings/WorkflowDesigner/Project/Src/Services/TypeProviderService.cs +++ b/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.ComponentModel.Design.Serialization.CodeDomSerializer).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); // Just return the basic provider if not related to a project. @@ -221,14 +221,18 @@ namespace WorkflowDesigner files.AddRange(GetRelatedFiles(project, item.FileName)); } - string[] s = new string[files.Count]; - for (int i = 0; i < files.Count; i++) - s[i] = files[i]; - - CodeCompileUnit ccu = ParseXoml(project, s); - if (ccu != null) { - typeProvider.AddCodeCompileUnit(ccu); - cp.UserCodeCompileUnits.Add(ccu); + CodeCompileUnit ccu; + + if (files.Count > 0) { + string[] s = new string[files.Count]; + for (int i = 0; i < files.Count; i++) + s[i] = files[i]; + + ccu = ParseXoml(project, s); + if (ccu != null) { + typeProvider.AddCodeCompileUnit(ccu); + cp.UserCodeCompileUnits.Add(ccu); + } } // Now create one ccu for each source file. diff --git a/src/AddIns/DisplayBindings/WorkflowDesigner/Project/WorkflowDesigner.csproj b/src/AddIns/DisplayBindings/WorkflowDesigner/Project/WorkflowDesigner.csproj index ba862ae371..159a4e0e1a 100644 --- a/src/AddIns/DisplayBindings/WorkflowDesigner/Project/WorkflowDesigner.csproj +++ b/src/AddIns/DisplayBindings/WorkflowDesigner/Project/WorkflowDesigner.csproj @@ -93,7 +93,8 @@ ViewContentControl.cs - + + @@ -105,7 +106,6 @@ -