//============================================================================ //ZedGraph Class Library - A Flexible Line Graph/Bar Graph Library in C# //Copyright ?2006 John Champion // //This library is free software; you can redistribute it and/or //modify it under the terms of the GNU Lesser General Public //License as published by the Free Software Foundation; either //version 2.1 of the License, or (at your option) any later version. // //This library is distributed in the hope that it will be useful, //but WITHOUT ANY WARRANTY; without even the implied warranty of //MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU //Lesser General Public License for more details. // //You should have received a copy of the GNU Lesser General Public //License along with this library; if not, write to the Free Software //Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA //============================================================================= using System; using System.Drawing; using System.Text; using System.Runtime.Serialization; using System.Security.Permissions; namespace DrawGraph { /// /// Class that handles the properties of the charting area (where the curves are /// actually drawn), which is bounded by the , , /// and . /// /// /// John Champion /// $Revision: 3.1 $ $Date: 2006/06/24 20:26:44 $ [Serializable] public class Chart : ICloneable, ISerializable { /// /// The rectangle that contains the area bounded by the axes, in pixel units /// internal RectangleF _rect; /// /// Private field that stores the data for this /// . Use the public property to /// access this value. /// internal Fill _fill; /// /// Private field that stores the data for this /// . Use the public property to /// access this value. /// internal Border _border; /// Private field that determines if the will be /// sized automatically. Use the public property to access /// this value. internal bool _isRectAuto; #region Constructors /// /// Default constructor. /// public Chart() { _isRectAuto = true; _border = new Border( Default.IsBorderVisible, Default.BorderColor, Default.BorderPenWidth ); _fill = new Fill( Default.FillColor, Default.FillBrush, Default.FillType ); } /// /// Copy constructor /// /// The source to be copied. public Chart( Chart rhs ) { _border = rhs._border.Clone(); _fill = rhs._fill.Clone(); _rect = rhs._rect; _isRectAuto = rhs._isRectAuto; } /// /// Implement the interface in a typesafe manner by just /// calling the typed version of /// /// A deep copy of this object object ICloneable.Clone() { return this.Clone(); } /// /// Typesafe, deep-copy clone method. /// /// A new, independent copy of this class public Chart Clone() { return new Chart( this ); } #endregion #region Properties /// /// Gets or sets the rectangle that contains the area bounded by the axes /// (, , and ). /// If you set this value manually, then the /// value will automatically be set to false. /// /// The rectangle units are in screen pixels public RectangleF Rect { get { return _rect; } set { _rect = value; _isRectAuto = false; } } /// /// Gets or sets the data for this /// . /// public Fill Fill { get { return _fill; } set { _fill = value; } } /// /// Gets or sets the class for drawing the border /// border around the /// /// /// public Border Border { get { return _border; } set { _border = value; } } /// /// Gets or sets a boolean value that determines whether or not the /// will be calculated automatically (almost always true). /// /// /// If you have a need to set the ChartRect manually, such as you have multiple graphs /// on a page and you want to line up the edges perfectly, you can set this value /// to false. If you set this value to false, you must also manually set /// the property. /// You can easily determine the ChartRect that ZedGraph would have /// calculated by calling the method, which returns /// a chart rect sized for the current data range, scale sizes, etc. /// /// true to have ZedGraph calculate the ChartRect, false to do it yourself public bool IsRectAuto { get { return _isRectAuto; } set { _isRectAuto = value; } } #endregion #region Serialization /// /// Current schema value that defines the version of the serialized file /// public const int schema = 10; /// /// Constructor for deserializing objects /// /// A instance that defines the serialized data /// /// A instance that contains the serialized data /// protected Chart( SerializationInfo info, StreamingContext context ) { // The schema value is just a file version parameter. You can use it to make future versions // backwards compatible as new member variables are added to classes int sch = info.GetInt32( "schema" ); _rect = (RectangleF)info.GetValue( "rect", typeof( RectangleF ) ); _fill = (Fill)info.GetValue( "fill", typeof( Fill ) ); _border = (Border)info.GetValue( "border", typeof( Border ) ); _isRectAuto = info.GetBoolean( "isRectAuto" ); } /// /// Populates a instance with the data needed to serialize the target object /// /// A instance that defines the serialized data /// A instance that contains the serialized data [SecurityPermissionAttribute( SecurityAction.Demand, SerializationFormatter = true )] public virtual void GetObjectData( SerializationInfo info, StreamingContext context ) { info.AddValue( "schema", schema ); info.AddValue( "rect", _rect ); info.AddValue( "fill", _fill ); info.AddValue( "border", _border ); info.AddValue( "isRectAuto", _isRectAuto ); } #endregion #region Defaults /// /// A simple struct that defines the /// default property values for the class. /// public struct Default { /// /// The default color for the border. /// ( property). /// public static Color BorderColor = Color.Black; /// /// The default color for the background. /// ( property). /// public static Color FillColor = Color.White; /// /// The default brush for the background. /// ( property of ). /// public static Brush FillBrush = null; /// /// The default for the background. /// ( property of ). /// public static FillType FillType = FillType.Brush; /// /// The default pen width for drawing the /// border /// ( property). /// Units are in points (1/72 inch). /// public static float BorderPenWidth = 1F; /// /// The default display mode for the border /// ( property). true /// to show the border border, false to omit the border /// public static bool IsBorderVisible = true; } #endregion } }