protected void UIApplyRangedObject(IRanged ranged)
        {
            this.trackBarStart.Enabled = (ranged != null);
            this.trackBarEnd.Enabled   = (ranged != null);

            if (ranged != null)
            {
                this.trackBarStart.Maximum = ranged.MaxRange;
                this.trackBarEnd.Maximum   = ranged.MaxRange;

                this.trackBarStart.Value = ranged.StartIndex;
                this.trackBarEnd.Value   = ranged.StartIndex + ranged.Count;
            }
        }
        protected void UIApplyRangedObject(IRanged ranged)
        {
            this.trackBarStart.Enabled = (ranged != null);
            this.trackBarEnd.Enabled = (ranged != null);

            if (ranged != null)
            {
                this.trackBarStart.Maximum = ranged.MaxRange;
                this.trackBarEnd.Maximum = ranged.MaxRange;

                this.trackBarStart.Value = ranged.StartIndex;
                this.trackBarEnd.Value = ranged.StartIndex + ranged.Count;
            }
        }
Example #3
0
        /// <summary>
        /// Функция выполняет коррекцию конечного значения интервала для заданного объекта.
        /// Коррекция выполняется согласно принятым для интервальных контролов правилам, а именно,
        /// что конечное значение не должно меньше начального значение или минимума и больше максимума
        /// </summary>
        /// <typeparam name="T">Тип значения</typeparam>
        /// <typeparam name="TInterval">Тип интервала</typeparam>
        /// <param name="ranged">Корректируемый объект</param>
        /// <param name="value">Проверяемое значение</param>
        /// <returns><paramref name="value"/>, либо скорректированное значение</returns>
        public static object CoerceRangeEndValue <T, TInterval>(IRanged <T, TInterval> ranged, T value)
        {
            if (ranged == null)
            {
                return(value);
            }

            double?coercedValue = null;
            double doubleValue  = ranged.ValueToDouble(value);

            // порядок проверок важен: сначала проверяем размер интервала,
            // т.к. его "подгонка" под минимальное значение может "испортить" более важные ограничения.
            double startValue    = ranged.ValueToDouble(ranged.StartValue);
            double minRangeValue = ranged.IntervalToDouble(ranged.MinRangeValue);
            double newRangeValue = doubleValue - startValue;
            bool   isSingleValue = ranged.IsSingleValue;

            if (!isSingleValue && DoubleUtil.LessThan(newRangeValue, minRangeValue))
            {
                coercedValue = doubleValue = minRangeValue + startValue;
            }

            double maximum = ranged.ValueToDouble(ranged.Maximum);

            if (doubleValue > maximum)
            {
                coercedValue = doubleValue = maximum;
            }

            if (!isSingleValue && doubleValue < startValue)
            {
                coercedValue = startValue;
            }

            if (coercedValue.HasValue)
            {
                return(ranged.DoubleToValue(coercedValue.Value));
            }
            return(value);
        }