Create a private operator= so compiler doesn't generate an unsafe one. Only Incidence...
[extendedkcal:kdab-developers-kcalsplit.git] / kcalcore / src / event.h
1 /*
2   This file is part of the kcalcore library.
3
4   Copyright (c) 2001-2003 Cornelius Schumacher <schumacher@kde.org>
5
6   This library is free software; you can redistribute it and/or
7   modify it under the terms of the GNU Library General Public
8   License as published by the Free Software Foundation; either
9   version 2 of the License, or (at your option) any later version.
10
11   This library is distributed in the hope that it will be useful,
12   but WITHOUT ANY WARRANTY; without even the implied warranty of
13   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14   Library General Public License for more details.
15
16   You should have received a copy of the GNU Library General Public License
17   along with this library; see the file COPYING.LIB.  If not, write to
18   the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
19   Boston, MA 02110-1301, USA.
20 */
21 /**
22   @file
23   This file is part of the API for handling calendar data and
24   defines the Event class.
25
26   @author Cornelius Schumacher \<schumacher@kde.org\>
27 */
28 #ifndef KCALCORE_EVENT_H
29 #define KCALCORE_EVENT_H
30
31 #include "kcalcore_export.h"
32 #include "incidence.h"
33 #include "supertrait.h"
34
35 namespace KCalCore {
36
37 /**
38   @brief
39   This class provides an Event in the sense of RFC2445.
40 */
41 class KCALCORE_EXPORT Event : public Incidence
42 {
43   public:
44     /**
45       The different Event transparency types.
46     */
47     enum Transparency {
48       Opaque,      /**< Event appears in free/busy time */
49       Transparent  /**< Event does @b not appear in free/busy time */
50     };
51
52     /**
53       A shared pointer to an Event object.
54     */
55     typedef QSharedPointer<Event> Ptr;
56
57     /**
58       A shared pointer to a non-mutable Event.
59     */
60     typedef QSharedPointer<const Event> ConstPtr;
61
62     /**
63       List of events.
64     */
65     typedef QList<Ptr> List;
66
67     /**
68       Constructs an event.
69     */
70     Event();
71
72     /**
73       Copy constructor.
74       @param other is the event to copy.
75     */
76     Event( const Event &other );
77
78     /**
79       Destroys the event.
80     */
81     ~Event();
82
83     /**
84       @copydoc
85       IncidenceBase::type()
86     */
87     IncidenceType type() const;
88
89     /**
90       @copydoc
91       IncidenceBase::typeStr()
92     */
93     QByteArray typeStr() const;
94
95     /**
96       Returns an exact copy of this Event. The caller owns the returned object.
97     */
98     Event *clone() const;
99
100     /**
101       Sets the incidence starting date/time.
102
103       @param dt is the starting date/time.
104       @see IncidenceBase::dtStart().
105     */
106     virtual void setDtStart( const KDateTime &dt );
107
108     /**
109       Sets the event end date and time.
110       @param dtEnd is a KDateTime specifying when the event ends.
111       @see dtEnd(), dateEnd().
112     */
113     void setDtEnd( const KDateTime &dtEnd );
114
115     /**
116       Returns the event end date and time.
117       @see setDtEnd().
118     */
119     virtual KDateTime dtEnd() const;
120
121     /**
122       Returns the date when the event ends. This might be different from
123       dtEnd().date, since the end date/time is non-inclusive. So timed events
124       ending at 0:00 have their end date on the day before.
125     */
126     QDate dateEnd() const;
127
128     /**
129       Sets whether the event has an end date/time.
130       @param b If set, indicates the event has an end date.
131     */
132     void setHasEndDate( bool b );
133
134     /**
135       Returns whether the event has an end date/time.
136     */
137     bool hasEndDate() const;
138
139     /**
140       Returns true if the event spans multiple days, otherwise return false.
141
142       @param spec If set, looks if the event is multiday for the given spec.
143       If not set, looks if event this multiday for its spec.
144     */
145     bool isMultiDay( const KDateTime::Spec &spec = KDateTime::Spec() ) const;
146
147     /**
148       @copydoc
149       IncidenceBase::shiftTimes()
150     */
151     virtual void shiftTimes( const KDateTime::Spec &oldSpec,
152                              const KDateTime::Spec &newSpec );
153
154     /**
155       Sets the event's time transparency level.
156       @param transparency is the event Transparency level.
157     */
158     void setTransparency( Transparency transparency );
159
160     /**
161       Returns the event's time transparency level.
162     */
163     Transparency transparency() const;
164
165     /**
166       Sets the duration of this event.
167       @param duration is the event Duration.
168     */
169     void setDuration( const Duration &duration );
170
171     /**
172       @copydoc
173       IncidenceBase::dateTime()
174     */
175     KDateTime dateTime( DateTimeRole role ) const;
176
177     /**
178       @copydoc
179       IncidenceBase::mimeType()
180     */
181     QLatin1String mimeType() const;
182
183   protected:
184     /**
185       Compares two events for equality.
186       @param event is the event to compare.
187     */
188     virtual bool equals( const IncidenceBase &event ) const;
189
190     /**
191       @copydoc
192       IncidenceBase::assign()
193     */
194     virtual IncidenceBase &assign( const IncidenceBase &other );
195
196     /**
197       @copydoc
198       IncidenceBase::virtual_hook()
199     */
200     virtual void virtual_hook( int id, void *data );
201
202   private:
203     /**
204       @copydoc
205       IncidenceBase::accept()
206     */
207     bool accept( Visitor &v, IncidenceBase::Ptr incidence );
208
209     /**
210        Disabled, otherwise could be dangerous if you subclass Event.
211        Use IncidenceBase::operator= which is safe because it calls
212        virtual function assign().
213      */
214     Event &operator=( const Event &other );
215
216     //@cond PRIVATE
217     class Private;
218     Private *const d;
219     //@endcond
220 };
221
222 //@cond PRIVATE
223 // super class trait specialization
224 template <> struct SuperClass<KCalCore::Event> : public SuperClassTrait<KCalCore::Incidence>{};
225 //@endcond
226
227 }
228
229 #endif