Merge branch 'master' of github.com:mono/mono into masterwork
[mono.git] / mcs / class / System.Drawing / System.Drawing / StringFormat.cs
index 68e49b9d94edf672d4f8a27fe82b20b74128e6f2..7e9a218f990f33eb2f2679bbd78d771566b8bf0d 100644 (file)
@@ -7,8 +7,7 @@
 //   Jordi Mas i Hernandez (jordi@ximian.com)
 //
 // Copyright (C) 2002 Ximian, Inc (http://www.ximian.com)
-//
-// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
+// Copyright (C) 2004,2006 Novell, Inc (http://www.novell.com)
 //
 // Permission is hereby granted, free of charge, to any person obtaining
 // a copy of this software and associated documentation files (the
 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
-using System;
+
+using System.ComponentModel;
 using System.Drawing.Text;
 
-namespace System.Drawing
-{
-       /// <summary>
-       /// Summary description for StringFormat.
-       /// </summary>
+namespace System.Drawing {
+
        public sealed class StringFormat : MarshalByRefObject, IDisposable, ICloneable
        {
-               private static StringFormat genericDefault;
+//             private static StringFormat genericDefault;
                private IntPtr nativeStrFmt = IntPtr.Zero;
                 private int language = GDIPlus.LANG_NEUTRAL;
-               internal CharacterRange [] CharRanges;
-               
+                               
                public StringFormat() : this (0, GDIPlus.LANG_NEUTRAL)
                {                                          
-                       
                }               
                
-               public StringFormat(StringFormatFlags options, int lang)
+               public StringFormat(StringFormatFlags options, int language)
                {
-                       lock (this)
-                       {
-                               Status status = GDIPlus.GdipCreateStringFormat (options, lang, out nativeStrFmt);                               
-                               GDIPlus.CheckStatus (status);
-       
-                               LineAlignment =  StringAlignment.Near;
-                               Alignment =  StringAlignment.Near;                      
-                               language = lang;
-                       }
+                       Status status = GDIPlus.GdipCreateStringFormat (options, language, out nativeStrFmt);                           
+                       GDIPlus.CheckStatus (status);
                }
                
                internal StringFormat(IntPtr native)
@@ -67,12 +55,12 @@ namespace System.Drawing
                        nativeStrFmt = native;
                }
                
-               ~StringFormat()
+               ~StringFormat ()
                {       
-                       Dispose ();
+                       Dispose (false);
                }
                
-               public void Dispose()
+               public void Dispose ()
                {       
                        Dispose (true);
                        System.GC.SuppressFinalize (this);
@@ -80,31 +68,26 @@ namespace System.Drawing
 
                void Dispose (bool disposing)
                {
-                       if (disposing) {
-                               lock (this)
-                               {
-                                       Status status = GDIPlus.GdipDeleteStringFormat (nativeStrFmt);
-                                       GDIPlus.CheckStatus (status);
-                               }
+                       if (nativeStrFmt != IntPtr.Zero) {
+                               Status status = GDIPlus.GdipDeleteStringFormat (nativeStrFmt);
+                               nativeStrFmt = IntPtr.Zero;
+                               GDIPlus.CheckStatus (status);
                        }
                }
 
-               public StringFormat (StringFormat source)
-               {               
-                       lock (this)
-                       {       
-                               Status status = GDIPlus.GdipCloneStringFormat (source.NativeObject, out nativeStrFmt);
-                               GDIPlus.CheckStatus (status);
-                       }
+               public StringFormat (StringFormat format)
+               {
+                       if (format == null)
+                               throw new ArgumentNullException ("format");
+
+                       Status status = GDIPlus.GdipCloneStringFormat (format.NativeObject, out nativeStrFmt);
+                       GDIPlus.CheckStatus (status);
                }
 
-               public StringFormat (StringFormatFlags flags)
+               public StringFormat (StringFormatFlags options)
                {
-                       lock (this)
-                       {                               
-                               Status status = GDIPlus.GdipCreateStringFormat (flags, GDIPlus.LANG_NEUTRAL, out nativeStrFmt);
-                               GDIPlus.CheckStatus (status);
-                       }
+                       Status status = GDIPlus.GdipCreateStringFormat (options, GDIPlus.LANG_NEUTRAL, out nativeStrFmt);
+                       GDIPlus.CheckStatus (status);                   
                }
                
                public StringAlignment Alignment {
@@ -116,7 +99,10 @@ namespace System.Drawing
                                return align;
                        }
 
-                       set {                                   
+                       set {
+                               if ((value < StringAlignment.Near) || (value > StringAlignment.Far))
+                                       throw new InvalidEnumArgumentException ("Alignment");
+
                                Status status = GDIPlus.GdipSetStringFormatAlign (nativeStrFmt, value);
                                GDIPlus.CheckStatus (status);
                        }
@@ -131,7 +117,10 @@ namespace System.Drawing
                                 return align;
                        }
 
-                       set {                           
+                       set {
+                               if ((value < StringAlignment.Near) || (value > StringAlignment.Far))
+                                       throw new InvalidEnumArgumentException ("Alignment");
+
                                Status status = GDIPlus.GdipSetStringFormatLineAlign (nativeStrFmt, value);
                                GDIPlus.CheckStatus (status);
                        }
@@ -162,6 +151,9 @@ namespace System.Drawing
                        }
 
                        set {
+                               if ((value < HotkeyPrefix.None) || (value > HotkeyPrefix.Hide))
+                                       throw new InvalidEnumArgumentException ("HotkeyPrefix");
+
                                Status status = GDIPlus.GdipSetStringFormatHotkeyPrefix (nativeStrFmt, value);
                                GDIPlus.CheckStatus (status);
                        }
@@ -177,6 +169,9 @@ namespace System.Drawing
                        }
 
                        set {
+                               if ((value < StringTrimming.None) || (value > StringTrimming.EllipsisPath))
+                                       throw new InvalidEnumArgumentException ("Trimming");
+
                                Status status = GDIPlus.GdipSetStringFormatTrimming (nativeStrFmt, value);
                                GDIPlus.CheckStatus (status);
                        }
@@ -184,15 +179,12 @@ namespace System.Drawing
 
                public static StringFormat GenericDefault {
                        get {
-                               lock (typeof (StringFormat))
-                               {
-                                       IntPtr ptr;
+                               IntPtr ptr;
                                
-                                       Status status = GDIPlus.GdipStringFormatGetGenericDefault (out ptr);
-                                       GDIPlus.CheckStatus (status);
+                               Status status = GDIPlus.GdipStringFormatGetGenericDefault (out ptr);
+                               GDIPlus.CheckStatus (status);
        
-                                       return new StringFormat (ptr);
-                               }
+                               return new StringFormat (ptr);
                        }
                }
                
@@ -206,16 +198,12 @@ namespace System.Drawing
                
                public static StringFormat GenericTypographic {
                        get {
-                       
-                               lock (typeof (StringFormat))
-                               {
-                                       IntPtr ptr;
+                               IntPtr ptr;
                                                
-                                       Status status = GDIPlus.GdipStringFormatGetGenericTypographic (out ptr);
-                                       GDIPlus.CheckStatus (status);
+                               Status status = GDIPlus.GdipStringFormatGetGenericTypographic (out ptr);
+                               GDIPlus.CheckStatus (status);
        
-                                       return new StringFormat (ptr);                          
-                               }
+                               return new StringFormat (ptr);
                        }
                }
 
@@ -231,29 +219,31 @@ namespace System.Drawing
                }
 
 
-               public void SetMeasurableCharacterRanges (CharacterRange [] range)
-               {
-                       CharRanges=(CharacterRange [])range.Clone();
+               public void SetMeasurableCharacterRanges (CharacterRange [] ranges)
+               {                                       
+                       Status status = GDIPlus.GdipSetStringFormatMeasurableCharacterRanges (nativeStrFmt, 
+                               ranges.Length,  ranges);
+                               
+                       GDIPlus.CheckStatus (status);
                }
-
-               internal CharacterRange [] GetCharRanges
+               
+               internal int GetMeasurableCharacterRangeCount () 
                {
-                       get {
-                               return(CharRanges);
-                       }
-               }
-       
+                       int cnt;                
+                       Status status = GDIPlus.GdipGetStringFormatMeasurableCharacterRangeCount (nativeStrFmt, out cnt);
+                               
+                       GDIPlus.CheckStatus (status);                   
+                       return cnt;                     
+               }                       
+                       
                public object Clone()
                {
-                       lock (this)
-                       {
-                               IntPtr native;
+                       IntPtr native;
                                
-                               Status status = GDIPlus.GdipCloneStringFormat (nativeStrFmt, out native);
-                               GDIPlus.CheckStatus (status);
+                       Status status = GDIPlus.GdipCloneStringFormat (nativeStrFmt, out native);
+                       GDIPlus.CheckStatus (status);
        
-                               return new StringFormat (native);
-                       }
+                       return new StringFormat (native);                       
                }
 
                public override string ToString()