From f0932941dd2200fa0c5e6afae44d1edeb677355d Mon Sep 17 00:00:00 2001 From: Michael Pfeiffer Date: Sat, 30 Aug 2008 16:13:05 +0000 Subject: [PATCH] Simplified initialization of week days for a month. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27243 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- headers/private/shared/DateTime.h | 2 ++ src/kits/shared/CalendarView.cpp | 20 +++++--------------- src/kits/shared/DateTime.cpp | 27 +++++++++++++++++++++++++++ 3 files changed, 34 insertions(+), 15 deletions(-) diff --git a/headers/private/shared/DateTime.h b/headers/private/shared/DateTime.h index 66a1a94e5d..4ff1421ecb 100755 --- a/headers/private/shared/DateTime.h +++ b/headers/private/shared/DateTime.h @@ -50,6 +50,8 @@ class BDate { static BDate CurrentDate(time_type type); bool SetDate(int32 year, int32 month, int32 day); + + void AddDays(int32 days); int32 Day() const; int32 Year() const; diff --git a/src/kits/shared/CalendarView.cpp b/src/kits/shared/CalendarView.cpp index a05af7fb8f..5e1899c20c 100644 --- a/src/kits/shared/CalendarView.cpp +++ b/src/kits/shared/CalendarView.cpp @@ -909,7 +909,6 @@ BCalendarView::_SetupDayNumbers() } } - void BCalendarView::_SetupWeekNumbers() { @@ -917,22 +916,13 @@ BCalendarView::_SetupWeekNumbers() if (!date.IsValid()) return; - int32 weekNumber = date.WeekNumber(); - + // date on Thursday determines week number (ISO 8601) + date.AddDays(4 - date.DayOfWeek()); + for (int32 row = 0; row < 6; ++row) { fWeekNumbers[row].SetTo(""); - fWeekNumbers[row] << weekNumber++; - } - - if (fMonth == 12) { - date.SetDate(fYear, fMonth, 29); - weekNumber = date.WeekNumber(); - - fWeekNumbers[4].SetTo(""); - fWeekNumbers[5].SetTo(""); - - fWeekNumbers[4] << weekNumber; - fWeekNumbers[5] << ((weekNumber != 1) ? 1L : 2L); + fWeekNumbers[row] << date.WeekNumber(); + date.AddDays(7); } } diff --git a/src/kits/shared/DateTime.cpp b/src/kits/shared/DateTime.cpp index 0eb4b4174b..2a03d3d5d1 100755 --- a/src/kits/shared/DateTime.cpp +++ b/src/kits/shared/DateTime.cpp @@ -175,6 +175,33 @@ BDate::SetDate(int32 year, int32 month, int32 day) } +void +BDate::AddDays(int32 days) +{ + days += Day(); + if (days > 0) { + while (days > DaysInMonth()) { + days -= DaysInMonth(); + fMonth ++; + if (fMonth == 13) { + fMonth = 1; + fYear ++; + } + } + } else { + while (days <= 0) { + fMonth --; + if (fMonth == 0) { + fMonth = 12; + fYear --; + } + days += DaysInMonth(); + } + } + fDay = days; +} + + int32 BDate::Day() const {