Create data structures for a calendar page view.
CalendarPage.h@0:a3fc9e34ea9c, 2018-04-22 (annotated)
- Committer:
- WiredHome
- Date:
- Sun Apr 22 19:56:03 2018 +0000
- Revision:
- 0:a3fc9e34ea9c
Integrate CalendarPage into TimeInterface
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
WiredHome | 0:a3fc9e34ea9c | 1 | |
WiredHome | 0:a3fc9e34ea9c | 2 | |
WiredHome | 0:a3fc9e34ea9c | 3 | #ifndef CALENDARPAGE_H |
WiredHome | 0:a3fc9e34ea9c | 4 | #define CALENDARPAGE_H |
WiredHome | 0:a3fc9e34ea9c | 5 | |
WiredHome | 0:a3fc9e34ea9c | 6 | #include <mbed.h> |
WiredHome | 0:a3fc9e34ea9c | 7 | |
WiredHome | 0:a3fc9e34ea9c | 8 | #define CALENDAR_DATA_MAP_SIZE 37 |
WiredHome | 0:a3fc9e34ea9c | 9 | /// Creates a calendar for a specified Month and Year |
WiredHome | 0:a3fc9e34ea9c | 10 | /// |
WiredHome | 0:a3fc9e34ea9c | 11 | /// This class is a simple CalendarPage creator. For a specified |
WiredHome | 0:a3fc9e34ea9c | 12 | /// Month and Year, it will create a DayMap, which is a |
WiredHome | 0:a3fc9e34ea9c | 13 | /// simple array of entries that can be easily transformed |
WiredHome | 0:a3fc9e34ea9c | 14 | /// into a traditional CalendarPage. |
WiredHome | 0:a3fc9e34ea9c | 15 | /// |
WiredHome | 0:a3fc9e34ea9c | 16 | /// This code was pieced together with various online code |
WiredHome | 0:a3fc9e34ea9c | 17 | /// samples, none of which had any evidence of a coyright |
WiredHome | 0:a3fc9e34ea9c | 18 | /// statement. |
WiredHome | 0:a3fc9e34ea9c | 19 | /// |
WiredHome | 0:a3fc9e34ea9c | 20 | /// @code |
WiredHome | 0:a3fc9e34ea9c | 21 | /// CalendarPage c; |
WiredHome | 0:a3fc9e34ea9c | 22 | /// c.Compute(3, 2018); |
WiredHome | 0:a3fc9e34ea9c | 23 | /// for (int i=0; i<c.DayMapEntries(); i++) { |
WiredHome | 0:a3fc9e34ea9c | 24 | /// if (c.DayMap[i] == 0) |
WiredHome | 0:a3fc9e34ea9c | 25 | /// printf("%4s", ""); |
WiredHome | 0:a3fc9e34ea9c | 26 | /// else |
WiredHome | 0:a3fc9e34ea9c | 27 | /// printf("%4d", c.DayMap[i]); |
WiredHome | 0:a3fc9e34ea9c | 28 | /// } |
WiredHome | 0:a3fc9e34ea9c | 29 | /// printf("\n"); |
WiredHome | 0:a3fc9e34ea9c | 30 | /// @endcode |
WiredHome | 0:a3fc9e34ea9c | 31 | /// |
WiredHome | 0:a3fc9e34ea9c | 32 | class CalendarPage { |
WiredHome | 0:a3fc9e34ea9c | 33 | public: |
WiredHome | 0:a3fc9e34ea9c | 34 | /// Constructor for the CalendarPage class |
WiredHome | 0:a3fc9e34ea9c | 35 | /// |
WiredHome | 0:a3fc9e34ea9c | 36 | /// For a single instance, the constructor may be provided |
WiredHome | 0:a3fc9e34ea9c | 37 | /// with a Month and Year. For recurring usage, this is |
WiredHome | 0:a3fc9e34ea9c | 38 | /// generally not done, and instead the Compute method |
WiredHome | 0:a3fc9e34ea9c | 39 | /// is called with the parameters. |
WiredHome | 0:a3fc9e34ea9c | 40 | /// |
WiredHome | 0:a3fc9e34ea9c | 41 | /// @code |
WiredHome | 0:a3fc9e34ea9c | 42 | /// CalendarPage c(3, 2018); |
WiredHome | 0:a3fc9e34ea9c | 43 | /// for (int i=0; i<c.DayMapEntries(); i++) { |
WiredHome | 0:a3fc9e34ea9c | 44 | /// if (c.DayMap[i] == 0) |
WiredHome | 0:a3fc9e34ea9c | 45 | /// printf("%4s", ""); |
WiredHome | 0:a3fc9e34ea9c | 46 | /// else |
WiredHome | 0:a3fc9e34ea9c | 47 | /// printf("%4d", c.DayMap[i]); |
WiredHome | 0:a3fc9e34ea9c | 48 | /// } |
WiredHome | 0:a3fc9e34ea9c | 49 | /// printf("\n"); |
WiredHome | 0:a3fc9e34ea9c | 50 | /// @endcode |
WiredHome | 0:a3fc9e34ea9c | 51 | /// |
WiredHome | 0:a3fc9e34ea9c | 52 | /// @param[in] Month is optional and defaults to 1 (January). |
WiredHome | 0:a3fc9e34ea9c | 53 | /// @param[in] Year is optional and defaults to 2018. |
WiredHome | 0:a3fc9e34ea9c | 54 | /// |
WiredHome | 0:a3fc9e34ea9c | 55 | CalendarPage(uint8_t Month = 1, uint16_t Year = 2018); |
WiredHome | 0:a3fc9e34ea9c | 56 | |
WiredHome | 0:a3fc9e34ea9c | 57 | /// Compute the CalendarPage information, when recurring usage |
WiredHome | 0:a3fc9e34ea9c | 58 | /// is needed. |
WiredHome | 0:a3fc9e34ea9c | 59 | /// |
WiredHome | 0:a3fc9e34ea9c | 60 | /// This API can be used when more than a single CalendarPage is |
WiredHome | 0:a3fc9e34ea9c | 61 | /// needed. Alternately, if the constructor has no options, |
WiredHome | 0:a3fc9e34ea9c | 62 | /// this API is used to select the Month and Year. |
WiredHome | 0:a3fc9e34ea9c | 63 | /// |
WiredHome | 0:a3fc9e34ea9c | 64 | /// @note Erroneous parameters may cause unpredictable results. |
WiredHome | 0:a3fc9e34ea9c | 65 | /// |
WiredHome | 0:a3fc9e34ea9c | 66 | /// @code |
WiredHome | 0:a3fc9e34ea9c | 67 | /// CalendarPage c; |
WiredHome | 0:a3fc9e34ea9c | 68 | /// c.Compute(3, 2018); |
WiredHome | 0:a3fc9e34ea9c | 69 | /// for (int i=0; i<c.DayMapEntries(); i++) { |
WiredHome | 0:a3fc9e34ea9c | 70 | /// if (c.DayMap[i] == 0) |
WiredHome | 0:a3fc9e34ea9c | 71 | /// printf("%4s", ""); |
WiredHome | 0:a3fc9e34ea9c | 72 | /// else |
WiredHome | 0:a3fc9e34ea9c | 73 | /// printf("%4d", c.DayMap[i]); |
WiredHome | 0:a3fc9e34ea9c | 74 | /// } |
WiredHome | 0:a3fc9e34ea9c | 75 | /// printf("\n"); |
WiredHome | 0:a3fc9e34ea9c | 76 | /// @endcode |
WiredHome | 0:a3fc9e34ea9c | 77 | /// |
WiredHome | 0:a3fc9e34ea9c | 78 | /// @param[in] Month defines the month of interest; e.g. 1 = January, ... |
WiredHome | 0:a3fc9e34ea9c | 79 | /// @param[in] Year defines the year of interest; e.g. 2018 |
WiredHome | 0:a3fc9e34ea9c | 80 | /// @returns true if it computed the CalendarPage information. |
WiredHome | 0:a3fc9e34ea9c | 81 | /// |
WiredHome | 0:a3fc9e34ea9c | 82 | void Compute(uint8_t Month, uint16_t Year); |
WiredHome | 0:a3fc9e34ea9c | 83 | |
WiredHome | 0:a3fc9e34ea9c | 84 | /// The CalendarPage information, expressed as an accessible array. |
WiredHome | 0:a3fc9e34ea9c | 85 | /// |
WiredHome | 0:a3fc9e34ea9c | 86 | /// - There are DayMapEntries() in the Array index 0 to n-1. |
WiredHome | 0:a3fc9e34ea9c | 87 | /// - Each entry has either 0, or the day number in it. |
WiredHome | 0:a3fc9e34ea9c | 88 | /// |
WiredHome | 0:a3fc9e34ea9c | 89 | /// The information format is best represented in the following |
WiredHome | 0:a3fc9e34ea9c | 90 | /// visual. |
WiredHome | 0:a3fc9e34ea9c | 91 | /// @verbatim |
WiredHome | 0:a3fc9e34ea9c | 92 | /// DayMap[] array indices | DayMap populated |
WiredHome | 0:a3fc9e34ea9c | 93 | /// 0 1 2 3 4 5 6 | 0 0 0 0 0 0 1 |
WiredHome | 0:a3fc9e34ea9c | 94 | /// 7 8 9 10 11 12 13 | 2 3 4 5 6 7 8 |
WiredHome | 0:a3fc9e34ea9c | 95 | /// 14 15 16 17 18 19 20 | 9 10 11 12 13 14 15 |
WiredHome | 0:a3fc9e34ea9c | 96 | /// 21 22 23 24 25 26 27 | 16 17 18 19 20 21 22 |
WiredHome | 0:a3fc9e34ea9c | 97 | /// 28 29 30 31 32 33 34 | 23 24 25 26 27 28 29 |
WiredHome | 0:a3fc9e34ea9c | 98 | /// 35 36 | 30 31 |
WiredHome | 0:a3fc9e34ea9c | 99 | /// @endverbatim |
WiredHome | 0:a3fc9e34ea9c | 100 | /// |
WiredHome | 0:a3fc9e34ea9c | 101 | uint8_t DayMap[CALENDAR_DATA_MAP_SIZE]; |
WiredHome | 0:a3fc9e34ea9c | 102 | |
WiredHome | 0:a3fc9e34ea9c | 103 | /// Get the number of entries in the DayMap, to limit iterators. |
WiredHome | 0:a3fc9e34ea9c | 104 | /// |
WiredHome | 0:a3fc9e34ea9c | 105 | int DayMapEntries() { |
WiredHome | 0:a3fc9e34ea9c | 106 | return CALENDAR_DATA_MAP_SIZE; |
WiredHome | 0:a3fc9e34ea9c | 107 | } |
WiredHome | 0:a3fc9e34ea9c | 108 | private: |
WiredHome | 0:a3fc9e34ea9c | 109 | int firstday; |
WiredHome | 0:a3fc9e34ea9c | 110 | uint8_t month; |
WiredHome | 0:a3fc9e34ea9c | 111 | uint16_t year; |
WiredHome | 0:a3fc9e34ea9c | 112 | bool verbose; |
WiredHome | 0:a3fc9e34ea9c | 113 | }; |
WiredHome | 0:a3fc9e34ea9c | 114 | |
WiredHome | 0:a3fc9e34ea9c | 115 | |
WiredHome | 0:a3fc9e34ea9c | 116 | |
WiredHome | 0:a3fc9e34ea9c | 117 | |
WiredHome | 0:a3fc9e34ea9c | 118 | #endif // CALENDARPAGE_H |