summaryrefslogtreecommitdiff
path: root/noncore/unsupported/libopie/pim/orecur.h
blob: d7ecd9099102f1b73ebd96df0c38b9b51de9eff3 (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
96
97
98
99
100
101
102
103
104
105
106
107
/*
 * GPL from TT
 */

#ifndef OPIE_RECUR_H
#define OPIE_RECUR_H

#include <sys/types.h>

#include <qdatetime.h>
#include <qvaluelist.h>
#include <qmap.h>


/**
 * Class to handle Recurrencies..
 */

class ORecur {
public:
    typedef QValueList<QDate> ExceptionList;
    enum RepeatType{ NoRepeat = -1, Daily, Weekly, MonthlyDay,
                     MonthlyDate, Yearly };
    enum Days { MON = 0x01, TUE = 0x02, WED = 0x04, THU = 0x08,
                FRI = 0x10, SAT = 0x20, SUN = 0x40 };
    enum Fields{ RType = 0, RWeekdays, RPosition, RFreq, RHasEndDate, 
		 EndDate, Created, Exceptions };

    ORecur();
    ORecur( const QMap<int, QString>& map );
    ORecur( const ORecur& );
    ~ORecur();

    ORecur &operator=( const ORecur& );
    bool operator==(const ORecur& )const;

    bool doesRecur()const;
    /* if it recurrs on that day */
    bool doesRecur( const QDate& );
    RepeatType type()const;
    int frequency()const;
    int position()const;
    char days()const;
    bool hasEndDate()const;
    QDate start()const;
    QDate endDate()const;
    QDateTime createdDateTime()const;
    /**
     * starting on monday=0, sunday=6
     * for convience
     */
    bool repeatOnWeekDay( int day )const;

    /**
     * FromWhereToStart is not included!!!
     */
    bool nextOcurrence( const QDate& FromWhereToStart, QDate &recurDate );

    /**
     * The module this ORecur belongs to
     */
    QString service()const;

    /*
     * reference to the exception list
     */
    ExceptionList &exceptions();

    /**
     * the current repetition
     */
    int repetition()const;

    void setType( const RepeatType& );
    void setFrequency( int freq );
    void setPosition( int pos );
    void setDays( char c);
    void setEndDate( const QDate& dt );
    void setStart( const QDate& dt );
    void setCreatedDateTime( const QDateTime& );
    void setHasEndDate( bool b );
    void setRepitition(int );

    void setService( const QString& ser );
    
    QMap<int, QString> toMap() const;
    void fromMap( const QMap<int, QString>& map );

    /* almost internal */
    QString toString()const;
private:
    bool p_nextOccurrence( const QDate& from, QDate& next );
    void deref();
    inline void checkOrModify();

    /* Converts rType to String */
    QString rTypeString() const;
    /* Returns a map to convert Stringname for RType to RepeatType */
    QMap<QString, RepeatType> rTypeValueConvertMap() const;

    class Data;
    Data* data;
    class ORecurPrivate;
    ORecurPrivate *d;
};

#endif