From f049f382f03c946b967e1a53368c82f845299cb4 Mon Sep 17 00:00:00 2001 From: JF Date: Sat, 18 Jan 2020 18:17:52 +0100 Subject: Encapsulate the drawing of the screen into Screens classes. --- src/DisplayApp/Screens/Clock.h | 65 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 src/DisplayApp/Screens/Clock.h (limited to 'src/DisplayApp/Screens/Clock.h') diff --git a/src/DisplayApp/Screens/Clock.h b/src/DisplayApp/Screens/Clock.h new file mode 100644 index 00000000..12dd8850 --- /dev/null +++ b/src/DisplayApp/Screens/Clock.h @@ -0,0 +1,65 @@ +#pragma once + +#include +#include +#include +#include "Screen.h" +#include +#include "../Fonts/lcdfont14.h" +#include "../Fonts/lcdfont70.h" +#include "../../Version.h" + +namespace Pinetime { + namespace Applications { + namespace Screens { + + template + class DirtyValue { + public: + explicit DirtyValue(T v) { value = v; } + explicit DirtyValue(T& v) { value = v; } + bool IsUpdated() const { return isUpdated; } + T& Get() { return value; this->isUpdated = false;} + + DirtyValue& operator=(const T& other) { + this->value = other; + this->isUpdated = true; + return *this; + } + private: + T value; + bool isUpdated = true; + }; + class Clock : public Screen{ + public: + enum class BleConnectionStates{ NotConnected, Connected}; + Clock(Components::Gfx& gfx) : Screen(gfx), currentDateTime{{}}, version {{}} {} + void Refresh(bool fullRefresh) override; + + void SetBatteryPercentRemaining(uint8_t percent) { batteryPercentRemaining = percent; } + void SetBleConnectionState(BleConnectionStates state) { bleState = state; } + void SetCurrentDateTime(const std::chrono::time_point& tp) { currentDateTime = tp;} + + private: + static const char* MonthToString(Pinetime::Controllers::DateTime::Months month); + static const char* DayOfWeekToString(Pinetime::Controllers::DateTime::Days dayOfWeek); + static char const *DaysString[]; + static char const *MonthsString[]; + + const FONT_INFO largeFont {lCD_70ptFontInfo.height, lCD_70ptFontInfo.startChar, lCD_70ptFontInfo.endChar, lCD_70ptFontInfo.spacePixels, lCD_70ptFontInfo.charInfo, lCD_70ptFontInfo.data}; + const FONT_INFO smallFont {lCD_14ptFontInfo.height, lCD_14ptFontInfo.startChar, lCD_14ptFontInfo.endChar, lCD_14ptFontInfo.spacePixels, lCD_14ptFontInfo.charInfo, lCD_14ptFontInfo.data}; + + char currentChar[4]; + uint16_t currentYear = 1970; + Pinetime::Controllers::DateTime::Months currentMonth = Pinetime::Controllers::DateTime::Months::Unknown; + Pinetime::Controllers::DateTime::Days currentDayOfWeek = Pinetime::Controllers::DateTime::Days::Unknown; + uint8_t currentDay = 0; + + DirtyValue batteryPercentRemaining {0}; + DirtyValue bleState {BleConnectionStates::NotConnected}; + DirtyValue> currentDateTime; + DirtyValue version; + }; + } + } +} -- cgit v1.2.3