X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mcs%2Fclass%2FSystem.Drawing%2FSystem.Drawing%2FStringFormat.cs;h=1344cd2e25cce5c3073645c11289d5153847a756;hb=56884dcbceee8a87dedd587846b65dc28c2dbcfc;hp=8f30edfd46ce20aa13a39b0e39e3bd97185e7f00;hpb=ce7f8944002c49e8812fc5d2cd95f63e3e9b7c99;p=mono.git diff --git a/mcs/class/System.Drawing/System.Drawing/StringFormat.cs b/mcs/class/System.Drawing/System.Drawing/StringFormat.cs index 8f30edfd46c..1344cd2e25c 100644 --- a/mcs/class/System.Drawing/System.Drawing/StringFormat.cs +++ b/mcs/class/System.Drawing/System.Drawing/StringFormat.cs @@ -1,126 +1,291 @@ -// -// System.Drawing.StringFormat.cs -// -// Authors: -// Dennis Hayes (dennish@Raytek.com) -// Miguel de Icaza (miguel@ximian.com) -// -// (C) 2002 Ximian, Inc -// (C) 2003 Novell, Inc. -// -using System; -using System.Drawing.Text; - -namespace System.Drawing -{ - /// - /// Summary description for StringFormat. - /// - public sealed class StringFormat : IDisposable - { - private static StringFormat genericDefault; - StringAlignment alignment; - StringAlignment line_alignment; - StringFormatFlags format_flags; - HotkeyPrefix hotkey_prefix; - StringTrimming trimming; - - public StringFormat() - { - // - // TODO: Add constructor logic here - // - alignment = StringAlignment.Center; - line_alignment = StringAlignment.Center; - format_flags = 0; - } - - public void Dispose() - { - } - - public StringFormat (StringFormat source) - { - alignment = source.alignment; - line_alignment = source.line_alignment; - format_flags = source.format_flags; - hotkey_prefix = source.hotkey_prefix; - } - - public StringFormat (StringFormatFlags flags) - { - alignment = StringAlignment.Center; - line_alignment = StringAlignment.Center; - format_flags = flags; - } - - public StringAlignment Alignment { - get { - return alignment; - } - - set { - alignment = value; - } - } - - public StringAlignment LineAlignment { - get { - return line_alignment; - } - - set { - line_alignment = value; - } - } - - public StringFormatFlags FormatFlags { - get { - return format_flags; - } - - set { - format_flags = value; - } - } - - public HotkeyPrefix HotkeyPrefix { - get { - return hotkey_prefix; - } - - set { - hotkey_prefix = value; - } - } - - public void SetMeasurableCharacterRanges (CharacterRange [] range) - { - } - - public StringTrimming Trimming { - get { - return trimming; - } - - set { - trimming = value; - } - } - - public static StringFormat GenericDefault { - get { - lock (typeof (StringFormat)) { - if (genericDefault == null) { - genericDefault = new StringFormat (); - genericDefault.Alignment = StringAlignment.Near; - //genericDefault.DigitSubstitutionMethod = StringDigitSubstitute.User; - genericDefault.LineAlignment = StringAlignment.Near; - genericDefault.Trimming = StringTrimming.Character; - } - } - return(genericDefault); - } - } - } -} +// +// System.Drawing.StringFormat.cs +// +// Authors: +// Dennis Hayes (dennish@Raytek.com) +// Miguel de Icaza (miguel@ximian.com) +// 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) +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// 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.Drawing.Text; + +namespace System.Drawing +{ + /// + /// Summary description for StringFormat. + /// + public sealed class StringFormat : MarshalByRefObject, IDisposable, ICloneable + { + private static StringFormat genericDefault; + private IntPtr nativeStrFmt = IntPtr.Zero; + private int language = GDIPlus.LANG_NEUTRAL; + + public StringFormat() : this (0, GDIPlus.LANG_NEUTRAL) + { + + } + + public StringFormat(StringFormatFlags options, int lang) + { + Status status = GDIPlus.GdipCreateStringFormat (options, lang, out nativeStrFmt); + GDIPlus.CheckStatus (status); + + LineAlignment = StringAlignment.Near; + Alignment = StringAlignment.Near; + language = lang; + } + + internal StringFormat(IntPtr native) + { + nativeStrFmt = native; + } + + ~StringFormat () + { + Dispose (false); + } + + public void Dispose () + { + Dispose (true); + System.GC.SuppressFinalize (this); + } + + void Dispose (bool disposing) + { + if (nativeStrFmt != IntPtr.Zero) { + Status status = GDIPlus.GdipDeleteStringFormat (nativeStrFmt); + GDIPlus.CheckStatus (status); + + nativeStrFmt = IntPtr.Zero; + } + } + + public StringFormat (StringFormat source) + { + Status status = GDIPlus.GdipCloneStringFormat (source.NativeObject, out nativeStrFmt); + GDIPlus.CheckStatus (status); + } + + public StringFormat (StringFormatFlags flags) + { + Status status = GDIPlus.GdipCreateStringFormat (flags, GDIPlus.LANG_NEUTRAL, out nativeStrFmt); + GDIPlus.CheckStatus (status); + } + + public StringAlignment Alignment { + get { + StringAlignment align; + Status status = GDIPlus.GdipGetStringFormatAlign (nativeStrFmt, out align); + GDIPlus.CheckStatus (status); + + return align; + } + + set { + Status status = GDIPlus.GdipSetStringFormatAlign (nativeStrFmt, value); + GDIPlus.CheckStatus (status); + } + } + + public StringAlignment LineAlignment { + get { + StringAlignment align; + Status status = GDIPlus.GdipGetStringFormatLineAlign (nativeStrFmt, out align); + GDIPlus.CheckStatus (status); + + return align; + } + + set { + Status status = GDIPlus.GdipSetStringFormatLineAlign (nativeStrFmt, value); + GDIPlus.CheckStatus (status); + } + } + + public StringFormatFlags FormatFlags { + get { + StringFormatFlags flags; + Status status = GDIPlus.GdipGetStringFormatFlags (nativeStrFmt, out flags); + GDIPlus.CheckStatus (status); + + return flags; + } + + set { + Status status = GDIPlus.GdipSetStringFormatFlags (nativeStrFmt, value); + GDIPlus.CheckStatus (status); + } + } + + public HotkeyPrefix HotkeyPrefix { + get { + HotkeyPrefix hotkeyPrefix; + Status status = GDIPlus.GdipGetStringFormatHotkeyPrefix (nativeStrFmt, out hotkeyPrefix); + GDIPlus.CheckStatus (status); + + return hotkeyPrefix; + } + + set { + Status status = GDIPlus.GdipSetStringFormatHotkeyPrefix (nativeStrFmt, value); + GDIPlus.CheckStatus (status); + } + } + + + public StringTrimming Trimming { + get { + StringTrimming trimming; + Status status = GDIPlus.GdipGetStringFormatTrimming (nativeStrFmt, out trimming); + GDIPlus.CheckStatus (status); + return trimming; + } + + set { + Status status = GDIPlus.GdipSetStringFormatTrimming (nativeStrFmt, value); + GDIPlus.CheckStatus (status); + } + } + + public static StringFormat GenericDefault { + get { + IntPtr ptr; + + Status status = GDIPlus.GdipStringFormatGetGenericDefault (out ptr); + GDIPlus.CheckStatus (status); + + return new StringFormat (ptr); + + } + } + + + public int DigitSubstitutionLanguage { + get{ + return language; + } + } + + + public static StringFormat GenericTypographic { + get { + + IntPtr ptr; + + Status status = GDIPlus.GdipStringFormatGetGenericTypographic (out ptr); + GDIPlus.CheckStatus (status); + + return new StringFormat (ptr); + } + } + + public StringDigitSubstitute DigitSubstitutionMethod { + get { + StringDigitSubstitute substitute; + + Status status = GDIPlus.GdipGetStringFormatDigitSubstitution(nativeStrFmt, language, out substitute); + GDIPlus.CheckStatus (status); + + return substitute; + } + } + + + public void SetMeasurableCharacterRanges (CharacterRange [] range) + { + Status status = GDIPlus.GdipSetStringFormatMeasurableCharacterRanges (nativeStrFmt, + range.Length, range); + + GDIPlus.CheckStatus (status); + } + + internal int GetMeasurableCharacterRangeCount () + { + int cnt; + Status status = GDIPlus.GdipGetStringFormatMeasurableCharacterRangeCount (nativeStrFmt, out cnt); + + GDIPlus.CheckStatus (status); + return cnt; + } + + public object Clone() + { + IntPtr native; + + Status status = GDIPlus.GdipCloneStringFormat (nativeStrFmt, out native); + GDIPlus.CheckStatus (status); + + return new StringFormat (native); + } + + public override string ToString() + { + return "[StringFormat, FormatFlags=" + this.FormatFlags.ToString() + "]"; + } + + internal IntPtr NativeObject + { + get{ + return nativeStrFmt; + } + set { + nativeStrFmt = value; + } + } + + public void SetTabStops(float firstTabOffset, float[] tabStops) + { + Status status = GDIPlus.GdipSetStringFormatTabStops(nativeStrFmt, firstTabOffset, tabStops.Length, tabStops); + GDIPlus.CheckStatus (status); + } + + public void SetDigitSubstitution(int language, StringDigitSubstitute substitute) + { + Status status = GDIPlus.GdipSetStringFormatDigitSubstitution(nativeStrFmt, this.language, substitute); + GDIPlus.CheckStatus (status); + } + + public float[] GetTabStops(out float firstTabOffset) + { + int count = 0; + firstTabOffset = 0; + + Status status = GDIPlus.GdipGetStringFormatTabStopCount(nativeStrFmt, out count); + GDIPlus.CheckStatus (status); + + float[] tabStops = new float[count]; + + if (count != 0) { + status = GDIPlus.GdipGetStringFormatTabStops(nativeStrFmt, count, out firstTabOffset, tabStops); + GDIPlus.CheckStatus (status); + } + + return tabStops; + } + + } +}