Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / NetFx40 / Tools / System.Activities.Presentation / System / Activities / Presentation / Model / ModelTypeConverter.cs / 1305376 / ModelTypeConverter.cs
//------------------------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- namespace System.Activities.Presentation.Model { using System; using System.Collections; using System.Collections.Generic; using System.ComponentModel; using System.Globalization; using System.Diagnostics.CodeAnalysis; // This is a type converter that wraps another type converter. In the // editing model, we expose all properties as ModelItem objects, so we need // to unwrap them before handing them to a type converter. This type // converter provides that unwrapping seamlessly. [SuppressMessage("XAML", "XAML1004", Justification = "This is internal, and is always available through TypeConverter.GetConverter, not used in xaml")] class ModelTypeConverter : TypeConverter { ModelTreeManager modelTreeManager; TypeConverter converter; internal ModelTypeConverter(ModelTreeManager modelTreeManager, TypeConverter converter) { this.modelTreeManager = modelTreeManager; this.converter = converter; } // Wraps the given type descriptor context with the set of this.modelTreeManagers // available in the editing context. ITypeDescriptorContext WrapContext(ITypeDescriptorContext context) { return new ModelTypeDescriptorContextWrapper(context, this.modelTreeManager); } // Returns true if the converter can convert from the given source type. public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType) { if (sourceType == null) { throw FxTrace.Exception.AsError(new ArgumentNullException("sourceType")); } return this.converter.CanConvertFrom(WrapContext(context), sourceType); } // Returns true if the converter can convert to the given target type. public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType) { if (destinationType == null) { throw FxTrace.Exception.AsError(new ArgumentNullException("destinationType")); } return this.converter.CanConvertTo(WrapContext(context), destinationType); } // Performs the actual conversion from one type to antother. If the value provided // is a ModelItem, it will be unwrapped first. The return value is a ModelItem. public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value) { ModelItem item = value as ModelItem; if (item != null) { value = item.GetCurrentValue(); } object convertedValue = this.converter.ConvertFrom(WrapContext(context), culture, value); if (convertedValue != null) { convertedValue = this.modelTreeManager.CreateModelItem(null, convertedValue); } return convertedValue; } // Performs the actual conversion to another type. If the value provided is an item, it will // be uwrapped first. The return value is the raw data type. public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType) { ModelItem item = value as ModelItem; if (item != null) { value = item.GetCurrentValue(); } if (value != null) { return this.converter.ConvertTo(WrapContext(context), culture, value, destinationType); } return null; } // Creates an instance of an object using a dictionary of property values. The // return value is a wrapped model item. public override object CreateInstance(ITypeDescriptorContext context, IDictionary propertyValues) { object value = this.converter.CreateInstance(WrapContext(context), propertyValues); if (value != null) { value = this.modelTreeManager.CreateModelItem(null, value); } return value; } // Returns true if the CreateInstance method can be used to create new instances of // objects. public override bool GetCreateInstanceSupported(ITypeDescriptorContext context) { return this.converter.GetCreateInstanceSupported(WrapContext(context)); } // Returns child properties for a type converter. This will wrap all properties returned. public override PropertyDescriptorCollection GetProperties(ITypeDescriptorContext context, object value, Attribute[] attributes) { if (value == null) { throw FxTrace.Exception.AsError( new ArgumentNullException("value")); } ModelItem item = value as ModelItem; if (item != null) { value = item.GetCurrentValue(); } PropertyDescriptorCollection props = this.converter.GetProperties(WrapContext(context), value, attributes); if (props != null && props.Count > 0) { if (item == null) { // We will need the item for this object. item = this.modelTreeManager.CreateModelItem(null, value); } // Search our item for each property and wrap it. If // a property is not offered by the model, ommit it. ListnewProps = new List (props.Count); foreach (PropertyDescriptor p in props) { ModelProperty modelProp = item.Properties.Find(p.Name); if (modelProp != null) { newProps.Add(new ModelPropertyDescriptor(modelProp)); } } props = new PropertyDescriptorCollection(newProps.ToArray(), true); } return props; } // Returns true if GetProperties will return child properties for the // object. public override bool GetPropertiesSupported(ITypeDescriptorContext context) { return this.converter.GetPropertiesSupported(WrapContext(context)); } // Returns a set of standard values this type converter offers. public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context) { StandardValuesCollection values = this.converter.GetStandardValues(WrapContext(context)); // Some type converters return null here, which isn't supposed to // be allowed. Fix them object[] wrappedValues; if (values == null) { wrappedValues = new object[0]; } else { wrappedValues = new object[values.Count]; int idx = 0; foreach (object value in values) { object wrappedValue; if (value != null) { wrappedValue = this.modelTreeManager.CreateModelItem(null, value); } else { wrappedValue = value; } wrappedValues[idx++] = wrappedValue; } } return new StandardValuesCollection(wrappedValues); } // Returns true if the set of standard values cannot be customized. public override bool GetStandardValuesExclusive(ITypeDescriptorContext context) { return this.converter.GetStandardValuesExclusive(WrapContext(context)); } // Returns true if this type converter offers a set of standard values. public override bool GetStandardValuesSupported(ITypeDescriptorContext context) { return this.converter.GetStandardValuesSupported(WrapContext(context)); } // Returns true if the given value is a valid value for this type converter. public override bool IsValid(ITypeDescriptorContext context, object value) { ModelItem item = value as ModelItem; if (item != null) { value = item.GetCurrentValue(); } return this.converter.IsValid(WrapContext(context), value); } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //------------------------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- namespace System.Activities.Presentation.Model { using System; using System.Collections; using System.Collections.Generic; using System.ComponentModel; using System.Globalization; using System.Diagnostics.CodeAnalysis; // This is a type converter that wraps another type converter. In the // editing model, we expose all properties as ModelItem objects, so we need // to unwrap them before handing them to a type converter. This type // converter provides that unwrapping seamlessly. [SuppressMessage("XAML", "XAML1004", Justification = "This is internal, and is always available through TypeConverter.GetConverter, not used in xaml")] class ModelTypeConverter : TypeConverter { ModelTreeManager modelTreeManager; TypeConverter converter; internal ModelTypeConverter(ModelTreeManager modelTreeManager, TypeConverter converter) { this.modelTreeManager = modelTreeManager; this.converter = converter; } // Wraps the given type descriptor context with the set of this.modelTreeManagers // available in the editing context. ITypeDescriptorContext WrapContext(ITypeDescriptorContext context) { return new ModelTypeDescriptorContextWrapper(context, this.modelTreeManager); } // Returns true if the converter can convert from the given source type. public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType) { if (sourceType == null) { throw FxTrace.Exception.AsError(new ArgumentNullException("sourceType")); } return this.converter.CanConvertFrom(WrapContext(context), sourceType); } // Returns true if the converter can convert to the given target type. public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType) { if (destinationType == null) { throw FxTrace.Exception.AsError(new ArgumentNullException("destinationType")); } return this.converter.CanConvertTo(WrapContext(context), destinationType); } // Performs the actual conversion from one type to antother. If the value provided // is a ModelItem, it will be unwrapped first. The return value is a ModelItem. public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value) { ModelItem item = value as ModelItem; if (item != null) { value = item.GetCurrentValue(); } object convertedValue = this.converter.ConvertFrom(WrapContext(context), culture, value); if (convertedValue != null) { convertedValue = this.modelTreeManager.CreateModelItem(null, convertedValue); } return convertedValue; } // Performs the actual conversion to another type. If the value provided is an item, it will // be uwrapped first. The return value is the raw data type. public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType) { ModelItem item = value as ModelItem; if (item != null) { value = item.GetCurrentValue(); } if (value != null) { return this.converter.ConvertTo(WrapContext(context), culture, value, destinationType); } return null; } // Creates an instance of an object using a dictionary of property values. The // return value is a wrapped model item. public override object CreateInstance(ITypeDescriptorContext context, IDictionary propertyValues) { object value = this.converter.CreateInstance(WrapContext(context), propertyValues); if (value != null) { value = this.modelTreeManager.CreateModelItem(null, value); } return value; } // Returns true if the CreateInstance method can be used to create new instances of // objects. public override bool GetCreateInstanceSupported(ITypeDescriptorContext context) { return this.converter.GetCreateInstanceSupported(WrapContext(context)); } // Returns child properties for a type converter. This will wrap all properties returned. public override PropertyDescriptorCollection GetProperties(ITypeDescriptorContext context, object value, Attribute[] attributes) { if (value == null) { throw FxTrace.Exception.AsError( new ArgumentNullException("value")); } ModelItem item = value as ModelItem; if (item != null) { value = item.GetCurrentValue(); } PropertyDescriptorCollection props = this.converter.GetProperties(WrapContext(context), value, attributes); if (props != null && props.Count > 0) { if (item == null) { // We will need the item for this object. item = this.modelTreeManager.CreateModelItem(null, value); } // Search our item for each property and wrap it. If // a property is not offered by the model, ommit it. List newProps = new List (props.Count); foreach (PropertyDescriptor p in props) { ModelProperty modelProp = item.Properties.Find(p.Name); if (modelProp != null) { newProps.Add(new ModelPropertyDescriptor(modelProp)); } } props = new PropertyDescriptorCollection(newProps.ToArray(), true); } return props; } // Returns true if GetProperties will return child properties for the // object. public override bool GetPropertiesSupported(ITypeDescriptorContext context) { return this.converter.GetPropertiesSupported(WrapContext(context)); } // Returns a set of standard values this type converter offers. public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context) { StandardValuesCollection values = this.converter.GetStandardValues(WrapContext(context)); // Some type converters return null here, which isn't supposed to // be allowed. Fix them object[] wrappedValues; if (values == null) { wrappedValues = new object[0]; } else { wrappedValues = new object[values.Count]; int idx = 0; foreach (object value in values) { object wrappedValue; if (value != null) { wrappedValue = this.modelTreeManager.CreateModelItem(null, value); } else { wrappedValue = value; } wrappedValues[idx++] = wrappedValue; } } return new StandardValuesCollection(wrappedValues); } // Returns true if the set of standard values cannot be customized. public override bool GetStandardValuesExclusive(ITypeDescriptorContext context) { return this.converter.GetStandardValuesExclusive(WrapContext(context)); } // Returns true if this type converter offers a set of standard values. public override bool GetStandardValuesSupported(ITypeDescriptorContext context) { return this.converter.GetStandardValuesSupported(WrapContext(context)); } // Returns true if the given value is a valid value for this type converter. public override bool IsValid(ITypeDescriptorContext context, object value) { ModelItem item = value as ModelItem; if (item != null) { value = item.GetCurrentValue(); } return this.converter.IsValid(WrapContext(context), value); } } } // 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
- Char.cs
- MachineSettingsSection.cs
- XmlSchemaElement.cs
- Rotation3D.cs
- InfoCardRSAOAEPKeyExchangeDeformatter.cs
- WindowsRegion.cs
- LowerCaseStringConverter.cs
- SmiRequestExecutor.cs
- StagingAreaInputItem.cs
- WriteTimeStream.cs
- TypefaceMetricsCache.cs
- TextContainerChangedEventArgs.cs
- RotateTransform3D.cs
- NetMsmqSecurityMode.cs
- SecureStringHasher.cs
- AutomationIdentifier.cs
- RuntimeConfigurationRecord.cs
- CriticalFinalizerObject.cs
- SecurityTokenResolver.cs
- XmlSchemaType.cs
- ConfigurationProperty.cs
- ConfigurationSchemaErrors.cs
- LZCodec.cs
- AlignmentYValidation.cs
- ToolboxComponentsCreatedEventArgs.cs
- SqlDataSourceTableQuery.cs
- NegatedCellConstant.cs
- ObjectListTitleAttribute.cs
- KeyValuePair.cs
- PtsHelper.cs
- RoutingUtilities.cs
- mediaeventargs.cs
- MobileSysDescriptionAttribute.cs
- XPathPatternBuilder.cs
- SettingsSection.cs
- _UriSyntax.cs
- DragDrop.cs
- SimpleHandlerFactory.cs
- SimpleTypeResolver.cs
- ProtocolImporter.cs
- _AcceptOverlappedAsyncResult.cs
- Hyperlink.cs
- _Events.cs
- ColorConvertedBitmapExtension.cs
- __ConsoleStream.cs
- SmiMetaDataProperty.cs
- MbpInfo.cs
- BinHexEncoder.cs
- FileUtil.cs
- CodeThrowExceptionStatement.cs
- ToolStripArrowRenderEventArgs.cs
- NativeMethods.cs
- URLEditor.cs
- LicenseException.cs
- MailSettingsSection.cs
- sqlinternaltransaction.cs
- ContextMenuStrip.cs
- RtfToXamlReader.cs
- DataGridCaption.cs
- WebPartActionVerb.cs
- BehaviorEditorPart.cs
- CompositeKey.cs
- ComMethodElementCollection.cs
- StylusPointPropertyInfo.cs
- CodeAttributeArgumentCollection.cs
- MaskDescriptors.cs
- OperandQuery.cs
- TextRunCacheImp.cs
- URLString.cs
- StructureChangedEventArgs.cs
- InvokeAction.cs
- OperationAbortedException.cs
- MultiTrigger.cs
- glyphs.cs
- WindowsEditBoxRange.cs
- CompressEmulationStream.cs
- COM2TypeInfoProcessor.cs
- XmlElementAttribute.cs
- StateBag.cs
- RoutedEventHandlerInfo.cs
- CompositeActivityTypeDescriptorProvider.cs
- FileController.cs
- SqlDataSourceCommandEventArgs.cs
- Debugger.cs
- EllipseGeometry.cs
- SqlEnums.cs
- HostProtectionPermission.cs
- TimelineGroup.cs
- GlyphTypeface.cs
- FrameworkTemplate.cs
- CodeObjectCreateExpression.cs
- UriScheme.cs
- compensatingcollection.cs
- RuntimeEnvironment.cs
- ScriptModule.cs
- SqlDataSourceCustomCommandPanel.cs
- BezierSegment.cs
- _Connection.cs
- Panel.cs
- SqlNotificationRequest.cs