File indexing completed on 2024-05-12 03:55:07
0001 /* 0002 SPDX-FileCopyrightText: 2015 Martin Klapetek <mklapetek@kde.org> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #ifndef CALENDAREVENTSPLUGIN_H 0008 #define CALENDAREVENTSPLUGIN_H 0009 0010 #include <QCalendar> 0011 #include <QDateTime> 0012 #include <QMultiHash> 0013 #include <QObject> 0014 #include <QSharedDataPointer> 0015 0016 #include "calendarevents_export.h" 0017 0018 /** 0019 * The CalendarEvents namespace. 0020 */ 0021 namespace CalendarEvents 0022 { 0023 0024 /** 0025 * @class EventData calendareventsplugin.h <CalendarEvents/CalendarEventsPlugin> 0026 * 0027 * Data about an event. 0028 */ 0029 class CALENDAREVENTS_EXPORT EventData 0030 { 0031 public: 0032 enum EventType { 0033 Holiday, // Any holiday 0034 Event, // General event 0035 Todo, // A Todo item 0036 }; 0037 0038 EventData(); 0039 EventData(const EventData &other); 0040 ~EventData(); 0041 0042 EventData &operator=(const EventData &other); 0043 0044 /** 0045 * The start date and time of this event 0046 */ 0047 QDateTime startDateTime() const; 0048 0049 /** 0050 * Set the start date-time of this event 0051 * 0052 * @param startDateTime the date-time of when the event is starting 0053 */ 0054 void setStartDateTime(const QDateTime &startDateTime); 0055 0056 /** 0057 * The end date and time of this event 0058 */ 0059 QDateTime endDateTime() const; 0060 0061 /** 0062 * Set the end date-time of this event 0063 * 0064 * @param endDateTime the date-time of when the event is ending 0065 */ 0066 void setEndDateTime(const QDateTime &endDateTime); 0067 0068 /** 0069 * If true, this event goes on the whole day (eg. a holiday) 0070 */ 0071 bool isAllDay() const; 0072 0073 /** 0074 * If set to true, it will be displayed in the Calendar agenda 0075 * without any time besides it, marked as "going on all day" 0076 * 0077 * This is useful for single-day events only, for multiple-day 0078 * events, leave to false (default) 0079 * 0080 * @param isAllDay set to true if the event takes all day, false otherwise 0081 * (defaults to false) 0082 */ 0083 void setIsAllDay(bool isAllDay); 0084 0085 /** 0086 * If true, this event won't mark the day in the calendar grid 0087 * The main purpose for this flag is to support 0088 * namedays, where in some countries the calendars have 0089 * different name in them every day. This is just a minor holiday 0090 * and as such should not mark the calendar grid, otherwise 0091 * the whole grid would be in a different color. 0092 */ 0093 bool isMinor() const; 0094 0095 /** 0096 * If set to true, it won't be marked in the calendar grid 0097 * 0098 * @param isMinor true if it's a minor event (like a nameday holiday), 0099 * false otherwise (defaults to false) 0100 */ 0101 void setIsMinor(bool isMinor); 0102 0103 /** 0104 * Event title 0105 */ 0106 QString title() const; 0107 0108 /** 0109 * Sets the title of the event 0110 * 0111 * @param title The event title 0112 */ 0113 void setTitle(const QString &title); 0114 0115 /** 0116 * Event description, can provide more details about the event 0117 */ 0118 QString description() const; 0119 0120 /** 0121 * Sets the event description, which allows to add more details 0122 * about this event 0123 * 0124 * @param description The description 0125 */ 0126 void setDescription(const QString &description); 0127 0128 /** 0129 * Type of the current event, eg. a holiday, an event or a todo item 0130 */ 0131 EventType type() const; 0132 0133 /** 0134 * Sets the event type, eg. a holiday, an event or a todo item 0135 * 0136 * @param type The event type, 0137 */ 0138 void setEventType(EventType type); 0139 0140 /** 0141 * The color that should be used to mark this event with 0142 * It comes in the HTML hex format, eg. #AARRGGBB or #RRGGBB 0143 */ 0144 QString eventColor() const; 0145 0146 /** 0147 * This is to support various calendar colors the user might 0148 * have configured elsewhere 0149 * 0150 * @param color The color for this event in the HTML hex format 0151 * eg. #AARRGGBB or #RRGGBB (this is passed directly 0152 * to QML) 0153 */ 0154 void setEventColor(const QString &color); 0155 0156 /** 0157 * Unique ID of the event 0158 */ 0159 QString uid() const; 0160 0161 /** 0162 * Sets the uid of the event 0163 * 0164 * This is a mandatory field only if you want to use 0165 * the eventModified/eventRemoved signals, otherwise 0166 * setting it is optional 0167 * 0168 * @param uid A unique id, recommended is to use the plugin name as prefix (to keep it unique) 0169 */ 0170 void setUid(const QString &uid); 0171 0172 private: 0173 class Private; 0174 QSharedDataPointer<Private> d; 0175 }; 0176 0177 /** 0178 * @class CalendarEventsPlugin calendareventsplugin.h <CalendarEvents/CalendarEventsPlugin> 0179 * 0180 * Plugin for feeding events to a calendar instance. 0181 */ 0182 class CALENDAREVENTS_EXPORT CalendarEventsPlugin : public QObject 0183 { 0184 Q_OBJECT 0185 0186 public: 0187 enum class SubLabelPriority { 0188 Low, /**< Usually used in alternate calendars */ 0189 Default, /**< For holidays or normal events */ 0190 High, /**< For flagged or marked events */ 0191 Urgent, 0192 }; 0193 Q_ENUM(SubLabelPriority) 0194 0195 explicit CalendarEventsPlugin(QObject *parent = nullptr); 0196 ~CalendarEventsPlugin() override; 0197 0198 /** 0199 * When this is called, the plugin should load all events data 0200 * between those two date ranges. Once the data are ready, it should 0201 * just emit the dataReady() signal. The range is usually one month 0202 * 0203 * @param startDate the start of the range 0204 * @param endDate the end of the range 0205 */ 0206 virtual void loadEventsForDateRange(const QDate &startDate, const QDate &endDate) = 0; 0207 0208 struct SubLabel { 0209 QString label; /**< The label will be displayed in the tooltip or beside the full date */ 0210 QString yearLabel; /**< The label will be displayed under the year number */ 0211 QString monthLabel; /**< The label will be displayed under the month number */ 0212 QString dayLabel; /**< The label will be displayed under the day number */ 0213 SubLabelPriority priority = SubLabelPriority::Default; /**< The display priority of the sublabel */ 0214 }; 0215 0216 Q_SIGNALS: 0217 /** 0218 * Emitted when the plugin has loaded the events data 0219 * 0220 * @param data A hash containing a QDate key for the event 0221 * in the value, CalendarEvents::EventData, which holds all 0222 * the details for the given event 0223 * It's a multihash as there can be multiple events 0224 * in the same day 0225 * For multi-day events, insert just one with the key 0226 * being the startdate of the event 0227 */ 0228 void dataReady(const QMultiHash<QDate, CalendarEvents::EventData> &data); 0229 0230 /** 0231 * Should be emitted when there is a modification of an event 0232 * that was previously returned via the dataReady() signal 0233 * 0234 * @param event The modified event data 0235 */ 0236 void eventModified(const CalendarEvents::EventData &modifiedEvent); 0237 0238 /** 0239 * Should be emitted when the plugin removes some event 0240 * from its collection 0241 * 0242 * @param uid The uid of the event that was removed 0243 */ 0244 void eventRemoved(const QString &uid); 0245 0246 /** 0247 * Emitted when the plugin has loaded the alternate dates 0248 * 0249 * @param data A hash containing a QDate key from Gregorian calendar 0250 * for the alternate date in the value, QDate. 0251 * @since 6.0 0252 */ 0253 void alternateCalendarDateReady(const QHash<QDate, QCalendar::YearMonthDay> &data); 0254 0255 /** 0256 * Emitted when the plugin has loaded the sublabels 0257 * 0258 * @param data A hash containing a QDate key for the sublabels 0259 * in the value, SubLabel. 0260 * @since 5.95 0261 */ 0262 void subLabelReady(const QHash<QDate, SubLabel> &data); 0263 }; 0264 0265 /** 0266 * @class ShowEventInterface calendareventsplugin.h <CalendarEvents/CalendarEventsPlugin> 0267 * 0268 * Interface for displaying event details 0269 * 0270 * ShowEventInterface is an additional interface the CalendarEventsPlugin 0271 * implementations can implement if they support displaying details about 0272 * events (e.g. opening the event in KOrganizer). 0273 * 0274 * @since 5.61 0275 */ 0276 class CALENDAREVENTS_EXPORT ShowEventInterface 0277 { 0278 public: 0279 virtual ~ShowEventInterface(); 0280 0281 /** 0282 * When this is called, the plugin should show a window displaying the 0283 * full preview of the event. 0284 * 0285 * The plugin should return true if the event details can be displayed, false 0286 * otherwise. 0287 */ 0288 virtual bool showEvent(const QString &uid) = 0; 0289 }; 0290 0291 } 0292 0293 Q_DECLARE_INTERFACE(CalendarEvents::CalendarEventsPlugin, "org.kde.CalendarEventsPlugin") 0294 Q_DECLARE_INTERFACE(CalendarEvents::ShowEventInterface, "org.kde.CalendarEventsPlugin.ShowEventInterface") 0295 0296 #endif