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
- DbFunctionCommandTree.cs
- FrameworkElementFactory.cs
- TreeBuilderBamlTranslator.cs
- RegexInterpreter.cs
- Crc32.cs
- VerificationAttribute.cs
- EntityProxyTypeInfo.cs
- OpCellTreeNode.cs
- LineServicesCallbacks.cs
- DiagnosticsConfigurationHandler.cs
- AccessorTable.cs
- XmlSchemaObjectCollection.cs
- GeometryDrawing.cs
- HashAlgorithm.cs
- SoapFormatter.cs
- _FtpControlStream.cs
- EnvelopedPkcs7.cs
- PropagatorResult.cs
- MoveSizeWinEventHandler.cs
- XmlSchemaExporter.cs
- RemoteWebConfigurationHostServer.cs
- TempFiles.cs
- PeerService.cs
- ProcessModuleCollection.cs
- XmlBinaryReaderSession.cs
- Table.cs
- TextElement.cs
- HTTPNotFoundHandler.cs
- NegationPusher.cs
- CallbackDebugBehavior.cs
- HtmlElementCollection.cs
- ActivationServices.cs
- SafePipeHandle.cs
- SchemaMerger.cs
- FilterableAttribute.cs
- PropertySourceInfo.cs
- Parser.cs
- CorrelationInitializer.cs
- QueryGenerator.cs
- VarInfo.cs
- ImageSource.cs
- arabicshape.cs
- Decoder.cs
- XmlILIndex.cs
- DownloadProgressEventArgs.cs
- Crc32.cs
- HttpApplicationFactory.cs
- XmlSchemaSimpleTypeUnion.cs
- X509ChainPolicy.cs
- CodeMemberProperty.cs
- Package.cs
- SoapEnvelopeProcessingElement.cs
- AttributeXamlType.cs
- BitmapImage.cs
- EncoderBestFitFallback.cs
- XsltException.cs
- VideoDrawing.cs
- DescendantBaseQuery.cs
- SqlExpressionNullability.cs
- RpcAsyncResult.cs
- TimeoutTimer.cs
- TemplateEditingVerb.cs
- LinqDataSourceDeleteEventArgs.cs
- HttpCapabilitiesBase.cs
- SliderAutomationPeer.cs
- _UriSyntax.cs
- Control.cs
- BlurEffect.cs
- ConnectionPoint.cs
- FormViewPageEventArgs.cs
- XamlGridLengthSerializer.cs
- GroupQuery.cs
- TextStore.cs
- SiblingIterators.cs
- InputProcessorProfilesLoader.cs
- CompositeFontInfo.cs
- RefreshEventArgs.cs
- KeyManager.cs
- TypedLocationWrapper.cs
- HttpPostProtocolImporter.cs
- WindowsGraphics2.cs
- DataBinder.cs
- ResourceExpressionBuilder.cs
- WindowsToolbarAsMenu.cs
- SecurityCriticalDataForSet.cs
- ServerProtocol.cs
- ActionMessageFilterTable.cs
- NavigateEvent.cs
- FragmentQueryKB.cs
- ClientApiGenerator.cs
- TableAdapterManagerHelper.cs
- DocumentDesigner.cs
- WindowInteropHelper.cs
- SchemaTableColumn.cs
- HttpDebugHandler.cs
- FutureFactory.cs
- ObjectDataSourceMethodEventArgs.cs
- ListViewAutomationPeer.cs
- CodeDefaultValueExpression.cs
- IndexedEnumerable.cs