e79aa3c0ed
Former-commit-id: a2155e9bd80020e49e72e86c44da02a8ac0e57a4
1165 lines
38 KiB
C#
1165 lines
38 KiB
C#
namespace System.Workflow.ComponentModel.Design
|
|
{
|
|
using System;
|
|
using System.Drawing;
|
|
using System.Collections;
|
|
using System.Collections.ObjectModel;
|
|
using System.Collections.Generic;
|
|
using System.Collections.Specialized;
|
|
using System.Windows.Forms;
|
|
using System.Windows.Forms.Design;
|
|
using System.ComponentModel;
|
|
using System.ComponentModel.Design;
|
|
using System.CodeDom;
|
|
using System.IO;
|
|
using System.Reflection;
|
|
using System.Drawing.Printing;
|
|
using System.Drawing.Drawing2D;
|
|
using System.Runtime.InteropServices;
|
|
using System.Workflow.ComponentModel;
|
|
using System.Workflow.ComponentModel.Compiler;
|
|
using System.Security.Permissions;
|
|
|
|
#region Workflow Interfaces
|
|
|
|
#region Interface IIdentifierCreationService
|
|
|
|
[Obsolete("The System.Workflow.* types are deprecated. Instead, please use the new types from System.Activities.*")]
|
|
public interface IIdentifierCreationService
|
|
{
|
|
void EnsureUniqueIdentifiers(CompositeActivity parentActivity, ICollection childActivities);
|
|
void ValidateIdentifier(Activity activity, string identifier);
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Interface IMemberCreationService
|
|
|
|
//Revisit the functions in this interface for consistency and performance
|
|
[Obsolete("The System.Workflow.* types are deprecated. Instead, please use the new types from System.Activities.*")]
|
|
public interface IMemberCreationService
|
|
{
|
|
void CreateField(string className, string fieldName, Type fieldType, Type[] genericParameterTypes, MemberAttributes attributes, CodeSnippetExpression initializationExpression, bool overwriteExisting);
|
|
void CreateProperty(string className, string propertyName, Type propertyType, AttributeInfo[] attributes, bool emitDependencyProperty, bool isMetaProperty, bool isAttached, Type ownerType, bool isReadOnly);
|
|
void CreateEvent(string className, string eventName, Type eventType, AttributeInfo[] attributes, bool emitDependencyProperty);
|
|
void UpdateTypeName(string oldClassName, string newClassName);
|
|
void UpdateBaseType(string className, Type baseType);
|
|
void UpdateProperty(string className, string oldPropertyName, Type oldPropertyType, string newPropertyName, Type newPropertyType, AttributeInfo[] attributes, bool emitDependencyProperty, bool isMetaProperty);
|
|
void UpdateEvent(string className, string oldEventName, Type oldEventType, string newEventName, Type newEventType, AttributeInfo[] attributes, bool emitDependencyProperty, bool isMetaProperty);
|
|
void RemoveProperty(string className, string propertyName, Type propertyType);
|
|
void RemoveEvent(string className, string eventName, Type eventType);
|
|
|
|
void ShowCode(Activity activity, string methodName, Type delegateType);
|
|
void ShowCode();
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Interface IExtendedUIService
|
|
[Obsolete("The System.Workflow.* types are deprecated. Instead, please use the new types from System.Activities.*")]
|
|
public interface IExtendedUIService
|
|
{
|
|
DialogResult AddWebReference(out Uri url, out Type proxyClass);
|
|
Uri GetUrlForProxyClass(Type proxyClass);
|
|
Type GetProxyClassForUrl(Uri url);
|
|
|
|
//Task provider related functionality
|
|
void AddDesignerActions(DesignerAction[] actions);
|
|
void RemoveDesignerActions();
|
|
|
|
//Property Grid related functionality
|
|
bool NavigateToProperty(string propName);
|
|
|
|
//Get the selected property context from property grid
|
|
ITypeDescriptorContext GetSelectedPropertyContext();
|
|
|
|
//Show the ToolsOptions
|
|
void ShowToolsOptions();
|
|
|
|
//Retrieve Xsd project Item information
|
|
Dictionary<string, Type> GetXsdProjectItemsInfo();
|
|
|
|
//Add assembly reference (including dynamic assembly resolution)
|
|
void AddAssemblyReference(AssemblyName assemblyName);
|
|
|
|
|
|
}
|
|
|
|
[Obsolete("The System.Workflow.* types are deprecated. Instead, please use the new types from System.Activities.*")]
|
|
public interface IExtendedUIService2
|
|
{
|
|
//Get current project's target version
|
|
long GetTargetFrameworkVersion();
|
|
|
|
//Get if the given type is supported in the current target framework
|
|
bool IsSupportedType(Type type);
|
|
|
|
//Get the assembly loaded in reflection context for the current target framework.
|
|
Assembly GetReflectionAssembly(AssemblyName assemblyName);
|
|
|
|
//Get the current runtime type for the passed in reflection type. Reflection type is target framework type.
|
|
Type GetRuntimeType(Type reflectionType);
|
|
}
|
|
#endregion
|
|
|
|
#endregion
|
|
|
|
#region Design Surface related classes and Interfaces
|
|
|
|
#region Interface IWorkflowDesignerMessageSink
|
|
internal interface IWorkflowDesignerMessageSink
|
|
{
|
|
bool OnMouseDown(MouseEventArgs e);
|
|
bool OnMouseMove(MouseEventArgs e);
|
|
bool OnMouseUp(MouseEventArgs e);
|
|
bool OnMouseDoubleClick(MouseEventArgs e);
|
|
bool OnMouseEnter(MouseEventArgs e);
|
|
bool OnMouseHover(MouseEventArgs e);
|
|
bool OnMouseLeave();
|
|
bool OnMouseWheel(MouseEventArgs e);
|
|
bool OnMouseCaptureChanged();
|
|
bool OnMouseDragBegin(Point initialPoint, MouseEventArgs e);
|
|
bool OnMouseDragMove(MouseEventArgs e);
|
|
bool OnMouseDragEnd();
|
|
|
|
bool OnDragEnter(DragEventArgs e);
|
|
bool OnDragOver(DragEventArgs e);
|
|
bool OnDragLeave();
|
|
bool OnDragDrop(DragEventArgs e);
|
|
bool OnGiveFeedback(GiveFeedbackEventArgs e);
|
|
bool OnQueryContinueDrag(QueryContinueDragEventArgs e);
|
|
|
|
bool OnKeyDown(KeyEventArgs e);
|
|
bool OnKeyUp(KeyEventArgs e);
|
|
|
|
bool OnScroll(ScrollBar sender, int value);
|
|
bool OnShowContextMenu(Point screenMenuPoint);
|
|
bool ProcessMessage(Message message);
|
|
|
|
void OnLayout(LayoutEventArgs layoutEventArgs);
|
|
void OnLayoutPosition(Graphics graphics);
|
|
void OnLayoutSize(Graphics graphics);
|
|
void OnThemeChange();
|
|
|
|
void OnBeginResizing(DesignerEdges sizingEdge);
|
|
void OnResizing(DesignerEdges sizingEdge, Rectangle bounds);
|
|
void OnEndResizing();
|
|
|
|
bool OnPaint(PaintEventArgs e, Rectangle viewPort);
|
|
bool OnPaintWorkflowAdornments(PaintEventArgs e, Rectangle viewPort);
|
|
}
|
|
#endregion
|
|
|
|
#region Class ViewPortData
|
|
//
|
|
|
|
internal sealed class ViewPortData
|
|
{
|
|
public Rectangle LogicalViewPort;
|
|
public Bitmap MemoryBitmap;
|
|
public SizeF Scaling = new SizeF(1.0f, 1.0f);
|
|
public Point Translation = Point.Empty;
|
|
public Size ShadowDepth = Size.Empty;
|
|
public Color TransparentColor = Color.White;
|
|
public Size ViewPortSize = Size.Empty;
|
|
}
|
|
#endregion
|
|
|
|
#region Class ActivityDragEventArgs
|
|
/// <summary>
|
|
/// EventArgs passed to the ActivityDesigners when drag drop operation is in progress on workflow.
|
|
/// ActivityDesigners can access the information contained to influence the drag drop behavior.
|
|
/// </summary>
|
|
[Obsolete("The System.Workflow.* types are deprecated. Instead, please use the new types from System.Activities.*")]
|
|
public class ActivityDragEventArgs : DragEventArgs
|
|
{
|
|
private Point snapPoint = Point.Empty;
|
|
private Point dragInitiationPoint = Point.Empty;
|
|
private List<Activity> draggedActivities;
|
|
|
|
internal ActivityDragEventArgs(DragEventArgs dragEventArgs, Point dragInitiationPoint, Point point, List<Activity> draggedActivities)
|
|
: base(dragEventArgs.Data, dragEventArgs.KeyState, point.X, point.Y, dragEventArgs.AllowedEffect, dragEventArgs.Effect)
|
|
{
|
|
this.dragInitiationPoint = dragInitiationPoint;
|
|
|
|
if (draggedActivities == null)
|
|
this.draggedActivities = new List<Activity>();
|
|
else
|
|
this.draggedActivities = new List<Activity>(draggedActivities);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Returns Activities being dragged drop
|
|
/// </summary>
|
|
public ReadOnlyCollection<Activity> Activities
|
|
{
|
|
get
|
|
{
|
|
return this.draggedActivities.AsReadOnly();
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// WorkflowView creates drag image for the activities being dragged.
|
|
/// ActivityDesigners can choose to snap this image to a drop target to indicate that activities can be dropped at a particular location
|
|
/// </summary>
|
|
public Point DragImageSnapPoint
|
|
{
|
|
get
|
|
{
|
|
return this.snapPoint;
|
|
}
|
|
|
|
set
|
|
{
|
|
this.snapPoint = value;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Returns point at which the drag drop operation was initiated in logical coordinates
|
|
/// </summary>
|
|
public Point DragInitiationPoint
|
|
{
|
|
get
|
|
{
|
|
return this.dragInitiationPoint;
|
|
}
|
|
}
|
|
}
|
|
#endregion
|
|
|
|
#endregion
|
|
|
|
#region Classes, Interfaces and enums used by Designers
|
|
|
|
#region Class ActivityChangeEventArgs
|
|
/// <summary>
|
|
/// Contains information about the changes made to the activity associated with the designer
|
|
/// </summary>
|
|
[Obsolete("The System.Workflow.* types are deprecated. Instead, please use the new types from System.Activities.*")]
|
|
public class ActivityChangedEventArgs : EventArgs
|
|
{
|
|
private Activity activity;
|
|
private MemberDescriptor member;
|
|
private object oldValue;
|
|
private object newValue;
|
|
|
|
public ActivityChangedEventArgs(Activity activity, MemberDescriptor member, object oldValue, object newValue)
|
|
{
|
|
this.activity = activity;
|
|
this.member = member;
|
|
this.oldValue = oldValue;
|
|
this.newValue = newValue;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Activity being changed
|
|
/// </summary>
|
|
public Activity Activity
|
|
{
|
|
get
|
|
{
|
|
return this.activity;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Member of the activity being changed
|
|
/// </summary>
|
|
public MemberDescriptor Member
|
|
{
|
|
get
|
|
{
|
|
return this.member;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// OldValue of the member before the change
|
|
/// </summary>
|
|
public object OldValue
|
|
{
|
|
get
|
|
{
|
|
return this.oldValue;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// New value of the member after the change
|
|
/// </summary>
|
|
public object NewValue
|
|
{
|
|
get
|
|
{
|
|
return this.newValue;
|
|
}
|
|
}
|
|
}
|
|
#endregion
|
|
|
|
#region Class ActivityDesignerLayoutEventArgs
|
|
/// <summary>
|
|
/// Contains arguments passed to layout functions of ActivityDesigner
|
|
/// </summary>
|
|
[Obsolete("The System.Workflow.* types are deprecated. Instead, please use the new types from System.Activities.*")]
|
|
public class ActivityDesignerLayoutEventArgs : EventArgs
|
|
{
|
|
private Graphics graphics;
|
|
private ActivityDesignerTheme designerTheme;
|
|
|
|
public ActivityDesignerLayoutEventArgs(Graphics graphics, ActivityDesignerTheme designerTheme)
|
|
{
|
|
this.graphics = graphics;
|
|
this.designerTheme = designerTheme;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gets the ambient theme associated with workflow
|
|
/// </summary>
|
|
public AmbientTheme AmbientTheme
|
|
{
|
|
get
|
|
{
|
|
return WorkflowTheme.CurrentTheme.AmbientTheme;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gets the designet theme associated with activity designer
|
|
/// </summary>
|
|
public ActivityDesignerTheme DesignerTheme
|
|
{
|
|
get
|
|
{
|
|
return this.designerTheme;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gets the graphics object on which the activity designer will be drawn
|
|
/// </summary>
|
|
public Graphics Graphics
|
|
{
|
|
get
|
|
{
|
|
return this.graphics;
|
|
}
|
|
}
|
|
}
|
|
#endregion
|
|
|
|
#region Class ActivityDesignerPaintEventArgs
|
|
/// <summary>
|
|
/// Contains arguments passed to draw function of ActivityDesigner
|
|
/// </summary>
|
|
[Obsolete("The System.Workflow.* types are deprecated. Instead, please use the new types from System.Activities.*")]
|
|
public class ActivityDesignerPaintEventArgs : EventArgs
|
|
{
|
|
private Graphics graphics;
|
|
private Rectangle clipRectangle;
|
|
private Rectangle viewPort;
|
|
private ActivityDesignerTheme designerTheme;
|
|
|
|
public ActivityDesignerPaintEventArgs(Graphics graphics, Rectangle clipRectangle, Rectangle viewPort, ActivityDesignerTheme designerTheme)
|
|
{
|
|
this.graphics = graphics;
|
|
this.clipRectangle = Rectangle.Inflate(clipRectangle, 1, 1);
|
|
this.viewPort = viewPort;
|
|
this.designerTheme = designerTheme;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Graphics object associated with design surface on which the activity needs to draw
|
|
/// </summary>
|
|
public Graphics Graphics
|
|
{
|
|
get
|
|
{
|
|
return this.graphics;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Bounding rectangle outside which the activity can not draw
|
|
/// </summary>
|
|
public Rectangle ClipRectangle
|
|
{
|
|
get
|
|
{
|
|
return this.clipRectangle;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gets the ambient theme associated with Workflow
|
|
/// </summary>
|
|
public AmbientTheme AmbientTheme
|
|
{
|
|
get
|
|
{
|
|
return WorkflowTheme.CurrentTheme.AmbientTheme;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gets the theme associated with designer
|
|
/// </summary>
|
|
public ActivityDesignerTheme DesignerTheme
|
|
{
|
|
get
|
|
{
|
|
return this.designerTheme;
|
|
}
|
|
}
|
|
|
|
internal Rectangle ViewPort
|
|
{
|
|
get
|
|
{
|
|
return this.viewPort;
|
|
}
|
|
}
|
|
}
|
|
#endregion
|
|
|
|
#region Class ActivityDesignerResizeEventArgs
|
|
[Obsolete("The System.Workflow.* types are deprecated. Instead, please use the new types from System.Activities.*")]
|
|
public class ActivityDesignerResizeEventArgs : EventArgs
|
|
{
|
|
private DesignerEdges sizingEdge;
|
|
private Rectangle newBounds;
|
|
|
|
public ActivityDesignerResizeEventArgs(DesignerEdges sizingEdge, Rectangle newBounds)
|
|
{
|
|
this.sizingEdge = sizingEdge;
|
|
this.newBounds = newBounds;
|
|
}
|
|
|
|
public DesignerEdges SizingEdge
|
|
{
|
|
get
|
|
{
|
|
return this.sizingEdge;
|
|
}
|
|
}
|
|
|
|
public Rectangle Bounds
|
|
{
|
|
get
|
|
{
|
|
return this.newBounds;
|
|
}
|
|
}
|
|
}
|
|
#endregion
|
|
|
|
#region Enum DesignerEdges
|
|
[Flags]
|
|
[Obsolete("The System.Workflow.* types are deprecated. Instead, please use the new types from System.Activities.*")]
|
|
public enum DesignerEdges
|
|
{
|
|
None = 0,
|
|
Left = 1,
|
|
Top = 2,
|
|
Right = 4,
|
|
Bottom = 8,
|
|
All = 15
|
|
}
|
|
#endregion
|
|
|
|
#region Interface IDesignerGlyphProvider
|
|
/// <summary>
|
|
/// Allows the user to add custom glyph providers.
|
|
/// Custom glyph providers are called to render the glyphs on designer.
|
|
/// </summary>
|
|
[Obsolete("The System.Workflow.* types are deprecated. Instead, please use the new types from System.Activities.*")]
|
|
public interface IDesignerGlyphProviderService
|
|
{
|
|
void AddGlyphProvider(IDesignerGlyphProvider glyphProvider);
|
|
void RemoveGlyphProvider(IDesignerGlyphProvider glyphProvider);
|
|
ReadOnlyCollection<IDesignerGlyphProvider> GlyphProviders { get; }
|
|
}
|
|
|
|
[Obsolete("The System.Workflow.* types are deprecated. Instead, please use the new types from System.Activities.*")]
|
|
public interface IDesignerGlyphProvider
|
|
{
|
|
ActivityDesignerGlyphCollection GetGlyphs(ActivityDesigner activityDesigner);
|
|
}
|
|
#endregion
|
|
|
|
#region Interface IDesignerVerbProvider
|
|
/// <summary>
|
|
/// Allows the user to add custom verb providers.
|
|
/// Custom verb providers are called in order to return the set of verbs associated with the designer.
|
|
/// </summary>
|
|
[Obsolete("The System.Workflow.* types are deprecated. Instead, please use the new types from System.Activities.*")]
|
|
public interface IDesignerVerbProviderService
|
|
{
|
|
void AddVerbProvider(IDesignerVerbProvider verbProvider);
|
|
void RemoveVerbProvider(IDesignerVerbProvider verbProvider);
|
|
ReadOnlyCollection<IDesignerVerbProvider> VerbProviders { get; }
|
|
}
|
|
|
|
[Obsolete("The System.Workflow.* types are deprecated. Instead, please use the new types from System.Activities.*")]
|
|
public interface IDesignerVerbProvider
|
|
{
|
|
ActivityDesignerVerbCollection GetVerbs(ActivityDesigner activityDesigner);
|
|
}
|
|
#endregion
|
|
|
|
#region Interface IPersistUIState
|
|
[Obsolete("The System.Workflow.* types are deprecated. Instead, please use the new types from System.Activities.*")]
|
|
public interface IPersistUIState
|
|
{
|
|
void SaveViewState(BinaryWriter writer);
|
|
void LoadViewState(BinaryReader reader);
|
|
}
|
|
#endregion
|
|
|
|
#region Interface IWorkflowRootDesigner
|
|
[Obsolete("The System.Workflow.* types are deprecated. Instead, please use the new types from System.Activities.*")]
|
|
public interface IWorkflowRootDesigner : IRootDesigner
|
|
{
|
|
CompositeActivityDesigner InvokingDesigner { get; set; }
|
|
ReadOnlyCollection<WorkflowDesignerMessageFilter> MessageFilters { get; }
|
|
bool IsSupportedActivityType(Type activityType);
|
|
bool SupportsLayoutPersistence { get; }
|
|
}
|
|
#endregion
|
|
|
|
#region Used for keyboard navigation
|
|
[Obsolete("The System.Workflow.* types are deprecated. Instead, please use the new types from System.Activities.*")]
|
|
public enum DesignerNavigationDirection
|
|
{
|
|
Down = 0, //Next
|
|
Up = 1, //Previous
|
|
Left = 2,
|
|
Right = 3
|
|
}
|
|
#endregion
|
|
|
|
#region enum HitTestLocations
|
|
/// <summary>
|
|
/// Enumeration returning area of the designer which was under the point passed to hit test.
|
|
/// </summary>
|
|
[FlagsAttribute]
|
|
[Obsolete("The System.Workflow.* types are deprecated. Instead, please use the new types from System.Activities.*")]
|
|
public enum HitTestLocations
|
|
{
|
|
None = 0,
|
|
Designer = 1,
|
|
ActionArea = 2,
|
|
Left = 4,
|
|
Top = 8,
|
|
Right = 16,
|
|
Bottom = 32,
|
|
Connector = 64
|
|
}
|
|
#endregion
|
|
|
|
#region Class HitTestInfo
|
|
/// <summary>
|
|
/// Identifies the part of the designer at the specified location.
|
|
/// Used by various operation including drag-drop, cut-paste etc
|
|
/// </summary>
|
|
[Obsolete("The System.Workflow.* types are deprecated. Instead, please use the new types from System.Activities.*")]
|
|
public class HitTestInfo
|
|
{
|
|
private static HitTestInfo nowhere;
|
|
private ActivityDesigner activityDesigner = null;
|
|
private HitTestLocations location = HitTestLocations.None;
|
|
private IDictionary userData;
|
|
|
|
/// <summary>
|
|
/// Returns Empty HitTestInfo
|
|
/// </summary>
|
|
public static HitTestInfo Nowhere
|
|
{
|
|
get
|
|
{
|
|
if (HitTestInfo.nowhere == null)
|
|
HitTestInfo.nowhere = new HitTestInfo();
|
|
return HitTestInfo.nowhere;
|
|
}
|
|
}
|
|
|
|
internal HitTestInfo()
|
|
{
|
|
}
|
|
|
|
/// <summary>
|
|
/// Constructs HitTestInfo with specified parameters
|
|
/// </summary>
|
|
/// <param name="designer">ActivityDesigner associated with HitTestInfo</param>
|
|
/// <param name="flags">HitTestLocations indicating where the hit happened</param>
|
|
public HitTestInfo(ActivityDesigner designer, HitTestLocations location)
|
|
{
|
|
if (designer == null)
|
|
throw new ArgumentNullException("designer");
|
|
|
|
this.activityDesigner = designer;
|
|
this.location = location;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Returns designer associated
|
|
/// </summary>
|
|
[Browsable(false)]
|
|
public ActivityDesigner AssociatedDesigner
|
|
{
|
|
get
|
|
{
|
|
return this.activityDesigner;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Returns flags indicating where hit happened
|
|
/// </summary>
|
|
[Browsable(false)]
|
|
public HitTestLocations HitLocation
|
|
{
|
|
get
|
|
{
|
|
return this.location;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Returns enclosing bounds for the hit area
|
|
/// </summary>
|
|
[Browsable(false)]
|
|
public virtual Rectangle Bounds
|
|
{
|
|
get
|
|
{
|
|
if (this.activityDesigner != null)
|
|
return this.activityDesigner.Bounds;
|
|
else
|
|
return Rectangle.Empty;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Returns selectable object associated with Hit Area
|
|
/// </summary>
|
|
[Browsable(false)]
|
|
public virtual object SelectableObject
|
|
{
|
|
get
|
|
{
|
|
if (this.activityDesigner != null)
|
|
return this.activityDesigner.Activity;
|
|
else
|
|
return null;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Returns UserData to associated with HitLocation
|
|
/// </summary>
|
|
[Browsable(false)]
|
|
public IDictionary UserData
|
|
{
|
|
get
|
|
{
|
|
if (this.userData == null)
|
|
this.userData = new HybridDictionary();
|
|
return this.userData;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Maps Hit area to index using which designers are to be inserted.
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public virtual int MapToIndex()
|
|
{
|
|
CompositeActivity compositeActivity = this.activityDesigner.Activity as CompositeActivity;
|
|
if (compositeActivity != null)
|
|
return compositeActivity.Activities.Count;
|
|
else
|
|
return 0;
|
|
}
|
|
}
|
|
#endregion
|
|
|
|
#region Class ConnectorHitTestInfo
|
|
/// <summary>
|
|
/// Represents the hittest information for connectors within the designer, structured designers are expected to have connectors within them
|
|
/// </summary>
|
|
[Obsolete("The System.Workflow.* types are deprecated. Instead, please use the new types from System.Activities.*")]
|
|
public class ConnectorHitTestInfo : HitTestInfo
|
|
{
|
|
private int connector = 0;
|
|
|
|
/// <summary>
|
|
/// Constructor for ConnectorHitTestInfo
|
|
/// </summary>
|
|
/// <param name="structuredCompositeActivityDesigner">Designer associated with the HitTestInfo</param>
|
|
/// <param name="flags">Flags where HitTest occured</param>
|
|
/// <param name="connector">Index of the connector which was hit</param>
|
|
public ConnectorHitTestInfo(CompositeActivityDesigner compositeActivityDesigner, HitTestLocations flags, int connector)
|
|
: base(compositeActivityDesigner, flags)
|
|
{
|
|
if (this.connector < 0)
|
|
throw new ArgumentException(SR.GetString(SR.Error_InvalidConnectorValue), "connector");
|
|
|
|
this.connector = connector;
|
|
}
|
|
|
|
public override Rectangle Bounds
|
|
{
|
|
get
|
|
{
|
|
//
|
|
SequentialActivityDesigner sequentialActivityDesigner = AssociatedDesigner as SequentialActivityDesigner;
|
|
if (sequentialActivityDesigner != null && sequentialActivityDesigner.Expanded)
|
|
{
|
|
Rectangle[] connectors = sequentialActivityDesigner.GetConnectors();
|
|
if (connectors.Length > 0)
|
|
return connectors[this.connector];
|
|
}
|
|
|
|
return Rectangle.Empty;
|
|
}
|
|
}
|
|
|
|
public override object SelectableObject
|
|
{
|
|
get
|
|
{
|
|
return this;
|
|
}
|
|
}
|
|
|
|
public override int MapToIndex()
|
|
{
|
|
return this.connector;
|
|
}
|
|
|
|
public override bool Equals(object obj)
|
|
{
|
|
ConnectorHitTestInfo destinationConnector = obj as ConnectorHitTestInfo;
|
|
if (destinationConnector != null)
|
|
{
|
|
if (destinationConnector.AssociatedDesigner == AssociatedDesigner &&
|
|
destinationConnector.HitLocation == HitLocation &&
|
|
destinationConnector.MapToIndex() == MapToIndex())
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
public override int GetHashCode()
|
|
{
|
|
return base.GetHashCode() ^ ((AssociatedDesigner != null) ? AssociatedDesigner.GetHashCode() : 0) ^ MapToIndex().GetHashCode();
|
|
}
|
|
}
|
|
#endregion
|
|
|
|
#region Class DesignerAction
|
|
//Public class as ActivityDesigners can provide their own DesignerActions
|
|
[Obsolete("The System.Workflow.* types are deprecated. Instead, please use the new types from System.Activities.*")]
|
|
public sealed class DesignerAction
|
|
{
|
|
private ActivityDesigner activityDesigner;
|
|
private int actionId;
|
|
private string text;
|
|
private Image image;
|
|
private IDictionary userData;
|
|
private string propertyName = null;
|
|
|
|
public DesignerAction(ActivityDesigner activityDesigner, int actionId, string text)
|
|
{
|
|
if (activityDesigner == null)
|
|
throw new ArgumentNullException("activityDesigner");
|
|
|
|
if (text == null || text.Length == 0)
|
|
throw new ArgumentException(SR.GetString(SR.Error_NullOrEmptyValue), "text");
|
|
|
|
this.activityDesigner = activityDesigner;
|
|
this.actionId = actionId;
|
|
this.text = text;
|
|
}
|
|
|
|
public DesignerAction(ActivityDesigner activityDesigner, int actionId, string text, Image image)
|
|
: this(activityDesigner, actionId, text)
|
|
{
|
|
this.image = image;
|
|
}
|
|
|
|
public string PropertyName
|
|
{
|
|
get
|
|
{
|
|
return this.propertyName;
|
|
}
|
|
set
|
|
{
|
|
this.propertyName = value;
|
|
}
|
|
}
|
|
|
|
public int ActionId
|
|
{
|
|
get
|
|
{
|
|
return this.actionId;
|
|
}
|
|
}
|
|
|
|
public string Text
|
|
{
|
|
get
|
|
{
|
|
return this.text;
|
|
}
|
|
}
|
|
|
|
public Image Image
|
|
{
|
|
get
|
|
{
|
|
return this.image;
|
|
}
|
|
}
|
|
|
|
public IDictionary UserData
|
|
{
|
|
get
|
|
{
|
|
if (this.userData == null)
|
|
this.userData = new HybridDictionary();
|
|
return this.userData;
|
|
}
|
|
}
|
|
|
|
public void Invoke()
|
|
{
|
|
this.activityDesigner.OnExecuteDesignerAction(this);
|
|
}
|
|
}
|
|
#endregion
|
|
|
|
#region Enum DesignerVerbGroup
|
|
/// <summary>
|
|
/// Provides categories for grouping of similar verbs
|
|
/// </summary>
|
|
[Obsolete("The System.Workflow.* types are deprecated. Instead, please use the new types from System.Activities.*")]
|
|
public enum DesignerVerbGroup
|
|
{
|
|
General = 0,
|
|
View = 1,
|
|
Edit = 2,
|
|
Options = 3,
|
|
Actions = 4,
|
|
Misc = 5
|
|
}
|
|
#endregion
|
|
|
|
#region Class ActivityDesignerVerb
|
|
/// <summary>
|
|
/// DesignerVerb class specific to ActivityDesigners.
|
|
/// Allows user to group similar types of DesignerVerbs togather.
|
|
/// Provides user the ability to update the status of the verb.
|
|
/// </summary>
|
|
[Obsolete("The System.Workflow.* types are deprecated. Instead, please use the new types from System.Activities.*")]
|
|
public class ActivityDesignerVerb : DesignerVerb
|
|
{
|
|
private ActivityDesigner activityDesigner = null;
|
|
private EventHandler invokeHandler = null;
|
|
private EventHandler statusHandler = null;
|
|
private DesignerVerbGroup verbGroup;
|
|
private int id = 0;
|
|
|
|
public ActivityDesignerVerb(ActivityDesigner activityDesigner, DesignerVerbGroup verbGroup, string text, EventHandler invokeHandler)
|
|
: base(text, new EventHandler(OnExecuteDesignerVerb), new CommandID(WorkflowMenuCommands.MenuGuid, 0))
|
|
{
|
|
if (text == null || text.Length == 0)
|
|
throw new ArgumentNullException("text");
|
|
|
|
if (invokeHandler == null)
|
|
throw new ArgumentNullException("invokeHandler");
|
|
|
|
this.verbGroup = verbGroup;
|
|
this.invokeHandler = invokeHandler;
|
|
this.activityDesigner = activityDesigner;
|
|
}
|
|
|
|
public ActivityDesignerVerb(ActivityDesigner activityDesigner, DesignerVerbGroup verbGroup, string text, EventHandler invokeHandler, EventHandler statusHandler)
|
|
: this(activityDesigner, verbGroup, text, invokeHandler)
|
|
{
|
|
this.statusHandler = statusHandler;
|
|
}
|
|
|
|
public override int OleStatus
|
|
{
|
|
get
|
|
{
|
|
if (statusHandler != null)
|
|
{
|
|
try
|
|
{
|
|
statusHandler(this, EventArgs.Empty);
|
|
}
|
|
catch
|
|
{
|
|
}
|
|
}
|
|
|
|
return base.OleStatus;
|
|
}
|
|
}
|
|
|
|
public override CommandID CommandID
|
|
{
|
|
get
|
|
{
|
|
return new CommandID(WorkflowMenuCommands.MenuGuid, this.id);
|
|
}
|
|
}
|
|
|
|
public DesignerVerbGroup Group
|
|
{
|
|
get
|
|
{
|
|
return this.verbGroup;
|
|
}
|
|
}
|
|
|
|
internal int Id
|
|
{
|
|
get
|
|
{
|
|
return this.id;
|
|
}
|
|
|
|
set
|
|
{
|
|
this.id = value;
|
|
}
|
|
}
|
|
|
|
internal ActivityDesigner ActivityDesigner
|
|
{
|
|
get
|
|
{
|
|
return this.activityDesigner;
|
|
}
|
|
}
|
|
|
|
private static void OnExecuteDesignerVerb(object sender, EventArgs e)
|
|
{
|
|
ActivityDesignerVerb activityDesignerVerb = sender as ActivityDesignerVerb;
|
|
if (activityDesignerVerb != null)
|
|
{
|
|
if (activityDesignerVerb.invokeHandler != null)
|
|
activityDesignerVerb.invokeHandler(sender, e);
|
|
|
|
int status = activityDesignerVerb.OleStatus;
|
|
status = 0;
|
|
|
|
if (activityDesignerVerb.activityDesigner != null)
|
|
{
|
|
foreach (DesignerVerb verb in ((IDesigner)activityDesignerVerb.activityDesigner).Verbs)
|
|
{
|
|
if (verb is ActivityDesignerVerb)
|
|
{
|
|
//Update the status of the
|
|
status = verb.OleStatus;
|
|
status = 0;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
#endregion
|
|
|
|
#region Class ActivityDesignerVerbCollection
|
|
/// <summary>
|
|
/// Maintains collection of ActivityDesignerVerbs.
|
|
/// Groups verbs belonging to the same veb groups and ensures that their identifiers are consecutive.
|
|
/// </summary>
|
|
[PermissionSetAttribute(SecurityAction.InheritanceDemand, Name = "FullTrust")]
|
|
[Obsolete("The System.Workflow.* types are deprecated. Instead, please use the new types from System.Activities.*")]
|
|
public sealed class ActivityDesignerVerbCollection : DesignerVerbCollection
|
|
{
|
|
public ActivityDesignerVerbCollection()
|
|
{
|
|
}
|
|
|
|
public ActivityDesignerVerbCollection(IEnumerable<ActivityDesignerVerb> verbs)
|
|
{
|
|
if (verbs == null)
|
|
throw new ArgumentNullException("verbs");
|
|
|
|
foreach (ActivityDesignerVerb verb in verbs)
|
|
Add(verb);
|
|
}
|
|
|
|
protected override void OnValidate(object value)
|
|
{
|
|
if (!(value is ActivityDesignerVerb))
|
|
throw new InvalidOperationException(SR.GetString(SR.Error_InvalidDesignerVerbValue));
|
|
}
|
|
|
|
/// <summary>
|
|
/// Returns a collection that is consumable by MenuCommandService. Verbs in the
|
|
/// safe collection have Ids in the range of VerbFirst.ID to VerbLast.ID. Also,
|
|
/// the items are sorted, and the first item ID == VerbFirst.ID
|
|
/// </summary>
|
|
internal ActivityDesignerVerbCollection SafeCollection
|
|
{
|
|
get
|
|
{
|
|
if (this.Count == 0)
|
|
return this;
|
|
|
|
Dictionary<DesignerVerbGroup, List<ActivityDesignerVerb>> activityDesignerVerbs = new Dictionary<DesignerVerbGroup, List<ActivityDesignerVerb>>();
|
|
ArrayList safeCollection = new ArrayList(this);
|
|
|
|
// set Ids
|
|
foreach (ActivityDesignerVerb verb in safeCollection)
|
|
{
|
|
List<ActivityDesignerVerb> verbList = null;
|
|
if (!activityDesignerVerbs.ContainsKey(verb.Group))
|
|
{
|
|
verbList = new List<ActivityDesignerVerb>();
|
|
activityDesignerVerbs.Add(verb.Group, verbList);
|
|
}
|
|
else
|
|
{
|
|
verbList = activityDesignerVerbs[verb.Group];
|
|
}
|
|
|
|
if (!verbList.Contains(verb))
|
|
{
|
|
verb.Id = ConvertGroupToId(verb.Group) + verbList.Count;
|
|
verbList.Add(verb);
|
|
}
|
|
}
|
|
|
|
//items should be sorted by verb id
|
|
safeCollection.Sort(new ActivityDesignerVerbComparer());
|
|
|
|
// add first dummy verb if needed
|
|
if (((ActivityDesignerVerb)safeCollection[0]).Id != MenuCommands.VerbFirst.ID)
|
|
{
|
|
safeCollection.Insert(0, new ActivityDesignerVerb(null, DesignerVerbGroup.General, "Dummy", new EventHandler(OnDummyVerb)));
|
|
((ActivityDesignerVerb)safeCollection[0]).Visible = false;
|
|
}
|
|
|
|
ActivityDesignerVerbCollection verbs = new ActivityDesignerVerbCollection();
|
|
foreach (ActivityDesignerVerb verb in safeCollection)
|
|
verbs.Add(verb);
|
|
|
|
return verbs;
|
|
}
|
|
}
|
|
|
|
private void OnDummyVerb(object sender, EventArgs e)
|
|
{
|
|
// Should never be called
|
|
}
|
|
|
|
private int ConvertGroupToId(DesignerVerbGroup group)
|
|
{
|
|
if (group == DesignerVerbGroup.General)
|
|
return WorkflowMenuCommands.VerbGroupGeneral;
|
|
else if (group == DesignerVerbGroup.View)
|
|
return WorkflowMenuCommands.VerbGroupView;
|
|
else if (group == DesignerVerbGroup.Edit)
|
|
return WorkflowMenuCommands.VerbGroupEdit;
|
|
else if (group == DesignerVerbGroup.Options)
|
|
return WorkflowMenuCommands.VerbGroupOptions;
|
|
else if (group == DesignerVerbGroup.Actions)
|
|
return WorkflowMenuCommands.VerbGroupActions;
|
|
else
|
|
return WorkflowMenuCommands.VerbGroupMisc;
|
|
}
|
|
#region class ActivityDesignerVerbComparer
|
|
|
|
private class ActivityDesignerVerbComparer : IComparer
|
|
{
|
|
#region IComparer Members
|
|
|
|
public int Compare(object x, object y)
|
|
{
|
|
ActivityDesignerVerb verb1 = x as ActivityDesignerVerb;
|
|
ActivityDesignerVerb verb2 = y as ActivityDesignerVerb;
|
|
|
|
if (verb1.Id == verb2.Id)
|
|
return 0;
|
|
else if (verb1.Id > verb2.Id)
|
|
return 1;
|
|
else
|
|
return -1;
|
|
}
|
|
#endregion
|
|
}
|
|
|
|
#endregion
|
|
|
|
}
|
|
#endregion
|
|
|
|
#endregion
|
|
|
|
#region ITypeFilterProvider Interface
|
|
[Obsolete("The System.Workflow.* types are deprecated. Instead, please use the new types from System.Activities.*")]
|
|
public interface ITypeFilterProvider
|
|
{
|
|
bool CanFilterType(Type type, bool throwOnError);
|
|
string FilterDescription { get; }
|
|
}
|
|
#endregion
|
|
|
|
#region TypeFilterProviderAttribute
|
|
[AttributeUsage(AttributeTargets.Property | AttributeTargets.Method, AllowMultiple = false)]
|
|
[Obsolete("The System.Workflow.* types are deprecated. Instead, please use the new types from System.Activities.*")]
|
|
public sealed class TypeFilterProviderAttribute : Attribute
|
|
{
|
|
private string typeName = null;
|
|
|
|
public TypeFilterProviderAttribute(Type type)
|
|
{
|
|
if (type == null)
|
|
throw new ArgumentNullException("type");
|
|
|
|
this.typeName = type.AssemblyQualifiedName;
|
|
}
|
|
|
|
public TypeFilterProviderAttribute(string typeName)
|
|
{
|
|
this.typeName = typeName;
|
|
}
|
|
|
|
public string TypeFilterProviderTypeName
|
|
{
|
|
get
|
|
{
|
|
return this.typeName;
|
|
}
|
|
}
|
|
}
|
|
#endregion
|
|
|
|
#region ITypeProviderCreator Interface
|
|
[Guid("0E6DF9D7-B4B5-4af7-9647-FC335CCE393F")]
|
|
[ComVisible(true)]
|
|
[Obsolete("The System.Workflow.* types are deprecated. Instead, please use the new types from System.Activities.*")]
|
|
public interface ITypeProviderCreator
|
|
{
|
|
ITypeProvider GetTypeProvider(object obj);
|
|
Assembly GetLocalAssembly(object obj);
|
|
Assembly GetTransientAssembly(AssemblyName assemblyName);
|
|
ITypeResolutionService GetTypeResolutionService(object obj);
|
|
}
|
|
#endregion
|
|
}
|