InfiniTime.git

commit 3eebe0244872818d7b96d4dae3e55e3548941bda

Author: Riku Isokoski <riksu9000@gmail.com>

Add support for months and variable digit count to Counter

 src/displayapp/widgets/Counter.cpp | 27 ++++++++++++++++++++++++---
 src/displayapp/widgets/Counter.h | 5 ++++-


diff --git a/src/displayapp/widgets/Counter.cpp b/src/displayapp/widgets/Counter.cpp
index 04a275da9bff8638892e3ea6a8fa49015ec53c52..d8a1626e6e1f5d804801a390c9a194a9ea7d53a5 100644
--- a/src/displayapp/widgets/Counter.cpp
+++ b/src/displayapp/widgets/Counter.cpp
@@ -1,4 +1,5 @@
 #include "displayapp/widgets/Counter.h"
+#include "components/datetime/DateTimeController.h"
 
 using namespace Pinetime::Applications::Widgets;
 
@@ -18,7 +19,7 @@     }
   }
 }
 
-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() {
@@ -74,6 +75,8 @@       lv_label_set_text_fmt(number, "%.2i", value);
     } else {
       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 {
     lv_label_set_text_fmt(number, "%.2i", value);
   }
@@ -85,6 +88,20 @@ void Counter::EnableTwelveHourMode() {
   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)) {
   this->userData = userData;
   this->ValueChangedHandler = handler;
@@ -100,10 +117,14 @@   number = lv_label_create(counterContainer, nullptr);
   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_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;
-  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;
   const uint8_t containerHeight = btnHeight * 2 + lv_obj_get_height(number) + padding * 2;
 




diff --git a/src/displayapp/widgets/Counter.h b/src/displayapp/widgets/Counter.h
index 13b336ca1fce517c82336b47a2ceb3313ba14f2c..d38dd9d79976d5d97b9e2dbc8f2604415f90c0bb 100644
--- a/src/displayapp/widgets/Counter.h
+++ b/src/displayapp/widgets/Counter.h
@@ -15,6 +15,8 @@         void SetValue(int newValue);
         void HideControls();
         void ShowControls();
         void EnableTwelveHourMode();
+        void EnableMonthMode();
+        void SetMax(int newMax);
         void SetValueChangedEventCallback(void* userData, void (*handler)(void* userData));
 
         int GetValue() const {
@@ -36,10 +38,11 @@         lv_obj_t* number;
         lv_obj_t* upperLine;
         lv_obj_t* lowerLine;
         lv_point_t linePoints[2];
-        int value = 0;
         int min;
         int max;
+        int value;
         bool twelveHourMode = false;
+        bool monthMode = false;
         lv_font_t& font;
 
         void* userData = nullptr;