summaryrefslogtreecommitdiff
path: root/core/pim/datebook/holiday/christian/chrisholiday.cpp
Unidiff
Diffstat (limited to 'core/pim/datebook/holiday/christian/chrisholiday.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--core/pim/datebook/holiday/christian/chrisholiday.cpp87
1 files changed, 87 insertions, 0 deletions
diff --git a/core/pim/datebook/holiday/christian/chrisholiday.cpp b/core/pim/datebook/holiday/christian/chrisholiday.cpp
new file mode 100644
index 0000000..6ef102a
--- a/dev/null
+++ b/core/pim/datebook/holiday/christian/chrisholiday.cpp
@@ -0,0 +1,87 @@
1#include "chrisholiday.h"
2
3#include <qobject.h>
4
5QString ChrisHoliday::description()
6{
7 return QObject::tr("Christian holidays","holidays");
8}
9
10QStringList ChrisHoliday::entries(const QDate&aDate)
11{
12 QStringList ret;
13 ret+=_internallist.entries(aDate);
14 calcit(aDate.year());
15 tDayMap::Iterator it = _days.find(aDate);
16 if (it!=_days.end()) {
17 ret+=*it;
18 }
19
20 return ret;
21}
22
23QStringList ChrisHoliday::entries(unsigned year, unsigned month, unsigned day)
24{
25 return entries(QDate(year,month,day));
26}
27
28void ChrisHoliday::calcit(int year)
29{
30 if (year==_lastyear) return;
31 _lastyear = year;
32 _days.clear();
33 calc_easter();
34 calc_christmas();
35}
36
37void ChrisHoliday::calc_christmas()
38{
39 QDate cday(_lastyear,12,24);
40 int diff;
41 if ( (diff=cday.dayOfWeek())!=7) {
42 cday=cday.addDays(-diff);
43 _days[cday].append(QObject::tr("4. Advent","holidays"));
44 }
45 _days[cday.addDays(-7)].append(QObject::tr("3. Advent","holidays"));
46 _days[cday.addDays(-14)].append(QObject::tr("2. Advent","holidays"));
47 _days[cday.addDays(-21)].append(QObject::tr("1. Advent","holidays"));
48}
49
50void ChrisHoliday::calc_easter()
51{
52 unsigned long n = 0;
53 unsigned long p = 0;
54
55 if ( _lastyear > 1582 ) {
56 unsigned long a = _lastyear%19;
57 unsigned long b = _lastyear/100;
58 unsigned long c = _lastyear%100;
59 unsigned long d = b/4;
60 unsigned long e = b%4;
61 unsigned long f = (b+8)/25;
62 unsigned long g = (b+f+1)/3;
63 unsigned long h = (19*a+b-d-g+15)%30;
64 unsigned long i = c/4;
65 unsigned long j = c%4;
66 unsigned long k = j%100;
67 unsigned long l = (32+2*e+2*i-h-k)%7;
68 unsigned long m = (a+11*h+22*l)/451;
69 n = (h+l-7*m+114)/31;
70 p = (h+l-7*m+114)%31;
71 } else {
72 unsigned long a = _lastyear%4;
73 unsigned long b = _lastyear%7;
74 unsigned long c = _lastyear%19;
75 unsigned long d = (19*c+15)%30;
76 unsigned long e = (2*a+4*b-d+34)%7;
77 n = (d+e+114)/31;
78 p = (d+e+114)%31;
79 }
80 p++;
81 QDate d(_lastyear,n,p);
82 _days[d].append(QObject::tr("Eastersunday","holidays"));
83 _days[d.addDays(49)].append(QObject::tr("Whitsunday","holidays"));
84 _days[d.addDays(50)].append(QObject::tr("Whitmonday","holidays"));
85 _days[d.addDays(-46)].append(QObject::tr("Ash Wednesday","holidays"));
86 _days[d.addDays(60)].append(QObject::tr("Corpus Christi","holidays"));
87}