Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

chrisholiday.cpp

Go to the documentation of this file.
00001 #include "chrisholiday.h"
00002 
00003 #include <qobject.h>
00004 #include <qpe/event.h>
00005 
00006 QString ChrisHoliday::description()
00007 {
00008     return QObject::tr("Christian holidays","holidays");
00009 }
00010 
00011 QStringList ChrisHoliday::entries(const QDate&aDate)
00012 {
00013     QStringList ret;
00014     ret+=_internallist.entries(aDate);
00015     calcit(aDate.year());
00016     tDayMap::Iterator it = _days.find(aDate);
00017     if (it!=_days.end()) {
00018         ret+=*it;
00019     }
00020 
00021     return ret;
00022 }
00023 
00024 QStringList ChrisHoliday::entries(unsigned year, unsigned month, unsigned day)
00025 {
00026     return entries(QDate(year,month,day));
00027 }
00028 
00029 void ChrisHoliday::calcit(int year)
00030 {
00031     if (year==_lastyear) return;
00032     _lastyear = year;
00033     _days.clear();
00034     calc_easter();
00035     calc_christmas();
00036 }
00037 
00038 void ChrisHoliday::calc_christmas()
00039 {
00040     QDate cday(_lastyear,12,24);
00041     int diff;
00042     if ( (diff=cday.dayOfWeek())!=7) {
00043         cday=cday.addDays(-diff);
00044         _days[cday].append(QObject::tr("4. Advent","holidays"));
00045     }
00046     _days[cday.addDays(-7)].append(QObject::tr("3. Advent","holidays"));
00047     _days[cday.addDays(-14)].append(QObject::tr("2. Advent","holidays"));
00048     _days[cday.addDays(-21)].append(QObject::tr("1. Advent","holidays"));
00049 }
00050 
00051 void ChrisHoliday::calc_easter()
00052 {
00053   unsigned long n = 0;
00054   unsigned long p = 0;
00055 
00056   if ( _lastyear > 1582 ) {
00057     unsigned long a = _lastyear%19;
00058     unsigned long b = _lastyear/100;
00059     unsigned long c = _lastyear%100;
00060     unsigned long d = b/4;
00061     unsigned long e = b%4;
00062     unsigned long f = (b+8)/25;
00063     unsigned long g = (b+f+1)/3;
00064     unsigned long h = (19*a+b-d-g+15)%30;
00065     unsigned long i = c/4;
00066     unsigned long j = c%4;
00067     unsigned long k = j%100;
00068     unsigned long l = (32+2*e+2*i-h-k)%7;
00069     unsigned long m = (a+11*h+22*l)/451;
00070     n = (h+l-7*m+114)/31;
00071     p = (h+l-7*m+114)%31;
00072   } else {
00073     unsigned long a = _lastyear%4;
00074     unsigned long b = _lastyear%7;
00075     unsigned long c = _lastyear%19;
00076     unsigned long d = (19*c+15)%30;
00077     unsigned long e = (2*a+4*b-d+34)%7;
00078     n = (d+e+114)/31;
00079     p = (d+e+114)%31;
00080   }
00081   p++;
00082   QDate d(_lastyear,n,p);
00083   _days[d].append(QObject::tr("Easter Sunday","holidays"));
00084   _days[d.addDays(-2)].append(QObject::tr("Good Friday","holidays"));
00085   _days[d.addDays(49)].append(QObject::tr("Whitsunday","holidays"));
00086   _days[d.addDays(50)].append(QObject::tr("Whitmonday","holidays"));
00087   _days[d.addDays(39)].append(QObject::tr("Ascension Day","holidays"));
00088   _days[d.addDays(-46)].append(QObject::tr("Ash Wednesday","holidays"));
00089   _days[d.addDays(60)].append(QObject::tr("Corpus Christi","holidays"));
00090 }
00091 
00092 QMap<QDate,QStringList> ChrisHoliday::entries(const QDate&start,const QDate&end)
00093 {
00094     QMap<QDate,QStringList> ret;
00095     if (start==end) {
00096         ret[start]=entries(start);
00097         return ret;
00098     }
00099     QDate d;
00100     int daysto;
00101     if (end < start) {
00102         d = end;
00103         daysto = end.daysTo(start);
00104     } else {
00105         d = start;
00106         daysto = start.daysTo(end);
00107     }
00108     QStringList temp;
00109     for (int i=0;i<=daysto;++i) {
00110         temp = entries(d.addDays(i));
00111         if (temp.count()==0) continue;
00112         ret[d.addDays(i)]+=temp;
00113         temp.clear();
00114     }
00115     return ret;
00116 }
00117 
00118 QValueList<EffectiveEvent> ChrisHoliday::events(const QDate&start,const QDate&end)
00119 {
00120     QValueList<EffectiveEvent> ret;
00121     QDate d = (start<end?start:end);
00122     int daysto = start.daysTo(end);
00123     if (daysto < 0) {
00124         daysto = end.daysTo(start);
00125     }
00126 
00127     QStringList temp;
00128     for (int i =0; i<= daysto;++i) {
00129         temp = entries(d.addDays(i));
00130         if (temp.count()==0) {
00131             continue;
00132         }
00133         for (unsigned j=0;j<temp.count();++j) {
00134             Event ev;
00135             ev.setDescription(temp[j]);
00136             ev.setStart(d.addDays(i));
00137             ev.setAllDay(true);
00138             ret.append(EffectiveEvent(ev,d.addDays(i)));
00139         }
00140     }
00141 
00142     return ret;
00143 }
00144 
00145 EXPORT_HOLIDAY_PLUGIN(ChrisHoliday);

Generated on Sat Nov 5 16:15:48 2005 for OPIE by  doxygen 1.4.2