Add support for months and variable digit count to Counter
This commit is contained in:
parent
8e72cf380f
commit
3eebe02448
|
@ -1,4 +1,5 @@
|
||||||
#include "displayapp/widgets/Counter.h"
|
#include "displayapp/widgets/Counter.h"
|
||||||
|
#include "components/datetime/DateTimeController.h"
|
||||||
|
|
||||||
using namespace Pinetime::Applications::Widgets;
|
using namespace Pinetime::Applications::Widgets;
|
||||||
|
|
||||||
|
@ -18,7 +19,7 @@ namespace {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Counter::Counter(int min, int max, lv_font_t& font) : min {min}, max {max}, font {font} {
|
Counter::Counter(int min, int max, lv_font_t& font) : min {min}, max {max}, value {min}, font {font} {
|
||||||
}
|
}
|
||||||
|
|
||||||
void Counter::UpBtnPressed() {
|
void Counter::UpBtnPressed() {
|
||||||
|
@ -74,6 +75,8 @@ void Counter::UpdateLabel() {
|
||||||
} else {
|
} else {
|
||||||
lv_label_set_text_fmt(number, "%.2i", value - 12);
|
lv_label_set_text_fmt(number, "%.2i", value - 12);
|
||||||
}
|
}
|
||||||
|
} else if (monthMode) {
|
||||||
|
lv_label_set_text(number, Controllers::DateTime::MonthShortToStringLow(static_cast<Controllers::DateTime::Months>(value)));
|
||||||
} else {
|
} else {
|
||||||
lv_label_set_text_fmt(number, "%.2i", value);
|
lv_label_set_text_fmt(number, "%.2i", value);
|
||||||
}
|
}
|
||||||
|
@ -85,6 +88,20 @@ void Counter::EnableTwelveHourMode() {
|
||||||
twelveHourMode = true;
|
twelveHourMode = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Value is kept between 1 and 12, but the displayed value is the corresponding month
|
||||||
|
// Make sure to set the max and min values to 1 and 12. Otherwise behaviour is undefined
|
||||||
|
void Counter::EnableMonthMode() {
|
||||||
|
monthMode = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Counter::SetMax(int newMax) {
|
||||||
|
max = newMax;
|
||||||
|
if (value > max) {
|
||||||
|
value = max;
|
||||||
|
UpdateLabel();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void Counter::SetValueChangedEventCallback(void* userData, void (*handler)(void* userData)) {
|
void Counter::SetValueChangedEventCallback(void* userData, void (*handler)(void* userData)) {
|
||||||
this->userData = userData;
|
this->userData = userData;
|
||||||
this->ValueChangedHandler = handler;
|
this->ValueChangedHandler = handler;
|
||||||
|
@ -100,10 +117,14 @@ void Counter::Create() {
|
||||||
lv_obj_set_style_local_text_font(number, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, &font);
|
lv_obj_set_style_local_text_font(number, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, &font);
|
||||||
lv_obj_align(number, nullptr, LV_ALIGN_CENTER, 0, 0);
|
lv_obj_align(number, nullptr, LV_ALIGN_CENTER, 0, 0);
|
||||||
lv_obj_set_auto_realign(number, true);
|
lv_obj_set_auto_realign(number, true);
|
||||||
lv_label_set_text_static(number, "00");
|
if (monthMode) {
|
||||||
|
lv_label_set_text_static(number, "Jan");
|
||||||
|
} else {
|
||||||
|
lv_label_set_text_fmt(number, "%d", max);
|
||||||
|
}
|
||||||
|
|
||||||
static constexpr uint8_t padding = 5;
|
static constexpr uint8_t padding = 5;
|
||||||
const uint8_t width = lv_obj_get_width(number) + padding * 2;
|
const uint8_t width = std::max(lv_obj_get_width(number) + padding * 2, 58);
|
||||||
static constexpr uint8_t btnHeight = 50;
|
static constexpr uint8_t btnHeight = 50;
|
||||||
const uint8_t containerHeight = btnHeight * 2 + lv_obj_get_height(number) + padding * 2;
|
const uint8_t containerHeight = btnHeight * 2 + lv_obj_get_height(number) + padding * 2;
|
||||||
|
|
||||||
|
|
|
@ -15,6 +15,8 @@ namespace Pinetime {
|
||||||
void HideControls();
|
void HideControls();
|
||||||
void ShowControls();
|
void ShowControls();
|
||||||
void EnableTwelveHourMode();
|
void EnableTwelveHourMode();
|
||||||
|
void EnableMonthMode();
|
||||||
|
void SetMax(int newMax);
|
||||||
void SetValueChangedEventCallback(void* userData, void (*handler)(void* userData));
|
void SetValueChangedEventCallback(void* userData, void (*handler)(void* userData));
|
||||||
|
|
||||||
int GetValue() const {
|
int GetValue() const {
|
||||||
|
@ -36,10 +38,11 @@ namespace Pinetime {
|
||||||
lv_obj_t* upperLine;
|
lv_obj_t* upperLine;
|
||||||
lv_obj_t* lowerLine;
|
lv_obj_t* lowerLine;
|
||||||
lv_point_t linePoints[2];
|
lv_point_t linePoints[2];
|
||||||
int value = 0;
|
|
||||||
int min;
|
int min;
|
||||||
int max;
|
int max;
|
||||||
|
int value;
|
||||||
bool twelveHourMode = false;
|
bool twelveHourMode = false;
|
||||||
|
bool monthMode = false;
|
||||||
lv_font_t& font;
|
lv_font_t& font;
|
||||||
|
|
||||||
void* userData = nullptr;
|
void* userData = nullptr;
|
||||||
|
|
Loading…
Reference in New Issue
Block a user