From kde-commits Mon May 02 00:01:34 2005 From: Charles Samuels Date: Mon, 02 May 2005 00:01:34 +0000 To: kde-commits Subject: kdelibs/kdeui Message-Id: <20050502000134.C1CB03EF () office ! kde ! org> X-MARC-Message: https://marc.info/?l=kde-commits&m=111499211908131 CVS commit by charles: Use calendar system specific date to calcuate week numbers, so week numbers work for non-Gregorian systems as well. Tested on Gregorian, Hijri, Hebrew, and Jalali calender systems and seems to work fine. At least Gregorian works as before, but now the other calendar systems do as well. This patch contributed by liucougar@gmail.com. Thank you. CCMAIL:liucougar@gmail.com M +15 -7 kdatepicker.cpp 1.74 --- kdelibs/kdeui/kdatepicker.cpp #1.73:1.74 @@ -75,14 +75,22 @@ void KDatePicker::fillWeeksCombo(const Q // This of course can be a list like 53,1,2..52 - QDate day(date.year(), 1, 1); + QDate day; + int year = calendar->year(date); + calendar->setYMD(day, year, 1, 1); int lastMonth = calendar->monthsInYear(day); - QDate lastDay(date.year(), lastMonth, calendar->daysInMonth(QDate(date.year(), lastMonth, 1))); + QDate lastDay, firstDayOfLastMonth; + calendar->setYMD(firstDayOfLastMonth, year, lastMonth, 1); + calendar->setYMD(lastDay, year, lastMonth, calendar->daysInMonth(firstDayOfLastMonth)); - for (; day <= lastDay; day = calendar->addDays(day, 7 /*calendar->daysOfWeek()*/) ) + for (; day <= lastDay ; day = calendar->addDays(day, 7 /*calendar->daysOfWeek()*/) ) { - int year = 0; QString week = i18n("Week %1").arg(calendar->weekNumber(day, &year)); - if ( year != date.year() ) week += "*"; // show that this is a week from a different year + if ( year != calendar->year(day) ) week += "*"; // show that this is a week from a different year d->selectWeek->insertItem(week); + + // make sure that the week of the lastDay is always inserted: in Chinese calendar + // system, this is not always the case + if(day < lastDay && day.daysTo(lastDay) < 7 && calendar->weekNumber(day) != calendar->weekNumber(lastDay)) + day = lastDay.addDays(-7); } } @@ -246,7 +254,7 @@ KDatePicker::dateChangedSlot(QDate date) // calculate the item num in the week combo box; normalize selected day so as if 1.1. is the first day of the week - QDate firstDay(date.year(), 1, 1); + QDate firstDay; + calendar->setYMD(firstDay, calendar->year(date), 1, 1); d->selectWeek->setCurrentItem((calendar->dayOfYear(date) + calendar->dayOfWeek(firstDay) - 2) / 7/*calendar->daysInWeek()*/); - selectYear->setText(calendar->yearString(date, false));