Exemple #1
0
        private void MoveSplitter(double offsetX, double offsetY)
        {
            double delta = Orientation == Orientation.Vertical ? offsetY : offsetX;
            double child1Length, child2Length, minDelta, maxDelta;

            GetChildrenLengthes(out child1Length, out child2Length);
            GetMinMaxDelta(out minDelta, out maxDelta);
            delta = Math.Min(Math.Max(delta, minDelta), maxDelta);

            if (!IsSplitterTopLeft)
            {
                delta = -delta;
            }

            double newValue;
            double length1 = IsSplitterTopLeft ? child1Length : child2Length;
            double length2 = IsSplitterTopLeft ? child2Length : child1Length;

            if (SplitterDistance.IsStar || SplitterDistance.IsAutoStar)
            {
                newValue = (length1 + delta) / (length2 - delta);
            }
            else
            {
                newValue = length1 + delta;
            }

            SplitterUnitType unitType = SplitterDistance.UnitType;

            MoveSplitter(new SplitterDistance(newValue, unitType));
        }
Exemple #2
0
        internal static SplitterLength FromString(string s, CultureInfo cultureInfo)
        {
            string           str      = s.Trim();
            double           num      = 1.0;
            SplitterUnitType unitType = SplitterUnitType.Stretch;

            //if (str == "*")
            //        unitType = SplitterUnitType.Fill;
            //else
            //        num = Convert.ToDouble(str, (IFormatProvider)cultureInfo);
            if (str.Contains("*"))
            {
                unitType = SplitterUnitType.Fill;

                double va = 0;

                if (double.TryParse(str.Replace("*", ""), out va) &&
                    va > 1)
                {
                    num = va;
                }
            }
            else
            {
                num = Convert.ToDouble(str, (IFormatProvider)cultureInfo);
            }
            return(new SplitterLength(num, unitType));
        }
Exemple #3
0
        /// <summary>Initializes a new instance of the <see cref="SplitterDistance"/> class.</summary>
        /// <param name="value">The initial value of this instance of <see cref="SplitterDistance"/>.</param>
        /// <param name="unitType">The <see cref="SplitterUnitType"/> held by this instance of <see cref="SplitterDistance"/>.</param>
        /// <exception cref="ArgumentException"><paramref name="value"/> is negtive, or equal to <see cref="Double.NegativeInfinity"/> or <see cref="Double.PositiveInfinity"/>.</exception>
        public SplitterDistance(double value, SplitterUnitType unitType)
        {
            if (double.IsInfinity(value) || value < 0)
            {
                throw new ArgumentException(SR.SplitterDistance_Constructor_InvalidValue, "value");
            }

            if (unitType != SplitterUnitType.Pixel && unitType != SplitterUnitType.Star)
            {
                throw new ArgumentException(SR.SplitterDistance_Constructor_InvalidUnitType, "unitType");
            }

            _value    = value;
            _unitType = unitType;
        }
        internal static SplitterLength FromString(string s, CultureInfo cultureInfo)
        {
            string           str      = s.Trim();
            double           num      = 1.0;
            SplitterUnitType unitType = SplitterUnitType.Stretch;

            if (str == "*")
            {
                unitType = SplitterUnitType.Fill;
            }
            else if (str.EndsWith("fixed", StringComparison.OrdinalIgnoreCase))
            {
                unitType = SplitterUnitType.Fixed;
                num      = Convert.ToDouble(str.Substring(0, str.Length - 5), (IFormatProvider)cultureInfo);
            }
            else
            {
                num = Convert.ToDouble(str, (IFormatProvider)cultureInfo);
            }
            return(new SplitterLength(num, unitType));
        }
Exemple #5
0
        private static void FromString(string s, CultureInfo cultureInfo, out double value, out SplitterUnitType unit)
        {
            string str = s.Trim().ToUpperInvariant();

            if (str == "AUTO")
            {
                value = double.NaN;
                unit  = SplitterUnitType.Pixel;
                return;
            }

            if (str == "AUTO*")
            {
                value = double.NaN;
                unit  = SplitterUnitType.Star;
                return;
            }

            value = 0.0;
            unit  = SplitterUnitType.Pixel;
            int    length       = str.Length;
            int    suffixLength = 0;
            double factor       = 1.0;

            for (int i = 0; i < UnitTypeStrings.Length; i++)
            {
                if (str.EndsWith(UnitTypeStrings[i], StringComparison.Ordinal))
                {
                    suffixLength = UnitTypeStrings[i].Length;
                    unit         = UnitTypes[i];
                    break;
                }
            }

            if (suffixLength == 0)
            {
                for (int i = 0; i < PixelUnitStrings.Length; i++)
                {
                    if (str.EndsWith(PixelUnitStrings[i], StringComparison.Ordinal))
                    {
                        suffixLength = PixelUnitStrings[i].Length;
                        factor       = PixelUnitFactors[i];
                        break;
                    }
                }
            }

            if (length == suffixLength && unit == SplitterUnitType.Star)
            {
                value = 1.0;
            }
            else
            {
                string str2 = str.Substring(0, length - suffixLength);
                value = Convert.ToDouble(str2, cultureInfo) * factor;
            }
        }
Exemple #6
0
 public SplitterLength(double value, SplitterUnitType unitType)
 {
     this.unitValue = value;
     this.unitType  = unitType;
 }
        private static void FromString(string s, CultureInfo cultureInfo, out double value, out SplitterUnitType unit)
        {
            string str = s.Trim().ToUpperInvariant();
            if (str == "AUTO")
            {
                value = double.NaN;
                unit = SplitterUnitType.Pixel;
                return;
            }

            if (str == "AUTO*")
            {
                value = double.NaN;
                unit = SplitterUnitType.Star;
                return;
            }

            value = 0.0;
            unit = SplitterUnitType.Pixel;
            int length = str.Length;
            int suffixLength = 0;
            double factor = 1.0;
            for (int i = 0; i < UnitTypeStrings.Length; i ++)
            {
                if (str.EndsWith(UnitTypeStrings[i], StringComparison.Ordinal))
                {
                    suffixLength = UnitTypeStrings[i].Length;
                    unit = UnitTypes[i];
                    break;
                }
            }

            if (suffixLength == 0)
            {
                for (int i = 0; i < PixelUnitStrings.Length; i++)
                {
                    if (str.EndsWith(PixelUnitStrings[i], StringComparison.Ordinal))
                    {
                        suffixLength = PixelUnitStrings[i].Length;
                        factor = PixelUnitFactors[i];
                        break;
                    }
                }
            }

            if (length == suffixLength && unit == SplitterUnitType.Star)
                value = 1.0;
            else
            {
                string str2 = str.Substring(0, length - suffixLength);
                value = Convert.ToDouble(str2, cultureInfo) * factor;
            }
        }