File indexing completed on 2024-10-06 03:38:47

0001 /*
0002     This file is part of the kholidays library.
0003 
0004     SPDX-FileCopyrightText: 2004, 2007, 2009 Allen Winter <winter@kde.org>
0005 
0006     SPDX-License-Identifier: LGPL-2.0-or-later
0007 */
0008 
0009 #ifndef KHOLIDAYS_LUNARPHASE_H
0010 #define KHOLIDAYS_LUNARPHASE_H
0011 
0012 #include "kholidays_export.h"
0013 
0014 #include <qobjectdefs.h>
0015 
0016 class QDate;
0017 class QString;
0018 
0019 namespace KHolidays
0020 {
0021 /**
0022   Represents and manages a Lunar Phase
0023 
0024   A Lunar Phase can be one of the following:
0025 
0026    + "new": the moon is not visible; or traditionally: first visible
0027             crescent of the Moon.  For religious purposes, the new
0028             month begins when the first crescent moon can be seen.
0029             Thus, it is impossible to be certain in advance of when
0030             months will begin; in particular, the exact date on which
0031             Ramadan will begin is not known in advance. In Saudi Arabia,
0032             observers are sent up in airplanes if the weather is cloudy
0033             when the new moon is expected.
0034    + "waxing crescent": between "new" and "first quarter".
0035    + "first quarter": the right 50% of the moon is visible.
0036    + "waxing gibbous": between "first quarter" and "full".
0037    + "full": the moon is fully visible.
0038    + "waning gibbous": between "full" and "last quarter".
0039    + "last quarter": the left 50% of the moon is visible.
0040    + "waning crescent": between "last quarter" and "new".
0041 
0042    A very good description of the lunar phases can be read at the Wikipedia,
0043      https://en.wikipedia.org/wiki/Lunar_phase
0044 */
0045 class KHOLIDAYS_EXPORT LunarPhase // krazy:exclude=dpointer
0046 {
0047     Q_GADGET
0048 public:
0049     /**
0050       Phases of the moon, in traditional English notation. The
0051       phase @c None is used only as an error indicator, for instance
0052       in phase().
0053     */
0054     enum Phase {
0055         NewMoon, ///< New moon phase
0056         FirstQuarter, ///< First quarter of moon phase
0057         LastQuarter, ///< Last quarter of moon phase
0058         FullMoon, ///< Full moon phase
0059         None, ///< Indication for error
0060         WaxingCrescent, ///< @since 5.94
0061         WaxingGibbous, ///< @since 5.94
0062         WaningGibbous, ///< @since 5.94
0063         WaningCrescent, ///< @since 5.94
0064     };
0065     Q_ENUM(Phase)
0066 
0067     /**
0068        Return the lunar phase for the specified Gregorian date.
0069        The enum 'None' is returned if one of the supported phases
0070        does not occur on the date.
0071 
0072        @param date compute the lunar phase for the specified Gregorian date.
0073     */
0074     static Phase phaseAtDate(const QDate &date);
0075 
0076     /**
0077        Return the lunar phase as a text string for the specified date.
0078        A null string is returned if one of the supported phases does
0079        not occur on the date.
0080 
0081        @param date compute the lunar phase for the specified Gregorian date.
0082     */
0083     static QString phaseNameAtDate(const QDate &date);
0084 
0085     /**
0086        Return the string representation of phase.
0087 
0088        @param phase the lunar phase.
0089     */
0090     static QString phaseName(Phase phase);
0091 };
0092 
0093 }
0094 
0095 #endif