summaryrefslogtreecommitdiffabout
path: root/microkde/kcalendarsystemgregorian.cpp
authorzautrix <zautrix>2004-06-26 19:01:18 (UTC)
committer zautrix <zautrix>2004-06-26 19:01:18 (UTC)
commitb9aad1f15dc600e4dbe4c62d3fcced6363188ba3 (patch) (side-by-side diff)
tree2c3d4004fb21c72cba65793859f9bcd8ffd3a49c /microkde/kcalendarsystemgregorian.cpp
downloadkdepimpi-b9aad1f15dc600e4dbe4c62d3fcced6363188ba3.zip
kdepimpi-b9aad1f15dc600e4dbe4c62d3fcced6363188ba3.tar.gz
kdepimpi-b9aad1f15dc600e4dbe4c62d3fcced6363188ba3.tar.bz2
Initial revision
Diffstat (limited to 'microkde/kcalendarsystemgregorian.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--microkde/kcalendarsystemgregorian.cpp359
1 files changed, 359 insertions, 0 deletions
diff --git a/microkde/kcalendarsystemgregorian.cpp b/microkde/kcalendarsystemgregorian.cpp
new file mode 100644
index 0000000..7c5b62a
--- a/dev/null
+++ b/microkde/kcalendarsystemgregorian.cpp
@@ -0,0 +1,359 @@
+/*
+ Copyright (c) 2002 Carlos Moro <cfmoro@correo.uniovi.es>
+ Copyright (c) 2002 Hans Petter Bieker <bieker@kde.org>
+
+ 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., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
+*/
+
+// Derived gregorian kde calendar class
+// Just a schema.
+
+#include <qdatetime.h>
+#include <qstring.h>
+
+#include <klocale.h>
+#include <kdebug.h>
+
+#include "kcalendarsystemgregorian.h"
+
+KCalendarSystemGregorian::KCalendarSystemGregorian(const KLocale * locale)
+ : KCalendarSystem(locale)
+{
+ kdDebug(5400) << "Created gregorian calendar" << endl;
+}
+
+KCalendarSystemGregorian::~KCalendarSystemGregorian()
+{
+}
+
+int KCalendarSystemGregorian::year(const QDate& date) const
+{
+// kdDebug(5400) << "Gregorian year..." << endl;
+ return date.year();
+}
+
+int KCalendarSystemGregorian::monthsInYear( const QDate & ) const
+{
+// kdDebug(5400) << "Gregorian monthsInYear" << endl;
+
+ return 12;
+}
+
+int KCalendarSystemGregorian::weeksInYear(int year) const
+{
+#if QT_VERSION >= 300
+ QDate 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.addDays(-7);
+
+ return temp.weekNumber();
+#else
+ return 52;
+#endif
+}
+
+int KCalendarSystemGregorian::weekNumber(const QDate& date,
+ int * yearNum) const
+{
+#if QT_VERSION >= 300
+ return date.weekNumber(yearNum);
+#else
+ return 1;
+#endif
+}
+
+QString KCalendarSystemGregorian::monthName(const QDate& date,
+ bool shortName) const
+{
+ return monthName(month(date), shortName);
+}
+
+QString KCalendarSystemGregorian::monthNamePossessive(const QDate& date, bool shortName) const
+{
+ return monthNamePossessive(month(date), shortName);
+}
+
+QString KCalendarSystemGregorian::monthName(int month, bool shortName) const
+{
+// kdDebug(5400) << "Gregorian getMonthName" << endl;
+
+ 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 QString::null;
+}
+
+QString KCalendarSystemGregorian::monthNamePossessive(int month,
+ bool shortName) const
+{
+// kdDebug(5400) << "Gregorian getMonthName" << endl;
+
+ 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 QString::null;
+}
+
+bool KCalendarSystemGregorian::setYMD(QDate & 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;
+
+ // QDate supports gregorian internally
+ return date.setYMD(y, m, d);
+}
+
+QDate KCalendarSystemGregorian::addYears(const QDate & date, int nyears) const
+{
+#if QT_VERSION >= 300
+ return date.addYears(nyears);
+#else
+ int year = date.year() + nyears;
+ int month = date.month();
+ int day = date.day();
+ QDate newDate( year, month, 1 );
+ if ( day > newDate.daysInMonth() ) day = newDate.daysInMonth();
+ return QDate( year, month, day );
+#endif
+}
+
+QDate KCalendarSystemGregorian::addMonths(const QDate & date, int nmonths) const
+{
+#if QT_VERSION >= 300
+ return date.addMonths(nmonths);
+#else
+ int month = date.month();
+ int nyears;
+ if ( nmonths >= 0 ) {
+ month += nmonths;
+ nyears = ( month - 1 ) / 12;
+ month = ( ( month - 1 ) % 12 ) + 1;
+ } else {
+ nyears = nmonths / 12;
+ // nmonths += nyears * 12;
+ nmonths = nmonths % 12;
+ month += nmonths;
+ if ( month <= 0 ) {
+ month += 12;
+ --nyears;
+ }
+ }
+ int year = date.year() + nyears;
+ int day = date.day();
+ QDate newDate( year, month, 1 );
+ if ( day > newDate.daysInMonth() ) day = newDate.daysInMonth();
+ return QDate( year, month, day );
+#endif
+}
+
+QDate KCalendarSystemGregorian::addDays(const QDate & date, int ndays) const
+{
+ return date.addDays(ndays);
+}
+
+QString 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?
+
+ //kdDebug(5400) << "Gregorian wDayName" << endl;
+ return locale()->weekDayName(col, shortName);
+}
+
+QString KCalendarSystemGregorian::weekDayName(const QDate& date, bool shortName) const
+{
+ return weekDayName(dayOfWeek(date), shortName);
+}
+
+
+int KCalendarSystemGregorian::dayOfWeek(const QDate& date) const
+{
+ return date.dayOfWeek();
+}
+
+int KCalendarSystemGregorian::dayOfYear(const QDate & date) const
+{
+ return date.dayOfYear();
+}
+
+int KCalendarSystemGregorian::daysInMonth(const QDate& date) const
+{
+// kdDebug(5400) << "Gregorian daysInMonth" << endl;
+ return date.daysInMonth();
+}
+
+int KCalendarSystemGregorian::minValidYear() const
+{
+ return 1753; // QDate limit
+}
+
+int KCalendarSystemGregorian::maxValidYear() const
+{
+ return 8000; // QDate limit
+}
+
+int KCalendarSystemGregorian::day(const QDate& date) const
+{
+ return date.day();
+}
+
+int KCalendarSystemGregorian::month(const QDate& date) const
+{
+ return date.month();
+}
+
+int KCalendarSystemGregorian::daysInYear(const QDate& date) const
+{
+ return date.daysInYear();
+}
+
+int KCalendarSystemGregorian::weekDayOfPray() const
+{
+ return 7; // sunday
+}
+
+QString KCalendarSystemGregorian::calendarName() const
+{
+ return QString::fromLatin1("gregorian");
+}
+
+bool KCalendarSystemGregorian::isLunar() const
+{
+ return false;
+}
+
+bool KCalendarSystemGregorian::isLunisolar() const
+{
+ return false;
+}
+
+bool KCalendarSystemGregorian::isSolar() const
+{
+ return true;
+}