UITypeEditors.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / WF / Common / AuthoringOM / Design / UITypeEditors.cs / 1438166 / UITypeEditors.cs

                            namespace System.Workflow.ComponentModel.Design 
{
 	using System;
	using System.ComponentModel;
	using System.ComponentModel.Design; 
	using System.Runtime.InteropServices;
 	using System.Collections; 
    using System.Collections.Generic; 
    using System.Diagnostics;
	using System.Drawing.Design; 
 	using System.Windows.Forms;
 	using System.Security.Permissions;
	using System.Windows.Forms.Design;
 	using System.CodeDom; 
	using System.Drawing;
	using System.Reflection; 
	using System.Globalization; 
 	using System.Workflow.ComponentModel.Compiler;
	using System.Workflow.ComponentModel.Design; 
 	

 	[PermissionSet(SecurityAction.InheritanceDemand, Name = "FullTrust")]
	[PermissionSet(SecurityAction.LinkDemand, Name = "FullTrust")] 
 	public class TypeBrowserEditor: UITypeEditor
	{ 
		private IWindowsFormsEditorService editorService; 

		public TypeBrowserEditor() 
 		{
		}

 		public override object EditValue(ITypeDescriptorContext typeDescriptorContext, IServiceProvider serviceProvider, object value) 
 		{
			if (typeDescriptorContext == null) 
 				throw new ArgumentNullException("typeDescriptorContext"); 
			if (serviceProvider == null)
				throw new ArgumentNullException("serviceProvider"); 

			object returnVal = value;
 			this.editorService = (IWindowsFormsEditorService)serviceProvider.GetService(typeof(IWindowsFormsEditorService));
			if (editorService != null) 
 			{
 				ITypeFilterProvider typeFilterProvider = null; 
				TypeFilterProviderAttribute typeFilterProvAttr = null; 

 				if (typeDescriptorContext.PropertyDescriptor != null && typeDescriptorContext.PropertyDescriptor.Attributes != null) 
					typeFilterProvAttr = typeDescriptorContext.PropertyDescriptor.Attributes[typeof(TypeFilterProviderAttribute)] as TypeFilterProviderAttribute;

				if (typeFilterProvAttr != null)
				{ 
 					ITypeProvider typeProvider = serviceProvider.GetService(typeof(ITypeProvider)) as ITypeProvider;
					if (typeProvider == null) 
 						throw new Exception(SR.GetString(SR.General_MissingService, typeof(ITypeProvider).FullName)); 

 					Type typeFilterProviderType = Type.GetType(typeFilterProvAttr.TypeFilterProviderTypeName); 
					//typeProvider.GetType(typeFilterProvAttr.TypeFilterProviderTypeName);
 					if (typeFilterProviderType != null)
						typeFilterProvider = Activator.CreateInstance(typeFilterProviderType, new object[] { serviceProvider }) as ITypeFilterProvider;
				} 
				
 				if (typeFilterProvider == null) 
					typeFilterProvider = ((typeDescriptorContext.Instance is object[]) ? ((object[])typeDescriptorContext.Instance)[0] : typeDescriptorContext.Instance) as ITypeFilterProvider; 
 				
 				if (typeFilterProvider == null) 
					typeFilterProvider = value as ITypeFilterProvider;

 				if (typeFilterProvider == null)
				{ 
					IReferenceService rs = serviceProvider.GetService(typeof(IReferenceService)) as IReferenceService;
					if (rs != null) 
 					{ 
						IComponent baseComponent = rs.GetComponent(typeDescriptorContext.Instance);
 						if (baseComponent is ITypeFilterProvider) 
 							typeFilterProvider = baseComponent as ITypeFilterProvider;
					}
 				}
 
				if (typeFilterProvider == null)
				{ 
					typeFilterProvider = typeDescriptorContext.PropertyDescriptor as ITypeFilterProvider; 
 				}
 
				string oldTypeName = value as string;
 				if (value != null  && typeDescriptorContext.PropertyDescriptor.PropertyType != typeof(string) && typeDescriptorContext.PropertyDescriptor.Converter != null && typeDescriptorContext.PropertyDescriptor.Converter.CanConvertTo(typeof(string)))
 					oldTypeName = typeDescriptorContext.PropertyDescriptor.Converter.ConvertTo(typeDescriptorContext, CultureInfo.CurrentCulture, value, typeof(string)) as string;
 
                using(TypeBrowserDialog dlg = new TypeBrowserDialog(serviceProvider, typeFilterProvider as ITypeFilterProvider, oldTypeName))
                { 
                    if (DialogResult.OK == editorService.ShowDialog(dlg)) 
                    {
                        if (typeDescriptorContext.PropertyDescriptor.PropertyType == typeof(Type)) 
                            returnVal = dlg.SelectedType;
                        else if (typeDescriptorContext.PropertyDescriptor.PropertyType == typeof(string))
                            returnVal = dlg.SelectedType.FullName;
                        else if (typeDescriptorContext.PropertyDescriptor.Converter != null && typeDescriptorContext.PropertyDescriptor.Converter.CanConvertFrom(typeDescriptorContext, typeof(string))) 
                            returnVal = typeDescriptorContext.PropertyDescriptor.Converter.ConvertFrom(typeDescriptorContext, CultureInfo.CurrentCulture, dlg.SelectedType.FullName);
                    } 
                } 
			}
 			return returnVal; 
		}

		public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext typeDescriptorContext)
		{ 
 			return UITypeEditorEditStyle.Modal;
		} 
 	} 

 	[PermissionSet(SecurityAction.InheritanceDemand, Name = "FullTrust")] 
	[PermissionSet(SecurityAction.LinkDemand, Name = "FullTrust")]
 	public class BindUITypeEditor : UITypeEditor
	{
		private const int MaxItems = 10; 
		private IServiceProvider serviceProvider;
 
 		public BindUITypeEditor() 
		{
 		} 

 		public override object EditValue(ITypeDescriptorContext context, IServiceProvider serviceProvider, object value)
		{
            if (serviceProvider == null) 
                throw new ArgumentNullException("serviceProvider");
 
            this.serviceProvider = serviceProvider; 

 			object returnValue = value; 
            if (context != null && context.PropertyDescriptor is DynamicPropertyDescriptor)
            {
                try
                { 
                    using (ActivityBindForm bindDialog = new ActivityBindForm(this.serviceProvider, context))
                    { 
                        if (DialogResult.OK == bindDialog.ShowDialog()) 
                        {
                            //Now that OK has been pressed in the dialog we need to create members if necessary 
                            if (bindDialog.CreateNew)
                            {
                                //Emit the field / property as required
                                if (bindDialog.CreateNewProperty) 
                                {
                                    List properties = CustomActivityDesignerHelper.GetCustomProperties(context); 
                                    if (properties != null) 
                                    {
                                        properties.Add(CustomProperty.CreateCustomProperty(this.serviceProvider, bindDialog.NewMemberName, context.PropertyDescriptor, context.Instance)); 
                                        CustomActivityDesignerHelper.SetCustomProperties(properties, context);
                                    }
                                }
                                else 
                                {
                                    ActivityBindPropertyDescriptor.CreateField(context, bindDialog.Binding, true); 
                                } 
                            }
                            returnValue = bindDialog.Binding; 
                        }
                    }
                }
                catch (Exception e) 
                {
                    string message = SR.GetString(SR.Error_CanNotBindProperty, context.PropertyDescriptor.Name); 
                    if (!String.IsNullOrEmpty(e.Message)) 
                        message += "\n\n" + e.Message;
                    DesignerHelpers.ShowError(context, message); 
                }
            }
            else
            { 
                DesignerHelpers.ShowError(this.serviceProvider, SR.GetString(SR.Error_MultipleSelectNotSupportedForBindAndPromote));
            } 
 
			return returnValue;
		} 

		public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext typeDescriptorContext)
 		{
			return UITypeEditorEditStyle.Modal; 
 		}
 
        internal static object EditValue(ITypeDescriptorContext context) 
        {
            object value = null; 
            if (context != null && context.PropertyDescriptor != null && context.Instance != null)
            {
                BindUITypeEditor bindTypeEditor = new BindUITypeEditor();
                value = context.PropertyDescriptor.GetValue(context.Instance); 

                value = bindTypeEditor.EditValue(context, context, value); 
 
                try
                { 
                    context.PropertyDescriptor.SetValue(context.Instance, value);
                }
                catch (Exception e)
                { 
                    string message = SR.GetString(SR.Error_CanNotBindProperty, context.PropertyDescriptor.Name);
                    if (!String.IsNullOrEmpty(e.Message)) 
                        message += "\n\n" + e.Message; 
                    DesignerHelpers.ShowError(context, message);
                } 
            }
            return value;
        }
 	} 
}

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.


                        

Link Menu

Network programming in C#, Network Programming in VB.NET, Network Programming in .NET
This book is available now!
Buy at Amazon US or
Buy at Amazon UK