ktimezones.h

00001 /*
00002    This file is part of the KDE libraries
00003    Copyright (c) 2005 S.R.Haque <srhaque@iee.org>.
00004 
00005    This library is free software; you can redistribute it and/or
00006    modify it under the terms of the GNU Library General Public
00007    License version 2 as published by the Free Software Foundation.
00008 
00009    This library is distributed in the hope that it will be useful,
00010    but WITHOUT ANY WARRANTY; without even the implied warranty of
00011    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00012    Library General Public License for more details.
00013 
00014    You should have received a copy of the GNU Library General Public License
00015    along with this library; see the file COPYING.LIB.  If not, write to
00016    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
00017    Boston, MA 02110-1301, USA.
00018 */
00019 
00020 #ifndef _KTIMEZONES_H
00021 #define _KTIMEZONES_H
00022 
00023 #include "kdelibs_export.h"
00024 #include <qdatetime.h>
00025 #include <qnamespace.h>
00026 #include <qmap.h>
00027 #include <qstring.h>
00028 #include <ksharedptr.h>
00029 class KTimezoneDetails;
00030 class KTimezoneDetailsPrivate;
00031 class KTimezonePrivate;
00032 class KTimezonesPrivate;
00033 
00050 class KDECORE_EXPORT KTimezoneSource :
00051     public KShared
00052 {
00053 public:
00054     KTimezoneSource(const QString &db);
00055     virtual ~KTimezoneSource();
00056 
00061     virtual QString db();
00062 
00068     virtual bool parse(const QString &zone, KTimezoneDetails &dataReceiver) const;
00069 
00070 private:
00071     QString m_db;
00072 };
00073 
00084 class KDECORE_EXPORT KTimezone
00085 {
00086 public:
00091     static const float UNKNOWN;
00092 
00097     static bool isValidLatitude(float latitude);
00098 
00103     static bool isValidLongitude(float longitude);
00104 
00115     KTimezone(
00116         KSharedPtr<KTimezoneSource> db, const QString &name,
00117         const QString &countryCode = QString(), float latitude = UNKNOWN, float longitude = UNKNOWN,
00118         const QString &comment = QString());
00119     ~KTimezone();
00120 
00126     QString name() const;
00127 
00133     QString countryCode() const;
00134 
00140     float latitude() const;
00141 
00147     float longitude() const;
00148 
00158     int offset(Qt::TimeSpec basisSpec = Qt::UTC) const;
00159 
00166     int offset(const QDateTime &dateTime) const;
00167 
00174     QDateTime convert(const KTimezone *newZone, const QDateTime &dateTime) const;
00175 
00181     QString comment() const;
00182 
00187     bool parse(KTimezoneDetails &dataReceiver) const;
00188 
00189 private:
00190     KSharedPtr<KTimezoneSource> m_db;
00191     QString m_name;
00192     QString m_countryCode;
00193     float m_latitude;
00194     float m_longitude;
00195     QString m_comment;
00196     KTimezonePrivate *d;
00197 };
00198 
00221 class KDECORE_EXPORT KTimezoneDetails
00222 {
00223 public:
00224     KTimezoneDetails();
00225     virtual ~KTimezoneDetails();
00226 
00230     virtual void parseEnded();
00231 
00235     virtual void parseStarted();
00236 
00240     virtual void gotHeader(
00241         unsigned ttIsGmtCnt, unsigned ttIsStdCnt, unsigned leapCnt,
00242         unsigned timeCnt, unsigned typeCnt, unsigned charCnt);
00243 
00247     virtual void gotTransitionTime(int index, unsigned transitionTime);
00248 
00252     virtual void gotLocalTimeIndex(int index, unsigned localTimeIndex);
00253 
00257     virtual void gotLocalTime(int index, int gmtOff, bool isDst, unsigned abbrIndex);
00258 
00264     virtual void gotAbbreviation(int index, const QString &abbr);
00265 
00269     virtual void gotLeapAdjustment(int index, unsigned leapTime, unsigned leapSeconds);
00270 
00274     virtual void gotIsStandard(int index, bool isStandard);
00275 
00279     virtual void gotIsUTC(int index, bool isUTC);
00280 
00281 private:
00282     KTimezoneDetailsPrivate *d;
00283 };
00284 
00292 class KDECORE_EXPORT KTimezones
00293 {
00294 public:
00295     KTimezones();
00296     ~KTimezones();
00297 
00312     const KTimezone *local();
00313 
00320     const KTimezone *zone(const QString &name);
00321 
00322     typedef QMap<QString, KTimezone *> ZoneMap;
00323 
00328     const ZoneMap allZones();
00329 
00333     void add(KTimezone *zone);
00334 
00335 private:
00336     float convertCoordinate(const QString &coordinate);
00337 
00338     QString m_zoneinfoDir;
00339     ZoneMap *m_zones;
00340     KTimezone *m_UTC;
00341     KTimezonesPrivate *d;
00342 };
00343 
00344 #endif
KDE Home | KDE Accessibility Home | Description of Access Keys