Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / WF / Common / AuthoringOM / Design / ActivityDesignerLayoutSerializers.cs / 1305376 / ActivityDesignerLayoutSerializers.cs
using System;
using System.Collections;
using System.Collections.Generic;
using System.Text;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.ComponentModel.Design.Serialization;
using System.Reflection;
using System.Xml;
using System.Workflow.ComponentModel.Serialization;
using System.Drawing;
namespace System.Workflow.ComponentModel.Design
{
#region Class ActivityDesignerLayoutSerializer
public class ActivityDesignerLayoutSerializer : WorkflowMarkupSerializer
{
protected override void OnBeforeSerialize(WorkflowMarkupSerializationManager serializationManager, object obj)
{
base.OnBeforeSerialize(serializationManager, obj);
//For root activity we will go through all the nested activities and put the namespaces at the top level
ActivityDesigner activityDesigner = obj as ActivityDesigner;
XmlWriter writer = serializationManager.WorkflowMarkupStack[typeof(XmlWriter)] as XmlWriter;
if (activityDesigner.Activity != null && activityDesigner.Activity.Parent == null && writer != null)
{
string prefix = String.Empty;
XmlQualifiedName xmlQualifiedName = serializationManager.GetXmlQualifiedName(typeof(Point), out prefix);
writer.WriteAttributeString("xmlns", prefix, null, xmlQualifiedName.Namespace);
}
}
protected override object CreateInstance(WorkflowMarkupSerializationManager serializationManager, Type type)
{
if (serializationManager == null)
throw new ArgumentNullException("serializationManager");
if (type == null)
throw new ArgumentNullException("type");
object designer = null;
IDesignerHost host = serializationManager.GetService(typeof(IDesignerHost)) as IDesignerHost;
XmlReader reader = serializationManager.WorkflowMarkupStack[typeof(XmlReader)] as XmlReader;
if (host != null && reader != null)
{
//Find the associated activity
string associatedActivityName = String.Empty;
while (reader.MoveToNextAttribute() && !reader.LocalName.Equals("Name", StringComparison.Ordinal)) ;
if (reader.LocalName.Equals("Name", StringComparison.Ordinal) && reader.ReadAttributeValue())
associatedActivityName = reader.Value;
reader.MoveToElement();
if (!String.IsNullOrEmpty(associatedActivityName))
{
CompositeActivityDesigner parentDesigner = serializationManager.Context[typeof(CompositeActivityDesigner)] as CompositeActivityDesigner;
if (parentDesigner == null)
{
Activity activity = host.RootComponent as Activity;
if (activity != null && !associatedActivityName.Equals(activity.Name, StringComparison.Ordinal))
{
foreach (IComponent component in host.Container.Components)
{
activity = component as Activity;
if (activity != null && associatedActivityName.Equals(activity.Name, StringComparison.Ordinal))
break;
}
}
if (activity != null)
designer = host.GetDesigner(activity);
}
else
{
CompositeActivity compositeActivity = parentDesigner.Activity as CompositeActivity;
if (compositeActivity != null)
{
Activity matchingActivity = null;
foreach (Activity activity in compositeActivity.Activities)
{
if (associatedActivityName.Equals(activity.Name, StringComparison.Ordinal))
{
matchingActivity = activity;
break;
}
}
if (matchingActivity != null)
designer = host.GetDesigner(matchingActivity);
}
}
if (designer == null)
serializationManager.ReportError(SR.GetString(SR.Error_LayoutSerializationActivityNotFound, reader.LocalName, associatedActivityName, "Name"));
}
else
{
serializationManager.ReportError(SR.GetString(SR.Error_LayoutSerializationAssociatedActivityNotFound, reader.LocalName, "Name"));
}
}
return designer;
}
protected internal override PropertyInfo[] GetProperties(WorkflowMarkupSerializationManager serializationManager, object obj)
{
if (serializationManager == null)
throw new ArgumentNullException("serializationManager");
if (obj == null)
throw new ArgumentNullException("obj");
List properties = new List(base.GetProperties(serializationManager, obj));
ActivityDesigner activityDesigner = obj as ActivityDesigner;
if (activityDesigner != null)
{
PropertyInfo nameProperty = activityDesigner.GetType().GetProperty("Name", BindingFlags.Instance | BindingFlags.NonPublic);
if (nameProperty != null)
properties.Insert(0, nameProperty);
}
return properties.ToArray();
}
}
#endregion
#region Class CompositeActivityDesignerLayoutSerializer
public class CompositeActivityDesignerLayoutSerializer : ActivityDesignerLayoutSerializer
{
protected internal override PropertyInfo[] GetProperties(WorkflowMarkupSerializationManager serializationManager, object obj)
{
List properties = new List(base.GetProperties(serializationManager, obj));
properties.Add(typeof(CompositeActivityDesigner).GetProperty("Designers", BindingFlags.Instance | BindingFlags.NonPublic));
return properties.ToArray();
}
}
#endregion
#region Class FreeformActivityDesignerLayoutSerializer
public class FreeformActivityDesignerLayoutSerializer : CompositeActivityDesignerLayoutSerializer
{
protected internal override PropertyInfo[] GetProperties(WorkflowMarkupSerializationManager serializationManager, object obj)
{
if (serializationManager == null)
throw new ArgumentNullException("serializationManager");
if (obj == null)
throw new ArgumentNullException("obj");
XmlWriter writer = serializationManager.WorkflowMarkupStack[typeof(XmlWriter)] as XmlWriter;
PropertyInfo[] properties = base.GetProperties(serializationManager, obj);
FreeformActivityDesigner freeformDesigner = obj as FreeformActivityDesigner;
if (freeformDesigner != null)
{
List serializableProperties = new List();
foreach (PropertyInfo property in properties)
{
//Only filter this property out when we are writting
if (writer != null &&
property.Name.Equals("AutoSizeMargin", StringComparison.Ordinal) &&
freeformDesigner.AutoSizeMargin == FreeformActivityDesigner.DefaultAutoSizeMargin)
{
continue;
}
serializableProperties.Add(property);
}
serializableProperties.Add(typeof(FreeformActivityDesigner).GetProperty("DesignerConnectors", BindingFlags.Instance | BindingFlags.NonPublic));
properties = serializableProperties.ToArray();
}
return properties;
}
}
#endregion
#region ConnectorLayoutSerializer
public class ConnectorLayoutSerializer : WorkflowMarkupSerializer
{
protected internal override PropertyInfo[] GetProperties(WorkflowMarkupSerializationManager serializationManager, object obj)
{
if (serializationManager == null)
throw new ArgumentNullException("serializationManager");
if (obj == null)
throw new ArgumentNullException("obj");
List properties = new List(base.GetProperties(serializationManager, obj));
properties.Add(typeof(Connector).GetProperty("SourceActivity", BindingFlags.Instance | BindingFlags.NonPublic));
properties.Add(typeof(Connector).GetProperty("SourceConnectionIndex", BindingFlags.Instance | BindingFlags.NonPublic));
properties.Add(typeof(Connector).GetProperty("SourceConnectionEdge", BindingFlags.Instance | BindingFlags.NonPublic));
properties.Add(typeof(Connector).GetProperty("TargetActivity", BindingFlags.Instance | BindingFlags.NonPublic));
properties.Add(typeof(Connector).GetProperty("TargetConnectionIndex", BindingFlags.Instance | BindingFlags.NonPublic));
properties.Add(typeof(Connector).GetProperty("TargetConnectionEdge", BindingFlags.Instance | BindingFlags.NonPublic));
properties.Add(typeof(Connector).GetProperty("Segments", BindingFlags.Instance | BindingFlags.NonPublic));
return properties.ToArray();
}
protected override object CreateInstance(WorkflowMarkupSerializationManager serializationManager, Type type)
{
if (serializationManager == null)
throw new ArgumentNullException("serializationManager");
if (type == null)
throw new ArgumentNullException("type");
Connector connector = null;
IReferenceService referenceService = serializationManager.GetService(typeof(IReferenceService)) as IReferenceService;
FreeformActivityDesigner freeformDesigner = serializationManager.Context[typeof(FreeformActivityDesigner)] as FreeformActivityDesigner;
if (freeformDesigner != null && referenceService != null)
{
ConnectionPoint sourceConnection = null;
ConnectionPoint targetConnection = null;
try
{
Dictionary constructionArguments = GetConnectorConstructionArguments(serializationManager, type);
if (constructionArguments.ContainsKey("SourceActivity") &&
constructionArguments.ContainsKey("SourceConnectionIndex") &&
constructionArguments.ContainsKey("SourceConnectionEdge"))
{
ActivityDesigner sourceDesigner = ActivityDesigner.GetDesigner(referenceService.GetReference(constructionArguments["SourceActivity"] as string) as Activity);
DesignerEdges sourceEdge = (DesignerEdges)Enum.Parse(typeof(DesignerEdges), constructionArguments["SourceConnectionEdge"] as string);
int sourceIndex = Convert.ToInt32(constructionArguments["SourceConnectionIndex"] as string, System.Globalization.CultureInfo.InvariantCulture);
if (sourceDesigner != null && sourceEdge != DesignerEdges.None && sourceIndex >= 0)
sourceConnection = new ConnectionPoint(sourceDesigner, sourceEdge, sourceIndex);
}
if (constructionArguments.ContainsKey("TargetActivity") &&
constructionArguments.ContainsKey("TargetConnectionIndex") &&
constructionArguments.ContainsKey("TargetConnectionEdge"))
{
ActivityDesigner targetDesigner = ActivityDesigner.GetDesigner(referenceService.GetReference(constructionArguments["TargetActivity"] as string) as Activity);
DesignerEdges targetEdge = (DesignerEdges)Enum.Parse(typeof(DesignerEdges), constructionArguments["TargetConnectionEdge"] as string);
int targetIndex = Convert.ToInt32(constructionArguments["TargetConnectionIndex"] as string, System.Globalization.CultureInfo.InvariantCulture);
if (targetDesigner != null && targetEdge != DesignerEdges.None && targetIndex >= 0)
targetConnection = new ConnectionPoint(targetDesigner, targetEdge, targetIndex);
}
}
catch
{
}
if (sourceConnection != null && targetConnection != null)
connector = freeformDesigner.AddConnector(sourceConnection, targetConnection);
}
return connector;
}
protected override void OnAfterDeserialize(WorkflowMarkupSerializationManager serializationManager, object obj)
{
base.OnAfterDeserialize(serializationManager, obj);
//The following code is needed in order to making sure that we set the modification flag correctly after deserialization
Connector connector = obj as Connector;
if (connector != null)
connector.SetConnectorModified(true);
}
protected Dictionary GetConnectorConstructionArguments(WorkflowMarkupSerializationManager serializationManager, Type type)
{
Dictionary argumentDictionary = new Dictionary();
XmlReader reader = serializationManager.WorkflowMarkupStack[typeof(XmlReader)] as XmlReader;
if (reader != null && reader.NodeType == XmlNodeType.Element)
{
while (reader.MoveToNextAttribute())
{
string attributeName = reader.LocalName;
if (!argumentDictionary.ContainsKey(attributeName))
{
reader.ReadAttributeValue();
argumentDictionary.Add(attributeName, reader.Value);
}
}
reader.MoveToElement();
}
return argumentDictionary;
}
}
#endregion
#region Class ActivityDesignerLayoutSerializerProvider
internal sealed class ActivityDesignerLayoutSerializerProvider : IDesignerSerializationProvider
{
#region IDesignerSerializationProvider Members
object IDesignerSerializationProvider.GetSerializer(IDesignerSerializationManager manager, object currentSerializer, Type objectType, Type serializerType)
{
if (typeof(System.Drawing.Color) == objectType)
currentSerializer = new ColorMarkupSerializer();
else if (typeof(System.Drawing.Size) == objectType)
currentSerializer = new SizeMarkupSerializer();
else if (typeof(System.Drawing.Point) == objectType)
currentSerializer = new PointMarkupSerializer();
return currentSerializer;
}
#endregion
}
#endregion
#region Class ColorMarkupSerializer
internal sealed class ColorMarkupSerializer : WorkflowMarkupSerializer
{
protected internal override bool CanSerializeToString(WorkflowMarkupSerializationManager serializationManager, object value)
{
return (value is System.Drawing.Color);
}
protected internal override string SerializeToString(WorkflowMarkupSerializationManager serializationManager, object value)
{
if (serializationManager == null)
throw new ArgumentNullException("serializationManager");
if (value == null)
throw new ArgumentNullException("value");
string stringValue = String.Empty;
if (value is System.Drawing.Color)
{
System.Drawing.Color color = (System.Drawing.Color)value;
long colorValue = (long)((uint)(color.A << 24 | color.R << 16 | color.G << 8 | color.B)) & 0xFFFFFFFF;
stringValue = "0X" + colorValue.ToString("X08", System.Globalization.CultureInfo.InvariantCulture);
}
return stringValue;
}
protected internal override object DeserializeFromString(WorkflowMarkupSerializationManager serializationManager, Type propertyType, string value)
{
if (propertyType.IsAssignableFrom(typeof(System.Drawing.Color)))
{
string colorValue = value as string;
if (!String.IsNullOrEmpty(colorValue))
{
if (colorValue.StartsWith("0X", StringComparison.OrdinalIgnoreCase))
{
long propertyValue = Convert.ToInt64((string)value, 16) & 0xFFFFFFFF;
return System.Drawing.Color.FromArgb((Byte)(propertyValue >> 24), (Byte)(propertyValue >> 16), (Byte)(propertyValue >> 8), (Byte)(propertyValue));
}
else
{
return base.DeserializeFromString(serializationManager, propertyType, value);
}
}
}
return null;
}
}
#endregion
#region Class SizeMarkupSerializer
internal sealed class SizeMarkupSerializer : WorkflowMarkupSerializer
{
protected internal override bool CanSerializeToString(WorkflowMarkupSerializationManager serializationManager, object value)
{
return (value is System.Drawing.Size);
}
protected internal override PropertyInfo[] GetProperties(WorkflowMarkupSerializationManager serializationManager, object obj)
{
List properties = new List();
if (obj is Size)
{
properties.Add(typeof(Size).GetProperty("Width"));
properties.Add(typeof(Size).GetProperty("Height"));
}
return properties.ToArray();
}
protected internal override string SerializeToString(WorkflowMarkupSerializationManager serializationManager, object value)
{
string convertedValue = String.Empty;
TypeConverter converter = TypeDescriptor.GetConverter(value);
if (converter != null && converter.CanConvertTo(typeof(string)))
convertedValue = converter.ConvertTo(value, typeof(string)) as string;
else
convertedValue = base.SerializeToString(serializationManager, value);
return convertedValue;
}
protected internal override object DeserializeFromString(WorkflowMarkupSerializationManager serializationManager, Type propertyType, string value)
{
object size = Size.Empty;
string sizeValue = value as string;
if (!String.IsNullOrEmpty(sizeValue))
{
TypeConverter converter = TypeDescriptor.GetConverter(typeof(Size));
if (converter != null && converter.CanConvertFrom(typeof(string)) && !IsValidCompactAttributeFormat(sizeValue))
size = converter.ConvertFrom(value);
else
size = base.SerializeToString(serializationManager, value);
}
return size;
}
}
#endregion
#region Class PointMarkupSerializer
internal sealed class PointMarkupSerializer : WorkflowMarkupSerializer
{
protected internal override bool CanSerializeToString(WorkflowMarkupSerializationManager serializationManager, object value)
{
return (value is Point);
}
protected internal override PropertyInfo[] GetProperties(WorkflowMarkupSerializationManager serializationManager, object obj)
{
List properties = new List();
if (obj is Point)
{
properties.Add(typeof(Point).GetProperty("X"));
properties.Add(typeof(Point).GetProperty("Y"));
}
return properties.ToArray();
}
protected internal override string SerializeToString(WorkflowMarkupSerializationManager serializationManager, object value)
{
string convertedValue = String.Empty;
TypeConverter converter = TypeDescriptor.GetConverter(value);
if (converter != null && converter.CanConvertTo(typeof(string)))
convertedValue = converter.ConvertTo(value, typeof(string)) as string;
else
convertedValue = base.SerializeToString(serializationManager, value);
return convertedValue;
}
protected internal override object DeserializeFromString(WorkflowMarkupSerializationManager serializationManager, Type propertyType, string value)
{
object point = Point.Empty;
string pointValue = value as string;
if (!String.IsNullOrEmpty(pointValue))
{
TypeConverter converter = TypeDescriptor.GetConverter(typeof(Point));
if (converter != null && converter.CanConvertFrom(typeof(string)) && !IsValidCompactAttributeFormat(pointValue))
point = converter.ConvertFrom(value);
else
point = base.SerializeToString(serializationManager, value);
}
return point;
}
}
#endregion
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
using System;
using System.Collections;
using System.Collections.Generic;
using System.Text;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.ComponentModel.Design.Serialization;
using System.Reflection;
using System.Xml;
using System.Workflow.ComponentModel.Serialization;
using System.Drawing;
namespace System.Workflow.ComponentModel.Design
{
#region Class ActivityDesignerLayoutSerializer
public class ActivityDesignerLayoutSerializer : WorkflowMarkupSerializer
{
protected override void OnBeforeSerialize(WorkflowMarkupSerializationManager serializationManager, object obj)
{
base.OnBeforeSerialize(serializationManager, obj);
//For root activity we will go through all the nested activities and put the namespaces at the top level
ActivityDesigner activityDesigner = obj as ActivityDesigner;
XmlWriter writer = serializationManager.WorkflowMarkupStack[typeof(XmlWriter)] as XmlWriter;
if (activityDesigner.Activity != null && activityDesigner.Activity.Parent == null && writer != null)
{
string prefix = String.Empty;
XmlQualifiedName xmlQualifiedName = serializationManager.GetXmlQualifiedName(typeof(Point), out prefix);
writer.WriteAttributeString("xmlns", prefix, null, xmlQualifiedName.Namespace);
}
}
protected override object CreateInstance(WorkflowMarkupSerializationManager serializationManager, Type type)
{
if (serializationManager == null)
throw new ArgumentNullException("serializationManager");
if (type == null)
throw new ArgumentNullException("type");
object designer = null;
IDesignerHost host = serializationManager.GetService(typeof(IDesignerHost)) as IDesignerHost;
XmlReader reader = serializationManager.WorkflowMarkupStack[typeof(XmlReader)] as XmlReader;
if (host != null && reader != null)
{
//Find the associated activity
string associatedActivityName = String.Empty;
while (reader.MoveToNextAttribute() && !reader.LocalName.Equals("Name", StringComparison.Ordinal)) ;
if (reader.LocalName.Equals("Name", StringComparison.Ordinal) && reader.ReadAttributeValue())
associatedActivityName = reader.Value;
reader.MoveToElement();
if (!String.IsNullOrEmpty(associatedActivityName))
{
CompositeActivityDesigner parentDesigner = serializationManager.Context[typeof(CompositeActivityDesigner)] as CompositeActivityDesigner;
if (parentDesigner == null)
{
Activity activity = host.RootComponent as Activity;
if (activity != null && !associatedActivityName.Equals(activity.Name, StringComparison.Ordinal))
{
foreach (IComponent component in host.Container.Components)
{
activity = component as Activity;
if (activity != null && associatedActivityName.Equals(activity.Name, StringComparison.Ordinal))
break;
}
}
if (activity != null)
designer = host.GetDesigner(activity);
}
else
{
CompositeActivity compositeActivity = parentDesigner.Activity as CompositeActivity;
if (compositeActivity != null)
{
Activity matchingActivity = null;
foreach (Activity activity in compositeActivity.Activities)
{
if (associatedActivityName.Equals(activity.Name, StringComparison.Ordinal))
{
matchingActivity = activity;
break;
}
}
if (matchingActivity != null)
designer = host.GetDesigner(matchingActivity);
}
}
if (designer == null)
serializationManager.ReportError(SR.GetString(SR.Error_LayoutSerializationActivityNotFound, reader.LocalName, associatedActivityName, "Name"));
}
else
{
serializationManager.ReportError(SR.GetString(SR.Error_LayoutSerializationAssociatedActivityNotFound, reader.LocalName, "Name"));
}
}
return designer;
}
protected internal override PropertyInfo[] GetProperties(WorkflowMarkupSerializationManager serializationManager, object obj)
{
if (serializationManager == null)
throw new ArgumentNullException("serializationManager");
if (obj == null)
throw new ArgumentNullException("obj");
List properties = new List(base.GetProperties(serializationManager, obj));
ActivityDesigner activityDesigner = obj as ActivityDesigner;
if (activityDesigner != null)
{
PropertyInfo nameProperty = activityDesigner.GetType().GetProperty("Name", BindingFlags.Instance | BindingFlags.NonPublic);
if (nameProperty != null)
properties.Insert(0, nameProperty);
}
return properties.ToArray();
}
}
#endregion
#region Class CompositeActivityDesignerLayoutSerializer
public class CompositeActivityDesignerLayoutSerializer : ActivityDesignerLayoutSerializer
{
protected internal override PropertyInfo[] GetProperties(WorkflowMarkupSerializationManager serializationManager, object obj)
{
List properties = new List(base.GetProperties(serializationManager, obj));
properties.Add(typeof(CompositeActivityDesigner).GetProperty("Designers", BindingFlags.Instance | BindingFlags.NonPublic));
return properties.ToArray();
}
}
#endregion
#region Class FreeformActivityDesignerLayoutSerializer
public class FreeformActivityDesignerLayoutSerializer : CompositeActivityDesignerLayoutSerializer
{
protected internal override PropertyInfo[] GetProperties(WorkflowMarkupSerializationManager serializationManager, object obj)
{
if (serializationManager == null)
throw new ArgumentNullException("serializationManager");
if (obj == null)
throw new ArgumentNullException("obj");
XmlWriter writer = serializationManager.WorkflowMarkupStack[typeof(XmlWriter)] as XmlWriter;
PropertyInfo[] properties = base.GetProperties(serializationManager, obj);
FreeformActivityDesigner freeformDesigner = obj as FreeformActivityDesigner;
if (freeformDesigner != null)
{
List serializableProperties = new List();
foreach (PropertyInfo property in properties)
{
//Only filter this property out when we are writting
if (writer != null &&
property.Name.Equals("AutoSizeMargin", StringComparison.Ordinal) &&
freeformDesigner.AutoSizeMargin == FreeformActivityDesigner.DefaultAutoSizeMargin)
{
continue;
}
serializableProperties.Add(property);
}
serializableProperties.Add(typeof(FreeformActivityDesigner).GetProperty("DesignerConnectors", BindingFlags.Instance | BindingFlags.NonPublic));
properties = serializableProperties.ToArray();
}
return properties;
}
}
#endregion
#region ConnectorLayoutSerializer
public class ConnectorLayoutSerializer : WorkflowMarkupSerializer
{
protected internal override PropertyInfo[] GetProperties(WorkflowMarkupSerializationManager serializationManager, object obj)
{
if (serializationManager == null)
throw new ArgumentNullException("serializationManager");
if (obj == null)
throw new ArgumentNullException("obj");
List properties = new List(base.GetProperties(serializationManager, obj));
properties.Add(typeof(Connector).GetProperty("SourceActivity", BindingFlags.Instance | BindingFlags.NonPublic));
properties.Add(typeof(Connector).GetProperty("SourceConnectionIndex", BindingFlags.Instance | BindingFlags.NonPublic));
properties.Add(typeof(Connector).GetProperty("SourceConnectionEdge", BindingFlags.Instance | BindingFlags.NonPublic));
properties.Add(typeof(Connector).GetProperty("TargetActivity", BindingFlags.Instance | BindingFlags.NonPublic));
properties.Add(typeof(Connector).GetProperty("TargetConnectionIndex", BindingFlags.Instance | BindingFlags.NonPublic));
properties.Add(typeof(Connector).GetProperty("TargetConnectionEdge", BindingFlags.Instance | BindingFlags.NonPublic));
properties.Add(typeof(Connector).GetProperty("Segments", BindingFlags.Instance | BindingFlags.NonPublic));
return properties.ToArray();
}
protected override object CreateInstance(WorkflowMarkupSerializationManager serializationManager, Type type)
{
if (serializationManager == null)
throw new ArgumentNullException("serializationManager");
if (type == null)
throw new ArgumentNullException("type");
Connector connector = null;
IReferenceService referenceService = serializationManager.GetService(typeof(IReferenceService)) as IReferenceService;
FreeformActivityDesigner freeformDesigner = serializationManager.Context[typeof(FreeformActivityDesigner)] as FreeformActivityDesigner;
if (freeformDesigner != null && referenceService != null)
{
ConnectionPoint sourceConnection = null;
ConnectionPoint targetConnection = null;
try
{
Dictionary constructionArguments = GetConnectorConstructionArguments(serializationManager, type);
if (constructionArguments.ContainsKey("SourceActivity") &&
constructionArguments.ContainsKey("SourceConnectionIndex") &&
constructionArguments.ContainsKey("SourceConnectionEdge"))
{
ActivityDesigner sourceDesigner = ActivityDesigner.GetDesigner(referenceService.GetReference(constructionArguments["SourceActivity"] as string) as Activity);
DesignerEdges sourceEdge = (DesignerEdges)Enum.Parse(typeof(DesignerEdges), constructionArguments["SourceConnectionEdge"] as string);
int sourceIndex = Convert.ToInt32(constructionArguments["SourceConnectionIndex"] as string, System.Globalization.CultureInfo.InvariantCulture);
if (sourceDesigner != null && sourceEdge != DesignerEdges.None && sourceIndex >= 0)
sourceConnection = new ConnectionPoint(sourceDesigner, sourceEdge, sourceIndex);
}
if (constructionArguments.ContainsKey("TargetActivity") &&
constructionArguments.ContainsKey("TargetConnectionIndex") &&
constructionArguments.ContainsKey("TargetConnectionEdge"))
{
ActivityDesigner targetDesigner = ActivityDesigner.GetDesigner(referenceService.GetReference(constructionArguments["TargetActivity"] as string) as Activity);
DesignerEdges targetEdge = (DesignerEdges)Enum.Parse(typeof(DesignerEdges), constructionArguments["TargetConnectionEdge"] as string);
int targetIndex = Convert.ToInt32(constructionArguments["TargetConnectionIndex"] as string, System.Globalization.CultureInfo.InvariantCulture);
if (targetDesigner != null && targetEdge != DesignerEdges.None && targetIndex >= 0)
targetConnection = new ConnectionPoint(targetDesigner, targetEdge, targetIndex);
}
}
catch
{
}
if (sourceConnection != null && targetConnection != null)
connector = freeformDesigner.AddConnector(sourceConnection, targetConnection);
}
return connector;
}
protected override void OnAfterDeserialize(WorkflowMarkupSerializationManager serializationManager, object obj)
{
base.OnAfterDeserialize(serializationManager, obj);
//The following code is needed in order to making sure that we set the modification flag correctly after deserialization
Connector connector = obj as Connector;
if (connector != null)
connector.SetConnectorModified(true);
}
protected Dictionary GetConnectorConstructionArguments(WorkflowMarkupSerializationManager serializationManager, Type type)
{
Dictionary argumentDictionary = new Dictionary();
XmlReader reader = serializationManager.WorkflowMarkupStack[typeof(XmlReader)] as XmlReader;
if (reader != null && reader.NodeType == XmlNodeType.Element)
{
while (reader.MoveToNextAttribute())
{
string attributeName = reader.LocalName;
if (!argumentDictionary.ContainsKey(attributeName))
{
reader.ReadAttributeValue();
argumentDictionary.Add(attributeName, reader.Value);
}
}
reader.MoveToElement();
}
return argumentDictionary;
}
}
#endregion
#region Class ActivityDesignerLayoutSerializerProvider
internal sealed class ActivityDesignerLayoutSerializerProvider : IDesignerSerializationProvider
{
#region IDesignerSerializationProvider Members
object IDesignerSerializationProvider.GetSerializer(IDesignerSerializationManager manager, object currentSerializer, Type objectType, Type serializerType)
{
if (typeof(System.Drawing.Color) == objectType)
currentSerializer = new ColorMarkupSerializer();
else if (typeof(System.Drawing.Size) == objectType)
currentSerializer = new SizeMarkupSerializer();
else if (typeof(System.Drawing.Point) == objectType)
currentSerializer = new PointMarkupSerializer();
return currentSerializer;
}
#endregion
}
#endregion
#region Class ColorMarkupSerializer
internal sealed class ColorMarkupSerializer : WorkflowMarkupSerializer
{
protected internal override bool CanSerializeToString(WorkflowMarkupSerializationManager serializationManager, object value)
{
return (value is System.Drawing.Color);
}
protected internal override string SerializeToString(WorkflowMarkupSerializationManager serializationManager, object value)
{
if (serializationManager == null)
throw new ArgumentNullException("serializationManager");
if (value == null)
throw new ArgumentNullException("value");
string stringValue = String.Empty;
if (value is System.Drawing.Color)
{
System.Drawing.Color color = (System.Drawing.Color)value;
long colorValue = (long)((uint)(color.A << 24 | color.R << 16 | color.G << 8 | color.B)) & 0xFFFFFFFF;
stringValue = "0X" + colorValue.ToString("X08", System.Globalization.CultureInfo.InvariantCulture);
}
return stringValue;
}
protected internal override object DeserializeFromString(WorkflowMarkupSerializationManager serializationManager, Type propertyType, string value)
{
if (propertyType.IsAssignableFrom(typeof(System.Drawing.Color)))
{
string colorValue = value as string;
if (!String.IsNullOrEmpty(colorValue))
{
if (colorValue.StartsWith("0X", StringComparison.OrdinalIgnoreCase))
{
long propertyValue = Convert.ToInt64((string)value, 16) & 0xFFFFFFFF;
return System.Drawing.Color.FromArgb((Byte)(propertyValue >> 24), (Byte)(propertyValue >> 16), (Byte)(propertyValue >> 8), (Byte)(propertyValue));
}
else
{
return base.DeserializeFromString(serializationManager, propertyType, value);
}
}
}
return null;
}
}
#endregion
#region Class SizeMarkupSerializer
internal sealed class SizeMarkupSerializer : WorkflowMarkupSerializer
{
protected internal override bool CanSerializeToString(WorkflowMarkupSerializationManager serializationManager, object value)
{
return (value is System.Drawing.Size);
}
protected internal override PropertyInfo[] GetProperties(WorkflowMarkupSerializationManager serializationManager, object obj)
{
List properties = new List();
if (obj is Size)
{
properties.Add(typeof(Size).GetProperty("Width"));
properties.Add(typeof(Size).GetProperty("Height"));
}
return properties.ToArray();
}
protected internal override string SerializeToString(WorkflowMarkupSerializationManager serializationManager, object value)
{
string convertedValue = String.Empty;
TypeConverter converter = TypeDescriptor.GetConverter(value);
if (converter != null && converter.CanConvertTo(typeof(string)))
convertedValue = converter.ConvertTo(value, typeof(string)) as string;
else
convertedValue = base.SerializeToString(serializationManager, value);
return convertedValue;
}
protected internal override object DeserializeFromString(WorkflowMarkupSerializationManager serializationManager, Type propertyType, string value)
{
object size = Size.Empty;
string sizeValue = value as string;
if (!String.IsNullOrEmpty(sizeValue))
{
TypeConverter converter = TypeDescriptor.GetConverter(typeof(Size));
if (converter != null && converter.CanConvertFrom(typeof(string)) && !IsValidCompactAttributeFormat(sizeValue))
size = converter.ConvertFrom(value);
else
size = base.SerializeToString(serializationManager, value);
}
return size;
}
}
#endregion
#region Class PointMarkupSerializer
internal sealed class PointMarkupSerializer : WorkflowMarkupSerializer
{
protected internal override bool CanSerializeToString(WorkflowMarkupSerializationManager serializationManager, object value)
{
return (value is Point);
}
protected internal override PropertyInfo[] GetProperties(WorkflowMarkupSerializationManager serializationManager, object obj)
{
List properties = new List();
if (obj is Point)
{
properties.Add(typeof(Point).GetProperty("X"));
properties.Add(typeof(Point).GetProperty("Y"));
}
return properties.ToArray();
}
protected internal override string SerializeToString(WorkflowMarkupSerializationManager serializationManager, object value)
{
string convertedValue = String.Empty;
TypeConverter converter = TypeDescriptor.GetConverter(value);
if (converter != null && converter.CanConvertTo(typeof(string)))
convertedValue = converter.ConvertTo(value, typeof(string)) as string;
else
convertedValue = base.SerializeToString(serializationManager, value);
return convertedValue;
}
protected internal override object DeserializeFromString(WorkflowMarkupSerializationManager serializationManager, Type propertyType, string value)
{
object point = Point.Empty;
string pointValue = value as string;
if (!String.IsNullOrEmpty(pointValue))
{
TypeConverter converter = TypeDescriptor.GetConverter(typeof(Point));
if (converter != null && converter.CanConvertFrom(typeof(string)) && !IsValidCompactAttributeFormat(pointValue))
point = converter.ConvertFrom(value);
else
point = base.SerializeToString(serializationManager, value);
}
return point;
}
}
#endregion
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- SpellerInterop.cs
- StringResourceManager.cs
- xdrvalidator.cs
- DataPagerFieldCollection.cs
- MatrixTransform3D.cs
- DesignBindingPropertyDescriptor.cs
- Helpers.cs
- WebSysDefaultValueAttribute.cs
- FormsAuthenticationCredentials.cs
- TransformerInfoCollection.cs
- NeutralResourcesLanguageAttribute.cs
- SqlRowUpdatedEvent.cs
- PrimitiveCodeDomSerializer.cs
- XmlEventCache.cs
- PropertyBuilder.cs
- LicenseProviderAttribute.cs
- DataGridViewRowStateChangedEventArgs.cs
- OutputCacheProfile.cs
- VectorAnimation.cs
- UpdateException.cs
- MulticastNotSupportedException.cs
- RepeatButton.cs
- StorageMappingItemCollection.cs
- ITextView.cs
- DataControlLinkButton.cs
- BindingObserver.cs
- Version.cs
- KerberosRequestorSecurityTokenAuthenticator.cs
- DataGridCellAutomationPeer.cs
- NotImplementedException.cs
- QueryableDataSourceHelper.cs
- ImageDrawing.cs
- ObjectStateEntry.cs
- DocumentEventArgs.cs
- EntityDataSourceMemberPath.cs
- InfoCardSymmetricCrypto.cs
- SplashScreenNativeMethods.cs
- FaultBookmark.cs
- PropertyDescriptor.cs
- DataSourceControl.cs
- ToolBarPanel.cs
- LayoutSettings.cs
- FormsAuthentication.cs
- EntityContainer.cs
- CellTreeSimplifier.cs
- MemberProjectionIndex.cs
- FormViewDeleteEventArgs.cs
- ToolTip.cs
- XpsColorContext.cs
- PathSegmentCollection.cs
- EncryptedType.cs
- TextPatternIdentifiers.cs
- CodeIterationStatement.cs
- SourceFileBuildProvider.cs
- ShaderEffect.cs
- QueryStringParameter.cs
- AlternateView.cs
- TypeToken.cs
- PrintEvent.cs
- EnumerableWrapperWeakToStrong.cs
- EncodingDataItem.cs
- MessageSecurityOverTcpElement.cs
- QueryCacheKey.cs
- XmlWriterSettings.cs
- NavigationProperty.cs
- XmlBinaryReader.cs
- Slider.cs
- KeyConverter.cs
- DockPanel.cs
- Size.cs
- BamlReader.cs
- LogArchiveSnapshot.cs
- GenericTypeParameterConverter.cs
- WebPartConnectionsConnectVerb.cs
- AuthenticatingEventArgs.cs
- HttpListener.cs
- ConstructorExpr.cs
- Types.cs
- XmlCompatibilityReader.cs
- SliderAutomationPeer.cs
- WindowsFont.cs
- Configuration.cs
- Subtree.cs
- Context.cs
- VirtualDirectoryMapping.cs
- ControlIdConverter.cs
- Size.cs
- FrameworkElementAutomationPeer.cs
- XpsThumbnail.cs
- HtmlTableRowCollection.cs
- TimeStampChecker.cs
- XPathDocumentNavigator.cs
- MetadataException.cs
- FontTypeConverter.cs
- ResourceManagerWrapper.cs
- Int16AnimationBase.cs
- RawStylusInputReport.cs
- SqlRemoveConstantOrderBy.cs
- ToolStripHighContrastRenderer.cs
- Compensate.cs