aboutsummaryrefslogtreecommitdiffstats
path: root/src/displayapp/screens/settings/SettingWatchFace.cpp
diff options
context:
space:
mode:
authorJean-François Milants <jf@codingfield.com>2023-12-24 11:44:37 +0100
committerJF <JF002@users.noreply.github.com>2024-01-06 14:44:10 +0100
commit22f6d4a40b6715b436f5eb3bf8524fa955eccd20 (patch)
tree71f344d3187b6b3d92712ab1d0a3440a1220c9b9 /src/displayapp/screens/settings/SettingWatchFace.cpp
parent12acef6a71602c1f8425202560209355da1ce97b (diff)
Watch face selection using CMake
The list of watch face to build into the firmware is now set by CMake (-DENABLE_WATCHFACES). Fix SettingWatchFace : convert to index to/from WatchFace when needed.
Diffstat (limited to 'src/displayapp/screens/settings/SettingWatchFace.cpp')
-rw-r--r--src/displayapp/screens/settings/SettingWatchFace.cpp42
1 files changed, 37 insertions, 5 deletions
diff --git a/src/displayapp/screens/settings/SettingWatchFace.cpp b/src/displayapp/screens/settings/SettingWatchFace.cpp
index f052573c..e01e9f84 100644
--- a/src/displayapp/screens/settings/SettingWatchFace.cpp
+++ b/src/displayapp/screens/settings/SettingWatchFace.cpp
@@ -9,6 +9,37 @@ using namespace Pinetime::Applications::Screens;
constexpr const char* SettingWatchFace::title;
constexpr const char* SettingWatchFace::symbol;
+namespace {
+ uint32_t IndexOf(const std::array<Pinetime::Applications::Screens::SettingWatchFace::Item,
+ Pinetime::Applications::UserWatchFaceTypes::Count>& watchfaces,
+ Pinetime::Applications::WatchFace watchface) {
+ size_t index = 0;
+ auto found = std::find_if(watchfaces.begin(),
+ watchfaces.end(),
+ [&index, &watchface](const Pinetime::Applications::Screens::SettingWatchFace::Item& item) {
+ const bool result = item.watchface == watchface;
+ if (!result) {
+ index++;
+ }
+ return result;
+ });
+ if (found == watchfaces.end()) {
+ index = 0;
+ }
+
+ return index;
+ }
+
+ Pinetime::Applications::WatchFace IndexToWatchFace(const std::array<Pinetime::Applications::Screens::SettingWatchFace::Item,
+ Pinetime::Applications::UserWatchFaceTypes::Count>& watchfaces,
+ size_t index) {
+ if (index >= watchfaces.size()) {
+ return watchfaces[0].watchface;
+ }
+ return watchfaces[index].watchface;
+ }
+}
+
auto SettingWatchFace::CreateScreenList() const {
std::array<std::function<std::unique_ptr<Screen>()>, nScreens> screens;
for (size_t i = 0; i < screens.size(); i++) {
@@ -20,7 +51,7 @@ auto SettingWatchFace::CreateScreenList() const {
}
SettingWatchFace::SettingWatchFace(Pinetime::Applications::DisplayApp* app,
- std::array<Screens::CheckboxList::Item, UserWatchFaceTypes::Count>&& watchfaceItems,
+ std::array<Screens::SettingWatchFace::Item, UserWatchFaceTypes::Count>&& watchfaceItems,
Pinetime::Controllers::Settings& settingsController,
Pinetime::Controllers::FS& filesystem)
: app {app},
@@ -44,7 +75,8 @@ std::unique_ptr<Screen> SettingWatchFace::CreateScreen(unsigned int screenNum) c
if (i + (screenNum * settingsPerScreen) >= watchfaceItems.size()) {
watchfacesOnThisScreen[i] = {"", false};
} else {
- watchfacesOnThisScreen[i] = watchfaceItems[i + (screenNum * settingsPerScreen)];
+ auto& item = watchfaceItems[i + (screenNum * settingsPerScreen)];
+ watchfacesOnThisScreen[i] = Screens::CheckboxList::Item {item.name, item.enabled};
}
}
@@ -53,9 +85,9 @@ std::unique_ptr<Screen> SettingWatchFace::CreateScreen(unsigned int screenNum) c
nScreens,
title,
symbol,
- static_cast<uint32_t>(settingsController.GetWatchFace()),
- [&settings = settingsController](uint32_t index) {
- settings.SetWatchFace(static_cast<WatchFace>(index));
+ static_cast<uint32_t>(IndexOf(watchfaceItems, settingsController.GetWatchFace())),
+ [this, &settings = settingsController](uint32_t index) {
+ settings.SetWatchFace(IndexToWatchFace(watchfaceItems, index));
settings.SaveSettings();
},
watchfacesOnThisScreen);