Create data structures for a calendar page view.

Dependents:   TimeInterface

Committer:
WiredHome
Date:
Sun Apr 22 19:56:03 2018 +0000
Revision:
0:a3fc9e34ea9c
Integrate CalendarPage into TimeInterface

Who changed what in which revision?

UserRevisionLine numberNew 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