Пример #1
0
        private void UpdateMonthSize()
        {
            //One row of day names plus 31 possible numbers
            string[] strs      = new string[7 + 31];
            int      maxWidth  = 0;
            int      maxHeight = 0;

            for (int i = 0; i < 7; i++)
            {
                strs[i] = ViewStart.AddDays(i).ToString(DayNamesFormat).Substring(0, DayNamesLength);
            }

            for (int i = 7; i < strs.Length; i++)
            {
                strs[i] = (i - 6).ToString();
            }

            Font f = new Font(Font, FontStyle.Bold);

            for (int i = 0; i < strs.Length; i++)
            {
                Size s = TextRenderer.MeasureText(strs[i], f);
                maxWidth  = Math.Max(s.Width, maxWidth);
                maxHeight = Math.Max(s.Height, maxHeight);
            }

            maxWidth  += ItemPadding.Horizontal;
            maxHeight += ItemPadding.Vertical;

            _daySize   = new Size(maxWidth, maxHeight);
            _monthSize = new Size(maxWidth * 7, maxHeight * 7 + maxHeight * (DayNamesVisible ? 1 : 0));
        }
Пример #2
0
        /// <summary>
        /// Updates the
        /// </summary>
        private void UpdateDaysAndWeeks()
        {
            TimeSpan span    = (new DateTime(ViewEnd.Year, ViewEnd.Month, ViewEnd.Day, 23, 59, 59)).Subtract(ViewStart.Date);
            int      preDays = 0;

            span = span.Add(new TimeSpan(0, 0, 0, 1, 0));

            if (span.Days < 1 || span.Days > MaximumViewDays)
            {
                throw new Exception("Days between ViewStart and ViewEnd should be between 1 and MaximumViewDays");
            }

            if (span.Days > MaximumFullDays)
            {
                SetDaysMode(CalendarDaysMode.Short);
                preDays = (new int[] { 0, 1, 2, 3, 4, 5, 6 })[(int)ViewStart.DayOfWeek] - (int)FirstDayOfWeek;
                span    = span.Add(new TimeSpan(preDays, 0, 0, 0));

                while (span.Days % 7 != 0)
                {
                    span = span.Add(new TimeSpan(1, 0, 0, 0));
                }
            }
            else
            {
                SetDaysMode(CalendarDaysMode.Expanded);
            }

            _days = new CalendarDay[span.Days];

            for (int i = 0; i < Days.Length; i++)
            {
                Days[i] = new CalendarDay(this, ViewStart.AddDays(-preDays + i), i);
            }


            //Weeks
            if (DaysMode == CalendarDaysMode.Short)
            {
                List <CalendarWeek> weeks = new List <CalendarWeek>();

                for (int i = 0; i < Days.Length; i++)
                {
                    if (Days[i].Date.DayOfWeek == FirstDayOfWeek)
                    {
                        weeks.Add(new CalendarWeek(this, Days[i].Date));
                    }
                }

                _weeks = weeks.ToArray();
            }
            else
            {
                _weeks = new CalendarWeek[] { };
            }

            UpdateHighlights();
        }
Пример #3
0
 /// <summary>
 /// Scrolls the calendar using the specified delta
 /// </summary>
 /// <param name="delta"></param>
 private void ScrollCalendar(int delta)
 {
     if (delta < 0)
     {
         SetViewRange(ViewStart.AddDays(7), ViewEnd.AddDays(7));
     }
     else
     {
         SetViewRange(ViewStart.AddDays(-7), ViewEnd.AddDays(-7));
     }
 }