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"); Listproperties = 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
- SqlDataSourceCache.cs
- Update.cs
- HttpResponseInternalWrapper.cs
- ValueProviderWrapper.cs
- TransformPattern.cs
- PageDeviceFont.cs
- MetafileHeader.cs
- HandledMouseEvent.cs
- DecoderBestFitFallback.cs
- TimeSpanSecondsOrInfiniteConverter.cs
- EntityDesignerDataSourceView.cs
- AliasedSlot.cs
- KeyGestureConverter.cs
- WebPartCatalogAddVerb.cs
- CodeIndexerExpression.cs
- NamespaceInfo.cs
- GAC.cs
- XmlILAnnotation.cs
- LinqDataSourceSelectEventArgs.cs
- XPathNavigator.cs
- TraceContext.cs
- StretchValidation.cs
- DataComponentGenerator.cs
- DictionaryBase.cs
- DragEvent.cs
- DropAnimation.xaml.cs
- SoapFaultCodes.cs
- WCFServiceClientProxyGenerator.cs
- Latin1Encoding.cs
- OLEDB_Enum.cs
- HttpCacheParams.cs
- ConfigurationElementProperty.cs
- DataGridToolTip.cs
- TextViewSelectionProcessor.cs
- ParameterReplacerVisitor.cs
- DefaultParameterValueAttribute.cs
- figurelengthconverter.cs
- ApplicationServiceManager.cs
- PersistenceTypeAttribute.cs
- AutomationPatternInfo.cs
- ObjectDataSourceEventArgs.cs
- ValidationErrorEventArgs.cs
- PageVisual.cs
- MultilineStringConverter.cs
- ResourceReader.cs
- XmlDocument.cs
- Int32RectValueSerializer.cs
- ControlAdapter.cs
- Timeline.cs
- StylusDevice.cs
- CustomTypeDescriptor.cs
- ToolStripCodeDomSerializer.cs
- FolderLevelBuildProvider.cs
- TypeNameParser.cs
- MarkupCompiler.cs
- BorderGapMaskConverter.cs
- TextDecoration.cs
- TaiwanLunisolarCalendar.cs
- CatalogPartCollection.cs
- DrawingAttributeSerializer.cs
- NavigationFailedEventArgs.cs
- StyleHelper.cs
- ConfigurationSettings.cs
- EncodedStreamFactory.cs
- SingleTagSectionHandler.cs
- ExternalException.cs
- WindowsListViewItem.cs
- SequentialUshortCollection.cs
- ErrorFormatter.cs
- ListViewInsertionMark.cs
- CheckedListBox.cs
- ResXBuildProvider.cs
- StandardCommandToolStripMenuItem.cs
- RIPEMD160.cs
- MessageContractExporter.cs
- PackageDigitalSignature.cs
- MtomMessageEncoder.cs
- CompiledQuery.cs
- SrgsOneOf.cs
- xmlsaver.cs
- PropertyItem.cs
- SplitContainer.cs
- RouteValueDictionary.cs
- MultilineStringConverter.cs
- LogLogRecord.cs
- SqlConnectionPoolProviderInfo.cs
- ParameterCollection.cs
- CustomAttributeFormatException.cs
- CustomErrorsSectionWrapper.cs
- MULTI_QI.cs
- DataGridViewRowErrorTextNeededEventArgs.cs
- DataSourceControlBuilder.cs
- FormatterServices.cs
- DecimalKeyFrameCollection.cs
- XmlUrlResolver.cs
- Transform.cs
- RedistVersionInfo.cs
- GuidConverter.cs
- StorageInfo.cs
- EventSetterHandlerConverter.cs