NAP
calendaritem.h
1 /* This Source Code Form is subject to the terms of the Mozilla Public
2  * License, v. 2.0. If a copy of the MPL was not distributed with this
3  * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4 
5 #pragma once
6 
7 // External Includes
8 #include <nap/resource.h>
9 #include <nap/datetime.h>
10 #include <nap/numeric.h>
11 
12 namespace nap
13 {
22  class NAPAPI CalendarItem : public Resource
23  {
24  RTTI_ENABLE(Resource)
25  public:
26 
31  struct NAPAPI Time
32  {
33  Time() = default;
34  Time(int hour, int minute);
35  uint mHour = 0;
36  uint mMinute = 0;
37  nap::Minutes toMinutes() const;
38 
42  std::string toString() const;
43 
49  static Time fromString(const std::string& time);
50  };
51 
56  struct NAPAPI Point
57  {
58  Point() = default;
59  Point(Time time, Time duration);
62  bool valid() const;
63  };
64 
65  // Default Constructor
66  CalendarItem() = default;
67 
68  // Item constructor
69  CalendarItem(const Point& point, const std::string& title);
70 
76  bool init(utility::ErrorState& errorState) override;
77 
85  virtual bool active(SystemTimeStamp timeStamp) const = 0;
86 
91  void setTitle(const std::string& title);
92 
96  const std::string& getTitle() const;
97 
102  void setDescription(const std::string& description);
103 
107  const std::string& getDescription() const;
108 
114  bool setPoint(const Point& point);
115 
119  const Point& getPoint() const;
120 
126  bool setTime(const Time& time);
127 
131  const Time& getTime() const;
132 
138  void setDuration(const Time& duration);
139 
143  const Time& getDuration() const;
144 
145  std::string mTitle = "";
147  std::string mDescription = "";
148  };
149 
150 
152  // Unique
154 
158  class NAPAPI UniqueCalendarItem : public CalendarItem
159  {
160  RTTI_ENABLE(CalendarItem)
161  public:
162 
163  // Default constructor
164  UniqueCalendarItem() = default;
165 
166  // Argument constructor
167  UniqueCalendarItem(const CalendarItem::Point& point, const std::string& title, const Date& date);
168 
174  bool init(utility::ErrorState& errorState) override;
175 
181  bool setDate(const nap::Date& date);
182 
186  const nap::Date& getDate() const;
187 
192  virtual bool active(SystemTimeStamp timeStamp) const override;
193 
195  };
196 
197 
199  // Yearly
201 
205  class NAPAPI YearlyCalendarItem : public CalendarItem
206  {
207  RTTI_ENABLE(CalendarItem)
208  public:
209 
210  // Default constructor
211  YearlyCalendarItem() = default;
212 
213  // Argument constructor
214  YearlyCalendarItem(const CalendarItem::Point& point, const std::string& title, EMonth month, int day);
215 
221  bool init(utility::ErrorState& errorState) override;
222 
229  bool setDate(EMonth month, int day);
230 
235  virtual bool active(SystemTimeStamp timeStamp) const override;
236 
237  int mDay = 1;
239  };
240 
241 
243  // Monthly
245 
249  class NAPAPI MonthlyCalendarItem : public CalendarItem
250  {
251  RTTI_ENABLE(CalendarItem)
252  public:
253 
254  // Default constructor
255  MonthlyCalendarItem() = default;
256 
257  // Argument constructor
258  MonthlyCalendarItem(const CalendarItem::Point& point, const std::string& title, int day);
259 
263  bool init(utility::ErrorState& errorState) override;
264 
270  bool setDay(int day);
271 
275  int getDay() const { return mDay; }
276 
281  virtual bool active(SystemTimeStamp timeStamp) const override;
282 
283  int mDay = 1;
284  };
285 
286 
288  // Weekly
290 
294  class NAPAPI WeeklyCalendarItem : public CalendarItem
295  {
296  RTTI_ENABLE(CalendarItem)
297  public:
298 
299  // Default constructor
300  WeeklyCalendarItem() = default;
301 
302  // Argument constructor
303  WeeklyCalendarItem(const CalendarItem::Point& point, const std::string& title, EDay day);
304 
310  bool init(utility::ErrorState& errorState) override;
311 
317  bool setDay(EDay day);
318 
322  EDay getDay() const;
323 
328  virtual bool active(SystemTimeStamp timeStamp) const override;
329 
331  };
332 
333 
335  // Daily
337 
341  class NAPAPI DailyCalendarItem : public CalendarItem
342  {
343  RTTI_ENABLE(CalendarItem)
344  public:
345  // Default constructor
346  DailyCalendarItem() = default;
347 
348  // Argument constructor
349  DailyCalendarItem(const CalendarItem::Point& point, const std::string& title);
350 
356  bool init(utility::ErrorState& errorState) override;
357 
362  virtual bool active(SystemTimeStamp timeStamp) const override;
363  };
364 }
nap::uint
unsigned int uint
Definition: numeric.h:23
nap::CalendarItem::Time
Definition: calendaritem.h:31
nap::toString
NAPAPI std::string toString(EDay day)
nap::MonthlyCalendarItem
Definition: calendaritem.h:249
nap::Minutes
std::chrono::minutes Minutes
Minutes type definition.
Definition: datetime.h:26
nap::CalendarItem::mPoint
Point mPoint
Property; 'Point' point in time together with duration.
Definition: calendaritem.h:146
nap::YearlyCalendarItem
Definition: calendaritem.h:205
nap::SystemTimeStamp
std::chrono::time_point< SystemClock > SystemTimeStamp
Point in time associated with the SystemClock.
Definition: datetime.h:28
nap::CalendarItem::Point
Definition: calendaritem.h:56
nap::CalendarItem::Point::mTime
Time mTime
Property: 'Time' time of the event: hours (0-23) & minutes (0-59)
Definition: calendaritem.h:60
nap::utility::ErrorState
Definition: errorstate.h:19
nap::EMonth::Unknown
@ Unknown
Unknown.
nap::CalendarItem::Point::mDuration
Time mDuration
Property: 'Duration' length of event: hours (0-X) & minutes (0-59). Duration of 0 = never.
Definition: calendaritem.h:61
nap::EMonth
EMonth
Definition: datetime.h:132
nap::Date
Definition: datetime.h:302
nap::EDay::Monday
@ Monday
Monday.
nap::MonthlyCalendarItem::getDay
int getDay() const
Definition: calendaritem.h:275
nap::UniqueCalendarItem::mDate
nap::Date mDate
Property: 'Date' calendar date.
Definition: calendaritem.h:194
nap::UniqueCalendarItem
Definition: calendaritem.h:158
nap::CalendarItem
Definition: calendaritem.h:22
nap::rtti::getDescription
const NAPAPI char * getDescription(const rtti::Property &property)
nap::EDay
EDay
Definition: datetime.h:92
nap
Definition: templateapp.h:17
nap::WeeklyCalendarItem
Definition: calendaritem.h:294
nap::Resource
Definition: resource.h:19
nap::DailyCalendarItem
Definition: calendaritem.h:341