Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / NetFx40 / Tools / System.Activities.Presentation / System / Activities / Presentation / Model / MorphHelper.cs / 1305376 / MorphHelper.cs
//---------------------------------------------------------------- // Copyright (c) Microsoft Corporation. All rights reserved. //--------------------------------------------------------------- namespace System.Activities.Presentation.Model { using System; using System.Activities.Presentation.Internal.PropertyEditing; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Activities.Presentation; using System.Diagnostics.CodeAnalysis; using System.Runtime; public delegate object PropertyValueMorphHelper(ModelItem originalValue, ModelProperty newModelProperty); public static class MorphHelper { [SuppressMessage(FxCop.Category.Naming, FxCop.Rule.IdentifiersShouldBeSpelledCorrectly, Justification = "Morph is the right word here")] static DictionarymorphExtensions = new Dictionary (); [SuppressMessage(FxCop.Category.Naming, FxCop.Rule.IdentifiersShouldBeSpelledCorrectly, Justification = "Morph is the right word here")] public static void AddPropertyValueMorphHelper(Type propertyType, PropertyValueMorphHelper extension) { if (propertyType == null) { throw FxTrace.Exception.AsError(new ArgumentNullException("propertyType")); } if (extension == null) { throw FxTrace.Exception.AsError(new ArgumentNullException("extension")); } morphExtensions[propertyType] = extension; } [SuppressMessage(FxCop.Category.Naming, FxCop.Rule.IdentifiersShouldBeSpelledCorrectly, Justification = "Morph is the right word here")] public static PropertyValueMorphHelper GetPropertyValueMorphHelper(Type propertyType) { if (propertyType == null) { throw FxTrace.Exception.AsError(new ArgumentNullException("propertyType")); } PropertyValueMorphHelper extension = null; morphExtensions.TryGetValue(propertyType, out extension); if (extension == null && propertyType.IsGenericType) { morphExtensions.TryGetValue(propertyType.GetGenericTypeDefinition(), out extension); } return extension; } [SuppressMessage(FxCop.Category.Naming, FxCop.Rule.IdentifiersShouldBeSpelledCorrectly, Justification = "Morph is the right word here")] // This updates back links public static void MorphObject(ModelItem oldModelItem, ModelItem newModelitem) { if (oldModelItem == null) { throw FxTrace.Exception.AsError(new ArgumentNullException("oldModelItem")); } if (newModelitem == null) { throw FxTrace.Exception.AsError(new ArgumentNullException("newModelitem")); } var collectionParents = from parent in oldModelItem.Parents where parent is ModelItemCollection select (ModelItemCollection)parent; foreach (ModelItemCollection collectionParent in collectionParents.ToList()) { int index = collectionParent.IndexOf(oldModelItem); collectionParent.Remove(oldModelItem); collectionParent.Insert(index, newModelitem); } foreach (ModelProperty modelProperty in oldModelItem.Sources.ToList()) { modelProperty.SetValue(newModelitem); } } [SuppressMessage(FxCop.Category.Naming, FxCop.Rule.IdentifiersShouldBeSpelledCorrectly, Justification = "Morph is the right word here")] // this updates forward links public static void MorphProperties(ModelItem oldModelItem, ModelItem newModelitem) { if (oldModelItem == null) { throw FxTrace.Exception.AsError(new ArgumentNullException("oldModelItem")); } if (newModelitem == null) { throw FxTrace.Exception.AsError(new ArgumentNullException("newModelitem")); } foreach (ModelProperty modelProperty in oldModelItem.Properties) { ModelProperty propertyInNewModelItem = newModelitem.Properties[modelProperty.Name]; if (propertyInNewModelItem != null) { Console.WriteLine(propertyInNewModelItem.Name); if (CanCopyProperty(modelProperty, propertyInNewModelItem)) { if (propertyInNewModelItem.PropertyType.Equals(modelProperty.PropertyType)) { propertyInNewModelItem.SetValue(modelProperty.Value); modelProperty.SetValue(null); } else // See if there is morph helper for this type. { PropertyValueMorphHelper extension = GetPropertyValueMorphHelper(modelProperty.PropertyType); if (extension != null) { propertyInNewModelItem.SetValue(extension(modelProperty.Value, propertyInNewModelItem)); modelProperty.SetValue(null); } } } } } } static bool CanCopyProperty(ModelProperty modelProperty, ModelProperty propertyInNewModelItem) { bool canCopyProperty = false; DesignerSerializationVisibilityAttribute designerSerializationVisibility = ExtensibilityAccessor.GetAttribute (modelProperty.Attributes); if (modelProperty.Value == null) { canCopyProperty = false; } else if (designerSerializationVisibility != null && designerSerializationVisibility.Visibility != DesignerSerializationVisibility.Visible) { canCopyProperty = false; } else if (propertyInNewModelItem != null && !propertyInNewModelItem.IsAttached && !propertyInNewModelItem.IsReadOnly) { canCopyProperty = true; } return canCopyProperty; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- TransformPatternIdentifiers.cs
- DynamicMetaObject.cs
- StrokeRenderer.cs
- EntityViewGenerationAttribute.cs
- FileDialog_Vista_Interop.cs
- AmbientProperties.cs
- MembershipUser.cs
- NamespaceMapping.cs
- TextEditorMouse.cs
- NetPeerTcpBindingElement.cs
- QueryConverter.cs
- EndpointPerformanceCounters.cs
- PropertyContainer.cs
- AnchoredBlock.cs
- TextShapeableCharacters.cs
- DateTimeConverter2.cs
- ContainerAction.cs
- QuerySettings.cs
- LinkLabel.cs
- PackagePartCollection.cs
- Parser.cs
- WebPartsPersonalization.cs
- WindowsImpersonationContext.cs
- XsltArgumentList.cs
- DelegateHelpers.cs
- AndCondition.cs
- wgx_sdk_version.cs
- CodePropertyReferenceExpression.cs
- DataFormat.cs
- PlainXmlWriter.cs
- VectorConverter.cs
- DesignerLabelAdapter.cs
- MapPathBasedVirtualPathProvider.cs
- ForEachDesigner.xaml.cs
- SortAction.cs
- CommandID.cs
- ActivityXRefPropertyEditor.cs
- ContextStack.cs
- SplitterEvent.cs
- X509ChainElement.cs
- LinkTarget.cs
- ConstNode.cs
- WindowsListViewSubItem.cs
- FieldCollectionEditor.cs
- PropertyRef.cs
- ContainerCodeDomSerializer.cs
- HTMLTagNameToTypeMapper.cs
- DataServiceClientException.cs
- KeyTime.cs
- x509utils.cs
- ToolStripGrip.cs
- SessionParameter.cs
- WindowsFormsHostPropertyMap.cs
- ActivityFunc.cs
- SspiSafeHandles.cs
- InstanceData.cs
- OdbcConnection.cs
- TextFormatterHost.cs
- SingletonConnectionReader.cs
- HMACRIPEMD160.cs
- WebResourceAttribute.cs
- HierarchicalDataBoundControl.cs
- PageSetupDialog.cs
- DataPagerFieldItem.cs
- MediaScriptCommandRoutedEventArgs.cs
- BooleanKeyFrameCollection.cs
- OdbcFactory.cs
- BaseDataBoundControl.cs
- RuleAction.cs
- PreviewPageInfo.cs
- ListBindingHelper.cs
- SafeNativeMethods.cs
- DesignerValidatorAdapter.cs
- Event.cs
- InvalidateEvent.cs
- Geometry.cs
- KoreanCalendar.cs
- FileNotFoundException.cs
- TraversalRequest.cs
- SynchronizedDispatch.cs
- SmiSettersStream.cs
- unitconverter.cs
- EventHandlersDesigner.cs
- ObjectReaderCompiler.cs
- SqlDataSourceCache.cs
- TextTreePropertyUndoUnit.cs
- Brush.cs
- SchemaMapping.cs
- GuidelineSet.cs
- ToolStripItemCollection.cs
- GridViewUpdatedEventArgs.cs
- DynamicDiscoSearcher.cs
- ExecutionEngineException.cs
- XmlSchemaSimpleContentExtension.cs
- RedirectionProxy.cs
- MatrixUtil.cs
- XsltLoader.cs
- _AutoWebProxyScriptHelper.cs
- BroadcastEventHelper.cs
- ServiceOperationParameter.cs