/* Copyright (c) 2002 Carlos Moro Copyright (c) 2002-2003 Hans Petter Bieker This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ // Derived gregorian kde calendar class // Just a schema. #include #include #include #include #include "kcalendarsystemgregorian.h" KCalendarSystemGregorian::KCalendarSystemGregorian(const TDELocale * locale) : KCalendarSystem(locale) { } KCalendarSystemGregorian::~KCalendarSystemGregorian() { } int KCalendarSystemGregorian::year(const TQDate& date) const { return date.year(); } int KCalendarSystemGregorian::monthsInYear( const TQDate & date ) const { Q_UNUSED( date ) return 12; } int KCalendarSystemGregorian::weeksInYear(int year) const { TQDate temp; temp.setYMD(year, 12, 31); // If the last day of the year is in the first week, we have to check the // week before if ( temp.weekNumber() == 1 ) temp = TQT_TQDATE_OBJECT(temp.addDays(-7)); return temp.weekNumber(); } int KCalendarSystemGregorian::weekNumber(const TQDate& date, int * yearNum) const { return date.weekNumber(yearNum); } TQString KCalendarSystemGregorian::monthName(const TQDate& date, bool shortName) const { return monthName(month(date), year(date), shortName); } TQString KCalendarSystemGregorian::monthNamePossessive(const TQDate& date, bool shortName) const { return monthNamePossessive(month(date), year(date), shortName); } TQString KCalendarSystemGregorian::monthName(int month, int year, bool shortName) const { Q_UNUSED(year); if ( shortName ) switch ( month ) { case 1: return locale()->translate("January", "Jan"); case 2: return locale()->translate("February", "Feb"); case 3: return locale()->translate("March", "Mar"); case 4: return locale()->translate("April", "Apr"); case 5: return locale()->translate("May short", "May"); case 6: return locale()->translate("June", "Jun"); case 7: return locale()->translate("July", "Jul"); case 8: return locale()->translate("August", "Aug"); case 9: return locale()->translate("September", "Sep"); case 10: return locale()->translate("October", "Oct"); case 11: return locale()->translate("November", "Nov"); case 12: return locale()->translate("December", "Dec"); } else switch ( month ) { case 1: return locale()->translate("January"); case 2: return locale()->translate("February"); case 3: return locale()->translate("March"); case 4: return locale()->translate("April"); case 5: return locale()->translate("May long", "May"); case 6: return locale()->translate("June"); case 7: return locale()->translate("July"); case 8: return locale()->translate("August"); case 9: return locale()->translate("September"); case 10: return locale()->translate("October"); case 11: return locale()->translate("November"); case 12: return locale()->translate("December"); } return TQString::null; } TQString KCalendarSystemGregorian::monthNamePossessive(int month, int year, bool shortName) const { Q_UNUSED(year); if ( shortName ) switch ( month ) { case 1: return locale()->translate("of January", "of Jan"); case 2: return locale()->translate("of February", "of Feb"); case 3: return locale()->translate("of March", "of Mar"); case 4: return locale()->translate("of April", "of Apr"); case 5: return locale()->translate("of May short", "of May"); case 6: return locale()->translate("of June", "of Jun"); case 7: return locale()->translate("of July", "of Jul"); case 8: return locale()->translate("of August", "of Aug"); case 9: return locale()->translate("of September", "of Sep"); case 10: return locale()->translate("of October", "of Oct"); case 11: return locale()->translate("of November", "of Nov"); case 12: return locale()->translate("of December", "of Dec"); } else switch ( month ) { case 1: return locale()->translate("of January"); case 2: return locale()->translate("of February"); case 3: return locale()->translate("of March"); case 4: return locale()->translate("of April"); case 5: return locale()->translate("of May long", "of May"); case 6: return locale()->translate("of June"); case 7: return locale()->translate("of July"); case 8: return locale()->translate("of August"); case 9: return locale()->translate("of September"); case 10: return locale()->translate("of October"); case 11: return locale()->translate("of November"); case 12: return locale()->translate("of December"); } return TQString::null; } bool KCalendarSystemGregorian::setYMD(TQDate & date, int y, int m, int d) const { // We don't want Qt to add 1900 to them if ( y >= 0 && y <= 99 ) return false; // TQDate supports gregorian internally return date.setYMD(y, m, d); } TQDate KCalendarSystemGregorian::addYears(const TQDate & date, int nyears) const { return TQT_TQDATE_OBJECT(date.addYears(nyears)); } TQDate KCalendarSystemGregorian::addMonths(const TQDate & date, int nmonths) const { return TQT_TQDATE_OBJECT(date.addMonths(nmonths)); } TQDate KCalendarSystemGregorian::addDays(const TQDate & date, int ndays) const { return TQT_TQDATE_OBJECT(date.addDays(ndays)); } TQString KCalendarSystemGregorian::weekDayName(int col, bool shortName) const { // ### Should this really be different to each calendar system? Or are we // only going to support weeks with 7 days? return KCalendarSystem::weekDayName(col, shortName); } TQString KCalendarSystemGregorian::weekDayName(const TQDate& date, bool shortName) const { return weekDayName(dayOfWeek(date), shortName); } int KCalendarSystemGregorian::dayOfWeek(const TQDate& date) const { return date.dayOfWeek(); } int KCalendarSystemGregorian::dayOfYear(const TQDate & date) const { return date.dayOfYear(); } int KCalendarSystemGregorian::daysInMonth(const TQDate& date) const { return date.daysInMonth(); } int KCalendarSystemGregorian::minValidYear() const { return 1753; // TQDate limit } int KCalendarSystemGregorian::maxValidYear() const { return 8000; // TQDate limit } int KCalendarSystemGregorian::day(const TQDate& date) const { return date.day(); } int KCalendarSystemGregorian::month(const TQDate& date) const { return date.month(); } int KCalendarSystemGregorian::daysInYear(const TQDate& date) const { return date.daysInYear(); } int KCalendarSystemGregorian::weekDayOfPray() const { return 7; // sunday } TQString KCalendarSystemGregorian::calendarName() const { return TQString::fromLatin1("gregorian"); } bool KCalendarSystemGregorian::isLunar() const { return false; } bool KCalendarSystemGregorian::isLunisolar() const { return false; } bool KCalendarSystemGregorian::isSolar() const { return true; } int KCalendarSystemGregorian::yearStringToInteger(const TQString & sNum, int & iLength) const { int iYear; iYear = KCalendarSystem::yearStringToInteger(sNum, iLength); // Qt treats a year in the range 0-100 as 1900-1999. // It is nicer for the user if we treat 0-68 as 2000-2068 if (iYear < 69) iYear += 2000; else if (iYear < 100) iYear += 1900; return iYear; }