public FluentInitializer Init(DateTime minDate, DateTime maxDate) { 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)); } 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. 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)); Cells.Add(GetMonthCells(month, _monthCounter)); Logr.D("Adding month {0}", month); Months.Add(month); _monthCounter = _monthCounter.AddMonths(1); } ValidateAndUpdate(); return(new FluentInitializer(this)); }
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); 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)); cal = cal.AddDays(1); } } return(cells); }
public void Init(MonthDescriptor month, List <List <MonthCellDescriptor> > cells) { Logr.D("Initializing MonthView ({0:d}) for {1}", GetHashCode(), month); var stopWatch = new Stopwatch(); stopWatch.Start(); _title.Text = month.Label; int numOfRows = cells.Count; _grid.NumRows = numOfRows; for (int i = 0; i < 6; i++) { var weekRow = (CalendarRowView)_grid.GetChildAt(i + 1); weekRow.ClickHandler = _clickHandler; if (i < numOfRows) { weekRow.Visibility = ViewStates.Visible; var week = cells[i]; for (int c = 0; c < week.Count; c++) { var cell = week[c]; var cellView = (CalendarCellView)weekRow.GetChildAt(c); cellView.Text = cell.Value.ToString(); cellView.Enabled = cell.IsCurrentMonth; cellView.Selectable = cell.IsSelectable; cellView.Selected = cell.IsSelected; cellView.IsCurrentMonth = cell.IsCurrentMonth; cellView.IsToday = cell.IsToday; cellView.IsHighlighted = cell.IsHighlighted; cellView.RangeState = cell.RangeState; cellView.Tag = cell; } } else { weekRow.Visibility = ViewStates.Gone; } } stopWatch.Stop(); Logr.D("MonthView.Init took {0} ms", stopWatch.ElapsedMilliseconds); }
public void Init(MonthDescriptor month, List<List<MonthCellDescriptor>> cells) { Logr.D("Initializing MonthView ({0:d}) for {1}", GetHashCode(), month); var stopWatch = new Stopwatch(); stopWatch.Start(); _title.Text = month.Label; int numOfRows = cells.Count; _grid.NumRows = numOfRows; for (int i = 0; i < 6; i++) { var weekRow = (CalendarRowView)_grid.GetChildAt(i + 1); weekRow.ClickHandler = _clickHandler; if (i < numOfRows) { weekRow.Visibility = ViewStates.Visible; var week = cells[i]; for (int c = 0; c < week.Count; c++) { var cell = week[c]; var cellView = (CalendarCellView)weekRow.GetChildAt(c); cellView.Text = cell.Value.ToString(); cellView.Enabled = cell.IsCurrentMonth; cellView.Selectable = cell.IsSelectable; cellView.Selected = cell.IsSelected; cellView.IsCurrentMonth = cell.IsCurrentMonth; cellView.IsToday = cell.IsToday; cellView.IsHighlighted = cell.IsHighlighted; cellView.RangeState = cell.RangeState; cellView.Tag = cell; } } else { weekRow.Visibility = ViewStates.Gone; } } stopWatch.Stop(); Logr.D("MonthView.Init took {0} ms", stopWatch.ElapsedMilliseconds); }
internal static bool IsSameMonth(DateTime cal, MonthDescriptor month) { return (cal.Month == month.Month && cal.Year == month.Year); }
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); 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)); cal = cal.AddDays(1); } } return cells; }
public FluentInitializer Init(DateTime minDate, DateTime maxDate) { 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)); } 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. 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)); Cells.Add(GetMonthCells(month, _monthCounter)); Logr.D("Adding month {0}", month); Months.Add(month); _monthCounter = _monthCounter.AddMonths(1); } ValidateAndUpdate(); return new FluentInitializer(this); }
internal static bool IsSameMonth(DateTime cal, MonthDescriptor month) { return(cal.Month == month.Month && cal.Year == month.Year); }