Code:
/ 4.0 / 4.0 / untmp / 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.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- DataGridViewRowHeightInfoPushedEventArgs.cs
- InvalidContentTypeException.cs
- DataGridViewButtonColumn.cs
- OdbcConnectionHandle.cs
- XmlSchemaCompilationSettings.cs
- ApplicationId.cs
- JsonSerializer.cs
- GridViewDeleteEventArgs.cs
- Keywords.cs
- DropDownButton.cs
- StringDictionary.cs
- BevelBitmapEffect.cs
- SqlParameterCollection.cs
- ByteStack.cs
- Animatable.cs
- Image.cs
- AuthorizationSection.cs
- updatecommandorderer.cs
- DrawingServices.cs
- View.cs
- NameValuePair.cs
- DesignOnlyAttribute.cs
- _ContextAwareResult.cs
- PointCollectionConverter.cs
- TabPanel.cs
- BaseAutoFormat.cs
- AttributeCollection.cs
- TextTreeTextBlock.cs
- TdsParameterSetter.cs
- SafeRightsManagementEnvironmentHandle.cs
- LinkConverter.cs
- SessionStateItemCollection.cs
- XmlBinaryReaderSession.cs
- MemberInfoSerializationHolder.cs
- ConditionChanges.cs
- PropertyIDSet.cs
- Function.cs
- ColorBlend.cs
- BatchServiceHost.cs
- Visitor.cs
- _NestedMultipleAsyncResult.cs
- SessionStateItemCollection.cs
- PolyQuadraticBezierSegment.cs
- VarRefManager.cs
- AsymmetricKeyExchangeDeformatter.cs
- ObjectDataSourceDisposingEventArgs.cs
- UndoEngine.cs
- XmlDocument.cs
- ManualResetEvent.cs
- TableRowGroup.cs
- RenderCapability.cs
- ThicknessAnimationBase.cs
- Rect3DConverter.cs
- CheckBoxField.cs
- ListViewItemMouseHoverEvent.cs
- DecimalKeyFrameCollection.cs
- CodeParameterDeclarationExpression.cs
- WaitHandleCannotBeOpenedException.cs
- ActivityTypeDesigner.xaml.cs
- XmlCodeExporter.cs
- ControlCachePolicy.cs
- Soap.cs
- StyleModeStack.cs
- TransformerInfoCollection.cs
- TextEffectResolver.cs
- AssemblyResourceLoader.cs
- ControlTemplate.cs
- ServiceMetadataExtension.cs
- DesignerLoader.cs
- _LocalDataStore.cs
- Hashtable.cs
- FormsAuthenticationTicket.cs
- DesignTimeParseData.cs
- ObjectAnimationBase.cs
- TopClause.cs
- CodeLabeledStatement.cs
- RegexWriter.cs
- XmlAttributeCollection.cs
- InputBuffer.cs
- LogEntry.cs
- SecurityTokenSerializer.cs
- DataGridViewImageColumn.cs
- WebPart.cs
- LineServicesCallbacks.cs
- BuildManager.cs
- Condition.cs
- HttpProfileGroupBase.cs
- FunctionNode.cs
- CatalogPartChrome.cs
- BoolExpr.cs
- UIAgentAsyncBeginRequest.cs
- TemplateControlCodeDomTreeGenerator.cs
- BitmapInitialize.cs
- BitmapDecoder.cs
- BStrWrapper.cs
- NetNamedPipeBinding.cs
- IItemContainerGenerator.cs
- MachineKeySection.cs
- MatrixAnimationUsingPath.cs
- BuildProvidersCompiler.cs