11#include " displayapp/screens/settings/Settings.h"
22#include < lvgl/lvgl.h>
3- #include < array>
4- #include " displayapp/screens/List.h"
3+ #include < functional>
54#include " displayapp/Apps.h"
65#include " displayapp/DisplayApp.h"
7- #include " displayapp/screens/Symbols.h"
86
97using namespace Pinetime ::Applications::Screens;
108
9+ constexpr std::array<List::Applications, Settings::entries.size()> Settings::entries;
10+
11+ auto Settings::CreateScreenList () const {
12+ std::array<std::function<std::unique_ptr<Screen>()>, nScreens> screens;
13+ for (size_t i = 0 ; i < screens.size (); i++) {
14+ screens[i] = [this , i]() -> std::unique_ptr<Screen> {
15+ return CreateScreen (i);
16+ };
17+ }
18+ return screens;
19+ }
20+
1121Settings::Settings (Pinetime::Applications::DisplayApp* app, Pinetime::Controllers::Settings& settingsController)
1222 : Screen(app),
1323 settingsController {settingsController},
14- screens {app,
15- settingsController.GetSettingsMenu (),
16- {
17- [this ]() -> std::unique_ptr<Screen> {
18- return CreateScreen1 ();
19- },
20- [this ]() -> std::unique_ptr<Screen> {
21- return CreateScreen2 ();
22- },
23- [this ]() -> std::unique_ptr<Screen> {
24- return CreateScreen3 ();
25- },
26- [this ]() -> std::unique_ptr<Screen> {
27- return CreateScreen4 ();
28- },
29- },
30- Screens::ScreenListModes::UpDown} {
24+ screens {app, settingsController.GetSettingsMenu (), CreateScreenList (), Screens::ScreenListModes::UpDown} {
3125}
3226
3327Settings::~Settings () {
@@ -38,48 +32,11 @@ bool Settings::OnTouchEvent(Pinetime::Applications::TouchEvents event) {
3832 return screens.OnTouchEvent (event);
3933}
4034
41- std::unique_ptr<Screen> Settings::CreateScreen1 () {
42- std::array<Screens::List::Applications, 4 > applications {{
43- {Symbols::sun, " Display" , Apps::SettingDisplay},
44- {Symbols::eye, " Wake Up" , Apps::SettingWakeUp},
45- {Symbols::clock, " Time format" , Apps::SettingTimeFormat},
46- {Symbols::home, " Watch face" , Apps::SettingWatchFace},
47- }};
48-
49- return std::make_unique<Screens::List>(0 , 4 , app, settingsController, applications);
50- }
51-
52- std::unique_ptr<Screen> Settings::CreateScreen2 () {
53- std::array<Screens::List::Applications, 4 > applications {{
54- {Symbols::shoe, " Steps" , Apps::SettingSteps},
55- {Symbols::clock, " Set date" , Apps::SettingSetDate},
56- {Symbols::clock, " Set time" , Apps::SettingSetTime},
57- {Symbols::batteryHalf, " Battery" , Apps::BatteryInfo},
58- }};
59-
60- return std::make_unique<Screens::List>(1 , 4 , app, settingsController, applications);
61- }
62-
63- std::unique_ptr<Screen> Settings::CreateScreen3 () {
64-
65- std::array<Screens::List::Applications, 4 > applications {{
66- {Symbols::clock, " Chimes" , Apps::SettingChimes},
67- {Symbols::tachometer, " Shake Calib." , Apps::SettingShakeThreshold},
68- {Symbols::check, " Firmware" , Apps::FirmwareValidation},
69- {Symbols::bluetooth, " Bluetooth" , Apps::SettingBluetooth},
70- }};
71-
72- return std::make_unique<Screens::List>(2 , 4 , app, settingsController, applications);
73- }
74-
75- std::unique_ptr<Screen> Settings::CreateScreen4 () {
76-
77- std::array<Screens::List::Applications, 4 > applications {{
78- {Symbols::list, " About" , Apps::SysInfo},
79- {Symbols::none, " None" , Apps::None},
80- {Symbols::none, " None" , Apps::None},
81- {Symbols::none, " None" , Apps::None},
82- }};
35+ std::unique_ptr<Screen> Settings::CreateScreen (unsigned int screenNum) const {
36+ std::array<List::Applications, entriesPerScreen> screens;
37+ for (int i = 0 ; i < entriesPerScreen; i++) {
38+ screens[i] = entries[screenNum * entriesPerScreen + i];
39+ }
8340
84- return std::make_unique<Screens::List>(3 , 4 , app, settingsController, applications );
41+ return std::make_unique<Screens::List>(screenNum, nScreens , app, settingsController, screens );
8542}
0 commit comments