InfiniTime/src/displayapp/screens/Clock.h

100 lines
3.2 KiB
C
Raw Normal View History

#pragma once
2020-11-15 10:49:36 -05:00
#include <lvgl/src/lv_core/lv_obj.h>
#include <chrono>
2020-11-15 10:49:36 -05:00
#include <cstdint>
#include <memory>
#include "Screen.h"
2020-11-15 10:49:36 -05:00
#include "components/datetime/DateTimeController.h"
namespace Pinetime {
2020-11-15 10:49:36 -05:00
namespace Controllers {
class Battery;
class Ble;
class NotificationManager;
class HeartRateController;
2020-11-15 10:49:36 -05:00
}
namespace Applications {
namespace Screens {
template <class T>
class DirtyValue {
public:
explicit DirtyValue(T v) { value = v; }
explicit DirtyValue(T& v) { value = v; }
bool IsUpdated() const { return isUpdated; }
T& Get() { this->isUpdated = false; return value; }
DirtyValue& operator=(const T& other) {
if (this->value != other) {
this->value = other;
this->isUpdated = true;
}
return *this;
}
private:
T value;
bool isUpdated = true;
};
2020-11-15 10:49:36 -05:00
class Clock : public Screen {
public:
Clock(DisplayApp* app,
Controllers::DateTime& dateTimeController,
Controllers::Battery& batteryController,
Controllers::Ble& bleController,
Controllers::NotificationManager& notificatioManager,
Controllers::HeartRateController& heartRateController);
~Clock() override;
bool Refresh() override;
bool OnButtonPushed() override;
void OnObjectEvent(lv_obj_t *pObj, lv_event_t i);
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[];
char displayedChar[5];
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<int> batteryPercentRemaining {0};
DirtyValue<bool> bleState {false};
DirtyValue<std::chrono::time_point<std::chrono::system_clock, std::chrono::nanoseconds>> currentDateTime;
DirtyValue<uint32_t> stepCount {0};
DirtyValue<uint8_t> heartbeat {0};
DirtyValue<bool> heartbeatRunning {false};
DirtyValue<bool> notificationState {false};
2020-02-10 15:05:33 -05:00
lv_obj_t* label_time;
lv_obj_t* label_date;
lv_obj_t* backgroundLabel;
lv_obj_t* batteryIcon;
lv_obj_t* bleIcon;
lv_obj_t* batteryPlug;
lv_obj_t* heartbeatIcon;
lv_obj_t* heartbeatValue;
lv_obj_t* heartbeatBpm;
lv_obj_t* stepIcon;
lv_obj_t* stepValue;
lv_obj_t* notificationIcon;
Controllers::DateTime& dateTimeController;
Controllers::Battery& batteryController;
Controllers::Ble& bleController;
Controllers::NotificationManager& notificatioManager;
Controllers::HeartRateController& heartRateController;
2020-02-10 15:05:33 -05:00
bool running = true;
};
}
}
}