fix typo
[mcs.git] / class / System.Drawing / System.Drawing.Printing / MarginsConverter.cs
blobc437a1c4b68927a13ff55537c9c06a9f0a50d649
1 //
2 // System.Drawing.MarginsConverter.cs
3 //
4 // Author:
5 // Dennis Hayes (dennish@Raytek.com)
6 // Herve Poussineau (hpoussineau@fr.st)
7 //
8 // (C) 2002 Ximian, Inc
9 //
12 // Copyright (C) 2004 Novell, Inc (http://www.novell.com)
14 // Permission is hereby granted, free of charge, to any person obtaining
15 // a copy of this software and associated documentation files (the
16 // "Software"), to deal in the Software without restriction, including
17 // without limitation the rights to use, copy, modify, merge, publish,
18 // distribute, sublicense, and/or sell copies of the Software, and to
19 // permit persons to whom the Software is furnished to do so, subject to
20 // the following conditions:
21 //
22 // The above copyright notice and this permission notice shall be
23 // included in all copies or substantial portions of the Software.
24 //
25 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
26 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
27 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
28 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
29 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
30 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
31 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
33 using System;
34 using System.ComponentModel;
35 using System.Globalization;
36 using System.Text.RegularExpressions;
37 using System.ComponentModel.Design.Serialization;
38 using System.Reflection;
40 namespace System.Drawing.Printing {
41 /// <summary>
42 /// Summary description for MarginsConverter.
43 /// </summary>
44 public class MarginsConverter : ExpandableObjectConverter {
45 public MarginsConverter() {
47 #region Methods
48 public override bool CanConvertFrom(ITypeDescriptorContext context,Type sourceType) {
49 if (sourceType == typeof(string))
50 return true;
52 return base.CanConvertFrom(context, sourceType);
55 public override bool CanConvertTo(ITypeDescriptorContext context,Type destinationType) {
56 if (destinationType == typeof(string))
57 return true;
59 if (destinationType == typeof (InstanceDescriptor))
60 return true;
62 return base.CanConvertTo(context, destinationType);
65 public override object ConvertFrom(ITypeDescriptorContext context,CultureInfo culture,object value) {
66 if (value is string)
68 if (value == null)
69 return new Margins();
71 // format [left];[right];[top];[bottom]
72 string separator = @"( |\t)*";
73 separator = separator + ";" + separator;
74 string regex = @"(?<left>\d+)" + separator + @"(?<right>\d+)" + separator + @"(?<top>\d+)" + separator + @"(?<bottom>\d+)";
76 Match match = new Regex(regex).Match(value as string);
77 if (!match.Success)
78 throw new ArgumentException("value");
80 int left, right, top, bottom;
81 try
83 left = int.Parse(match.Groups["left"].Value);
84 right = int.Parse(match.Groups["right"].Value);
85 top = int.Parse(match.Groups["top"].Value);
86 bottom = int.Parse(match.Groups["bottom"].Value);
88 catch (Exception e)
90 throw new ArgumentException("value", e);
92 return new Margins(left, right, top, bottom);
93 } else
94 return base.ConvertFrom(context, culture, value);
97 public override object ConvertTo(ITypeDescriptorContext context,CultureInfo culture,object value,Type destinationType) {
98 if (destinationType == typeof(string) && value is Margins)
100 Margins source = value as Margins;
101 string ret = "{0}; {1}; {2}; {3}";
102 return String.Format(ret, source.Left, source.Right, source.Top, source.Bottom);
104 if (destinationType == typeof (InstanceDescriptor) && value is Margins) {
105 Margins c = (Margins) value;
106 ConstructorInfo ctor = typeof(Margins).GetConstructor (new Type[] {typeof(int), typeof(int), typeof(int), typeof(int)} );
107 return new InstanceDescriptor (ctor, new object[] {c.Left, c.Right, c.Top, c.Bottom});
110 return base.ConvertTo(context, culture, value, destinationType);
113 public override bool GetCreateInstanceSupported(ITypeDescriptorContext context)
115 return true;
118 public override object CreateInstance(ITypeDescriptorContext context, System.Collections.IDictionary propertyValues)
122 Margins margins = new Margins();
123 margins.Left = int.Parse(propertyValues["Left"].ToString());
124 margins.Right = int.Parse(propertyValues["Right"].ToString());
125 margins.Top = int.Parse(propertyValues["Top"].ToString());
126 margins.Bottom = int.Parse(propertyValues["Bottom"].ToString());
127 return margins;
129 catch (Exception)
131 // in case of error, return null
132 return null;
135 #endregion