00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef KCALCORE_ICALTIMEZONES_H
00022 #define KCALCORE_ICALTIMEZONES_H
00023
00024 #include "kcalcore_export.h"
00025
00026 #include <KDE/KTimeZone>
00027
00028 #include <QtCore/QMap>
00029
00030 #ifndef ICALCOMPONENT_H
00031 typedef struct icalcomponent_impl icalcomponent;
00032 #endif
00033 #ifndef ICALTIMEZONE_DEFINED
00034 #define ICALTIMEZONE_DEFINED
00035 typedef struct _icaltimezone icaltimezone;
00036 #endif
00037
00038 namespace KCalCore {
00039
00040 class ICalTimeZone;
00041 class ICalTimeZoneSource;
00042 class ICalTimeZoneData;
00043 class ICalTimeZonesPrivate;
00044 class ICalTimeZonePrivate;
00045 class ICalTimeZoneSourcePrivate;
00046 class ICalTimeZoneDataPrivate;
00047
00065 class KCALCORE_EXPORT ICalTimeZones
00066 {
00067 public:
00071 ICalTimeZones();
00072
00077 ICalTimeZones( const ICalTimeZones &rhs );
00078
00083 ICalTimeZones &operator=( const ICalTimeZones &rhs );
00084
00088 ~ICalTimeZones();
00089
00098 ICalTimeZone zone( const QString &name ) const;
00099
00112 ICalTimeZone zone( const ICalTimeZone &zone ) const;
00113
00114 typedef QMap<QString, ICalTimeZone> ZoneMap;
00115
00121 const ZoneMap zones() const;
00122
00131 bool add( const ICalTimeZone &zone );
00132
00139 ICalTimeZone remove( const ICalTimeZone &zone );
00140
00147 ICalTimeZone remove( const QString &name );
00148
00152 void clear();
00153
00159 int count();
00160
00161 private:
00162
00163 ICalTimeZonesPrivate *const d;
00164
00165 };
00166
00176 class KCALCORE_EXPORT ICalTimeZone : public KTimeZone
00177
00178 {
00179 public:
00185 ICalTimeZone();
00186
00195 ICalTimeZone( ICalTimeZoneSource *source, const QString &name, ICalTimeZoneData *data );
00196
00203 explicit ICalTimeZone( const KTimeZone &tz, const QDate &earliest = QDate() );
00204
00208 virtual ~ICalTimeZone();
00209
00216 QString city() const;
00217
00223 QByteArray url() const;
00224
00230 QDateTime lastModified() const;
00231
00237 QByteArray vtimezone() const;
00238
00246 icaltimezone *icalTimezone() const;
00247
00260 bool update( const ICalTimeZone &other );
00261
00272 static ICalTimeZone utc();
00273
00274 protected:
00279 virtual void virtual_hook( int id, void *data );
00280
00281 private:
00282
00283
00284 };
00285
00299 class KCALCORE_EXPORT ICalTimeZoneBackend : public KTimeZoneBackend
00300 {
00301 public:
00303 ICalTimeZoneBackend();
00314 ICalTimeZoneBackend( ICalTimeZoneSource *source, const QString &name,
00315 const QString &countryCode = QString(),
00316 float latitude = KTimeZone::UNKNOWN,
00317 float longitude = KTimeZone::UNKNOWN,
00318 const QString &comment = QString() );
00319
00325 ICalTimeZoneBackend( const KTimeZone &tz, const QDate &earliest );
00326
00327 virtual ~ICalTimeZoneBackend();
00328
00334 virtual KTimeZoneBackend *clone() const;
00335
00341 virtual QByteArray type() const;
00342
00351 virtual bool hasTransitions( const KTimeZone *caller ) const;
00352
00353 protected:
00358 virtual void virtual_hook( int id, void *data );
00359
00360 private:
00361
00362 ICalTimeZonePrivate *d;
00363
00364
00365 };
00366
00373 typedef struct _MSSystemTime {
00374 qint16 wYear;
00375 qint16 wMonth;
00376 qint16 wDayOfWeek;
00377 qint16 wDay;
00378 qint16 wHour;
00379 qint16 wMinute;
00380 qint16 wSecond;
00381 qint16 wMilliseconds;
00382 } MSSystemTime;
00383
00384 typedef struct _MSTimeZone {
00385 long Bias;
00386 QString StandardName;
00387 MSSystemTime StandardDate;
00388 long StandardBias;
00389 QString DaylightName;
00390 MSSystemTime DaylightDate;
00391 long DaylightBias;
00392 } MSTimeZone;
00393
00405 class KCALCORE_EXPORT ICalTimeZoneSource : public KTimeZoneSource
00406 {
00407 public:
00411 ICalTimeZoneSource();
00412
00416 virtual ~ICalTimeZoneSource();
00417
00425 ICalTimeZone parse( icalcomponent *vtimezone );
00426
00441 bool parse( icalcomponent *calendar, ICalTimeZones &zones );
00442
00450 ICalTimeZone parse( MSTimeZone *tz );
00451
00461 ICalTimeZone parse( MSTimeZone *tz, ICalTimeZones &zones );
00462
00473 ICalTimeZone parse( const QString &name, const QStringList &tzList, ICalTimeZones &zones );
00474
00483 ICalTimeZone parse( const QString &name, const QStringList &tzList );
00484
00498 bool parse( const QString &fileName, ICalTimeZones &zones );
00499
00512 ICalTimeZone parse( icaltimezone *tz );
00513
00525 ICalTimeZone standardZone( const QString &zone, bool icalBuiltIn = false );
00526
00535 static QByteArray icalTzidPrefix();
00536
00537 using KTimeZoneSource::parse;
00538
00539 protected:
00544 virtual void virtual_hook( int id, void *data );
00545
00546 private:
00547
00548 ICalTimeZoneSourcePrivate *const d;
00549
00550 };
00551
00562 class KCALCORE_EXPORT ICalTimeZoneData : public KTimeZoneData
00563 {
00564 friend class ICalTimeZoneSource;
00565
00566 public:
00570 ICalTimeZoneData();
00571
00577 ICalTimeZoneData( const ICalTimeZoneData &rhs );
00578
00590 ICalTimeZoneData( const KTimeZoneData &rhs, const KTimeZone &tz, const QDate &earliest );
00591
00595 virtual ~ICalTimeZoneData();
00596
00603 ICalTimeZoneData &operator=( const ICalTimeZoneData &rhs );
00604
00611 virtual KTimeZoneData *clone() const;
00612
00619 QString city() const;
00620
00626 QByteArray url() const;
00627
00633 QDateTime lastModified() const;
00634
00640 QByteArray vtimezone() const;
00641
00649 icaltimezone *icalTimezone() const;
00650
00656 virtual bool hasTransitions() const;
00657
00658 protected:
00663 virtual void virtual_hook( int id, void *data );
00664
00665 private:
00666
00667 ICalTimeZoneDataPrivate *const d;
00668
00669 };
00670
00671 }
00672
00673 #endif