| File: Microsoft\Windows\Controls\Ribbon\RibbonControlLength.cs | Web Access |
| Project: src\wpf\src\Microsoft.DotNet.Wpf\src\System.Windows.Controls.Ribbon\System.Windows.Controls.Ribbon.csproj (System.Windows.Controls.Ribbon) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System.ComponentModel; using System.Globalization; #if RIBBON_IN_FRAMEWORK namespace System.Windows.Controls.Ribbon #else namespace Microsoft.Windows.Controls.Ribbon #endif { #if RIBBON_IN_FRAMEWORK #endif /// <summary> /// RibbonControlLength is used to represent widths in RibbonControlSizeDefinition for layout /// purposes. This class is similar to GridLength in the framework. /// </summary> [TypeConverter(typeof(RibbonControlLengthConverter))] public struct RibbonControlLength : IEquatable<RibbonControlLength> { #region Private Fields private double _unitValue; private RibbonControlLengthUnitType _unitType; private static RibbonControlLength _auto = new RibbonControlLength(1.0, RibbonControlLengthUnitType.Auto); #endregion #region Constructors /// <summary> /// Constructor, initializes the RibbonControlLength as absolute value in pixels. /// </summary> public RibbonControlLength(double pixels) : this(pixels, RibbonControlLengthUnitType.Pixel) { } /// <summary> /// Constructor, initializes the RibbonControlLength and specifies what kind of value /// it will hold. /// </summary> public RibbonControlLength(double value, RibbonControlLengthUnitType type) { if (double.IsNaN(value)) { throw new ArgumentException(Microsoft.Windows.Controls.SR.Format(Microsoft.Windows.Controls.SR.InvalidCtorParameterNoNaN, "value")); } if (type == RibbonControlLengthUnitType.Star && double.IsInfinity(value)) { throw new ArgumentException(Microsoft.Windows.Controls.SR.Format(Microsoft.Windows.Controls.SR.InvalidCtorParameterNoInfinityForStarSize, "value")); } if (type != RibbonControlLengthUnitType.Auto && type != RibbonControlLengthUnitType.Pixel && type != RibbonControlLengthUnitType.Item && type != RibbonControlLengthUnitType.Star) { throw new ArgumentException(Microsoft.Windows.Controls.SR.Format(Microsoft.Windows.Controls.SR.InvalidCtorParameterUnknownRibbonControlLengthUnitType, "type")); } _unitValue = (type == RibbonControlLengthUnitType.Auto) ? 0.0 : value; _unitType = type; } #endregion #region Public Methods /// <summary> /// Overloaded operator, compares 2 RibbonControlLengths. /// </summary> public static bool operator ==(RibbonControlLength length1, RibbonControlLength length2) { return (length1.RibbonControlLengthUnitType == length2.RibbonControlLengthUnitType && length1.Value == length2.Value); } /// <summary> /// Overloaded operator, compares 2 RibbonControlLengths. /// </summary> public static bool operator !=(RibbonControlLength length1, RibbonControlLength length2) { return (length1.RibbonControlLengthUnitType != length2.RibbonControlLengthUnitType || length1.Value != length2.Value); } /// <summary> /// Compares this instance of RibbonControlLength with another object. /// </summary> public override bool Equals(object obj) { if (obj is RibbonControlLength length) { return (this == length); } else { return false; } } /// <summary> /// Compares this instance of RibbonControlLength with another instance. /// </summary> public bool Equals(RibbonControlLength other) { return (this == other); } /// <summary> /// <see cref="Object.GetHashCode"/> /// </summary> public override int GetHashCode() { return ((int)_unitValue + (int)_unitType); } /// <summary> /// Returns the string representation of this object. /// </summary> public override string ToString() { return RibbonControlLengthConverter.ToString(this, CultureInfo.InvariantCulture); } #endregion #region Public Properties /// <summary> /// Returns <c>true</c> if this RibbonControlLength instance holds /// an absolute (pixel or logical) value. /// </summary> public bool IsAbsolute { get { return (_unitType == RibbonControlLengthUnitType.Pixel || _unitType == RibbonControlLengthUnitType.Item); } } /// <summary> /// Returns <c>true</c> if this RibbonControlLength instance is /// automatic (not specified). /// </summary> public bool IsAuto { get { return (_unitType == RibbonControlLengthUnitType.Auto); } } /// <summary> /// Returns <c>true</c> if this RibbonControlLength instance holds weighted proportion /// of available space. /// </summary> public bool IsStar { get { return (_unitType == RibbonControlLengthUnitType.Star); } } /// <summary> /// Returns value part of this RibbonControlLength instance. /// </summary> public double Value { get { return ((_unitType == RibbonControlLengthUnitType.Auto) ? 1.0 : _unitValue); } } /// <summary> /// Returns unit type of this RibbonControlLength instance. /// </summary> public RibbonControlLengthUnitType RibbonControlLengthUnitType { get { return _unitType; } } /// <summary> /// Returns initialized Auto RibbonControlLength value. /// </summary> public static RibbonControlLength Auto { get { return _auto; } } #endregion } }