Browse Source
git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@2316 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61shortcuts
27 changed files with 2679 additions and 1 deletions
@ -0,0 +1,22 @@
@@ -0,0 +1,22 @@
|
||||
// <file>
|
||||
// <copyright see="prj:///doc/copyright.txt"/>
|
||||
// <license see="prj:///doc/license.txt"/>
|
||||
// <owner name="Russell Wilkins" email=""/>
|
||||
// <version>$Revision$</version>
|
||||
// </file>
|
||||
|
||||
using System.Reflection; |
||||
using System.Runtime.CompilerServices; |
||||
using System.Runtime.InteropServices; |
||||
|
||||
// Information about this assembly is defined by the following
|
||||
// attributes.
|
||||
//
|
||||
// change them to the information which is associated with the assembly
|
||||
// you compile.
|
||||
|
||||
[assembly: AssemblyTitle("WorkflowDesigner")] |
||||
[assembly: AssemblyDescription("Windows Workflow Foundation Addin for SharpDevelop 3.0")] |
||||
[assembly: AssemblyConfiguration("")] |
||||
[assembly: AssemblyTrademark("")] |
||||
[assembly: AssemblyCulture("")] |
@ -0,0 +1,45 @@
@@ -0,0 +1,45 @@
|
||||
// <file>
|
||||
// <copyright see="prj:///doc/copyright.txt"/>
|
||||
// <license see="prj:///doc/license.txt"/>
|
||||
// <owner name="Russell Wilkins" email=""/>
|
||||
// <version>$Revision$</version>
|
||||
// </file>
|
||||
|
||||
namespace WorkflowDesigner |
||||
{ |
||||
partial class ViewContentControl |
||||
{ |
||||
/// <summary>
|
||||
/// Designer variable used to keep track of non-visual components.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null; |
||||
|
||||
/// <summary>
|
||||
/// Disposes resources used by the control.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing) |
||||
{ |
||||
if (disposing) { |
||||
if (components != null) { |
||||
components.Dispose(); |
||||
} |
||||
} |
||||
base.Dispose(disposing); |
||||
} |
||||
|
||||
/// <summary>
|
||||
/// This method is required for Windows Forms designer support.
|
||||
/// Do not change the method contents inside the source code editor. The Forms designer might
|
||||
/// not be able to load this method if it was changed manually.
|
||||
/// </summary>
|
||||
private void InitializeComponent() |
||||
{ |
||||
//
|
||||
// ViewContentControl
|
||||
//
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; |
||||
this.Name = "ViewContentControl"; |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,279 @@
@@ -0,0 +1,279 @@
|
||||
// <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; |
||||
using System.ComponentModel.Design; |
||||
using System.Drawing; |
||||
using System.Collections; |
||||
using System.Windows.Forms; |
||||
using System.Workflow.ComponentModel.Design; |
||||
using System.Workflow.Activities; |
||||
using System.ComponentModel.Design.Serialization; |
||||
using System.IO; |
||||
using System.Drawing.Design; |
||||
using System.Reflection; |
||||
|
||||
using ICSharpCode.SharpDevelop; |
||||
using ICSharpCode.Core; |
||||
using ICSharpCode.SharpDevelop.Gui; |
||||
using ICSharpCode.SharpDevelop.Widgets.SideBar; |
||||
using ICSharpCode.FormsDesigner; |
||||
using ICSharpCode.TextEditor; |
||||
using ICSharpCode.TextEditor.Document; |
||||
using ICSharpCode.SharpDevelop.Project; |
||||
using ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor; |
||||
#endregion
|
||||
|
||||
namespace WorkflowDesigner |
||||
{ |
||||
|
||||
|
||||
/// <summary>
|
||||
/// Description of ViewContentControl.
|
||||
/// </summary>
|
||||
public partial class ViewContentControl : UserControl, IHasPropertyContainer |
||||
{ |
||||
private DesignSurface designSurface; |
||||
private BasicDesignerLoader loader; |
||||
private IViewContent viewContent; |
||||
private string codeSeparationFileName ; |
||||
|
||||
// HACK: Temporary sidebar creation.
|
||||
static SideTab sideTab; |
||||
|
||||
static ViewContentControl() |
||||
{ |
||||
sideTab = new SideTab("Workflow"); |
||||
|
||||
// Make sure the side bar has actually bee created!
|
||||
if (SharpDevelopSideBar.SideBar == null) |
||||
WorkbenchSingleton.Workbench.GetPad(typeof(SideBarView)).CreatePad(); |
||||
|
||||
sideTab.CanSaved = false; |
||||
|
||||
// Add the standard pointer.
|
||||
SharpDevelopSideTabItem sti = new SharpDevelopSideTabItem("Pointer"); |
||||
sti.CanBeRenamed = false; |
||||
sti.CanBeDeleted = false; |
||||
Bitmap pointerBitmap = new Bitmap(IconService.GetBitmap("Icons.16x16.FormsDesigner.PointerIcon"), 16, 16); |
||||
sti.Icon = pointerBitmap; |
||||
sti.Tag = null; |
||||
sideTab.Items.Add(sti); |
||||
|
||||
|
||||
// Load activities from the standard assembly.
|
||||
Assembly assembly = AppDomain.CurrentDomain.Load("System.Workflow.Activities, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"); |
||||
ICollection toolboxItems = System.Drawing.Design.ToolboxService.GetToolboxItems(assembly.GetName()); |
||||
foreach (ToolboxItem tbi in toolboxItems) |
||||
{ |
||||
sti = new SharpDevelopSideTabItem(tbi.DisplayName); |
||||
sti.CanBeDeleted = false; |
||||
sti.CanBeRenamed = false; |
||||
sti.Tag = tbi; |
||||
sti.Icon = tbi.Bitmap; |
||||
sideTab.Items.Add(sti); |
||||
} |
||||
|
||||
} |
||||
|
||||
public string CodeSeparationFileName { |
||||
get { return codeSeparationFileName; } |
||||
set { codeSeparationFileName = value; } |
||||
} |
||||
|
||||
|
||||
public ViewContentControl(IViewContent viewContent) |
||||
{ |
||||
//
|
||||
// The InitializeComponent() call is required for Windows Forms designer support.
|
||||
//
|
||||
InitializeComponent(); |
||||
|
||||
this.viewContent = viewContent; |
||||
|
||||
// Make sure the standard workflow sidebar is on screen.
|
||||
if (!SharpDevelopSideBar.SideBar.Tabs.Contains(sideTab)) { |
||||
SharpDevelopSideBar.SideBar.Tabs.Add(sideTab); |
||||
SharpDevelopSideBar.SideBar.Refresh(); |
||||
} |
||||
|
||||
} |
||||
|
||||
protected override void OnVisibleChanged(EventArgs e) |
||||
{ |
||||
if (!Visible) this.Deselected(); |
||||
base.OnVisibleChanged(e); |
||||
} |
||||
|
||||
|
||||
public IDesignerHost DesignerHost { |
||||
get { |
||||
if (designSurface == null) |
||||
return null; |
||||
|
||||
return (IDesignerHost)designSurface.GetService(typeof(IDesignerHost)); |
||||
} |
||||
} |
||||
|
||||
public IRootDesigner RootDesigner |
||||
{ |
||||
get |
||||
{ |
||||
return DesignerHost.GetDesigner(DesignerHost.RootComponent) as IRootDesigner; |
||||
} |
||||
} |
||||
|
||||
public WorkflowView WorkflowView |
||||
{ |
||||
get |
||||
{ |
||||
return (WorkflowView)RootDesigner.GetView(ViewTechnology.Default); |
||||
} |
||||
} |
||||
|
||||
|
||||
|
||||
internal void LoadWorkflow(BasicDesignerLoader loader) |
||||
{ |
||||
|
||||
|
||||
this.loader = loader; |
||||
|
||||
try { |
||||
|
||||
LoadDesigner(); |
||||
|
||||
if (designSurface != null && Controls.Count == 0) { |
||||
Control designer = designSurface.View as Control; |
||||
designer.Dock = DockStyle.Fill; |
||||
Controls.Add(designer); |
||||
} |
||||
} catch (Exception e) { |
||||
TextBox errorText = new TextBox(); |
||||
errorText.Multiline = true; |
||||
if (!designSurface.IsLoaded && designSurface.LoadErrors != null) { |
||||
errorText.Text = "Error loading designer:\r\n\r\n"; |
||||
foreach(Exception le in designSurface.LoadErrors) { |
||||
errorText.Text += le.ToString(); |
||||
errorText.Text += "\r\n"; |
||||
} |
||||
} else { |
||||
errorText.Text = e.ToString(); |
||||
} |
||||
|
||||
errorText.Dock = DockStyle.Fill; |
||||
Controls.Add(errorText); |
||||
Control title = new Label(); |
||||
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); |
||||
} |
||||
} |
||||
|
||||
internal void SaveWorkflow(Stream stream) |
||||
{ |
||||
loader.Flush(); |
||||
|
||||
if (loader is XomlDesignerLoader) { |
||||
using (StreamWriter w = new StreamWriter(stream)) { |
||||
w.Write(((XomlDesignerLoader)loader).Xoml); |
||||
} |
||||
} |
||||
} |
||||
|
||||
internal void UnloadWorkflow() |
||||
{ |
||||
UnloadDesigner(); |
||||
} |
||||
|
||||
void UnloadDesigner() |
||||
{ |
||||
this.Controls.Clear(); |
||||
designSurface.Dispose(); |
||||
designSurface = null; |
||||
|
||||
} |
||||
|
||||
void LoadDesigner() |
||||
{ |
||||
|
||||
designSurface = new DesignSurface(); |
||||
designSurface.BeginLoad(loader); |
||||
|
||||
// Monitor for updates and make the view dirty.
|
||||
//IComponentChangeService componentChangeService = (IComponentChangeService)designSurface.GetService(typeof(IComponentChangeService));
|
||||
//componentChangeService.ComponentAdding += new ComponentEventHandler(ComponentAddingHandler);
|
||||
//componentChangeService.ComponentAdded += new ComponentEventHandler(ComponentAddedHandler);
|
||||
//componentChangeService.ComponentChanged += new ComponentChangedEventHandler(ComponentChangedHandler);
|
||||
|
||||
// Attach the selection service to capture objects selection changes to update property pad.
|
||||
ISelectionService selectionService = (ISelectionService)designSurface.GetService(typeof(ISelectionService)); |
||||
selectionService.SelectionChanged += new EventHandler(SelectionChangedHandler); |
||||
|
||||
} |
||||
|
||||
void ComponentAddedHandler(object sender, ComponentEventArgs args) |
||||
{ |
||||
((XomlCodeSeparationDesignerLoader)loader).UpdateCCU(); |
||||
LoggingService.Debug("ComponentAddedHandler"); |
||||
} |
||||
|
||||
void ComponentAddingHandler(object sender, ComponentEventArgs args) |
||||
{ |
||||
LoggingService.Debug("ComponentAddingHandler"); |
||||
} |
||||
|
||||
void ComponentChangedHandler(object sender, ComponentChangedEventArgs args) |
||||
{ |
||||
((XomlCodeSeparationDesignerLoader)loader).UpdateCCU(); |
||||
viewContent.PrimaryFile.MakeDirty(); |
||||
} |
||||
|
||||
void SelectionChangedHandler(object sender, EventArgs args) |
||||
{ |
||||
UpdatePropertyPadSelection((ISelectionService)sender); |
||||
} |
||||
|
||||
void UpdatePropertyPadSelection(ISelectionService selectionService) |
||||
{ |
||||
ICollection selection = selectionService.GetSelectedComponents(); |
||||
object[] selArray = new object[selection.Count]; |
||||
selection.CopyTo(selArray, 0); |
||||
propertyContainer.SelectableObjects = DesignerHost.Container.Components; |
||||
//propertyContainer.Host = DesignerHost.RootComponent.Site;
|
||||
propertyContainer.SelectedObjects = selArray; |
||||
PropertyPad.Grid.CommandsVisibleIfAvailable = false; |
||||
PropertyPad.Grid.Site = DesignerHost.RootComponent.Site; |
||||
|
||||
} |
||||
|
||||
internal void Selected() |
||||
{ |
||||
SharpDevelopSideBar.SideBar.ActiveTab = sideTab; |
||||
} |
||||
|
||||
internal void Deselected() |
||||
{ |
||||
propertyContainer.SelectableObjects = null; |
||||
propertyContainer.Host = null; |
||||
propertyContainer.SelectedObjects = null; |
||||
} |
||||
|
||||
#region IHasPropertyContainer
|
||||
PropertyContainer propertyContainer = new PropertyContainer(); |
||||
public PropertyContainer PropertyContainer { |
||||
get { |
||||
return propertyContainer; |
||||
} |
||||
} |
||||
#endregion
|
||||
|
||||
|
||||
} |
||||
} |
@ -0,0 +1,333 @@
@@ -0,0 +1,333 @@
|
||||
// <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 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.FormsDesigner; |
||||
using ICSharpCode.SharpDevelop.Gui; |
||||
|
||||
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.Design; |
||||
using System.Windows.Forms; |
||||
#endregion
|
||||
|
||||
namespace WorkflowDesigner |
||||
{ |
||||
public class DefaultMemberRelationshipService : MemberRelationshipService |
||||
{ |
||||
public override bool SupportsRelationship(MemberRelationship source, MemberRelationship relationship) |
||||
{ |
||||
return true; |
||||
} |
||||
protected override MemberRelationship GetRelationship(MemberRelationship source) |
||||
{ |
||||
return base.GetRelationship(source); |
||||
} |
||||
} |
||||
|
||||
/// <summary>
|
||||
/// Description of CodeDomLoader.
|
||||
/// </summary>
|
||||
public class NRefactoryDesignerLoader : CodeDomDesignerLoader |
||||
{ |
||||
TextEditorControl textEditorControl; |
||||
ITypeResolutionService typeResolutionService; |
||||
IDesignerGenerator generator = new CSharpDesignerGenerator(); |
||||
IViewContent viewContent; |
||||
|
||||
#region Constructors
|
||||
public NRefactoryDesignerLoader(TextEditorControl textEditorControl, IViewContent viewContent) : base() |
||||
{ |
||||
this.textEditorControl = textEditorControl; |
||||
this.viewContent = viewContent; |
||||
} |
||||
#endregion
|
||||
|
||||
protected override CodeDomProvider CodeDomProvider { |
||||
get { |
||||
return generator.CodeDomProvider; |
||||
} |
||||
} |
||||
|
||||
protected override ITypeResolutionService TypeResolutionService { |
||||
get { |
||||
return this.typeResolutionService; |
||||
} |
||||
} |
||||
|
||||
|
||||
protected override void Write(CodeCompileUnit unit) |
||||
{ |
||||
LoggingService.Debug("NRefactoryDesignerLoader.Write()"); |
||||
throw new NotImplementedException(); |
||||
} |
||||
|
||||
|
||||
|
||||
public override void BeginLoad(IDesignerLoaderHost host) |
||||
{ |
||||
if (host == null) |
||||
throw new ArgumentNullException("host"); |
||||
|
||||
LoggingService.Debug("NRefactoryDesignerLoader.BeginLoad()"); |
||||
|
||||
host.AddService(typeof(ITypeResolutionService), new ICSharpCode.FormsDesigner.Services.TypeResolutionService(viewContent.PrimaryFileName)); |
||||
host.AddService(typeof(IIdentifierCreationService), new IdentifierCreationService()); |
||||
host.AddService(typeof(IMemberCreationService), new MemberCreationService()); |
||||
host.AddService(typeof(IEventBindingService), new EventBindingService(host)); |
||||
host.AddService(typeof(IToolboxService), new WorkflowToolboxService()); |
||||
host.AddService(typeof(MemberRelationshipService), new DefaultMemberRelationshipService()); |
||||
host.AddService(typeof(IMenuCommandService), new WorkflowMenuCommandService(host)); |
||||
TypeProvider tp = new TypeProvider(host); |
||||
host.AddService(typeof(ITypeProvider), tp); |
||||
|
||||
// HACK: Load all assemblies in the #D - should only be references for the current project!
|
||||
foreach (Assembly assembly in AppDomain.CurrentDomain.GetAssemblies()) |
||||
{ |
||||
tp.AddAssembly(assembly); |
||||
} |
||||
|
||||
typeResolutionService = (ITypeResolutionService)host.GetService(typeof(ITypeResolutionService)); |
||||
base.BeginLoad(host); |
||||
|
||||
} |
||||
|
||||
|
||||
#region Taken from FormDesigner.NRefactoryDesignerLoad to get a CodeCompileUnit for the activity.
|
||||
string lastTextContent; |
||||
protected override CodeCompileUnit Parse() |
||||
{ |
||||
LoggingService.Debug("NRefactoryDesignerLoader.Parse()"); |
||||
|
||||
lastTextContent = textEditorControl.Document.TextContent; |
||||
|
||||
ParseInformation parseInfo = ParserService.GetParseInformation(textEditorControl.FileName); |
||||
|
||||
IClass formClass; |
||||
bool isFirstClassInFile; |
||||
IList<IClass> parts = FindFormClassParts(parseInfo, out formClass, out isFirstClassInFile); |
||||
|
||||
const string missingReferenceMessage = "Your project is missing a reference to '${Name}' - please add it using 'Project > Add Reference'."; |
||||
|
||||
if (formClass.ProjectContent.GetClass("System.Workflow.Activities.CodeActivity", 0) == null) { |
||||
throw new WorkflowDesignerLoadException( |
||||
StringParser.Parse( |
||||
missingReferenceMessage, new string[,] {{ "Name" , "System.Workflow.Activities"}} |
||||
)); |
||||
} |
||||
/*if (formClass.ProjectContent.GetClass("System.Windows.Forms.Form", 0) == null) { |
||||
throw new WorkflowDesignerLoadException( |
||||
StringParser.Parse( |
||||
missingReferenceMessage, new string[,] {{ "Name" , "System.Windows.Forms"}} |
||||
)); |
||||
}*/ |
||||
|
||||
List<KeyValuePair<string, CompilationUnit>> compilationUnits = new List<KeyValuePair<string, CompilationUnit>>(); |
||||
bool foundInitMethod = false; |
||||
foreach (IClass part in parts) { |
||||
string fileName = part.CompilationUnit.FileName; |
||||
if (fileName == null) continue; |
||||
bool found = false; |
||||
foreach (KeyValuePair<string, CompilationUnit> entry in compilationUnits) { |
||||
if (FileUtility.IsEqualFileName(fileName, entry.Key)) { |
||||
found = true; |
||||
break; |
||||
} |
||||
} |
||||
if (found) continue; |
||||
|
||||
string fileContent = ParserService.GetParseableFileContent(fileName); |
||||
|
||||
ICSharpCode.NRefactory.IParser p = ICSharpCode.NRefactory.ParserFactory.CreateParser(SupportedLanguage.CSharp, new StringReader(fileContent)); |
||||
p.Parse(); |
||||
if (p.Errors.Count > 0) { |
||||
throw new WorkflowDesignerLoadException("Syntax errors in " + fileName + ":\r\n" + p.Errors.ErrorOutput); |
||||
} |
||||
|
||||
// Try to fix the type names to fully qualified ones
|
||||
FixTypeNames(p.CompilationUnit, part.CompilationUnit, ref foundInitMethod); |
||||
compilationUnits.Add(new KeyValuePair<string, CompilationUnit>(fileName, p.CompilationUnit)); |
||||
} |
||||
|
||||
if (!foundInitMethod) |
||||
throw new WorkflowDesignerLoadException("The InitializeComponent method was not found. Designer cannot be loaded."); |
||||
|
||||
CompilationUnit combinedCu = new CompilationUnit(); |
||||
NamespaceDeclaration nsDecl = new NamespaceDeclaration(formClass.Namespace); |
||||
combinedCu.AddChild(nsDecl); |
||||
TypeDeclaration formDecl = new TypeDeclaration(Modifiers.Public, null); |
||||
nsDecl.AddChild(formDecl); |
||||
formDecl.Name = formClass.Name; |
||||
foreach (KeyValuePair<string, CompilationUnit> entry in compilationUnits) { |
||||
foreach (object o in entry.Value.Children) { |
||||
TypeDeclaration td = o as TypeDeclaration; |
||||
if (td != null && td.Name == formDecl.Name) { |
||||
foreach (INode node in td.Children) |
||||
formDecl.AddChild(node); |
||||
formDecl.BaseTypes.AddRange(td.BaseTypes); |
||||
} |
||||
if (o is NamespaceDeclaration) { |
||||
foreach (object o2 in ((NamespaceDeclaration)o).Children) { |
||||
td = o2 as TypeDeclaration; |
||||
if (td != null && td.Name == formDecl.Name) { |
||||
foreach (INode node in td.Children) |
||||
formDecl.AddChild(node); |
||||
formDecl.BaseTypes.AddRange(td.BaseTypes); |
||||
} |
||||
} |
||||
} |
||||
} |
||||
} |
||||
|
||||
CodeDomVisitor visitor = new CodeDomVisitor(); |
||||
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."); |
||||
} |
||||
|
||||
return visitor.codeCompileUnit; |
||||
} |
||||
|
||||
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; |
||||
isFirstClassInFile = true; |
||||
foreach (IClass c in parseInfo.BestCompilationUnit.Classes) { |
||||
if (WorkflowDesignerSecondaryDisplayBinding.BaseClassIsWorkflow(c)) { |
||||
formClass = c; |
||||
break; |
||||
} |
||||
isFirstClassInFile = false; |
||||
} |
||||
if (formClass == null) |
||||
throw new WorkflowDesignerLoadException("No class derived from Form or UserControl was found."); |
||||
|
||||
// Initialize designer for formClass
|
||||
formClass = formClass.GetCompoundClass(); |
||||
if (formClass is CompoundClass) { |
||||
return (formClass as CompoundClass).GetParts(); |
||||
} else { |
||||
return new IClass[] { formClass }; |
||||
} |
||||
} |
||||
|
||||
/// <summary>
|
||||
/// Fix type names and remove unused methods.
|
||||
/// </summary>
|
||||
void FixTypeNames(object o, ICSharpCode.SharpDevelop.Dom.ICompilationUnit domCu, ref bool foundInitMethod) |
||||
{ |
||||
if (domCu == null) |
||||
return; |
||||
CompilationUnit cu = o as CompilationUnit; |
||||
if (cu != null) { |
||||
foreach (object c in cu.Children) { |
||||
FixTypeNames(c, domCu, ref foundInitMethod); |
||||
} |
||||
return; |
||||
} |
||||
NamespaceDeclaration namespaceDecl = o as NamespaceDeclaration; |
||||
if (namespaceDecl != null) { |
||||
foreach (object c in namespaceDecl.Children) { |
||||
FixTypeNames(c, domCu, ref foundInitMethod); |
||||
} |
||||
return; |
||||
} |
||||
TypeDeclaration typeDecl = o as TypeDeclaration; |
||||
if (typeDecl != null) { |
||||
foreach (TypeReference tref in typeDecl.BaseTypes) { |
||||
FixTypeReference(tref, typeDecl.StartLocation, domCu); |
||||
} |
||||
for (int i = 0; i < typeDecl.Children.Count; i++) { |
||||
object child = typeDecl.Children[i]; |
||||
MethodDeclaration method = child as MethodDeclaration; |
||||
if (method != null) { |
||||
// remove all methods except InitializeComponents
|
||||
if ((method.Name == "InitializeComponents" || method.Name == "InitializeComponent") && method.Parameters.Count == 0) { |
||||
method.Name = "InitializeComponent"; |
||||
if (foundInitMethod) { |
||||
throw new WorkflowDesignerLoadException("There are multiple InitializeComponent methods in the class. Designer cannot be loaded."); |
||||
} |
||||
foundInitMethod = true; |
||||
} else { |
||||
typeDecl.Children.RemoveAt(i--); |
||||
} |
||||
} else if (child is TypeDeclaration || child is FieldDeclaration) { |
||||
FixTypeNames(child, domCu, ref foundInitMethod); |
||||
} else { |
||||
// child is property, event etc.
|
||||
typeDecl.Children.RemoveAt(i--); |
||||
} |
||||
} |
||||
|
||||
return; |
||||
} |
||||
FieldDeclaration fieldDecl = o as FieldDeclaration; |
||||
if (fieldDecl != null) { |
||||
FixTypeReference(fieldDecl.TypeReference, fieldDecl.StartLocation, domCu); |
||||
foreach (VariableDeclaration var in fieldDecl.Fields) { |
||||
if (var != null) { |
||||
FixTypeReference(var.TypeReference, fieldDecl.StartLocation, domCu); |
||||
} |
||||
} |
||||
} |
||||
} |
||||
|
||||
void FixTypeReference(TypeReference type, Location location, ICSharpCode.SharpDevelop.Dom.ICompilationUnit domCu) |
||||
{ |
||||
if (type == null) |
||||
return; |
||||
if (type.SystemType != type.Type) |
||||
return; |
||||
foreach (TypeReference tref in type.GenericTypes) { |
||||
FixTypeReference(tref, location, domCu); |
||||
} |
||||
ICSharpCode.SharpDevelop.Dom.IClass curType = domCu.GetInnermostClass(location.Y, location.X); |
||||
ICSharpCode.SharpDevelop.Dom.IReturnType rt = domCu.ProjectContent.SearchType(new SearchTypeRequest(type.Type, type.GenericTypes.Count, curType, domCu, location.Y, location.X)).Result; |
||||
if (rt != null) { |
||||
type.Type = rt.FullyQualifiedName; |
||||
} |
||||
} |
||||
|
||||
#endregion
|
||||
} |
||||
} |
@ -0,0 +1,35 @@
@@ -0,0 +1,35 @@
|
||||
// <file>
|
||||
// <copyright see="prj:///doc/copyright.txt"/>
|
||||
// <license see="prj:///doc/license.txt"/>
|
||||
// <owner name="Russell Wilkins" email=""/>
|
||||
// <version>$Revision$</version>
|
||||
// </file>
|
||||
|
||||
using System; |
||||
using System.Runtime.Serialization; |
||||
|
||||
namespace WorkflowDesigner |
||||
{ |
||||
/// <summary>
|
||||
/// Description of WorkflowDesignerLoaderException.
|
||||
/// </summary>
|
||||
[Serializable()] |
||||
public class WorkflowDesignerLoadException : Exception |
||||
{ |
||||
public WorkflowDesignerLoadException() : base() |
||||
{ |
||||
} |
||||
|
||||
public WorkflowDesignerLoadException(string message) : base(message) |
||||
{ |
||||
} |
||||
|
||||
public WorkflowDesignerLoadException(string message, Exception innerException) : base(message, innerException) |
||||
{ |
||||
} |
||||
|
||||
protected WorkflowDesignerLoadException(SerializationInfo info, StreamingContext context) : base(info, context) |
||||
{ |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,95 @@
@@ -0,0 +1,95 @@
|
||||
// <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.Text; |
||||
using System.IO; |
||||
using ICSharpCode.SharpDevelop.Gui; |
||||
using System.ComponentModel.Design; |
||||
using System.Workflow.ComponentModel.Design; |
||||
using System.Workflow.ComponentModel.Compiler; |
||||
using System.CodeDom; |
||||
using ICSharpCode.Core; |
||||
using ICSharpCode.SharpDevelop; |
||||
using ICSharpCode.NRefactory.Visitors; |
||||
using ICSharpCode.NRefactory; |
||||
using ICSharpCode.NRefactory.Ast; |
||||
using ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor; |
||||
#endregion
|
||||
|
||||
namespace WorkflowDesigner |
||||
{ |
||||
/// <summary>
|
||||
/// Description of XomlCodeSeparationDesignerLoader.
|
||||
/// </summary>
|
||||
public class XomlCodeSeparationDesignerLoader : XomlDesignerLoader |
||||
{ |
||||
private string codeFileName; |
||||
|
||||
public XomlCodeSeparationDesignerLoader(IViewContent viewContent, string fileName, Stream stream, string codeFileName) : base(viewContent, fileName, stream) |
||||
{ |
||||
this.codeFileName = codeFileName; |
||||
} |
||||
|
||||
protected override void Initialize() |
||||
{ |
||||
base.Initialize(); |
||||
|
||||
// TODO: Install the Add the additional services into the designer here.
|
||||
LoaderHost.AddService(typeof(IMemberCreationService), new MemberCreationService()); |
||||
LoaderHost.AddService(typeof(IEventBindingService), new EventBindingService(LoaderHost)); |
||||
LoaderHost.AddService(typeof(IWorkflowDesignerGeneratorService), new CSharpWorkflowDesignerGeneratorService(LoaderHost,codeFileName)); |
||||
} |
||||
|
||||
protected override void Load() |
||||
{ |
||||
UpdateCCU(); |
||||
|
||||
LoadFromXoml(); |
||||
|
||||
LoaderHost.Activate(); |
||||
} |
||||
|
||||
CodeCompileUnit ccu; |
||||
public void UpdateCCU() |
||||
{ |
||||
LoggingService.Debug("UpdateCCU"); |
||||
|
||||
TypeProvider typeProvider = (TypeProvider)this.GetService(typeof(ITypeProvider)); |
||||
|
||||
if (ccu != null) |
||||
typeProvider.RemoveCodeCompileUnit(ccu); |
||||
|
||||
ccu = Parse(); |
||||
|
||||
if (ccu != null) |
||||
typeProvider.AddCodeCompileUnit(ccu); |
||||
|
||||
} |
||||
|
||||
CodeCompileUnit Parse() |
||||
{ |
||||
LoggingService.Debug("NRefactoryDesignerLoader.Parse()"); |
||||
|
||||
string fileContent = ParserService.GetParseableFileContent(codeFileName); |
||||
|
||||
ICSharpCode.NRefactory.IParser parser = ICSharpCode.NRefactory.ParserFactory.CreateParser(SupportedLanguage.CSharp, new StringReader(fileContent)); |
||||
parser.Parse(); |
||||
if (parser.Errors.Count > 0) { |
||||
throw new Exception("Syntax errors in " + codeFileName + ":\r\n" + parser.Errors.ErrorOutput); |
||||
} |
||||
|
||||
CodeDomVisitor visitor = new CodeDomVisitor(); |
||||
visitor.VisitCompilationUnit(parser.CompilationUnit, null); |
||||
|
||||
LoggingService.Debug("NRefactoryDesignerLoader.Parse() finished"); |
||||
return visitor.codeCompileUnit; |
||||
} |
||||
|
||||
} |
||||
} |
@ -0,0 +1,175 @@
@@ -0,0 +1,175 @@
|
||||
// <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.Text; |
||||
using System.Workflow.ComponentModel; |
||||
using System.Workflow.ComponentModel.Serialization; |
||||
using System.Workflow.ComponentModel.Design; |
||||
using System.Workflow.ComponentModel.Compiler; |
||||
using System.ComponentModel; |
||||
using System.ComponentModel.Design; |
||||
using System.ComponentModel.Design.Serialization; |
||||
using System.Xml; |
||||
using System.Reflection; |
||||
using System.Drawing.Design; |
||||
using System.IO; |
||||
using ICSharpCode.SharpDevelop.Gui; |
||||
using ICSharpCode.Core; |
||||
#endregion
|
||||
|
||||
namespace WorkflowDesigner |
||||
{ |
||||
/// <summary>
|
||||
/// Description of XomlDesignerLoader.
|
||||
/// </summary>
|
||||
public class XomlDesignerLoader : WorkflowDesignerLoader |
||||
{ |
||||
private string xoml = string.Empty; |
||||
private string fileName = string.Empty; |
||||
private IViewContent viewContent; |
||||
|
||||
public XomlDesignerLoader(IViewContent viewContent) |
||||
{ |
||||
this.viewContent = viewContent; |
||||
} |
||||
|
||||
public XomlDesignerLoader(IViewContent viewContent, string fileName, Stream stream) : this(viewContent) |
||||
{ |
||||
this.fileName = fileName; |
||||
Encoding encoding = ICSharpCode.SharpDevelop.ParserService.DefaultFileEncoding; |
||||
xoml = ICSharpCode.TextEditor.Util.FileReader.ReadFileContent(stream, ref encoding, encoding); |
||||
} |
||||
|
||||
public string Xoml { |
||||
get { return xoml; } |
||||
set { xoml = value; } |
||||
} |
||||
|
||||
public override string FileName { |
||||
get { |
||||
return fileName; |
||||
} |
||||
} |
||||
|
||||
public override TextReader GetFileReader(string filePath) |
||||
{ |
||||
// TODO: Is this correct?
|
||||
return null; |
||||
} |
||||
|
||||
public override TextWriter GetFileWriter(string filePath) |
||||
{ |
||||
// TODO: Is this correct?
|
||||
return null; |
||||
} |
||||
|
||||
protected override void PerformFlush(System.ComponentModel.Design.Serialization.IDesignerSerializationManager serializationManager) |
||||
{ |
||||
Activity rootActivity = LoaderHost.RootComponent as Activity; |
||||
if (rootActivity != null) |
||||
{ |
||||
StringBuilder sb = new StringBuilder(); |
||||
XmlTextWriter xmlWriter = new XmlTextWriter(new StringWriter(sb)); |
||||
try |
||||
{ |
||||
WorkflowMarkupSerializer xomlSerializer = new WorkflowMarkupSerializer(); |
||||
xomlSerializer.Serialize(xmlWriter, rootActivity); |
||||
xoml = sb.ToString(); |
||||
} |
||||
finally |
||||
{ |
||||
xmlWriter.Close(); |
||||
} |
||||
} |
||||
} |
||||
|
||||
|
||||
protected override void Initialize() |
||||
{ |
||||
base.Initialize(); |
||||
|
||||
LoaderHost.AddService(typeof(IToolboxService), new WorkflowToolboxService()); |
||||
|
||||
// HACK: Use default type provider and load all assemblies in #D,
|
||||
// should really only use the references for the current project!
|
||||
TypeProvider typeProvider = new TypeProvider(LoaderHost); |
||||
foreach (Assembly assembly in AppDomain.CurrentDomain.GetAssemblies()) |
||||
{ |
||||
typeProvider.AddAssembly(assembly); |
||||
} |
||||
LoaderHost.AddService(typeof(ITypeProvider), typeProvider); |
||||
LoaderHost.AddService(typeof(IMenuCommandService), new WorkflowMenuCommandService(LoaderHost)); |
||||
|
||||
} |
||||
|
||||
protected override void PerformLoad(System.ComponentModel.Design.Serialization.IDesignerSerializationManager serializationManager) |
||||
{ |
||||
base.PerformLoad(serializationManager); |
||||
|
||||
Load(); |
||||
} |
||||
|
||||
|
||||
protected virtual void Load() |
||||
{ |
||||
LoadFromXoml(); |
||||
LoaderHost.Activate(); |
||||
} |
||||
|
||||
protected void LoadFromXoml() |
||||
{ |
||||
// get the root activity from the xml.
|
||||
XmlReader reader = new XmlTextReader(new StringReader(xoml)); |
||||
Activity rootActivity = null; |
||||
try |
||||
{ |
||||
WorkflowMarkupSerializer xomlSerializer = new WorkflowMarkupSerializer(); |
||||
rootActivity = xomlSerializer.Deserialize(reader) as Activity; |
||||
|
||||
} |
||||
finally |
||||
{ |
||||
reader.Close(); |
||||
} |
||||
|
||||
LoaderHost.Container.Add(rootActivity, rootActivity.QualifiedName); |
||||
if (rootActivity is CompositeActivity) |
||||
AddChildren(rootActivity as CompositeActivity); |
||||
|
||||
SetBaseComponentClassName(rootActivity.GetType().FullName); |
||||
} |
||||
|
||||
protected void AddChildren(CompositeActivity compositeActivity) |
||||
{ |
||||
foreach (Activity activity in compositeActivity.Activities) |
||||
{ |
||||
LoaderHost.Container.Add(activity, activity.QualifiedName); |
||||
if (activity is CompositeActivity) |
||||
AddChildren(activity as CompositeActivity); |
||||
} |
||||
} |
||||
|
||||
public override void Dispose() |
||||
{ |
||||
// 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)); |
||||
} |
||||
|
||||
base.Dispose(); |
||||
} |
||||
|
||||
|
||||
} |
||||
} |
@ -0,0 +1,36 @@
@@ -0,0 +1,36 @@
|
||||
// <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.IO; |
||||
using ICSharpCode.SharpDevelop; |
||||
using ICSharpCode.SharpDevelop.Gui; |
||||
#endregion
|
||||
|
||||
namespace WorkflowDesigner |
||||
{ |
||||
/// <summary>
|
||||
/// Description of PrimaryDisplayBinding.
|
||||
/// </summary>
|
||||
public class WorkflowPrimaryDisplayBinding : IDisplayBinding |
||||
{ |
||||
public WorkflowPrimaryDisplayBinding() |
||||
{ |
||||
} |
||||
|
||||
public bool CanCreateContentForFile(string fileName) |
||||
{ |
||||
return Path.GetExtension(fileName).Equals(".xoml", StringComparison.OrdinalIgnoreCase) ; |
||||
} |
||||
|
||||
public IViewContent CreateContentForFile(OpenedFile file) |
||||
{ |
||||
return new WorkflowPrimaryViewContent(file); |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,99 @@
@@ -0,0 +1,99 @@
|
||||
// <file>
|
||||
// <copyright see="prj:///doc/copyright.txt"/>
|
||||
// <license see="prj:///doc/license.txt"/>
|
||||
// <owner name="Russell Wilkins" email=""/>
|
||||
// <version>$Revision$</version>
|
||||
// </file>
|
||||
|
||||
using System; |
||||
using System.Diagnostics; |
||||
using System.IO; |
||||
using System.Text; |
||||
using ICSharpCode.Core; |
||||
using ICSharpCode.SharpDevelop; |
||||
using ICSharpCode.SharpDevelop.Gui; |
||||
using ICSharpCode.SharpDevelop.Project; |
||||
using ICSharpCode.FormsDesigner; |
||||
|
||||
namespace WorkflowDesigner |
||||
{ |
||||
/// <summary>
|
||||
/// Description of PrimaryViewContent.
|
||||
/// </summary>
|
||||
public class WorkflowPrimaryViewContent : AbstractViewContent, IHasPropertyContainer |
||||
{ |
||||
ViewContentControl control; |
||||
|
||||
public WorkflowPrimaryViewContent(OpenedFile primaryFile) : base(primaryFile) |
||||
{ |
||||
this.TabPageText = "Workflow"; |
||||
control = new ViewContentControl(this); |
||||
|
||||
primaryFile.ForceInitializeView(this); // call Load()
|
||||
} |
||||
|
||||
public override System.Windows.Forms.Control Control { |
||||
get { |
||||
return control; |
||||
} |
||||
} |
||||
|
||||
public override void Load(OpenedFile file, Stream stream) |
||||
{ |
||||
Debug.Assert(file == this.PrimaryFile); |
||||
|
||||
XomlDesignerLoader loader = null; |
||||
|
||||
// First look for a code separation file.
|
||||
// FIXME: The loader does nont know the project this belongs
|
||||
// to as ProjectService.CurrentProject is not set at this point
|
||||
// so look for all possible language files.
|
||||
LoggingService.DebugFormatted("Looking for code separation file"); |
||||
StringBuilder sb = new StringBuilder(file.FileName); |
||||
bool found = false; |
||||
if (File.Exists(file.FileName + ".cs")) { |
||||
sb.Append(".cs"); |
||||
found = true; |
||||
} else if (File.Exists(file.FileName + ".vb")) { |
||||
sb.Append(".vb"); |
||||
found = true; |
||||
} |
||||
if (found) { |
||||
control.CodeSeparationFileName = sb.ToString(); |
||||
LoggingService.DebugFormatted("Found code file {0}", control.CodeSeparationFileName); |
||||
loader = new XomlCodeSeparationDesignerLoader(this, file.FileName, stream, control.CodeSeparationFileName); |
||||
} |
||||
|
||||
// No separation file so the nocode loader will be used.
|
||||
if (loader == null) |
||||
loader = new XomlDesignerLoader(this, file.FileName, stream); |
||||
|
||||
control.LoadWorkflow(loader); |
||||
} |
||||
|
||||
public override void Save(OpenedFile file, Stream stream) |
||||
{ |
||||
Debug.Assert(file == this.PrimaryFile); |
||||
|
||||
control.SaveWorkflow(stream); |
||||
} |
||||
|
||||
public void LoadContent(string content) |
||||
{ |
||||
XomlDesignerLoader xomlDesignerLoader = new XomlDesignerLoader(this); |
||||
xomlDesignerLoader.Xoml = content; |
||||
control.LoadWorkflow(xomlDesignerLoader); |
||||
} |
||||
|
||||
// control.Selected();
|
||||
// control.Deselected();
|
||||
|
||||
#region IHasPropertyContainer
|
||||
public PropertyContainer PropertyContainer { |
||||
get { |
||||
return control.PropertyContainer; |
||||
} |
||||
} |
||||
#endregion
|
||||
} |
||||
} |
@ -0,0 +1,113 @@
@@ -0,0 +1,113 @@
|
||||
// <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.IO; |
||||
using ICSharpCode.SharpDevelop; |
||||
using ICSharpCode.SharpDevelop.Gui; |
||||
using ICSharpCode.SharpDevelop.Dom; |
||||
using ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor; |
||||
#endregion
|
||||
|
||||
namespace WorkflowDesigner |
||||
{ |
||||
/// <summary>
|
||||
/// Description of SecondaryDisplayBinding.
|
||||
/// </summary>
|
||||
public class WorkflowDesignerSecondaryDisplayBinding : ISecondaryDisplayBinding |
||||
{ |
||||
public WorkflowDesignerSecondaryDisplayBinding() |
||||
{ |
||||
} |
||||
|
||||
public bool ReattachWhenParserServiceIsReady { |
||||
get { |
||||
return true; |
||||
} |
||||
} |
||||
|
||||
|
||||
public bool CanAttachTo(IViewContent content) |
||||
{ |
||||
if (content is ITextEditorControlProvider) { |
||||
ITextEditorControlProvider textAreaControlProvider = (ITextEditorControlProvider)content; |
||||
string fileExtension = String.Empty; |
||||
string fileName = content.PrimaryFileName; |
||||
if (fileName == null) |
||||
return false; |
||||
|
||||
switch (Path.GetExtension(fileName).ToLowerInvariant()) { |
||||
case ".cs": |
||||
case ".vb": |
||||
ParseInformation info = ParserService.ParseFile(fileName, textAreaControlProvider.TextEditorControl.Document.TextContent, false); |
||||
|
||||
if (IsDesignable(info)) |
||||
return true; |
||||
break; |
||||
} |
||||
} |
||||
return false; |
||||
} |
||||
|
||||
public IViewContent[] CreateSecondaryViewContent(IViewContent viewContent) |
||||
{ |
||||
//HACK: Just create a view for now
|
||||
return new IViewContent[] { new WorkflowDesignerSecondaryViewContent(viewContent)}; |
||||
} |
||||
|
||||
public static bool IsInitializeComponentsMethodName(string name) |
||||
{ |
||||
return name == "InitializeComponents" || name == "InitializeComponent"; |
||||
} |
||||
|
||||
public static IMethod GetInitializeComponents(IClass c) |
||||
{ |
||||
c = c.GetCompoundClass(); |
||||
foreach (IMethod method in c.Methods) { |
||||
if (IsInitializeComponentsMethodName(method.Name) && method.Parameters.Count == 0) { |
||||
return method; |
||||
} |
||||
} |
||||
return null; |
||||
} |
||||
|
||||
public static bool BaseClassIsWorkflow(IClass c) |
||||
{ |
||||
// Simple test for fully qualified name
|
||||
c = c.GetCompoundClass(); |
||||
foreach (IReturnType baseType in c.BaseTypes) { |
||||
if (baseType.FullyQualifiedName == "System.Workflow.ComponentModel.Activity" |
||||
// also accept when could not be resolved
|
||||
|| baseType.FullyQualifiedName == "Activity" ) |
||||
{ |
||||
return true; |
||||
} |
||||
} |
||||
|
||||
IClass form = c.ProjectContent.GetClass("System.Workflow.ComponentModel.Activity", 0); |
||||
if (form != null && c.IsTypeInInheritanceTree(form)) |
||||
return true; |
||||
return false; |
||||
} |
||||
|
||||
public static bool IsDesignable(ParseInformation info) |
||||
{ |
||||
if (info != null) { |
||||
ICompilationUnit cu = (ICompilationUnit)info.BestCompilationUnit; |
||||
foreach (IClass c in cu.Classes) { |
||||
IMethod method = GetInitializeComponents(c); |
||||
if (method != null) { |
||||
return BaseClassIsWorkflow(c); |
||||
} |
||||
} |
||||
} |
||||
return false; |
||||
} |
||||
} |
||||
|
||||
} |
@ -0,0 +1,67 @@
@@ -0,0 +1,67 @@
|
||||
// <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.Windows.Forms; |
||||
using ICSharpCode.SharpDevelop.Gui; |
||||
using ICSharpCode.SharpDevelop; |
||||
using ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor; |
||||
using ICSharpCode.SharpDevelop.Widgets.SideBar; |
||||
#endregion
|
||||
|
||||
namespace WorkflowDesigner |
||||
{ |
||||
/// <summary>
|
||||
/// Description of SecondaryViewContent.
|
||||
/// </summary>
|
||||
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); |
||||
|
||||
// HACK to ensure SideBarPad exists! - Normally handled by FormsDesigner
|
||||
//PadDescriptor pad = WorkbenchSingleton.Workbench.GetPad(typeof(SideBarView));
|
||||
//.pad.CreatePad();
|
||||
|
||||
} |
||||
#endregion
|
||||
|
||||
#region Property Accessors
|
||||
public override Control Control { |
||||
get { |
||||
return control; |
||||
} |
||||
} |
||||
|
||||
public PropertyContainer PropertyContainer { |
||||
get { |
||||
return control.PropertyContainer; |
||||
} |
||||
} |
||||
#endregion
|
||||
|
||||
|
||||
protected override void LoadFromPrimary() |
||||
{ |
||||
control.LoadWorkflow(new NRefactoryDesignerLoader(((ITextEditorControlProvider)viewContent).TextEditorControl, viewContent)); |
||||
control.Selected(); |
||||
} |
||||
|
||||
protected override void SaveToPrimary() |
||||
{ |
||||
control.UnloadWorkflow(); |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,79 @@
@@ -0,0 +1,79 @@
|
||||
// <file>
|
||||
// <copyright see="prj:///doc/copyright.txt"/>
|
||||
// <license see="prj:///doc/license.txt"/>
|
||||
// <owner name="Russell Wilkins" email=""/>
|
||||
// <version>$Revision$</version>
|
||||
// </file>
|
||||
|
||||
using System; |
||||
using System.Drawing; |
||||
using System.Text; |
||||
using System.ComponentModel; |
||||
using ICSharpCode.SharpDevelop.Dom; |
||||
using ICSharpCode.TextEditor.Document; |
||||
using ICSharpCode.NRefactory.PrettyPrinter; |
||||
using ICSharpCode.NRefactory.Ast; |
||||
|
||||
namespace WorkflowDesigner |
||||
{ |
||||
/// <summary>
|
||||
/// Description of CSharpWorkflowDesignerGenerator.
|
||||
/// </summary>
|
||||
public class CSharpWorkflowDesignerGeneratorService : WorkflowDesignerGeneratorService |
||||
{ |
||||
public CSharpWorkflowDesignerGeneratorService(IServiceProvider provider, string codeSeparationFileName) : base(provider, codeSeparationFileName) |
||||
{ |
||||
} |
||||
|
||||
/// <summary>
|
||||
/// Finds the start line for the cursor when positioning inside a method.
|
||||
/// </summary>
|
||||
/// <param name="document"></param>
|
||||
/// <param name="method"></param>
|
||||
/// <returns></returns>
|
||||
protected override int GetCursorLine(IDocument document, IMethod method) |
||||
{ |
||||
DomRegion r = method.BodyRegion; |
||||
int offset = document.PositionToOffset(new Point(r.BeginColumn - 1, r.BeginLine - 1)); |
||||
string tmp = document.GetText(offset, 10); |
||||
while (offset < document.TextLength) { |
||||
char c = document.GetCharAt(offset++); |
||||
if (c == '{') { |
||||
return r.BeginLine + 1; |
||||
} |
||||
if (c != ' ') { |
||||
break; |
||||
} |
||||
} |
||||
return r.BeginLine + 2; |
||||
} |
||||
|
||||
protected override string CreateEventHandler(IClass completeClass, EventDescriptor edesc, string eventMethodName, string body, string indentation) |
||||
{ |
||||
string param = GenerateParams(completeClass, edesc, true); |
||||
|
||||
StringBuilder b = new StringBuilder(); |
||||
b.AppendLine(indentation); |
||||
b.AppendLine(indentation + "void " + eventMethodName + "(" + param + ")"); |
||||
b.AppendLine(indentation + "{"); |
||||
if (string.IsNullOrEmpty(body)) { |
||||
if (ICSharpCode.FormsDesigner.Gui.OptionPanels.GeneralOptionsPanel.InsertTodoComment) { |
||||
body = "// TODO: Implement " + eventMethodName; |
||||
} |
||||
} |
||||
b.AppendLine(indentation + "\t" + body); |
||||
b.AppendLine(indentation + "}"); |
||||
return b.ToString(); |
||||
} |
||||
|
||||
protected string GenerateParams(IClass completeClass, EventDescriptor edesc, bool paramNames) |
||||
{ |
||||
CSharpOutputVisitor v = new CSharpOutputVisitor(); |
||||
MethodDeclaration md = ConvertDescriptorToNRefactory(completeClass, edesc, "name"); |
||||
if (md != null) { |
||||
v.AppendCommaSeparatedList(md.Parameters); |
||||
} |
||||
return v.Text; |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,26 @@
@@ -0,0 +1,26 @@
|
||||
// <file>
|
||||
// <copyright see="prj:///doc/copyright.txt"/>
|
||||
// <license see="prj:///doc/license.txt"/>
|
||||
// <owner name="Russell Wilkins" email=""/>
|
||||
// <version>$Revision$</version>
|
||||
// </file>
|
||||
|
||||
using System; |
||||
using System.ComponentModel; |
||||
using System.Collections; |
||||
|
||||
namespace WorkflowDesigner |
||||
{ |
||||
/// <summary>
|
||||
/// Description of IWorkflowDesignerGenerator.
|
||||
/// </summary>
|
||||
public interface IWorkflowDesignerGeneratorService |
||||
{ |
||||
string CodeSeparationFileName { get;} |
||||
ICollection GetCompatibleMethods(EventDescriptor edesc); |
||||
bool ShowCode(); |
||||
bool ShowCode(int lineNumber); |
||||
bool ShowCode(System.ComponentModel.IComponent component, System.ComponentModel.EventDescriptor e, string methodName); |
||||
void UseMethod(System.ComponentModel.IComponent component, System.ComponentModel.EventDescriptor e, string methodName); |
||||
} |
||||
} |
@ -0,0 +1,245 @@
@@ -0,0 +1,245 @@
|
||||
// <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.Collections; |
||||
using System.ComponentModel; |
||||
using System.ComponentModel.Design; |
||||
using System.Workflow.ComponentModel.Design; |
||||
using System.Reflection; |
||||
|
||||
using ICSharpCode.Core; |
||||
using ICSharpCode.SharpDevelop; |
||||
using ICSharpCode.SharpDevelop.Dom; |
||||
using ICSharpCode.SharpDevelop.Dom.ReflectionLayer; |
||||
using ICSharpCode.SharpDevelop.Gui; |
||||
using ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor; |
||||
using ICSharpCode.TextEditor.Document; |
||||
|
||||
#endregion
|
||||
|
||||
namespace WorkflowDesigner |
||||
{ |
||||
/// <summary>
|
||||
/// Description of WorkflowDesignerGenerator.
|
||||
/// </summary>
|
||||
public abstract class WorkflowDesignerGeneratorService : IWorkflowDesignerGeneratorService, IServiceProvider |
||||
{ |
||||
IServiceProvider provider; |
||||
string codeSeparationFileName; |
||||
|
||||
public WorkflowDesignerGeneratorService(IServiceProvider provider, string codeSeparationFileName) |
||||
{ |
||||
this.provider = provider; |
||||
this.codeSeparationFileName = codeSeparationFileName; |
||||
} |
||||
|
||||
public object GetService(Type serviceType) |
||||
{ |
||||
return provider.GetService(serviceType); |
||||
} |
||||
|
||||
public string CodeSeparationFileName { |
||||
get { |
||||
return codeSeparationFileName; |
||||
} |
||||
} |
||||
|
||||
public virtual ICollection GetCompatibleMethods(EventDescriptor edesc) |
||||
{ |
||||
ArrayList compatibleMethods = new ArrayList(); |
||||
IClass completeClass; |
||||
|
||||
IDesignerHost designerHost = (IDesignerHost)this.GetService(typeof(IDesignerHost)); |
||||
if (designerHost != null && designerHost.RootComponent != null) |
||||
{ |
||||
IRootDesigner rootDesigner = designerHost.GetDesigner(designerHost.RootComponent) as IRootDesigner; |
||||
|
||||
LoggingService.DebugFormatted("DesignerHost.RootComponent={0}", rootDesigner.Component.Site.Name); |
||||
|
||||
ParseInformation info = ParserService.ParseFile(this.codeSeparationFileName); |
||||
ICompilationUnit cu = (ICompilationUnit)info.BestCompilationUnit; |
||||
MethodInfo methodInfo = edesc.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 compatible methods"); |
||||
|
||||
foreach (IMethod method in completeClass.Methods) { |
||||
if (method.Parameters.Count == methodInfo.GetParameters().Length) { |
||||
bool found = true; |
||||
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) { |
||||
compatibleMethods.Add(method.Name); |
||||
} |
||||
|
||||
} |
||||
} |
||||
} |
||||
} |
||||
} |
||||
|
||||
return compatibleMethods; |
||||
} |
||||
|
||||
protected virtual int GetCursorLine(IDocument document, IMethod method) |
||||
{ |
||||
return method.BodyRegion.BeginLine + 1; |
||||
} |
||||
|
||||
protected abstract string CreateEventHandler(IClass completeClass, EventDescriptor edesc, string eventMethodName, string body, string indentation); |
||||
|
||||
|
||||
public bool ShowCode() |
||||
{ |
||||
FileService.OpenFile(codeSeparationFileName); |
||||
|
||||
return true; |
||||
} |
||||
|
||||
public bool ShowCode(int lineNumber) |
||||
{ |
||||
ITextEditorControlProvider t = FileService.OpenFile(codeSeparationFileName) as ITextEditorControlProvider; |
||||
t.TextEditorControl.ActiveTextAreaControl.JumpTo(lineNumber); |
||||
|
||||
return true; |
||||
} |
||||
|
||||
public bool ShowCode(IComponent component, EventDescriptor e, string methodName) |
||||
{ |
||||
LoggingService.DebugFormatted("ShowCode {0}", methodName); |
||||
|
||||
IDesignerHost designerHost = (IDesignerHost)this.GetService(typeof(IDesignerHost)); |
||||
IRootDesigner rootDesigner = designerHost.GetDesigner(designerHost.RootComponent) as IRootDesigner; |
||||
|
||||
ParseInformation info = ParserService.ParseFile(this.codeSeparationFileName); |
||||
ICompilationUnit cu = (ICompilationUnit)info.BestCompilationUnit; |
||||
|
||||
ITextEditorControlProvider t = FileService.OpenFile(codeSeparationFileName) as ITextEditorControlProvider; |
||||
|
||||
IClass completeClass; |
||||
foreach (IClass c in cu.Classes) { |
||||
if (c.Name == rootDesigner.Component.Site.Name){ |
||||
completeClass = c.GetCompoundClass(); |
||||
|
||||
foreach (IMethod method in completeClass.Methods) { |
||||
if (method.Name == methodName) |
||||
{ |
||||
int position = GetCursorLine(t.TextEditorControl.Document, method); |
||||
t.TextEditorControl.ActiveTextAreaControl.JumpTo(position-1); |
||||
return true; |
||||
} |
||||
} |
||||
} |
||||
} |
||||
|
||||
return false; |
||||
} |
||||
|
||||
|
||||
/// <summary>
|
||||
/// Gets a method implementing the signature specified by the event descriptor
|
||||
/// </summary>
|
||||
protected static IMethod ConvertDescriptorToDom(IClass completeClass, EventDescriptor edesc, string methodName) |
||||
{ |
||||
MethodInfo mInfo = edesc.EventType.GetMethod("Invoke"); |
||||
DefaultMethod m = new DefaultMethod(completeClass, methodName); |
||||
m.ReturnType = ReflectionReturnType.Create(m, mInfo.ReturnType, false); |
||||
foreach (ParameterInfo pInfo in mInfo.GetParameters()) { |
||||
m.Parameters.Add(new ReflectionParameter(pInfo, m)); |
||||
} |
||||
return m; |
||||
} |
||||
|
||||
/// <summary>
|
||||
/// Gets a method implementing the signature specified by the event descriptor
|
||||
/// </summary>
|
||||
protected static ICSharpCode.NRefactory.Ast.MethodDeclaration |
||||
ConvertDescriptorToNRefactory(IClass completeClass, EventDescriptor edesc, string methodName) |
||||
{ |
||||
return ICSharpCode.SharpDevelop.Dom.Refactoring.CodeGenerator.ConvertMember( |
||||
ConvertDescriptorToDom(completeClass, edesc, methodName), |
||||
new ClassFinder(completeClass, completeClass.BodyRegion.BeginLine + 1, 1) |
||||
) as ICSharpCode.NRefactory.Ast.MethodDeclaration; |
||||
} |
||||
|
||||
protected virtual int GetEventHandlerInsertionLine(IClass c) |
||||
{ |
||||
return c.Region.EndLine; |
||||
} |
||||
|
||||
public void UseMethod(IComponent component, EventDescriptor edesc, string methodName) |
||||
{ |
||||
LoggingService.DebugFormatted("UseMethod {0}", methodName); |
||||
IClass completeClass; |
||||
|
||||
IDesignerHost designerHost = (IDesignerHost)this.GetService(typeof(IDesignerHost)); |
||||
if (designerHost != null && designerHost.RootComponent != null) |
||||
{ |
||||
IRootDesigner rootDesigner = designerHost.GetDesigner(designerHost.RootComponent) as IRootDesigner; |
||||
ITextEditorControlProvider t = FileService.OpenFile(codeSeparationFileName) as ITextEditorControlProvider; |
||||
|
||||
LoggingService.DebugFormatted("DesignerHost.RootComponent={0}", rootDesigner.Component.Site.Name); |
||||
|
||||
ParseInformation info = ParserService.ParseFile(this.codeSeparationFileName); |
||||
ICompilationUnit cu = (ICompilationUnit)info.BestCompilationUnit; |
||||
MethodInfo methodInfo = edesc.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; |
||||
} |
||||
} |
||||
|
||||
} |
||||
|
||||
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, edesc, methodName, "", "\t\t")); |
||||
|
||||
} |
||||
} |
||||
} |
||||
} |
||||
|
||||
} |
||||
} |
@ -0,0 +1,186 @@
@@ -0,0 +1,186 @@
|
||||
// <file>
|
||||
// <copyright see="prj:///doc/copyright.txt"/>
|
||||
// <license see="prj:///doc/license.txt"/>
|
||||
// <owner name="Russell Wilkins" email=""/>
|
||||
// <version>$Revision$</version>
|
||||
// </file>
|
||||
|
||||
using System; |
||||
using System.ComponentModel.Design; |
||||
using System.ComponentModel; |
||||
using System.Collections; |
||||
using ICSharpCode.Core; |
||||
using ICSharpCode.SharpDevelop; |
||||
using ICSharpCode.SharpDevelop.Gui; |
||||
|
||||
namespace WorkflowDesigner |
||||
{ |
||||
/// <summary>
|
||||
/// Description of EventBindingService.
|
||||
/// </summary>
|
||||
public class EventBindingService : IEventBindingService, IServiceProvider |
||||
{ |
||||
IServiceProvider provider; |
||||
|
||||
public EventBindingService(IServiceProvider provider) |
||||
{ |
||||
this.provider = provider; |
||||
} |
||||
|
||||
public object GetService(Type serviceType) |
||||
{ |
||||
return provider.GetService(serviceType); |
||||
} |
||||
|
||||
internal IWorkflowDesignerGeneratorService GeneratorService{ |
||||
get{ |
||||
return (IWorkflowDesignerGeneratorService)GetService(typeof(IWorkflowDesignerGeneratorService)); |
||||
} |
||||
} |
||||
|
||||
public string CreateUniqueMethodName(IComponent component, EventDescriptor e) |
||||
{ |
||||
LoggingService.Debug("CreateUniqueMethodName(" + component + ", " + e + ")"); |
||||
return String.Format("{0}{1}", Char.ToUpper(component.Site.Name[0]) + component.Site.Name.Substring(1), e.DisplayName); |
||||
} |
||||
|
||||
public ICollection GetCompatibleMethods(EventDescriptor e) |
||||
{ |
||||
|
||||
LoggingService.Debug("GetCompatibleMethods(" + e + ")"); |
||||
|
||||
IWorkflowDesignerGeneratorService generatorService = GeneratorService; |
||||
if (generatorService != null) |
||||
return GeneratorService.GetCompatibleMethods(e); |
||||
|
||||
return new string[]{}; |
||||
} |
||||
|
||||
public EventDescriptor GetEvent(PropertyDescriptor property) |
||||
{ |
||||
EventPropertyDescriptor epd = property as EventPropertyDescriptor; |
||||
if (epd == null) |
||||
return null; |
||||
|
||||
return epd.eventDescriptor; |
||||
} |
||||
|
||||
public PropertyDescriptorCollection GetEventProperties(EventDescriptorCollection events) |
||||
{ |
||||
ArrayList props = new ArrayList (); |
||||
|
||||
foreach (EventDescriptor e in events) |
||||
props.Add (GetEventProperty (e)); |
||||
|
||||
return new PropertyDescriptorCollection ((PropertyDescriptor[]) props.ToArray (typeof (PropertyDescriptor))); |
||||
} |
||||
|
||||
public PropertyDescriptor GetEventProperty(EventDescriptor e) |
||||
{ |
||||
return new EventPropertyDescriptor(e); |
||||
} |
||||
|
||||
public bool ShowCode() |
||||
{ |
||||
IWorkflowDesignerGeneratorService generatorService = GeneratorService; |
||||
if (generatorService != null) |
||||
return GeneratorService.ShowCode(); |
||||
|
||||
return false; |
||||
} |
||||
|
||||
public bool ShowCode(int lineNumber) |
||||
{ |
||||
IWorkflowDesignerGeneratorService generatorService = GeneratorService; |
||||
if (generatorService != null) |
||||
return GeneratorService.ShowCode(lineNumber); |
||||
|
||||
return false; |
||||
|
||||
} |
||||
|
||||
public bool ShowCode(IComponent component, EventDescriptor e) |
||||
{ |
||||
|
||||
IWorkflowDesignerGeneratorService generatorService = GeneratorService; |
||||
if (generatorService != null) |
||||
return GeneratorService.ShowCode(); |
||||
|
||||
return false; |
||||
} |
||||
|
||||
public bool ShowCode(IComponent component, EventDescriptor e, string methodName) |
||||
{ |
||||
IWorkflowDesignerGeneratorService generatorService = GeneratorService; |
||||
if (generatorService != null) |
||||
return GeneratorService.ShowCode(component, e, methodName); |
||||
|
||||
return false; |
||||
} |
||||
|
||||
public void UseMethod(IComponent component, EventDescriptor e, string methodName) |
||||
{ |
||||
LoggingService.Debug("UseMethod()"); |
||||
|
||||
IWorkflowDesignerGeneratorService generatorService = GeneratorService; |
||||
if (generatorService != null) |
||||
GeneratorService.UseMethod(component, e, methodName); |
||||
|
||||
} |
||||
} |
||||
|
||||
public class EventPropertyDescriptor : PropertyDescriptor |
||||
{ |
||||
internal EventDescriptor eventDescriptor; |
||||
|
||||
public EventPropertyDescriptor(EventDescriptor eventDescriptor) : base(eventDescriptor) |
||||
{ |
||||
this.eventDescriptor = eventDescriptor; |
||||
} |
||||
|
||||
public override Type ComponentType { |
||||
get { |
||||
return eventDescriptor.ComponentType; |
||||
} |
||||
} |
||||
|
||||
public override bool IsReadOnly { |
||||
get { |
||||
return false; |
||||
} |
||||
} |
||||
|
||||
public override Type PropertyType { |
||||
get { |
||||
return eventDescriptor.EventType; |
||||
} |
||||
} |
||||
|
||||
public override bool CanResetValue(object component) |
||||
{ |
||||
return false; |
||||
} |
||||
|
||||
public override object GetValue(object component) |
||||
{ |
||||
//TODO: Implement this
|
||||
return null; |
||||
} |
||||
|
||||
public override void ResetValue(object component) |
||||
{ |
||||
|
||||
} |
||||
|
||||
public override void SetValue(object component, object value) |
||||
{ |
||||
//TODO: Implement this
|
||||
} |
||||
|
||||
public override bool ShouldSerializeValue(object component) |
||||
{ |
||||
if (GetValue (component) == null) return false; |
||||
return true; |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,73 @@
@@ -0,0 +1,73 @@
|
||||
// <file>
|
||||
// <copyright see="prj:///doc/copyright.txt"/>
|
||||
// <license see="prj:///doc/license.txt"/>
|
||||
// <owner name="Russell Wilkins" email=""/>
|
||||
// <version>$Revision$</version>
|
||||
// </file>
|
||||
|
||||
using System; |
||||
using System.Workflow.ComponentModel.Design; |
||||
|
||||
namespace WorkflowDesigner |
||||
{ |
||||
/// <summary>
|
||||
/// Description of ExtendedUIService.
|
||||
/// </summary>
|
||||
public class ExtendedUIService : IExtendedUIService |
||||
{ |
||||
public ExtendedUIService() |
||||
{ |
||||
} |
||||
|
||||
public System.Windows.Forms.DialogResult AddWebReference(out Uri url, out Type proxyClass) |
||||
{ |
||||
throw new NotImplementedException(); |
||||
} |
||||
|
||||
public Uri GetUrlForProxyClass(Type proxyClass) |
||||
{ |
||||
throw new NotImplementedException(); |
||||
} |
||||
|
||||
public Type GetProxyClassForUrl(Uri url) |
||||
{ |
||||
throw new NotImplementedException(); |
||||
} |
||||
|
||||
public void AddDesignerActions(DesignerAction[] actions) |
||||
{ |
||||
//throw new NotImplementedException();
|
||||
} |
||||
|
||||
public void RemoveDesignerActions() |
||||
{ |
||||
//throw new NotImplementedException();
|
||||
} |
||||
|
||||
public bool NavigateToProperty(string propName) |
||||
{ |
||||
throw new NotImplementedException(); |
||||
} |
||||
|
||||
public System.ComponentModel.ITypeDescriptorContext GetSelectedPropertyContext() |
||||
{ |
||||
throw new NotImplementedException(); |
||||
} |
||||
|
||||
public void ShowToolsOptions() |
||||
{ |
||||
throw new NotImplementedException(); |
||||
} |
||||
|
||||
public System.Collections.Generic.Dictionary<string, Type> GetXsdProjectItemsInfo() |
||||
{ |
||||
throw new NotImplementedException(); |
||||
} |
||||
|
||||
public void AddAssemblyReference(System.Reflection.AssemblyName assemblyName) |
||||
{ |
||||
throw new NotImplementedException(); |
||||
} |
||||
|
||||
} |
||||
} |
@ -0,0 +1,44 @@
@@ -0,0 +1,44 @@
|
||||
// <file>
|
||||
// <copyright see="prj:///doc/copyright.txt"/>
|
||||
// <license see="prj:///doc/license.txt"/>
|
||||
// <owner name="Russell Wilkins" email=""/>
|
||||
// <version>$Revision$</version>
|
||||
// </file>
|
||||
|
||||
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; |
||||
//using System
|
||||
|
||||
namespace WorkflowDesigner |
||||
{ |
||||
/// <summary>
|
||||
/// Description of IdentifierCreationService.
|
||||
/// </summary>
|
||||
public class IdentifierCreationService : IIdentifierCreationService |
||||
{ |
||||
public IdentifierCreationService() |
||||
{ |
||||
} |
||||
|
||||
public void EnsureUniqueIdentifiers(System.Workflow.ComponentModel.CompositeActivity parentActivity, System.Collections.ICollection childActivities) |
||||
{ |
||||
LoggingService.DebugFormatted("EnsureUniqueIdentifiers(parentActivity={0}, childActivities={1})", parentActivity, childActivities); |
||||
//throw new NotImplementedException();
|
||||
} |
||||
|
||||
public void ValidateIdentifier(System.Workflow.ComponentModel.Activity activity, string identifier) |
||||
{ |
||||
LoggingService.DebugFormatted("ValidateIdentifier(ValidateIdentifier={0}, identifier={1})", activity, identifier); |
||||
//throw new NotImplementedException();
|
||||
} |
||||
|
||||
} |
||||
} |
@ -0,0 +1,80 @@
@@ -0,0 +1,80 @@
|
||||
// <file>
|
||||
// <copyright see="prj:///doc/copyright.txt"/>
|
||||
// <license see="prj:///doc/license.txt"/>
|
||||
// <owner name="Russell Wilkins" email=""/>
|
||||
// <version>$Revision$</version>
|
||||
// </file>
|
||||
|
||||
using System; |
||||
using System.Workflow.ComponentModel.Design; |
||||
using ICSharpCode.Core; |
||||
|
||||
namespace WorkflowDesigner |
||||
{ |
||||
/// <summary>
|
||||
/// Description of MemberCreationService.
|
||||
/// </summary>
|
||||
public class MemberCreationService : IMemberCreationService |
||||
{ |
||||
public MemberCreationService() |
||||
{ |
||||
} |
||||
|
||||
public void CreateField(string className, string fieldName, Type fieldType, Type[] genericParameterTypes, System.CodeDom.MemberAttributes attributes, System.CodeDom.CodeSnippetExpression initializationExpression, bool overwriteExisting) |
||||
{ |
||||
throw new NotImplementedException(); |
||||
} |
||||
|
||||
public void CreateProperty(string className, string propertyName, Type propertyType, System.Workflow.ComponentModel.Compiler.AttributeInfo[] attributes, bool emitDependencyProperty, bool isMetaProperty, bool isAttached, Type ownerType, bool isReadOnly) |
||||
{ |
||||
throw new NotImplementedException(); |
||||
} |
||||
|
||||
public void CreateEvent(string className, string eventName, Type eventType, System.Workflow.ComponentModel.Compiler.AttributeInfo[] attributes, bool emitDependencyProperty) |
||||
{ |
||||
throw new NotImplementedException(); |
||||
} |
||||
|
||||
public void UpdateTypeName(string oldClassName, string newClassName) |
||||
{ |
||||
LoggingService.DebugFormatted("UpdateTypeName(oldClassName={0}, newClassName={1})", oldClassName, newClassName); |
||||
//throw new NotImplementedException();
|
||||
} |
||||
|
||||
public void UpdateBaseType(string className, Type baseType) |
||||
{ |
||||
throw new NotImplementedException(); |
||||
} |
||||
|
||||
public void UpdateProperty(string className, string oldPropertyName, Type oldPropertyType, string newPropertyName, Type newPropertyType, System.Workflow.ComponentModel.Compiler.AttributeInfo[] attributes, bool emitDependencyProperty, bool isMetaProperty) |
||||
{ |
||||
throw new NotImplementedException(); |
||||
} |
||||
|
||||
public void UpdateEvent(string className, string oldEventName, Type oldEventType, string newEventName, Type newEventType, System.Workflow.ComponentModel.Compiler.AttributeInfo[] attributes, bool emitDependencyProperty, bool isMetaProperty) |
||||
{ |
||||
throw new NotImplementedException(); |
||||
} |
||||
|
||||
public void RemoveProperty(string className, string propertyName, Type propertyType) |
||||
{ |
||||
throw new NotImplementedException(); |
||||
} |
||||
|
||||
public void RemoveEvent(string className, string eventName, Type eventType) |
||||
{ |
||||
throw new NotImplementedException(); |
||||
} |
||||
|
||||
public void ShowCode(System.Workflow.ComponentModel.Activity activity, string methodName, Type delegateType) |
||||
{ |
||||
throw new NotImplementedException(); |
||||
} |
||||
|
||||
public void ShowCode() |
||||
{ |
||||
throw new NotImplementedException(); |
||||
} |
||||
|
||||
} |
||||
} |
@ -0,0 +1,67 @@
@@ -0,0 +1,67 @@
|
||||
// <file>
|
||||
// <copyright see="prj:///doc/copyright.txt"/>
|
||||
// <license see="prj:///doc/license.txt"/>
|
||||
// <owner name="Russell Wilkins" email=""/>
|
||||
// <version>$Revision$</version>
|
||||
// </file>
|
||||
|
||||
using System; |
||||
using System.ComponentModel.Design; |
||||
using System.Workflow.ComponentModel.Design; |
||||
using System.Windows.Forms; |
||||
using System.Drawing; |
||||
using System.Collections; |
||||
using ICSharpCode.Core; |
||||
using ICSharpCode.SharpDevelop.Gui; |
||||
|
||||
namespace WorkflowDesigner |
||||
{ |
||||
/// <summary>
|
||||
/// Description of MenuCommandService.
|
||||
/// </summary>
|
||||
public class WorkflowMenuCommandService : System.ComponentModel.Design.MenuCommandService |
||||
{ |
||||
|
||||
public WorkflowMenuCommandService(IServiceProvider host) : base(host) |
||||
{ |
||||
|
||||
} |
||||
|
||||
public override void ShowContextMenu(CommandID menuID, int x, int y) |
||||
{ |
||||
if (menuID == null) |
||||
throw new ArgumentNullException("menuID"); |
||||
|
||||
LoggingService.Debug("ShowContextMenu"); |
||||
|
||||
if (menuID == WorkflowMenuCommands.DesignerActionsMenu) |
||||
{ |
||||
ContextMenuStrip contextMenu = new ContextMenuStrip(); |
||||
|
||||
ICollection collection = this.GetCommandList(menuID.Guid); |
||||
foreach (System.ComponentModel.Design.MenuCommand menuCommand in collection) |
||||
{ |
||||
// Only interested in the errors.
|
||||
if (menuCommand.CommandID.ID == 8342) |
||||
{ |
||||
ToolStripMenuItem menuItem = new ToolStripMenuItem(menuCommand.Properties["Text"].ToString()); |
||||
menuItem.Click += ClickHandler; |
||||
contextMenu.Items.Add(menuItem); |
||||
} |
||||
} |
||||
|
||||
WorkflowView workflowView = GetService(typeof(WorkflowView)) as WorkflowView; |
||||
contextMenu.Show(workflowView , workflowView.PointToClient(new Point(x, y))); |
||||
|
||||
} |
||||
} |
||||
|
||||
void ClickHandler(object sender, EventArgs e) |
||||
{ |
||||
// TODO: Move focus to the property in the property pad.
|
||||
throw new NotImplementedException(); |
||||
} |
||||
|
||||
} |
||||
} |
||||
|
@ -0,0 +1,255 @@
@@ -0,0 +1,255 @@
|
||||
// <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.Collections; |
||||
using System.Drawing.Design; |
||||
using System.ComponentModel; |
||||
using System.ComponentModel.Design; |
||||
using System.Workflow.Activities; |
||||
using ICSharpCode.Core; |
||||
using System.Reflection; |
||||
using System.Windows.Forms; |
||||
using ICSharpCode.SharpDevelop.Gui; |
||||
using ICSharpCode.SharpDevelop.Project; |
||||
#endregion
|
||||
|
||||
namespace WorkflowDesigner |
||||
{ |
||||
// TODO - Replace this a class based on System.Drawing.Design.ToolboxService
|
||||
public class WorkflowToolboxService : IToolboxService |
||||
{ |
||||
private string category = "Workflow"; |
||||
|
||||
public WorkflowToolboxService() |
||||
{ |
||||
} |
||||
|
||||
public CategoryNameCollection CategoryNames { |
||||
get { |
||||
return new CategoryNameCollection(new string[] { "Workflow" }); |
||||
} |
||||
} |
||||
|
||||
public string SelectedCategory { |
||||
get { |
||||
return category; |
||||
} |
||||
set { |
||||
category = value; |
||||
} |
||||
} |
||||
|
||||
public void AddCreator(ToolboxItemCreatorCallback creator, string format) |
||||
{ |
||||
throw new NotImplementedException(); |
||||
} |
||||
|
||||
public void AddCreator(ToolboxItemCreatorCallback creator, string format, System.ComponentModel.Design.IDesignerHost host) |
||||
{ |
||||
throw new NotImplementedException(); |
||||
} |
||||
|
||||
public void AddLinkedToolboxItem(ToolboxItem toolboxItem, System.ComponentModel.Design.IDesignerHost host) |
||||
{ |
||||
throw new NotImplementedException(); |
||||
} |
||||
|
||||
public void AddLinkedToolboxItem(ToolboxItem toolboxItem, string category, System.ComponentModel.Design.IDesignerHost host) |
||||
{ |
||||
throw new NotImplementedException(); |
||||
} |
||||
|
||||
public void AddToolboxItem(ToolboxItem toolboxItem) |
||||
{ |
||||
throw new NotImplementedException(); |
||||
} |
||||
|
||||
public void AddToolboxItem(ToolboxItem toolboxItem, string category) |
||||
{ |
||||
throw new NotImplementedException(); |
||||
} |
||||
|
||||
public ToolboxItem DeserializeToolboxItem(object serializedObject) |
||||
{ |
||||
return DeserializeToolboxItem(serializedObject, null); |
||||
} |
||||
|
||||
public ToolboxItem DeserializeToolboxItem(object serializedObject, System.ComponentModel.Design.IDesignerHost host) |
||||
{ |
||||
IDataObject dataObject = (System.Windows.Forms.IDataObject)serializedObject; |
||||
|
||||
SharpDevelopSideTabItem sti = (SharpDevelopSideTabItem)dataObject.GetData(typeof(SharpDevelopSideTabItem)); |
||||
ToolboxItem toolboxItem = (ToolboxItem)sti.Tag; |
||||
|
||||
return toolboxItem; |
||||
} |
||||
|
||||
public ToolboxItem GetSelectedToolboxItem() |
||||
{ |
||||
throw new NotImplementedException(); |
||||
} |
||||
|
||||
public ToolboxItem GetSelectedToolboxItem(System.ComponentModel.Design.IDesignerHost host) |
||||
{ |
||||
throw new NotImplementedException(); |
||||
} |
||||
|
||||
public ToolboxItemCollection GetToolboxItems() |
||||
{ |
||||
throw new NotImplementedException(); |
||||
} |
||||
|
||||
public ToolboxItemCollection GetToolboxItems(System.ComponentModel.Design.IDesignerHost host) |
||||
{ |
||||
throw new NotImplementedException(); |
||||
} |
||||
|
||||
public ToolboxItemCollection GetToolboxItems(string category) |
||||
{ |
||||
throw new NotImplementedException(); |
||||
} |
||||
|
||||
public ToolboxItemCollection GetToolboxItems(string category, System.ComponentModel.Design.IDesignerHost host) |
||||
{ |
||||
throw new NotImplementedException(); |
||||
} |
||||
|
||||
public bool IsSupported(object serializedObject, System.ComponentModel.Design.IDesignerHost host) |
||||
{ |
||||
return true; |
||||
} |
||||
|
||||
public bool IsSupported(object serializedObject, System.Collections.ICollection filterAttributes) |
||||
{ |
||||
return true; |
||||
} |
||||
|
||||
public bool IsToolboxItem(object serializedObject) |
||||
{ |
||||
throw new NotImplementedException(); |
||||
} |
||||
|
||||
public bool IsToolboxItem(object serializedObject, System.ComponentModel.Design.IDesignerHost host) |
||||
{ |
||||
throw new NotImplementedException(); |
||||
} |
||||
|
||||
public void Refresh() |
||||
{ |
||||
throw new NotImplementedException(); |
||||
} |
||||
|
||||
public void RemoveCreator(string format) |
||||
{ |
||||
throw new NotImplementedException(); |
||||
} |
||||
|
||||
public void RemoveCreator(string format, System.ComponentModel.Design.IDesignerHost host) |
||||
{ |
||||
throw new NotImplementedException(); |
||||
} |
||||
|
||||
public void RemoveToolboxItem(ToolboxItem toolboxItem) |
||||
{ |
||||
throw new NotImplementedException(); |
||||
} |
||||
|
||||
public void RemoveToolboxItem(ToolboxItem toolboxItem, string category) |
||||
{ |
||||
throw new NotImplementedException(); |
||||
} |
||||
|
||||
public void SelectedToolboxItemUsed() |
||||
{ |
||||
throw new NotImplementedException(); |
||||
} |
||||
|
||||
public object SerializeToolboxItem(ToolboxItem toolboxItem) |
||||
{ |
||||
throw new NotImplementedException(); |
||||
} |
||||
|
||||
public bool SetCursor() |
||||
{ |
||||
throw new NotImplementedException(); |
||||
} |
||||
|
||||
public void SetSelectedToolboxItem(ToolboxItem toolboxItem) |
||||
{ |
||||
throw new NotImplementedException(); |
||||
} |
||||
|
||||
|
||||
} |
||||
// public class ToolboxService2 : System.Drawing.Design.ToolboxService
|
||||
// {
|
||||
// private CategoryNameCollection categoryNameCollection = new CategoryNameCollection(new string[] {});
|
||||
// private string selectedCategory;
|
||||
// private ArrayList items = new ArrayList(); // TODO: replace by category item lists.
|
||||
//
|
||||
// public ToolboxService2() : base()
|
||||
// {
|
||||
// foreach (Assembly assembly in System.AppDomain.CurrentDomain.GetAssemblies())
|
||||
// {
|
||||
// if (assembly.GetName().Name == "System.Workflow.Activities")
|
||||
// {
|
||||
// ICollection toolboxItems = System.Drawing.Design.ToolboxService.GetToolboxItems(assembly.GetName());
|
||||
// LoggingService.DebugFormatted("ToolboxItems count = {0}", toolboxItems.Count);
|
||||
//
|
||||
// foreach (ToolboxItem tbi in toolboxItems)
|
||||
// {
|
||||
// ((IToolboxService)this).AddToolboxItem(tbi);
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// }
|
||||
// }
|
||||
//
|
||||
//
|
||||
// protected override CategoryNameCollection CategoryNames {
|
||||
// get {
|
||||
// return categoryNameCollection;
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// protected override string SelectedCategory {
|
||||
// get {
|
||||
// return selectedCategory;
|
||||
// }
|
||||
// set {
|
||||
// selectedCategory = value;
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// protected override ToolboxItemContainer SelectedItemContainer {
|
||||
// get {
|
||||
// throw new NotImplementedException();
|
||||
// }
|
||||
// set {
|
||||
// throw new NotImplementedException();
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// protected override System.Collections.IList GetItemContainers()
|
||||
// {
|
||||
// return items;
|
||||
// }
|
||||
//
|
||||
// protected override System.Collections.IList GetItemContainers(string categoryName)
|
||||
// {
|
||||
// return items;
|
||||
// }
|
||||
//
|
||||
// protected override void Refresh()
|
||||
// {
|
||||
// throw new NotImplementedException();
|
||||
// }
|
||||
//
|
||||
// }
|
||||
} |
@ -0,0 +1,61 @@
@@ -0,0 +1,61 @@
|
||||
<?xml version="1.0"?> |
||||
<Template author="Russell Wilkins"> |
||||
|
||||
<Config |
||||
name = "Sequential Workflow (Code-only)" |
||||
icon = "Icons.32x32.XMLFileIcon" |
||||
category = "Workflow" |
||||
subcategory = "C#" |
||||
defaultname = "Workflow${Number}.cs" |
||||
language = "C#"/> |
||||
|
||||
<Description>Sequential Workflow (Code-only)</Description> |
||||
|
||||
|
||||
<Files> |
||||
<File name="${Path}/${FileNameWithoutExtension}.Designer.cs" DependentUpon="${FileName}" language="C#"><![CDATA[${StandardHeader.C#} |
||||
|
||||
using System; |
||||
using System.Workflow.Activities; |
||||
|
||||
namespace ${StandardNamespace} |
||||
{ |
||||
partial class ${ClassName} |
||||
{ |
||||
private void InitializeComponent() |
||||
{ |
||||
this.Name = "${ClassName}"; |
||||
} |
||||
|
||||
} |
||||
}]]></File> |
||||
|
||||
<File name="${FullName}" language="C#"><![CDATA[${StandardHeader.C#} |
||||
|
||||
using System; |
||||
using System.Workflow.Activities; |
||||
|
||||
namespace ${StandardNamespace} |
||||
{ |
||||
public partial class ${ClassName}: SequentialWorkflowActivity |
||||
{ |
||||
public ${ClassName}() |
||||
{ |
||||
// |
||||
// The InitializeComponent() call is required for designer support. |
||||
// |
||||
InitializeComponent(); |
||||
|
||||
// |
||||
// TODO: Add constructor code after the InitializeComponent() call. |
||||
// |
||||
} |
||||
} |
||||
}]]></File> |
||||
|
||||
|
||||
|
||||
</Files> |
||||
|
||||
<AdditionalOptions/> |
||||
</Template> |
@ -0,0 +1,26 @@
@@ -0,0 +1,26 @@
|
||||
<?xml version="1.0"?> |
||||
<Template author="Russell Wilkins"> |
||||
|
||||
<Config |
||||
name = "Sequential Workflow (No Code)" |
||||
icon = "Icons.32x32.XMLFileIcon" |
||||
category = "Workflow" |
||||
defaultname = "Workflow${Number}.xoml" |
||||
language = "Xoml"/> |
||||
|
||||
<Description>Sequential Workflow (No Code)</Description> |
||||
|
||||
|
||||
<Files> |
||||
|
||||
<File name="${FullName}" language="Xoml"><![CDATA[ |
||||
<SequentialWorkflowActivity x:Class="${StandardNamespace}.${ClassName}" x:Name="${ClassName}" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/workflow"> |
||||
</SequentialWorkflowActivity> |
||||
]]></File> |
||||
|
||||
|
||||
|
||||
</Files> |
||||
|
||||
<AdditionalOptions/> |
||||
</Template> |
@ -0,0 +1,26 @@
@@ -0,0 +1,26 @@
|
||||
<?xml version="1.0"?> |
||||
<Template author="Russell Wilkins"> |
||||
|
||||
<!-- Template Header --> |
||||
<TemplateConfiguration> |
||||
<Name>Workflow project</Name> |
||||
<Category>C#</Category> |
||||
<Subcategory>.NET 3.0</Subcategory> |
||||
<Icon>C#.Project.EmptyProject</Icon> |
||||
<Description>Empty workflow project</Description> |
||||
</TemplateConfiguration> |
||||
|
||||
<Project language="C#" > |
||||
<Imports> |
||||
<Import Project="$(MSBuildExtensionsPath)\Microsoft\Windows Workflow Foundation\v3.0\Workflow.Targets" /> |
||||
</Imports> |
||||
|
||||
<ProjectItems> |
||||
<Reference Include="System" /> |
||||
<Reference Include="System.Xml" /> |
||||
<Reference Include="System.Workflow.Activities" /> |
||||
<Reference Include="System.Workflow.ComponentModel" /> |
||||
<Reference Include="System.Workflow.Runtime" /> |
||||
</ProjectItems> |
||||
</Project> |
||||
</Template> |
@ -0,0 +1,46 @@
@@ -0,0 +1,46 @@
|
||||
<AddIn name = "Workflow Foundation Designer" |
||||
author = "Russell Wilkins" |
||||
url = "" |
||||
description = "Windows Workflow Foundation Designer"> |
||||
|
||||
<Runtime> |
||||
<Import assembly = "WorkflowDesigner.dll"/> |
||||
</Runtime> |
||||
|
||||
<Manifest> |
||||
<Identity name="WorkflowDesigner" version="@WorkflowDesigner.dll"/> |
||||
<Dependency addin="SharpDevelop" version="3.0"/> |
||||
</Manifest> |
||||
|
||||
|
||||
<!--Primary View --> |
||||
<Path name="/SharpDevelop/Workbench/FileFilter"> |
||||
<FileFilter id = "WorkflowFileFilter" |
||||
name = "Workflow (*.xoml)" |
||||
extensions = "*.xoml" |
||||
insertbefore = "Boo"/> |
||||
</Path> |
||||
|
||||
<Path name = "/SharpDevelop/Workbench/DisplayBindings"> |
||||
<DisplayBinding id = "WorkflowDisplayBinding" |
||||
class = "WorkflowDesigner.WorkflowPrimaryDisplayBinding" |
||||
insertbefore = "Text" |
||||
fileNamePattern = "\.(xoml)$" |
||||
languagePattern = "^Xoml$" |
||||
/> |
||||
</Path> |
||||
|
||||
<!--Secondary View --> |
||||
<Path name = "/SharpDevelop/Workbench/DisplayBindings"> |
||||
<DisplayBinding id = "WorkflowDesignerSecondary" |
||||
type = "Secondary" |
||||
class = "WorkflowDesigner.WorkflowDesignerSecondaryDisplayBinding" |
||||
fileNamePattern = "\.cs?$" /> |
||||
</Path> |
||||
|
||||
<!--Template path --> |
||||
<Path name = "/SharpDevelop/BackendBindings/Templates"> |
||||
<Directory id = "WorkflowDesigner" path = "./Templates" /> |
||||
</Path> |
||||
|
||||
</AddIn> |
@ -0,0 +1,154 @@
@@ -0,0 +1,154 @@
|
||||
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> |
||||
<PropertyGroup> |
||||
<ProjectGuid>{533F4684-DBA6-4518-B005-C84F22A2DD57}</ProjectGuid> |
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> |
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> |
||||
<OutputType>Library</OutputType> |
||||
<RootNamespace>WorkflowDesigner</RootNamespace> |
||||
<AssemblyName>WorkflowDesigner</AssemblyName> |
||||
<AllowUnsafeBlocks>False</AllowUnsafeBlocks> |
||||
<NoStdLib>False</NoStdLib> |
||||
<WarningLevel>4</WarningLevel> |
||||
<TreatWarningsAsErrors>false</TreatWarningsAsErrors> |
||||
</PropertyGroup> |
||||
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' "> |
||||
<OutputPath>..\..\..\..\..\AddIns\AddIns\DisplayBindings\WorkflowDesigner\</OutputPath> |
||||
<DebugSymbols>true</DebugSymbols> |
||||
<DebugType>Full</DebugType> |
||||
<CheckForOverflowUnderflow>True</CheckForOverflowUnderflow> |
||||
<DefineConstants>DEBUG;TRACE</DefineConstants> |
||||
<Optimize>False</Optimize> |
||||
<StartAction>Program</StartAction> |
||||
<StartProgram>..\..\..\..\..\bin\SharpDevelop.exe</StartProgram> |
||||
</PropertyGroup> |
||||
<PropertyGroup Condition=" '$(Configuration)' == 'Release' "> |
||||
<OutputPath>..\..\..\..\..\AddIns\AddIns\DisplayBindings\WorkflowDesigner\</OutputPath> |
||||
<DebugSymbols>false</DebugSymbols> |
||||
<DebugType>None</DebugType> |
||||
<CheckForOverflowUnderflow>False</CheckForOverflowUnderflow> |
||||
<DefineConstants>TRACE</DefineConstants> |
||||
<Optimize>False</Optimize> |
||||
</PropertyGroup> |
||||
<PropertyGroup Condition=" '$(Platform)' == 'AnyCPU' "> |
||||
<RegisterForComInterop>False</RegisterForComInterop> |
||||
<GenerateSerializationAssemblies>Auto</GenerateSerializationAssemblies> |
||||
<BaseAddress>4194304</BaseAddress> |
||||
<PlatformTarget>AnyCPU</PlatformTarget> |
||||
<FileAlignment>4096</FileAlignment> |
||||
</PropertyGroup> |
||||
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.Targets" /> |
||||
<ItemGroup> |
||||
<Reference Include="System"> |
||||
<Private>False</Private> |
||||
</Reference> |
||||
<Reference Include="System.Data"> |
||||
<Private>False</Private> |
||||
</Reference> |
||||
<Reference Include="System.Design" /> |
||||
<Reference Include="System.Drawing"> |
||||
<Private>False</Private> |
||||
</Reference> |
||||
<Reference Include="System.Drawing.Design" /> |
||||
<Reference Include="System.Windows.Forms"> |
||||
<Private>False</Private> |
||||
</Reference> |
||||
<Reference Include="System.Workflow.Activities"> |
||||
<Private>False</Private> |
||||
</Reference> |
||||
<Reference Include="System.Workflow.ComponentModel"> |
||||
<Private>False</Private> |
||||
</Reference> |
||||
<Reference Include="System.Xml"> |
||||
<Private>False</Private> |
||||
</Reference> |
||||
</ItemGroup> |
||||
<ItemGroup> |
||||
<None Include="Templates\Files\CSharp\CodeSequentialWorkflow.xft"> |
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory> |
||||
</None> |
||||
<None Include="Templates\Projects\CSharp\EmptyProject.xpt"> |
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory> |
||||
</None> |
||||
<None Include="WorkflowDesigner.addin"> |
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory> |
||||
</None> |
||||
<Compile Include="..\..\..\..\Main\GlobalAssemblyInfo.cs"> |
||||
<Link>Configuration\GlobalAssemblyInfo.cs</Link> |
||||
</Compile> |
||||
<Compile Include="Configuration\AssemblyInfo.cs" /> |
||||
<Compile Include="Src\Gui\ViewContentControl.cs" /> |
||||
<Compile Include="Src\Gui\ViewContentControl.Designer.cs"> |
||||
<DependentUpon>ViewContentControl.cs</DependentUpon> |
||||
</Compile> |
||||
<Compile Include="Src\Loaders\NRefactoryDesignerLoader.cs" /> |
||||
<Compile Include="Src\Loaders\WorkflowDesignerLoadException.cs" /> |
||||
<Compile Include="Src\Loaders\XomlCodeSeparationDesignerLoader.cs" /> |
||||
<Compile Include="Src\Loaders\XomlDesignerLoader.cs" /> |
||||
<Compile Include="Src\PrimaryView\PrimaryDisplayBinding.cs" /> |
||||
<Compile Include="Src\PrimaryView\PrimaryViewContent.cs" /> |
||||
<Compile Include="Src\SecondaryView\SecondaryDisplayBinding.cs" /> |
||||
<Compile Include="Src\SecondaryView\SecondaryViewContent.cs" /> |
||||
<Compile Include="Src\Services\DesignerGenerator\CSharpWorkflowDesignerGeneratorService.cs" /> |
||||
<Compile Include="Src\Services\DesignerGenerator\IWorkflowDesignerGeneratorService.cs" /> |
||||
<Compile Include="Src\Services\DesignerGenerator\WorkflowDesignerGeneratorService.cs" /> |
||||
<Compile Include="Src\Services\EventBindingService.cs" /> |
||||
<Compile Include="Src\Services\IdentifierCreationService.cs" /> |
||||
<Compile Include="Src\Services\MemberCreationService.cs" /> |
||||
<Compile Include="Src\Services\WorkflowMenuCommandService.cs" /> |
||||
<Compile Include="Src\Services\WorkflowToolboxService.cs" /> |
||||
<None Include="Templates\Files\NoCodeSequentialWorkflow.xft"> |
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory> |
||||
</None> |
||||
</ItemGroup> |
||||
<ItemGroup> |
||||
<ProjectReference Include="..\..\..\..\Libraries\ICSharpCode.TextEditor\Project\ICSharpCode.TextEditor.csproj"> |
||||
<Project>{2D18BE89-D210-49EB-A9DD-2246FBB3DF6D}</Project> |
||||
<Name>ICSharpCode.TextEditor</Name> |
||||
<Private>False</Private> |
||||
</ProjectReference> |
||||
<ProjectReference Include="..\..\..\..\Libraries\NRefactory\Project\NRefactory.csproj"> |
||||
<Project>{3A9AE6AA-BC07-4A2F-972C-581E3AE2F195}</Project> |
||||
<Name>NRefactory</Name> |
||||
<Private>False</Private> |
||||
</ProjectReference> |
||||
<ProjectReference Include="..\..\..\..\Main\Base\Project\ICSharpCode.SharpDevelop.csproj"> |
||||
<Project>{2748AD25-9C63-4E12-877B-4DCE96FBED54}</Project> |
||||
<Name>ICSharpCode.SharpDevelop</Name> |
||||
<Private>False</Private> |
||||
</ProjectReference> |
||||
<ProjectReference Include="..\..\..\..\Main\Core\Project\ICSharpCode.Core.csproj"> |
||||
<Project>{35CEF10F-2D4C-45F2-9DD1-161E0FEC583C}</Project> |
||||
<Name>ICSharpCode.Core</Name> |
||||
<Private>False</Private> |
||||
</ProjectReference> |
||||
<ProjectReference Include="..\..\..\..\Main\ICSharpCode.SharpDevelop.Dom\Project\ICSharpCode.SharpDevelop.Dom.csproj"> |
||||
<Project>{924EE450-603D-49C1-A8E5-4AFAA31CE6F3}</Project> |
||||
<Name>ICSharpCode.SharpDevelop.Dom</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> |
||||
<Private>False</Private> |
||||
</ProjectReference> |
||||
<ProjectReference Include="..\..\FormsDesigner\Project\FormsDesigner.csproj"> |
||||
<Project>{7D7E92DF-ACEB-4B69-92C8-8AC7A703CD57}</Project> |
||||
<Name>FormsDesigner</Name> |
||||
<Private>False</Private> |
||||
</ProjectReference> |
||||
<Folder Include="Src\Gui" /> |
||||
<Folder Include="Src\Loaders" /> |
||||
<Folder Include="Src\Commands" /> |
||||
<Folder Include="Src\PrimaryView" /> |
||||
<Folder Include="Src\Services" /> |
||||
<Folder Include="Src\Services\DesignerGenerator" /> |
||||
<Folder Include="Templates" /> |
||||
<Folder Include="Src\SecondaryView" /> |
||||
<Folder Include="Templates\Files" /> |
||||
<Folder Include="Templates\Files\CSharp" /> |
||||
<Folder Include="Templates\Files\VB" /> |
||||
<Folder Include="Templates\Projects" /> |
||||
<Folder Include="Templates\Projects\CSharp" /> |
||||
<Folder Include="Templates\Projects\VB" /> |
||||
</ItemGroup> |
||||
</Project> |
Loading…
Reference in new issue