annotate Source/ComponentModel/TypeTypeConverter.cs @ 0:f990fcb411a9

Копия текущей версии из github
author cin
date Thu, 27 Mar 2014 21:46:09 +0400
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1 using System;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2 using System.ComponentModel;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3 using System.Globalization;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
4 using System.ComponentModel.Design;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
5
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
6 namespace BLToolkit.ComponentModel
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
7 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
8 /// <summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
9 /// Converts the value of an object into a <see cref="System.Type"/>.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
10 /// </summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
11 public class TypeTypeConverter: TypeConverter
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
12 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
13 // Human readable text for 'nothing selected'.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
14 //
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
15 private const string NoType = "(none)";
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
16
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
17 /// <summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
18 /// Returns whether this converter can convert an object of the given type to
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
19 /// a <see cref="System.Type"/>, using the specified context.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
20 /// </summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
21 /// <param name="context">An <see cref="System.ComponentModel.ITypeDescriptorContext"/>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
22 /// that provides a format context. </param>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
23 /// <param name="sourceType">A <see cref="System.Type"/> that represents the type
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
24 /// you want to convert from. </param>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
25 /// <returns>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
26 /// <see langword="true"/> if this converter can perform the conversion;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
27 /// otherwise, <see langword="false"/>.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
28 /// </returns>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
29 public override bool CanConvertFrom(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
30 ITypeDescriptorContext context,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
31 Type sourceType)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
32 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
33 return sourceType == typeof(string) ||
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
34 base.CanConvertFrom(context, sourceType);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
35 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
36
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
37 /// <summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
38 /// Converts the given object to the corresponding <see cref="System.Type"/>,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
39 /// using the specified context and culture information.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
40 /// </summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
41 /// <param name="culture">The <see cref="System.Globalization.CultureInfo"/> to
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
42 /// use as the current culture. </param>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
43 /// <param name="context">An
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
44 /// <see cref="System.ComponentModel.ITypeDescriptorContext"/> that provides a
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
45 /// format context. </param>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
46 /// <param name="value">The <see cref="System.Object"/> to convert. </param>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
47 /// <returns>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
48 /// An <see cref="System.Object"/> that represents the converted value.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
49 /// </returns>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
50 /// <exception cref="System.NotSupportedException">The conversion cannot be
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
51 /// performed. </exception>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
52 public override object ConvertFrom(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
53 ITypeDescriptorContext context,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
54 CultureInfo culture,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
55 object value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
56 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
57 if (value == null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
58 return null;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
59
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
60 if (!(value is string))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
61 return base.ConvertFrom(context, culture, value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
62
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
63 string str = (string)value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
64
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
65 if (str.Length == 0 || str == NoType)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
66 return null;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
67
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
68 // Try VisualStudio own service first.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
69 //
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
70 ITypeResolutionService typeResolver =
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
71 (ITypeResolutionService)context.GetService(typeof(ITypeResolutionService));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
72
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
73 if (typeResolver != null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
74 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
75 Type type = typeResolver.GetType(str);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
76
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
77 if (type != null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
78 return type;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
79 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
80
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
81 return Type.GetType(str);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
82 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
83
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
84 /// <summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
85 /// Returns whether this converter can convert the object to the specified type,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
86 /// using the specified context.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
87 /// </summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
88 /// <param name="context">An
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
89 /// <see cref="System.ComponentModel.ITypeDescriptorContext"/> that provides
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
90 /// a format context. </param>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
91 /// <param name="destinationType">A <see cref="System.Type"/> that represents
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
92 /// the type you want to convert to. </param>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
93 /// <returns>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
94 /// <see langword="true"/> if this converter can perform the conversion;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
95 /// otherwise, <see langword="false"/>.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
96 /// </returns>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
97 public override bool CanConvertTo(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
98 ITypeDescriptorContext context,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
99 Type destinationType)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
100 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
101 return destinationType == typeof(string) ||
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
102 base.CanConvertTo(context, destinationType);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
103 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
104
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
105 /// <summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
106 /// Converts the given value object to the specified type, using the specified
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
107 /// context and culture information.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
108 /// </summary>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
109 /// <param name="culture">A <see cref="System.Globalization.CultureInfo"/>.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
110 /// If null is passed, the current culture is assumed. </param>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
111 /// <param name="context">An
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
112 /// <see cref="System.ComponentModel.ITypeDescriptorContext"/> that provides
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
113 /// a format context. </param>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
114 /// <param name="destinationType">The <see cref="System.Type"/> to convert
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
115 /// the value parameter to. </param>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
116 /// <param name="value">The <see cref="System.Object"/> to convert. </param>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
117 /// <returns>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
118 /// An <see cref="System.Object"/> that represents the converted value.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
119 /// </returns>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
120 /// <exception cref="System.NotSupportedException">The conversion cannot be
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
121 /// performed. </exception>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
122 /// <exception cref="System.ArgumentNullException">
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
123 /// The <paramref name="destinationType"/> parameter is null. </exception>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
124 public override object ConvertTo(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
125 ITypeDescriptorContext context,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
126 CultureInfo culture,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
127 object value,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
128 Type destinationType)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
129 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
130 if (destinationType != typeof(string))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
131 return base.ConvertTo(context, culture, value, destinationType);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
132
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
133 if (value == null || value.ToString().Length == 0)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
134 return NoType;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
135
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
136 return value.ToString();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
137 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
138 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
139 }