Пример #1
0
 private void MonthsPanel_SelectionChanged(object sender, SelectionChangedEventArgs e)
 {
     if (e.AddedItems.Count > 0)
     {
         MonthDescriptor descriptor = (MonthDescriptor)e.AddedItems[0];
         this.DaysPanel.ItemsSource = descriptor.ChildDescriptors;
     }
 }
Пример #2
0
        /// <summary>
        /// Initializes the specified minimum date.
        /// </summary>
        /// <param name="minDate">The minimum date.</param>
        /// <param name="maxDate">The maximum date.</param>
        /// <param name="highlightedDaysOfWeek">The highlighted days of week.</param>
        /// <returns>FluentInitializer.</returns>
        /// <exception cref="Java.Lang.IllegalArgumentException">
        /// minDate and maxDate must be non-zero.  +
        ///                 Debug(minDate, maxDate)
        /// or
        /// minDate must be before maxDate.  +
        ///                 Debug(minDate, maxDate)
        /// </exception>
        public EFluentInitializer Init(DateTime minDate, DateTime maxDate, DayOfWeek[] highlightedDaysOfWeek)
        {
            if (minDate == DateTime.MinValue || maxDate == DateTime.MinValue)
            {
                throw new IllegalArgumentException("minDate and maxDate must be non-zero. " +
                                                   Debug(minDate, maxDate));
            }
            if (minDate.CompareTo(maxDate) > 0)
            {
                throw new IllegalArgumentException("minDate must be before maxDate. " +
                                                   Debug(minDate, maxDate));
            }

            HighlighDaysOfWeeks(highlightedDaysOfWeek);

            Mode = SelectionMode.Single;
            //Clear out any previously selected dates/cells.
            SelectedCals.Clear();
            SelectedCells.Clear();
            _highlightedCals.Clear();
            _highlightedCells.Clear();

            //Clear previous state.
            Cells.Clear();
            Months.Clear();
            MinDate = minDate;
            MaxDate = maxDate;
            MinDate = SetMidnight(MinDate);
            MaxDate = SetMidnight(MaxDate);

            // maxDate is exclusive: bump back to the previous day so if maxDate is the first of a month,
            // We don't accidentally include that month in the view.
            if (MaxDate.Day == 1)
            {
                MaxDate = MaxDate.AddMinutes(-1);
            }

            //Now iterate between minCal and maxCal and build up our list of months to show.
            _monthCounter = MinDate;
            int maxMonth = MaxDate.Month;
            int maxYear  = MaxDate.Year;

            while ((_monthCounter.Month <= maxMonth ||
                    _monthCounter.Year < maxYear) &&
                   _monthCounter.Year < maxYear + 1)
            {
                var month = new MonthDescriptor(_monthCounter.Month, _monthCounter.Year, _monthCounter,
                                                _monthCounter.ToString(MonthNameFormat), _styleDescriptor);
                Cells.Add(GetMonthCells(month, _monthCounter));
                Logr.D("Adding month {0}", month);
                Months.Add(month);
                _monthCounter = _monthCounter.AddMonths(1);
            }

            ValidateAndUpdate();
            return(new EFluentInitializer(this));
        }
Пример #3
0
        /// <summary>
        /// Gets the month cells.
        /// </summary>
        /// <param name="month">The month.</param>
        /// <param name="startCal">The start cal.</param>
        /// <returns>List&lt;List&lt;MonthCellDescriptor&gt;&gt;.</returns>
        internal List <List <MonthCellDescriptor> > GetMonthCells(MonthDescriptor month, DateTime startCal)
        {
            var cells          = new List <List <MonthCellDescriptor> >();
            var cal            = new DateTime(startCal.Year, startCal.Month, 1);
            var firstDayOfWeek = (int)cal.DayOfWeek;

            cal = cal.AddDays((int)CultureInfo.CurrentCulture.DateTimeFormat.FirstDayOfWeek - firstDayOfWeek);

            var minSelectedCal = GetMinDate(SelectedCals);
            var maxSelectedCal = GetMaxDate(SelectedCals);

            while ((cal.Month < month.Month + 1 || cal.Year < month.Year) &&
                   cal.Year <= month.Year)
            {
                Logr.D("Building week row starting at {0}", cal);
                var weekCells = new List <MonthCellDescriptor>();
                cells.Add(weekCells);
                for (int i = 0; i < 7; i++)
                {
                    var  date           = cal;
                    bool isCurrentMonth = cal.Month == month.Month;
                    bool isSelected     = isCurrentMonth && ContatinsDate(SelectedCals, cal);
                    bool isSelectable   = isCurrentMonth && IsBetweenDates(cal, MinDate, MaxDate);
                    bool isToday        = IsSameDate(cal, Today);
                    bool isHighlighted  = ContatinsDate(_highlightedCals, cal) || _hlighlightedDaysOfWeek[(int)cal.DayOfWeek];
                    int  value          = cal.Day;

                    var rangeState = RangeState.None;
                    if (SelectedCals.Count > 1)
                    {
                        if (IsSameDate(minSelectedCal, cal))
                        {
                            rangeState = RangeState.First;
                        }
                        else if (IsSameDate(maxSelectedCal, cal))
                        {
                            rangeState = RangeState.Last;
                        }
                        else if (IsBetweenDates(cal, minSelectedCal, maxSelectedCal))
                        {
                            rangeState = RangeState.Middle;
                        }
                    }

                    weekCells.Add(new MonthCellDescriptor(date, isCurrentMonth, isSelectable, isSelected,
                                                          isToday, isHighlighted, value, rangeState, _styleDescriptor));
                    cal = cal.AddDays(1);
                }
            }
            return(cells);
        }
Пример #4
0
 /// <summary>
 /// Determines whether [is same month] [the specified cal].
 /// </summary>
 /// <param name="cal">The cal.</param>
 /// <param name="month">The month.</param>
 /// <returns><c>true</c> if [is same month] [the specified cal]; otherwise, <c>false</c>.</returns>
 internal static bool IsSameMonth(DateTime cal, MonthDescriptor month)
 {
     return(cal.Month == month.Month && cal.Year == month.Year);
 }