/// <summary> /// Updates the day view. /// </summary> /// <param name="dayView">The day view.</param> public void UpdateDayView(CalendarDayView dayView) { dayView.Marked = _calendarMonthView.IsDayMarkedDelegate != null && _calendarMonthView.IsDayMarkedDelegate(dayView.Date); dayView.Available = _calendarMonthView.IsDateAvailable == null || _calendarMonthView.IsDateAvailable(dayView.Date); dayView.Highlighted = _calendarMonthView.HighlightedDaysOfWeek[(int)dayView.Date.DayOfWeek]; dayView.SelectedDatesMarked = SelectedDatesItems.Any(x => x.Equals(dayView.Date)); }
/// <summary> /// Selects the day view. /// </summary> /// <param name="p">The p.</param> /// <returns><c>true</c> if XXXX, <c>false</c> otherwise.</returns> private bool SelectDayView(CGPoint p) { int index = ((int)p.Y / _calendarMonthView.BoxHeight) * 7 + ((int)p.X / _calendarMonthView.BoxWidth); if (index < 0 || index >= DayTiles.Count) { return(false); } var newSelectedDayView = DayTiles[index]; if (newSelectedDayView == SelectedDayView) { return(false); } if (!newSelectedDayView.Active) { var day = int.Parse(newSelectedDayView.Text); _calendarMonthView.MoveCalendarMonths(day <= 15, true); return(false); } else if ((!newSelectedDayView.Active && !newSelectedDayView.Available)) { return(false); } if (SelectedDayView != null) { if (!SelectedDatesItems.Any(x => x.Date.Equals(SelectedDayView.Date))) { SelectedDayView.Selected = false; } if (SelectedDatesItems.Any(x => x.Date.Equals(SelectedDayView.Date))) { SelectedDayView.SelectedDatesMarked = true; SelectedDayView.Selected = false; } } BringSubviewToFront(newSelectedDayView); newSelectedDayView.Selected = true; SelectedDayView = newSelectedDayView; _calendarMonthView.CurrentSelectedDate = SelectedDayView.Date; SetNeedsDisplay(); return(true); }
/// <summary> /// Builds the grid. /// </summary> public void BuildGrid() { var previousMonth = _currentMonth.AddMonths(-1); var nextMonth = _currentMonth.AddMonths(1); var daysInPreviousMonth = DateTime.DaysInMonth(previousMonth.Year, previousMonth.Month); var daysInMonth = DateTime.DaysInMonth(_currentMonth.Year, _currentMonth.Month); var firstDayOfWeek = (int)CultureInfo.CurrentCulture.DateTimeFormat.FirstDayOfWeek; WeekdayOfFirst = (int)_currentMonth.DayOfWeek; var boxWidth = _calendarMonthView.BoxWidth; var boxHeight = _calendarMonthView.BoxHeight; var numberOfLastMonthDays = (WeekdayOfFirst - firstDayOfWeek); if (numberOfLastMonthDays < 0) { numberOfLastMonthDays = 7 - (WeekdayOfFirst + firstDayOfWeek); } var lead = daysInPreviousMonth - numberOfLastMonthDays + 1; // build last month's days for (var i = 1; i <= numberOfLastMonthDays; i++) { var viewDay = new DateTime(previousMonth.Year, previousMonth.Month, lead); var dayView = new CalendarDayView(_calendarMonthView) { Frame = new CGRect((i - 1) * boxWidth, 0, boxWidth, boxHeight), Date = viewDay, Text = lead.ToString() }; UpdateDayView(dayView); AddSubview(dayView); DayTiles.Add(dayView); lead++; } var position = WeekdayOfFirst - firstDayOfWeek + 1; if (position == 0) { position = 7; } var line = 0; // current month for (int i = 1; i <= daysInMonth; i++) { var viewDay = new DateTime(_currentMonth.Year, _currentMonth.Month, i); var dayView = new CalendarDayView(_calendarMonthView) { Frame = new CGRect( (position - 1) * boxWidth, line * boxHeight, boxWidth, boxHeight), Today = (CurrentDate.Date == viewDay.Date), Text = i.ToString(), Active = true, Tag = i, Selected = (viewDay.Date == _calendarMonthView.CurrentSelectedDate.Date), SelectedDatesMarked = SelectedDatesItems.Any(x => x.Equals(viewDay.Date)), Date = viewDay }; UpdateDayView(dayView); if (dayView.Selected) { SelectedDayView = dayView; } if (dayView.SelectedDatesMarked) { SelectedDayView = dayView; } AddSubview(dayView); DayTiles.Add(dayView); position++; if (position > 7) { position = 1; line++; } } //next month int dayCounter = 1; if (position != 1) { for (int i = position; i < 8; i++) { var viewDay = new DateTime(nextMonth.Year, nextMonth.Month, dayCounter); var dayView = new CalendarDayView(_calendarMonthView) { Frame = new CGRect((i - 1) * boxWidth, line * boxHeight, boxWidth, boxHeight), Text = dayCounter.ToString(), }; dayView.Date = viewDay; UpdateDayView(dayView); AddSubview(dayView); DayTiles.Add(dayView); dayCounter++; } line++; } if (line <= 4) { while (line <= 4) { for (int i = 1; i < 8; i++) { var viewDay = new DateTime(nextMonth.Year, nextMonth.Month, dayCounter); var dayView = new CalendarDayView(_calendarMonthView) { Frame = new CGRect((i - 1) * boxWidth, line * boxHeight, boxWidth, boxHeight), Text = dayCounter.ToString(), }; dayView.Date = viewDay; UpdateDayView(dayView); AddSubview(dayView); DayTiles.Add(dayView); dayCounter++; } line++; } } Frame = new CGRect(Frame.Location, new CGSize(Frame.Width, (line + 1) * boxHeight)); Lines = (position == 1 ? line - 1 : line); if (SelectedDayView != null) { BringSubviewToFront(SelectedDayView); } }