Skip to content

Commit 9b775c6

Browse files
authored
Automatically create screens for applist and settings (#1153)
Apps and settings are now stored in a single array (two arrays in total). Replace magic values with appsPerScreen and entriesPerScreen.
1 parent 10ca036 commit 9b775c6

4 files changed

Lines changed: 101 additions & 126 deletions

File tree

Lines changed: 20 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,23 @@
11
#include "displayapp/screens/ApplicationList.h"
22
#include <lvgl/lvgl.h>
3-
#include <array>
4-
#include "displayapp/screens/Symbols.h"
5-
#include "displayapp/screens/Tile.h"
3+
#include <functional>
64
#include "displayapp/Apps.h"
75
#include "displayapp/DisplayApp.h"
86

97
using namespace Pinetime::Applications::Screens;
108

9+
constexpr std::array<Tile::Applications, ApplicationList::applications.size()> ApplicationList::applications;
10+
11+
auto ApplicationList::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+
1121
ApplicationList::ApplicationList(Pinetime::Applications::DisplayApp* app,
1222
Pinetime::Controllers::Settings& settingsController,
1323
Pinetime::Controllers::Battery& batteryController,
@@ -16,18 +26,7 @@ ApplicationList::ApplicationList(Pinetime::Applications::DisplayApp* app,
1626
settingsController {settingsController},
1727
batteryController {batteryController},
1828
dateTimeController {dateTimeController},
19-
screens {app,
20-
settingsController.GetAppMenu(),
21-
{
22-
[this]() -> std::unique_ptr<Screen> {
23-
return CreateScreen1();
24-
},
25-
[this]() -> std::unique_ptr<Screen> {
26-
return CreateScreen2();
27-
},
28-
//[this]() -> std::unique_ptr<Screen> { return CreateScreen3(); }
29-
},
30-
Screens::ScreenListModes::UpDown} {
29+
screens {app, settingsController.GetAppMenu(), CreateScreenList(), Screens::ScreenListModes::UpDown} {
3130
}
3231

3332
ApplicationList::~ApplicationList() {
@@ -38,42 +37,11 @@ bool ApplicationList::OnTouchEvent(Pinetime::Applications::TouchEvents event) {
3837
return screens.OnTouchEvent(event);
3938
}
4039

41-
std::unique_ptr<Screen> ApplicationList::CreateScreen1() {
42-
std::array<Screens::Tile::Applications, 6> applications {{
43-
{Symbols::stopWatch, Apps::StopWatch},
44-
{Symbols::clock, Apps::Alarm},
45-
{Symbols::hourGlass, Apps::Timer},
46-
{Symbols::shoe, Apps::Steps},
47-
{Symbols::heartBeat, Apps::HeartRate},
48-
{Symbols::music, Apps::Music},
49-
}};
50-
51-
return std::make_unique<Screens::Tile>(0, 2, app, settingsController, batteryController, dateTimeController, applications);
52-
}
53-
54-
std::unique_ptr<Screen> ApplicationList::CreateScreen2() {
55-
std::array<Screens::Tile::Applications, 6> applications {{
56-
{Symbols::paintbrush, Apps::Paint},
57-
{Symbols::paddle, Apps::Paddle},
58-
{"2", Apps::Twos},
59-
{Symbols::chartLine, Apps::Motion},
60-
{Symbols::drum, Apps::Metronome},
61-
{Symbols::map, Apps::Navigation},
62-
}};
40+
std::unique_ptr<Screen> ApplicationList::CreateScreen(unsigned int screenNum) const {
41+
std::array<Tile::Applications, appsPerScreen> apps;
42+
for (int i = 0; i < appsPerScreen; i++) {
43+
apps[i] = applications[screenNum * appsPerScreen + i];
44+
}
6345

64-
return std::make_unique<Screens::Tile>(1, 2, app, settingsController, batteryController, dateTimeController, applications);
46+
return std::make_unique<Screens::Tile>(screenNum, nScreens, app, settingsController, batteryController, dateTimeController, apps);
6547
}
66-
67-
/*std::unique_ptr<Screen> ApplicationList::CreateScreen3() {
68-
std::array<Screens::Tile::Applications, 6> applications {
69-
{{"A", Apps::Meter},
70-
{"B", Apps::Navigation},
71-
{"C", Apps::Clock},
72-
{"D", Apps::Music},
73-
{"E", Apps::SysInfo},
74-
{"F", Apps::Brightness}
75-
}
76-
};
77-
78-
return std::make_unique<Screens::Tile>(2, 3, app, settingsController, batteryController, dateTimeController, applications);
79-
}*/

src/displayapp/screens/ApplicationList.h

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
11
#pragma once
22

3+
#include <array>
34
#include <memory>
45

56
#include "displayapp/screens/Screen.h"
67
#include "displayapp/screens/ScreenList.h"
78
#include "components/datetime/DateTimeController.h"
89
#include "components/settings/Settings.h"
910
#include "components/battery/BatteryController.h"
11+
#include "displayapp/screens/Symbols.h"
12+
#include "displayapp/screens/Tile.h"
1013

1114
namespace Pinetime {
1215
namespace Applications {
@@ -21,14 +24,34 @@ namespace Pinetime {
2124
bool OnTouchEvent(TouchEvents event) override;
2225

2326
private:
27+
auto CreateScreenList() const;
28+
std::unique_ptr<Screen> CreateScreen(unsigned int screenNum) const;
29+
2430
Controllers::Settings& settingsController;
2531
Pinetime::Controllers::Battery& batteryController;
2632
Controllers::DateTime& dateTimeController;
2733

28-
ScreenList<2> screens;
29-
std::unique_ptr<Screen> CreateScreen1();
30-
std::unique_ptr<Screen> CreateScreen2();
31-
// std::unique_ptr<Screen> CreateScreen3();
34+
static constexpr int appsPerScreen = 6;
35+
36+
// Increment this when more space is needed
37+
static constexpr int nScreens = 2;
38+
39+
static constexpr std::array<Tile::Applications, appsPerScreen * nScreens> applications {{
40+
{Symbols::stopWatch, Apps::StopWatch},
41+
{Symbols::clock, Apps::Alarm},
42+
{Symbols::hourGlass, Apps::Timer},
43+
{Symbols::shoe, Apps::Steps},
44+
{Symbols::heartBeat, Apps::HeartRate},
45+
{Symbols::music, Apps::Music},
46+
47+
{Symbols::paintbrush, Apps::Paint},
48+
{Symbols::paddle, Apps::Paddle},
49+
{"2", Apps::Twos},
50+
{Symbols::chartLine, Apps::Motion},
51+
{Symbols::drum, Apps::Metronome},
52+
{Symbols::map, Apps::Navigation},
53+
}};
54+
ScreenList<nScreens> screens;
3255
};
3356
}
3457
}
Lines changed: 20 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,27 @@
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

97
using 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+
1121
Settings::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

3327
Settings::~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
}

src/displayapp/screens/settings/Settings.h

Lines changed: 34 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
#pragma once
22

3-
#include <cstdint>
3+
#include <array>
4+
#include <memory>
45
#include "displayapp/screens/Screen.h"
56
#include "displayapp/screens/ScreenList.h"
7+
#include "displayapp/screens/Symbols.h"
8+
#include "displayapp/screens/List.h"
69

710
namespace Pinetime {
811

@@ -17,14 +20,38 @@ namespace Pinetime {
1720
bool OnTouchEvent(Pinetime::Applications::TouchEvents event) override;
1821

1922
private:
20-
Controllers::Settings& settingsController;
23+
auto CreateScreenList() const;
24+
std::unique_ptr<Screen> CreateScreen(unsigned int screenNum) const;
2125

22-
ScreenList<4> screens;
26+
Controllers::Settings& settingsController;
2327

24-
std::unique_ptr<Screen> CreateScreen1();
25-
std::unique_ptr<Screen> CreateScreen2();
26-
std::unique_ptr<Screen> CreateScreen3();
27-
std::unique_ptr<Screen> CreateScreen4();
28+
static constexpr int entriesPerScreen = 4;
29+
30+
// Increment this when more space is needed
31+
static constexpr int nScreens = 4;
32+
33+
static constexpr std::array<List::Applications, entriesPerScreen * nScreens> entries {{
34+
{Symbols::sun, "Display", Apps::SettingDisplay},
35+
{Symbols::eye, "Wake Up", Apps::SettingWakeUp},
36+
{Symbols::clock, "Time format", Apps::SettingTimeFormat},
37+
{Symbols::home, "Watch face", Apps::SettingWatchFace},
38+
39+
{Symbols::shoe, "Steps", Apps::SettingSteps},
40+
{Symbols::clock, "Set date", Apps::SettingSetDate},
41+
{Symbols::clock, "Set time", Apps::SettingSetTime},
42+
{Symbols::batteryHalf, "Battery", Apps::BatteryInfo},
43+
44+
{Symbols::clock, "Chimes", Apps::SettingChimes},
45+
{Symbols::tachometer, "Shake Calib.", Apps::SettingShakeThreshold},
46+
{Symbols::check, "Firmware", Apps::FirmwareValidation},
47+
{Symbols::bluetooth, "Bluetooth", Apps::SettingBluetooth},
48+
49+
{Symbols::list, "About", Apps::SysInfo},
50+
{Symbols::none, "None", Apps::None},
51+
{Symbols::none, "None", Apps::None},
52+
{Symbols::none, "None", Apps::None},
53+
}};
54+
ScreenList<nScreens> screens;
2855
};
2956
}
3057
}

0 commit comments

Comments
 (0)