kdelibs/kdecore/date/ktzfiletimezone.h

217 lines
7 KiB
C
Raw Normal View History

2014-11-13 01:04:59 +02:00
/*
This file is part of the KDE libraries
Copyright (c) 2005-2008 David Jarvie <djarvie@kde.org>
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public License
along with this library; see the file COPYING.LIB. If not, write to
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.
*/
/** @file
* TZFILE time zone functions
* @author David Jarvie <djarvie@kde.org>.
*/
2015-07-11 18:42:46 +03:00
#ifndef KTZFILETIMEZONE_H
#define KTZFILETIMEZONE_H
2014-11-13 01:04:59 +02:00
#include <kdecore_export.h>
#include <ktimezone.h>
class KTzfileTimeZoneSource;
class KTzfileTimeZonePrivate;
class KTzfileTimeZoneDataPrivate;
class KTzfileTimeZoneSourcePrivate;
/**
* The KTzfileTimeZone class represents a time zone defined in tzfile(5) format.
*
* It works in partnership with the KTzfileTimeZoneSource class which reads and parses the
* time zone definition files.
*
* @short Represents a time zone defined in tzfile(5) format
* @see KTzfileTimeZoneBackend, KTzfileTimeZoneSource, KTzfileTimeZoneData
* @ingroup timezones
* @author David Jarvie <djarvie@kde.org>.
*/
class KDECORE_EXPORT KTzfileTimeZone : public KTimeZone //krazy:exclude=dpointer (no d-pointer for KTimeZone derived classes)
{
public:
/**
* Creates a time zone.
*
* @param source tzfile reader and parser
* @param name time zone's unique name, which must be the tzfile path relative
* to the location specified for @p source
* @param countryCode ISO 3166 2-character country code, empty if unknown
* @param latitude in degrees (between -90 and +90), UNKNOWN if not known
* @param longitude in degrees (between -180 and +180), UNKNOWN if not known
* @param comment description of the time zone, if any
*/
KTzfileTimeZone(KTzfileTimeZoneSource *source, const QString &name,
const QString &countryCode = QString(), float latitude = UNKNOWN, float longitude = UNKNOWN,
const QString &comment = QString());
~KTzfileTimeZone();
private:
// d-pointer is in KTzfileTimeZoneBackend.
// This is a requirement for classes inherited from KTimeZone.
};
/**
* Backend class for KTzfileTimeZone class.
*
* This class implements KTzfileTimeZone's constructors and virtual methods. A
* backend class is required for all classes inherited from KTimeZone to
* allow KTimeZone virtual methods to work together with reference counting of
* private data.
*
* @short Backend class for KTzfileTimeZone class
* @see KTimeZoneBackend, KTzfileTimeZone, KTimeZone
* @ingroup timezones
* @author David Jarvie <djarvie@kde.org>.
*/
class KDECORE_EXPORT KTzfileTimeZoneBackend : public KTimeZoneBackend //krazy:exclude=dpointer (non-const d-pointer for KTimeZoneBackend-derived classes)
{
public:
/** Implements KTzfileTimeZone::KTzfileTimeZone(). */
KTzfileTimeZoneBackend(KTzfileTimeZoneSource *source, const QString &name,
const QString &countryCode, float latitude, float longitude, const QString &comment);
~KTzfileTimeZoneBackend();
/**
* Creates a copy of this instance.
*
* @return new copy
*/
virtual KTimeZoneBackend *clone() const;
/**
* Returns the class name of the data represented by this instance.
*
* @return "KTzfileTimeZone"
*/
virtual QByteArray type() const;
/**
* Implements KTzfileTimeZone::hasTransitions().
*
* Returns whether daylight saving transitions are available for the time zone.
*
* @param caller calling KTzfileTimeZone object
* @return @c true
*/
virtual bool hasTransitions(const KTimeZone* caller) const;
private:
KTzfileTimeZonePrivate *d; // non-const
};
/**
* A class to read and parse tzfile time zone definition files.
*
* tzfile is the format used by zoneinfo files in the system time zone database.
* The format is documented in the tzfile(5) manpage.
*
* @short Reads and parses tzfile(5) time zone definition files
* @see KTzfileTimeZone, KTzfileTimeZoneData
* @ingroup timezones
* @author David Jarvie <djarvie@kde.org>.
*/
class KDECORE_EXPORT KTzfileTimeZoneSource : public KTimeZoneSource
{
public:
/**
* Constructs a time zone source.
*
* The directory containing the time zone definition files is given by the
* @p location parameter, which will usually be the zoneinfo directory. For
* tzfile files in other locations, bear in mind that the name generated
* for each KTzfileTimeZone is its file path relative to @p location.
*
* @param location the local directory containing the time zone definition files
*/
explicit KTzfileTimeZoneSource(const QString &location);
virtual ~KTzfileTimeZoneSource();
/**
* Returns the local directory containing the time zone definition files.
*
* @return path to time zone definition files
*/
QString location() const;
/**
* Parses a tzfile file to extract detailed information for one time zone.
*
* @param zone the time zone for which data is to be extracted
* @return a KTzfileTimeZoneData instance containing the parsed data.
* The caller is responsible for deleting the KTimeZoneData instance.
* Null is returned on error.
*/
virtual KTimeZoneData *parse(const KTimeZone &zone) const;
private:
KTzfileTimeZoneSourcePrivate * const d;
};
/**
* @internal
* The parsed data returned by KTzfileTimeZoneSource.
*
* @short Parsed data from tzfile(5) time zone definition files
* @see KTzfileTimeZoneSource, KTzfileTimeZone
* @ingroup timezones
* @author David Jarvie <djarvie@kde.org>.
*/
class KTzfileTimeZoneData : public KTimeZoneData
{
friend class KTzfileTimeZoneSource;
public:
KTzfileTimeZoneData();
KTzfileTimeZoneData(const KTzfileTimeZoneData &);
virtual ~KTzfileTimeZoneData();
KTzfileTimeZoneData &operator=(const KTzfileTimeZoneData &);
/**
* Creates a new copy of this object.
* The caller is responsible for deleting the copy.
* Derived classes must reimplement this method to return a copy of the
* calling instance
*
* @return copy of this instance. This is a KTzfileTimeZoneData pointer.
*/
virtual KTimeZoneData *clone() const;
/**
* Return whether daylight saving transitions are available for the time zone.
*
* @return @c true
*/
virtual bool hasTransitions() const;
private:
// Enable this if you add KDECORE_EXPORT to this class
//KTzfileTimeZoneDataPrivate * const d;
};
#endif