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
- ElementFactory.cs
- TemplateParser.cs
- TopClause.cs
- Opcode.cs
- XmlSchemaInfo.cs
- MonitorWrapper.cs
- EventDescriptorCollection.cs
- AtomPub10CategoriesDocumentFormatter.cs
- MsmqEncryptionAlgorithm.cs
- DesignerHost.cs
- ObjectViewQueryResultData.cs
- NetworkStream.cs
- ControllableStoryboardAction.cs
- FrameSecurityDescriptor.cs
- InkCanvas.cs
- UserInitiatedRoutedEventPermissionAttribute.cs
- ContractBase.cs
- ExceptionUtil.cs
- MobileTemplatedControlDesigner.cs
- ServiceCredentials.cs
- HttpCookiesSection.cs
- WindowShowOrOpenTracker.cs
- basecomparevalidator.cs
- MessageQueueEnumerator.cs
- StreamWriter.cs
- FormattedTextSymbols.cs
- CodeStatementCollection.cs
- FileUtil.cs
- PolicyManager.cs
- CodeGenerator.cs
- FigureParaClient.cs
- Profiler.cs
- DataComponentMethodGenerator.cs
- TimersDescriptionAttribute.cs
- IDataContractSurrogate.cs
- WeakReference.cs
- NonParentingControl.cs
- FastEncoderWindow.cs
- FilterableAttribute.cs
- SqlCacheDependency.cs
- DecoderNLS.cs
- SiteMapNodeItem.cs
- AppLevelCompilationSectionCache.cs
- TypeForwardedToAttribute.cs
- JournalNavigationScope.cs
- XNodeSchemaApplier.cs
- ImageCodecInfoPrivate.cs
- NavigationPropertyEmitter.cs
- AllMembershipCondition.cs
- PageContent.cs
- ScriptControlManager.cs
- SocketAddress.cs
- XPathItem.cs
- RawTextInputReport.cs
- BaseServiceProvider.cs
- XmlSchemaAnnotation.cs
- Profiler.cs
- XPathCompileException.cs
- ProcessRequestArgs.cs
- ArrangedElementCollection.cs
- DataGridViewDataErrorEventArgs.cs
- CallSiteHelpers.cs
- Enum.cs
- ExclusiveCanonicalizationTransform.cs
- BackStopAuthenticationModule.cs
- DefaultTextStore.cs
- securitycriticaldataformultiplegetandset.cs
- OracleNumber.cs
- ActivationArguments.cs
- DataGridViewButtonCell.cs
- ScriptHandlerFactory.cs
- VisualStyleTypesAndProperties.cs
- ConnectionManagementSection.cs
- DataGridViewColumnEventArgs.cs
- odbcmetadatafactory.cs
- SiteMap.cs
- safex509handles.cs
- HandleCollector.cs
- FileSystemEventArgs.cs
- CustomSignedXml.cs
- DateTimeValueSerializer.cs
- ToolStripTextBox.cs
- IsolatedStorageFile.cs
- VoiceSynthesis.cs
- RequestNavigateEventArgs.cs
- TableColumn.cs
- CloudCollection.cs
- DecoderBestFitFallback.cs
- Automation.cs
- ThreadStaticAttribute.cs
- StoryFragments.cs
- XmlArrayAttribute.cs
- DropDownList.cs
- ServiceCredentialsElement.cs
- CountAggregationOperator.cs
- UIElement.cs
- CompilerGlobalScopeAttribute.cs
- SqlFormatter.cs
- CodeTypeDeclarationCollection.cs
- FormsAuthenticationTicket.cs