DataGridLength.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / Framework / System / Windows / Controls / DataGridLength.cs / 1305600 / DataGridLength.cs

                            //---------------------------------------------------------------------------- 
//
// Copyright (C) Microsoft Corporation.  All rights reserved.
//
//--------------------------------------------------------------------------- 

using System; 
using System.ComponentModel; 
using System.Globalization;
using System.Windows; 
using MS.Internal;

namespace System.Windows.Controls
{ 
    /// 
    ///     DataGridLength is the type used for various length properties in DataGrid 
    ///     that support a variety of descriptive sizing modes in addition to numerical 
    ///     values.
    ///  
    [TypeConverter(typeof(DataGridLengthConverter))]
    public struct DataGridLength : IEquatable
    {
        #region Constructors 

        ///  
        ///     Initializes as an absolute value in pixels. 
        /// 
        ///  
        ///     Specifies the number of 'device-independent pixels' (96 pixels-per-inch).
        /// 
        /// 
        ///     If pixels parameter is double.NaN 
        ///     or pixels parameter is double.NegativeInfinity
        ///     or pixels parameter is double.PositiveInfinity. 
        ///  
        public DataGridLength(double pixels)
            : this(pixels, DataGridLengthUnitType.Pixel) 
        {
        }

        ///  
        ///     Initializes to a specified value and unit.
        ///  
        /// The value to hold. 
        /// The unit of value.
        ///  
        ///     value is ignored unless type is
        ///     DataGridLengthUnitType.Pixel or
        ///     DataGridLengthUnitType.Star
        ///  
        /// 
        ///     If value parameter is double.NaN 
        ///     or value parameter is double.NegativeInfinity 
        ///     or value parameter is double.PositiveInfinity.
        ///  
        public DataGridLength(double value, DataGridLengthUnitType type)
            : this(value, type, (type == DataGridLengthUnitType.Pixel ? value : Double.NaN), (type == DataGridLengthUnitType.Pixel ? value : Double.NaN))
        {
        } 

        ///  
        ///     Initializes to a specified value and unit. 
        /// 
        /// The value to hold. 
        /// The unit of value.
        /// 
        /// 
        ///  
        ///     value is ignored unless type is
        ///     DataGridLengthUnitType.Pixel or 
        ///     DataGridLengthUnitType.Star 
        /// 
        ///  
        ///     If value parameter is double.NaN
        ///     or value parameter is double.NegativeInfinity
        ///     or value parameter is double.PositiveInfinity.
        ///  
        public DataGridLength(double value, DataGridLengthUnitType type, double desiredValue, double displayValue)
        { 
            if (DoubleUtil.IsNaN(value) || Double.IsInfinity(value)) 
            {
                throw new ArgumentException( 
                    SR.Get(SRID.DataGridLength_Infinity),
                    "value");
            }
 
            if (type != DataGridLengthUnitType.Auto &&
                type != DataGridLengthUnitType.Pixel && 
                type != DataGridLengthUnitType.Star && 
                type != DataGridLengthUnitType.SizeToCells &&
                type != DataGridLengthUnitType.SizeToHeader) 
            {
                throw new ArgumentException(
                    SR.Get(SRID.DataGridLength_InvalidType),
                    "type"); 
            }
 
            if (Double.IsInfinity(desiredValue)) 
            {
                throw new ArgumentException( 
                    SR.Get(SRID.DataGridLength_Infinity),
                    "desiredValue");
            }
 
            if (Double.IsInfinity(displayValue))
            { 
                throw new ArgumentException( 
                    SR.Get(SRID.DataGridLength_Infinity),
                    "displayValue"); 
            }

            _unitValue = (type == DataGridLengthUnitType.Auto) ? AutoValue : value;
            _unitType = type; 

            _desiredValue = desiredValue; 
            _displayValue = displayValue; 
        }
 
        #endregion Constructors

        #region Public Methods
 
        /// 
        /// Overloaded operator, compares 2 DataGridLength's. 
        ///  
        /// first DataGridLength to compare.
        /// second DataGridLength to compare. 
        /// true if specified DataGridLengths have same value
        /// and unit type.
        public static bool operator ==(DataGridLength gl1, DataGridLength gl2)
        { 
            return gl1.UnitType == gl2.UnitType
                   && gl1.Value == gl2.Value 
                   && ((gl1.DesiredValue == gl2.DesiredValue) || (DoubleUtil.IsNaN(gl1.DesiredValue) && DoubleUtil.IsNaN(gl2.DesiredValue))) 
                   && ((gl1.DisplayValue == gl2.DisplayValue) || (DoubleUtil.IsNaN(gl1.DisplayValue) && DoubleUtil.IsNaN(gl2.DisplayValue)));
        } 

        /// 
        /// Overloaded operator, compares 2 DataGridLength's.
        ///  
        /// first DataGridLength to compare.
        /// second DataGridLength to compare. 
        /// true if specified DataGridLengths have either different value or 
        /// unit type.
        public static bool operator !=(DataGridLength gl1, DataGridLength gl2) 
        {
            return gl1.UnitType != gl2.UnitType
                   || gl1.Value != gl2.Value
                   || ((gl1.DesiredValue != gl2.DesiredValue) && !(DoubleUtil.IsNaN(gl1.DesiredValue) && DoubleUtil.IsNaN(gl2.DesiredValue))) 
                   || ((gl1.DisplayValue != gl2.DisplayValue) && !(DoubleUtil.IsNaN(gl1.DisplayValue) && DoubleUtil.IsNaN(gl2.DisplayValue)));
        } 
 
        /// 
        /// Compares this instance of DataGridLength with another object. 
        /// 
        /// Reference to an object for comparison.
        /// trueif this DataGridLength instance has the same value
        /// and unit type as oCompare. 
        public override bool Equals(object obj)
        { 
            if (obj is DataGridLength) 
            {
                DataGridLength l = (DataGridLength)obj; 
                return this == l;
            }
            else
            { 
                return false;
            } 
        } 

        ///  
        /// Compares this instance of DataGridLength with another instance.
        /// 
        /// Grid length instance to compare.
        /// trueif this DataGridLength instance has the same value 
        /// and unit type as gridLength.
        public bool Equals(DataGridLength other) 
        { 
            return this == other;
        } 

        /// 
        /// 
        ///  
        /// 
        public override int GetHashCode() 
        { 
            return (int)_unitValue + (int)_unitType + (int)_desiredValue + (int)_displayValue;
        } 

        /// 
        ///     Returns true if this DataGridLength instance holds
        ///     an absolute (pixel) value. 
        /// 
        public bool IsAbsolute 
        { 
            get
            { 
                return _unitType == DataGridLengthUnitType.Pixel;
            }
        }
 
        /// 
        ///     Returns true if this DataGridLength instance is 
        ///     automatic (not specified). 
        /// 
        public bool IsAuto 
        {
            get
            {
                return _unitType == DataGridLengthUnitType.Auto; 
            }
        } 
 
        /// 
        ///     Returns true if this DataGridLength instance holds a weighted proportion 
        ///     of available space.
        /// 
        public bool IsStar
        { 
            get
            { 
                return _unitType == DataGridLengthUnitType.Star; 
            }
        } 

        /// 
        ///     Returns true if this instance is to size to the cells of a column or row.
        ///  
        public bool IsSizeToCells
        { 
            get { return _unitType == DataGridLengthUnitType.SizeToCells; } 
        }
 
        /// 
        ///     Returns true if this instance is to size to the header of a column or row.
        /// 
        public bool IsSizeToHeader 
        {
            get { return _unitType == DataGridLengthUnitType.SizeToHeader; } 
        } 

        ///  
        ///     Returns value part of this DataGridLength instance.
        /// 
        public double Value
        { 
            get
            { 
                return (_unitType == DataGridLengthUnitType.Auto) ? AutoValue : _unitValue; 
            }
        } 

        /// 
        ///     Returns unit type of this DataGridLength instance.
        ///  
        public DataGridLengthUnitType UnitType
        { 
            get 
            {
                return _unitType; 
            }
        }

        ///  
        ///     Returns the desired value of this instance.
        ///  
        public double DesiredValue 
        {
            get 
            {
                return _desiredValue;
            }
        } 

        ///  
        ///     Returns the display value of this instance. 
        /// 
        public double DisplayValue 
        {
            get
            {
                return _displayValue; 
            }
        } 
 
        /// 
        ///     Returns the string representation of this object. 
        /// 
        public override string ToString()
        {
            return DataGridLengthConverter.ConvertToString(this, CultureInfo.InvariantCulture); 
        }
 
        #endregion 

        #region Pre-defined values 

        /// 
        ///     Returns a value initialized to mean "auto."
        ///  
        public static DataGridLength Auto
        { 
            get { return _auto; } 
        }
 
        /// 
        ///     Returns a value initialized to mean "size to cells."
        /// 
        public static DataGridLength SizeToCells 
        {
            get { return _sizeToCells; } 
        } 

        ///  
        ///     Returns a value initialized to mean "size to header."
        /// 
        public static DataGridLength SizeToHeader
        { 
            get { return _sizeToHeader; }
        } 
 
        #endregion
 
        #region Implicit Conversions

        /// 
        ///     Allows for values of type double to be implicitly converted 
        ///     to DataGridLength.
        ///  
        /// The number of pixels to represent. 
        /// The DataGridLength representing the requested number of pixels.
        public static implicit operator DataGridLength(double value) 
        {
            return new DataGridLength(value);
        }
 
        #endregion
 
        #region Fields 

        private double _unitValue; // unit value storage 
        private DataGridLengthUnitType _unitType; // unit type storage
        private double _desiredValue; // desired value storage
        private double _displayValue; // display value storage
 
        private const double AutoValue = 1.0;
 
        // static instance of Auto DataGridLength 
        private static readonly DataGridLength _auto = new DataGridLength(AutoValue, DataGridLengthUnitType.Auto, 0d, 0d);
        private static readonly DataGridLength _sizeToCells = new DataGridLength(AutoValue, DataGridLengthUnitType.SizeToCells, 0d, 0d); 
        private static readonly DataGridLength _sizeToHeader = new DataGridLength(AutoValue, DataGridLengthUnitType.SizeToHeader, 0d, 0d);

        #endregion
    } 
}

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.


                        

Link Menu

Network programming in C#, Network Programming in VB.NET, Network Programming in .NET
This book is available now!
Buy at Amazon US or
Buy at Amazon UK