summaryrefslogtreecommitdiff
path: root/core/pim/datebook/holiday/christian/chrisholiday.cpp
blob: be16bd02758c2a0720f44bff9be639c6e9510137 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
#include "chrisholiday.h"

#include <qobject.h>

QString ChrisHoliday::description()
{
    return QObject::tr("Christian holidays","holidays");
}

QStringList ChrisHoliday::entries(const QDate&aDate)
{
    QStringList ret;
    ret+=_internallist.entries(aDate);
    calcit(aDate.year());
    tDayMap::Iterator it = _days.find(aDate);
    if (it!=_days.end()) {
        ret+=*it;
    }

    return ret;
}

QStringList ChrisHoliday::entries(unsigned year, unsigned month, unsigned day)
{
    return entries(QDate(year,month,day));
}

void ChrisHoliday::calcit(int year)
{
    if (year==_lastyear) return;
    _lastyear = year;
    _days.clear();
    calc_easter();
    calc_christmas();
}

void ChrisHoliday::calc_christmas()
{
    QDate cday(_lastyear,12,24);
    int diff;
    if ( (diff=cday.dayOfWeek())!=7) {
        cday=cday.addDays(-diff);
        _days[cday].append(QObject::tr("4. Advent","holidays"));
    }
    _days[cday.addDays(-7)].append(QObject::tr("3. Advent","holidays"));
    _days[cday.addDays(-14)].append(QObject::tr("2. Advent","holidays"));
    _days[cday.addDays(-21)].append(QObject::tr("1. Advent","holidays"));
}

void ChrisHoliday::calc_easter()
{
  unsigned long n = 0;
  unsigned long p = 0;

  if ( _lastyear > 1582 ) {
    unsigned long a = _lastyear%19;
    unsigned long b = _lastyear/100;
    unsigned long c = _lastyear%100;
    unsigned long d = b/4;
    unsigned long e = b%4;
    unsigned long f = (b+8)/25;
    unsigned long g = (b+f+1)/3;
    unsigned long h = (19*a+b-d-g+15)%30;
    unsigned long i = c/4;
    unsigned long j = c%4;
    unsigned long k = j%100;
    unsigned long l = (32+2*e+2*i-h-k)%7;
    unsigned long m = (a+11*h+22*l)/451;
    n = (h+l-7*m+114)/31;
    p = (h+l-7*m+114)%31;
  } else {
    unsigned long a = _lastyear%4;
    unsigned long b = _lastyear%7;
    unsigned long c = _lastyear%19;
    unsigned long d = (19*c+15)%30;
    unsigned long e = (2*a+4*b-d+34)%7;
    n = (d+e+114)/31;
    p = (d+e+114)%31;
  }
  p++;
  QDate d(_lastyear,n,p);
  _days[d].append(QObject::tr("Eastersunday","holidays"));
  _days[d.addDays(49)].append(QObject::tr("Whitsunday","holidays"));
  _days[d.addDays(50)].append(QObject::tr("Whitmonday","holidays"));
  _days[d.addDays(-46)].append(QObject::tr("Ash Wednesday","holidays"));
  _days[d.addDays(60)].append(QObject::tr("Corpus Christi","holidays"));
}

QMap<QDate,QStringList> ChrisHoliday::entries(const QDate&,const QDate&)
{
    QMap<QDate,QStringList> ret;
    return ret;
}

EXPORT_HOLIDAY_PLUGIN(ChrisHoliday);