From b49fddd555849c207d6bb235b891b1da1ed99728 Mon Sep 17 00:00:00 2001 From: Kieran Cawthray Date: Tue, 6 Sep 2022 11:37:12 +0200 Subject: [PATCH] Implement persistent settings --- src/components/settings/Settings.h | 15 ++++++- .../screens/WatchFacePineTimeStyle.cpp | 43 +++++++++++++++---- 2 files changed, 48 insertions(+), 10 deletions(-) diff --git a/src/components/settings/Settings.h b/src/components/settings/Settings.h index 478408f6..cab909e7 100644 --- a/src/components/settings/Settings.h +++ b/src/components/settings/Settings.h @@ -36,10 +36,13 @@ namespace Pinetime { Purple, Orange }; + enum class PTSGaugeStyle : uint8_t { Full, Half, Numeric }; + struct PineTimeStyle { Colors ColorTime = Colors::Teal; Colors ColorBar = Colors::Teal; Colors ColorBG = Colors::Black; + PTSGaugeStyle gaugeStyle = PTSGaugeStyle::Full; }; Settings(Pinetime::Controllers::FS& fs); @@ -94,6 +97,15 @@ namespace Pinetime { return settings.PTS.ColorBG; }; + void SetPTSGaugeStyle(PTSGaugeStyle gaugeStyle) { + if (gaugeStyle != settings.PTS.gaugeStyle) + settingsChanged = true; + settings.PTS.gaugeStyle = gaugeStyle; + }; + PTSGaugeStyle GetPTSGaugeStyle() const { + return settings.PTS.gaugeStyle; + }; + void SetAppMenu(uint8_t menu) { appMenu = menu; }; @@ -212,7 +224,7 @@ namespace Pinetime { private: Pinetime::Controllers::FS& fs; - static constexpr uint32_t settingsVersion = 0x0003; + static constexpr uint32_t settingsVersion = 0x0004; struct SettingsData { uint32_t version = settingsVersion; uint32_t stepsGoal = 10000; @@ -225,6 +237,7 @@ namespace Pinetime { ChimesOption chimesOption = ChimesOption::None; PineTimeStyle PTS; + //PineTimeStyle::GaugeStyle gaugeStyle = PineTimeStyle::GaugeStyle::Full; std::bitset<4> wakeUpMode {0}; uint16_t shakeWakeThreshold = 150; diff --git a/src/displayapp/screens/WatchFacePineTimeStyle.cpp b/src/displayapp/screens/WatchFacePineTimeStyle.cpp index a387246b..161a2606 100644 --- a/src/displayapp/screens/WatchFacePineTimeStyle.cpp +++ b/src/displayapp/screens/WatchFacePineTimeStyle.cpp @@ -172,14 +172,24 @@ WatchFacePineTimeStyle::WatchFacePineTimeStyle(DisplayApp* app, } stepGauge = lv_gauge_create(lv_scr_act(), nullptr); lv_gauge_set_needle_count(stepGauge, 1, needle_colors); - lv_obj_set_size(stepGauge, 40, 40); - lv_obj_align(stepGauge, sidebar, LV_ALIGN_IN_BOTTOM_MID, 0, 0); - lv_gauge_set_scale(stepGauge, 360, 11, 0); - lv_gauge_set_angle_offset(stepGauge, 180); - lv_gauge_set_critical_value(stepGauge, 100); lv_gauge_set_range(stepGauge, 0, 100); lv_gauge_set_value(stepGauge, 0, 0); - + if (settingsController.GetPTSGaugeStyle() == Pinetime::Controllers::Settings::PTSGaugeStyle::Full) { + lv_obj_set_size(stepGauge, 40, 40); + lv_obj_align(stepGauge, sidebar, LV_ALIGN_IN_BOTTOM_MID, 0, 0); + lv_gauge_set_scale(stepGauge, 360, 11, 0); + lv_gauge_set_angle_offset(stepGauge, 180); + lv_gauge_set_critical_value(stepGauge, 100); + } else if (settingsController.GetPTSGaugeStyle() == Pinetime::Controllers::Settings::PTSGaugeStyle::Half) { + lv_obj_set_size(stepGauge, 37, 37); + lv_obj_align(stepGauge, sidebar, LV_ALIGN_IN_BOTTOM_MID, 0, -10); + lv_gauge_set_scale(stepGauge, 180, 5, 0); + lv_gauge_set_angle_offset(stepGauge, 0); + lv_gauge_set_critical_value(stepGauge, 120); + } else if (settingsController.GetPTSGaugeStyle() == Pinetime::Controllers::Settings::PTSGaugeStyle::Numeric) { + lv_obj_set_hidden(stepGauge, true); + } + lv_obj_set_style_local_pad_right(stepGauge, LV_GAUGE_PART_MAIN, LV_STATE_DEFAULT, 3); lv_obj_set_style_local_pad_left(stepGauge, LV_GAUGE_PART_MAIN, LV_STATE_DEFAULT, 3); lv_obj_set_style_local_pad_bottom(stepGauge, LV_GAUGE_PART_MAIN, LV_STATE_DEFAULT, 3); @@ -195,20 +205,32 @@ WatchFacePineTimeStyle::WatchFacePineTimeStyle(DisplayApp* app, lv_obj_set_style_local_text_color(stepValue, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_BLACK); lv_label_set_text_static(stepValue, "0"); lv_obj_align(stepValue, sidebar, LV_ALIGN_IN_BOTTOM_MID, 0, 0); - lv_obj_set_hidden(stepValue, true); + if (settingsController.GetPTSGaugeStyle() == Pinetime::Controllers::Settings::PTSGaugeStyle::Numeric) { + lv_obj_set_hidden(stepValue, false); + } else { + lv_obj_set_hidden(stepValue, true); + } stepIcon = lv_label_create(lv_scr_act(), nullptr); lv_obj_set_style_local_text_color(stepIcon, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_BLACK); lv_label_set_text_static(stepIcon, Symbols::shoe); lv_obj_align(stepIcon, stepValue, LV_ALIGN_OUT_TOP_MID, 0, 0); - lv_obj_set_hidden(stepIcon, true); + if (settingsController.GetPTSGaugeStyle() == Pinetime::Controllers::Settings::PTSGaugeStyle::Numeric) { + lv_obj_set_hidden(stepIcon, false); + } else { + lv_obj_set_hidden(stepIcon, true); + } // Display seconds timeDD3 = lv_label_create(lv_scr_act(), nullptr); lv_obj_set_style_local_text_color(timeDD3, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_BLACK); lv_label_set_text_static(timeDD3, ":00"); lv_obj_align(timeDD3, sidebar, LV_ALIGN_IN_BOTTOM_MID, 0, 0); - lv_obj_set_hidden(timeDD3, true); + if (settingsController.GetPTSGaugeStyle() == Pinetime::Controllers::Settings::PTSGaugeStyle::Half) { + lv_obj_set_hidden(timeDD3, false); + } else { + lv_obj_set_hidden(timeDD3, true); + } btnNextTime = lv_btn_create(lv_scr_act(), nullptr); btnNextTime->user_data = this; @@ -611,12 +633,14 @@ void WatchFacePineTimeStyle::UpdateSelected(lv_obj_t* object, lv_event_t event) lv_gauge_set_scale(stepGauge, 180, 5, 0); lv_gauge_set_angle_offset(stepGauge, 0); lv_gauge_set_critical_value(stepGauge, 120); + settingsController.SetPTSGaugeStyle(Controllers::Settings::PTSGaugeStyle::Half); } else if (!lv_obj_get_hidden(timeDD3) && (lv_obj_get_hidden(stepValue))) { // show step count & icon lv_obj_set_hidden(timeDD3, true); lv_obj_set_hidden(stepGauge, true); lv_obj_set_hidden(stepValue, false); lv_obj_set_hidden(stepIcon, false); + settingsController.SetPTSGaugeStyle(Controllers::Settings::PTSGaugeStyle::Numeric); } else { // show full gauge lv_obj_set_hidden(stepGauge, false); @@ -627,6 +651,7 @@ void WatchFacePineTimeStyle::UpdateSelected(lv_obj_t* object, lv_event_t event) lv_gauge_set_scale(stepGauge, 360, 11, 0); lv_gauge_set_angle_offset(stepGauge, 180); lv_gauge_set_critical_value(stepGauge, 100); + settingsController.SetPTSGaugeStyle(Controllers::Settings::PTSGaugeStyle::Full); } } if (object == btnSetColor) {