//----------------------------------------------------------------------------- // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- namespace Microsoft.VisualBasic.Activities.XamlIntegration { using System; using System.ComponentModel; using System.Runtime; using System.Globalization; using System.Activities; // this class is necessary in order for our value serializer to get called by XAML, // even though the functionality is a no-op public sealed class VisualBasicSettingsConverter : TypeConverter { public VisualBasicSettingsConverter() : base() { } public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType) { if (sourceType == TypeHelper.StringType) { return true; } return base.CanConvertFrom(context, sourceType); } public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType) { if (destinationType == TypeHelper.StringType) { return false; } return base.CanConvertTo(context, destinationType); } public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value) { string sourceString = value as string; if (sourceString != null) { if (sourceString.Equals(VisualBasicSettingsValueSerializer.ImplementationVisualBasicSettingsValue)) { // this is the VBSettings for the internal implementation // suppress its Xaml serialization VisualBasicSettings settings = CollectXmlNamespacesAndAssemblies(context); if (settings != null) { settings.SuppressXamlSerialization = true; } return settings; } if (!(sourceString.Equals(String.Empty) || sourceString.Equals(VisualBasicSettingsValueSerializer.VisualBasicSettingsValue))) { throw FxTrace.Exception.AsError(new InvalidOperationException(SR.InvalidVisualBasicSettingsValue)); } return CollectXmlNamespacesAndAssemblies(context); } return base.ConvertFrom(context, culture, value); } public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType) { return base.ConvertTo(context, culture, value, destinationType); } VisualBasicSettings CollectXmlNamespacesAndAssemblies(ITypeDescriptorContext context) { return VisualBasicExpressionConverter.CollectXmlNamespacesAndAssemblies(context); } } }