1 // Permission is hereby granted, free of charge, to any person obtaining
2 // a copy of this software and associated documentation files (the
3 // "Software"), to deal in the Software without restriction, including
4 // without limitation the rights to use, copy, modify, merge, publish,
5 // distribute, sublicense, and/or sell copies of the Software, and to
6 // permit persons to whom the Software is furnished to do so, subject to
7 // the following conditions:
9 // The above copyright notice and this permission notice shall be
10 // included in all copies or substantial portions of the Software.
12 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
13 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
14 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
15 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
16 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
17 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
18 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
20 // Copyright (c) 2005 Novell, Inc. (http://www.novell.com)
23 // Peter Bartok (pbartok@novell.com)
28 using System.Globalization;
29 using System.ComponentModel;
30 using System.Security.Permissions;
32 namespace System.Web.UI.WebControls {
35 [AspNetHostingPermission (SecurityAction.LinkDemand, Level = AspNetHostingPermissionLevel.Minimal)]
36 [AspNetHostingPermission (SecurityAction.InheritanceDemand, Level = AspNetHostingPermissionLevel.Minimal)]
37 public class WebColorConverter : ColorConverter {
39 // Converts from string to Color
40 public override object ConvertFrom (ITypeDescriptorContext context, CultureInfo culture, object value)
46 s = ((string)value).Trim();
52 if (culture == null) {
53 culture = CultureInfo.InvariantCulture;
60 // MS throws a generic exception, wrapping the specific exception, who knows why...
66 v = Int32.Parse(s.Substring(1), NumberStyles.HexNumber, culture);
68 return Color.FromArgb(255, (v >> 16) & 0xff, (v >> 8) & 0xff, v & 0xff);
72 return Color.FromArgb(Int32.Parse(s.Substring(1), NumberStyles.HexNumber, culture));
76 catch (FormatException e)
78 throw new Exception(s + "is not a valid color value", e);
80 catch (System.OverflowException e)
82 throw new Exception(s + " is not a valid color value", e);
92 n = Int32.Parse(s, NumberStyles.Integer, culture);
95 catch (FormatException e)
99 c = Color.FromName(s);
100 if ((c.A != 0) || (c.R != 0) || (c.G != 0) || (c.B != 0))
105 throw new Exception(s + " is not a valid color value", e);
108 catch (System.OverflowException e)
110 throw new Exception(s + " is not a valid color value", e);
118 return Color.FromArgb(n);
121 return base.ConvertFrom (context, culture, value);
124 // Converts from Color to string
125 public override object ConvertTo (ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType)
127 if (!(value is Color) || destinationType != typeof (string))
128 return base.ConvertTo (context, culture, value, destinationType);
130 Color c = (Color) value;
133 culture = CultureInfo.InvariantCulture;
135 string s = c.ToKnownColor ().ToString ();
139 return String.Concat ("#", c.R.ToString ("X2"), c.G.ToString ("X2"), c.B.ToString ("X2"));