From c1ed5d75d77fcc0d64238b806e7a58732b633449 Mon Sep 17 00:00:00 2001 From: Karsten Heimrich Date: Fri, 29 Aug 2008 22:53:15 +0000 Subject: [PATCH] * special case only the end of the year git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27238 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/kits/shared/CalendarView.cpp | 31 ++++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/src/kits/shared/CalendarView.cpp b/src/kits/shared/CalendarView.cpp index 955db4873f..a05af7fb8f 100644 --- a/src/kits/shared/CalendarView.cpp +++ b/src/kits/shared/CalendarView.cpp @@ -599,6 +599,9 @@ BCalendarView::Date() const bool BCalendarView::SetDate(const BDate &date) { + if (!date.IsValid()) + return false; + return SetDate(date.Year(), date.Month(), date.Day()); } @@ -910,29 +913,27 @@ BCalendarView::_SetupDayNumbers() void BCalendarView::_SetupWeekNumbers() { - BDate date(fYear, fMonth, fDay); + BDate date(fYear, fMonth, 1); if (!date.IsValid()) return; - date.SetDate(fYear, fMonth, 1); - fWeekNumbers[0].SetTo(""); - fWeekNumbers[0] << date.WeekNumber(); + int32 weekNumber = date.WeekNumber(); - for (int32 row = 1; row < 5; ++row) { - date.SetDate(fYear, fMonth, date.Day() + 7); - if (date.Day() > date.DaysInMonth()) - date.SetDate(fYear, fMonth, date.DaysInMonth()); + for (int32 row = 0; row < 6; ++row) { fWeekNumbers[row].SetTo(""); - fWeekNumbers[row] << date.WeekNumber(); + fWeekNumbers[row] << weekNumber++; } - if (fMonth == 12) - date.SetDate(fYear + 1, 1, 5); - else - date.SetDate(fYear, fMonth + 1, 7); + if (fMonth == 12) { + date.SetDate(fYear, fMonth, 29); + weekNumber = date.WeekNumber(); - fWeekNumbers[5].SetTo(""); - fWeekNumbers[5] << date.WeekNumber(); + fWeekNumbers[4].SetTo(""); + fWeekNumbers[5].SetTo(""); + + fWeekNumbers[4] << weekNumber; + fWeekNumbers[5] << ((weekNumber != 1) ? 1L : 2L); + } }