Exemple #1
0
        /// <summary>
        /// Возвращает строковое представления таймера используя переданные атрибуты.
        /// </summary>
        /// <param name="attributes">Атрибуты таймера.</param>
        public string ToString(TimerAttributes attributes)
        {
            if (attributes == null)
            {
                return(ToString());
            }

            if (attributes.IsSecondaryTimer && Minutes == 0 && Seconds == 0 && Fractions == 0)
            {
                return(String.Empty);
            }

            if (attributes.IsLongTimeFormat)
            {
                if (!IsFinishedOrStarted(attributes) &&
                    (attributes.HasFractionAlways ||
                     attributes.HasFractionOnLastMinute && IsLastMinute(attributes) ||
                     attributes.HasFractionWhenPaused && !IsActive))
                {
                    var format = IsTenthOnly ? "{0:D2}:{1:D2}.{2}" : "{0:D2}:{1:D2}.{2:D2}";
                    return(String.Format(format, Minutes, Seconds, Fractions));
                }

                return(String.Format("{0:D2}:{1:D2}", Minutes, Seconds));
            }

            if (!attributes.Increase && attributes.HasFractionOnLastMinute && IsLastMinute(attributes))
            {
                return(String.Format(IsTenthOnly ? "{0:D2}.{1}" : "{0:D2}.{1:D2}", Seconds, Fractions));
            }

            return(ToString());
        }
Exemple #2
0
        private bool IsLastMinute(TimerAttributes attributes)
        {
            if (attributes.Increase && attributes.Duration == 0)
            {
                return(false);
            }

            return(attributes.Increase && (attributes.Duration - (Minutes * 60 + Seconds)) < 60 ||
                   !attributes.Increase && Minutes == 0 && Seconds < 60);
        }
Exemple #3
0
        private bool IsFinishedOrStarted(TimerAttributes attributes)
        {
            if (Minutes == 0 && Seconds == 0 && Fractions == 0)
            {
                return(true);
            }

            if (attributes.Increase && attributes.Duration == 0)
            {
                return(false);
            }

            return(attributes.Increase && (attributes.Duration - (Minutes * 60 + Seconds)) == 0 && Fractions == 0 ||
                   !attributes.Increase && (Minutes * 60 + Seconds) == attributes.Duration && Fractions == 0);
        }
Exemple #4
0
        internal ProviderInfo(byte[] data)
        {
            Contract.Requires(data != null);
            Contract.Requires(data.Length >= TimersOfs);
            Id = BitConverter.ToUInt16(data, IdOfs);
            var timerCount = data[TimerCountOfs];
            var timers     = new List <TimerAttributes>(timerCount);

            for (var i = TimersOfs; i < data.Length; i += TimerAttributes.Length)
            {
                var timer = new TimerAttributes(data, i);
                timers.Add(timer);
            }

            _timers = timers.ToArray();
        }