2 // System.Drawing.MarginsConverter.cs
5 // Dennis Hayes (dennish@Raytek.com)
6 // Herve Poussineau (hpoussineau@fr.st)
8 // (C) 2002 Ximian, Inc
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:
22 // The above copyright notice and this permission notice shall be
23 // included in all copies or substantial portions of the Software.
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.
34 using System.ComponentModel;
35 using System.Globalization;
36 using System.Text.RegularExpressions;
38 namespace System.Drawing.Printing {
40 /// Summary description for MarginsConverter.
42 public class MarginsConverter : ExpandableObjectConverter {
43 public MarginsConverter() {
46 public override bool CanConvertFrom(ITypeDescriptorContext context,Type sourceType) {
47 if (sourceType == typeof(string))
50 return base.CanConvertFrom(context, sourceType);
53 public override bool CanConvertTo(ITypeDescriptorContext context,Type destinationType) {
54 if (destinationType == typeof(string))
57 return base.CanConvertTo(context, destinationType);
60 public override object ConvertFrom(ITypeDescriptorContext context,CultureInfo culture,object value) {
66 // format [left];[right];[top];[bottom]
67 string separator = @"( |\t)*";
68 separator = separator + ";" + separator;
69 string regex = @"(?<left>\d+)" + separator + @"(?<right>\d+)" + separator + @"(?<top>\d+)" + separator + @"(?<bottom>\d+)";
71 Match match = new Regex(regex).Match(value as string);
73 throw new ArgumentException("value");
75 int left, right, top, bottom;
78 left = int.Parse(match.Groups["left"].Value);
79 right = int.Parse(match.Groups["right"].Value);
80 top = int.Parse(match.Groups["top"].Value);
81 bottom = int.Parse(match.Groups["bottom"].Value);
85 throw new ArgumentException("value", e);
87 return new Margins(left, right, top, bottom);
89 return base.ConvertFrom(context, culture, value);
92 public override object ConvertTo(ITypeDescriptorContext context,CultureInfo culture,object value,Type destinationType) {
93 if (destinationType == typeof(string) && value is Margins)
95 Margins source = value as Margins;
96 string ret = "{0}; {1}; {2}; {3}";
97 return String.Format(ret, source.Left, source.Right, source.Top, source.Bottom);
99 return base.ConvertTo(context, culture, value, destinationType);
102 public override bool GetCreateInstanceSupported(ITypeDescriptorContext context)
107 public override object CreateInstance(ITypeDescriptorContext context, System.Collections.IDictionary propertyValues)
111 Margins margins = new Margins();
112 margins.Left = int.Parse(propertyValues["Left"].ToString());
113 margins.Right = int.Parse(propertyValues["Right"].ToString());
114 margins.Top = int.Parse(propertyValues["Top"].ToString());
115 margins.Bottom = int.Parse(propertyValues["Bottom"].ToString());
120 // in case of error, return null