aboutsummaryrefslogtreecommitdiffstats
path: root/src/displayapp/screens
diff options
context:
space:
mode:
authorJean-François Milants <jf@codingfield.com>2023-10-23 20:12:34 +0200
committerJF <JF002@users.noreply.github.com>2023-11-19 21:13:55 +0100
commit63e0c4f4efb047f4f15601f7b08640c4b589de93 (patch)
tree5392f0efd6ada7e218fb8b85545d02ae3f33fac3 /src/displayapp/screens
parentf6d7f602f57f93dbf5a68a371cc1a9d019e1408d (diff)
Application selection at build time
A list of "user applications" is built at compile time. It contains all the info needed to create the application at runtime (ptr to a create() function) and to display the app in the application menu. All applications declare a TypeTrait with these information. When a new app must be loaded, DisplayApp first check if this app is a System app (in which case it creates it like it did before). If it's not a System app, it looks for the app in the list of User applications and creates it if it found it. Those changes allow to more easily add new app and to select which app must be built into the firmware. Switch to C++20 (and fix a few issues in SpiMaster.cpp and Watchdog.cpp.
Diffstat (limited to 'src/displayapp/screens')
-rw-r--r--src/displayapp/screens/Alarm.cpp4
-rw-r--r--src/displayapp/screens/Alarm.h26
-rw-r--r--src/displayapp/screens/ApplicationList.cpp24
-rw-r--r--src/displayapp/screens/ApplicationList.h38
-rw-r--r--src/displayapp/screens/Clock.h11
-rw-r--r--src/displayapp/screens/HeartRate.h9
-rw-r--r--src/displayapp/screens/InfiniPaint.h11
-rw-r--r--src/displayapp/screens/Metronome.h9
-rw-r--r--src/displayapp/screens/Motion.h10
-rw-r--r--src/displayapp/screens/Music.h11
-rw-r--r--src/displayapp/screens/Navigation.h11
-rw-r--r--src/displayapp/screens/Paddle.h11
-rw-r--r--src/displayapp/screens/Steps.h11
-rw-r--r--src/displayapp/screens/StopWatch.h89
-rw-r--r--src/displayapp/screens/Tile.cpp1
-rw-r--r--src/displayapp/screens/Timer.cpp2
-rw-r--r--src/displayapp/screens/Timer.h64
-rw-r--r--src/displayapp/screens/Twos.h9
-rw-r--r--src/displayapp/screens/Weather.h13
19 files changed, 248 insertions, 116 deletions
diff --git a/src/displayapp/screens/Alarm.cpp b/src/displayapp/screens/Alarm.cpp
index 4e6ce797..cbc702f3 100644
--- a/src/displayapp/screens/Alarm.cpp
+++ b/src/displayapp/screens/Alarm.cpp
@@ -19,6 +19,10 @@
#include "displayapp/screens/Screen.h"
#include "displayapp/screens/Symbols.h"
#include "displayapp/InfiniTimeTheme.h"
+#include "components/settings/Settings.h"
+#include "components/alarm/AlarmController.h"
+#include "components/motor/MotorController.h"
+#include "systemtask/SystemTask.h"
using namespace Pinetime::Applications::Screens;
using Pinetime::Controllers::AlarmController;
diff --git a/src/displayapp/screens/Alarm.h b/src/displayapp/screens/Alarm.h
index 91177366..efa38eb7 100644
--- a/src/displayapp/screens/Alarm.h
+++ b/src/displayapp/screens/Alarm.h
@@ -17,21 +17,22 @@
*/
#pragma once
+#include "displayapp/Apps.h"
+#include "components/settings/Settings.h"
#include "displayapp/screens/Screen.h"
-#include "systemtask/SystemTask.h"
-#include "displayapp/LittleVgl.h"
-#include "components/alarm/AlarmController.h"
#include "displayapp/widgets/Counter.h"
+#include "displayapp/Controllers.h"
+#include "Symbols.h"
namespace Pinetime {
namespace Applications {
namespace Screens {
class Alarm : public Screen {
public:
- Alarm(Controllers::AlarmController& alarmController,
- Controllers::Settings::ClockType clockType,
- System::SystemTask& systemTask,
- Controllers::MotorController& motorController);
+ explicit Alarm(Controllers::AlarmController& alarmController,
+ Controllers::Settings::ClockType clockType,
+ System::SystemTask& systemTask,
+ Controllers::MotorController& motorController);
~Alarm() override;
void SetAlerting();
void OnButtonEvent(lv_obj_t* obj, lv_event_t event);
@@ -63,6 +64,15 @@ namespace Pinetime {
Widgets::Counter hourCounter = Widgets::Counter(0, 23, jetbrains_mono_76);
Widgets::Counter minuteCounter = Widgets::Counter(0, 59, jetbrains_mono_76);
};
+ }
+ template<>
+ struct AppTraits<Apps::Alarm> {
+ static constexpr Apps app = Apps::Alarm;
+ static constexpr const char* icon = Screens::Symbols::clock;
+ static Screens::Screen *Create(AppControllers& controllers) { return new Screens::Alarm(controllers.alarmController,
+ controllers.settingsController.GetClockType(),
+ *controllers.systemTask,
+ controllers.motorController); };
};
- };
+ }
}
diff --git a/src/displayapp/screens/ApplicationList.cpp b/src/displayapp/screens/ApplicationList.cpp
index 6014cf53..e5e26098 100644
--- a/src/displayapp/screens/ApplicationList.cpp
+++ b/src/displayapp/screens/ApplicationList.cpp
@@ -1,8 +1,9 @@
#include "displayapp/screens/ApplicationList.h"
+#include "displayapp/screens/Tile.h"
#include <lvgl/lvgl.h>
#include <functional>
-#include "displayapp/Apps.h"
-#include "displayapp/DisplayApp.h"
+#include <algorithm>
+#include "components/settings/Settings.h"
using namespace Pinetime::Applications::Screens;
@@ -16,18 +17,20 @@ auto ApplicationList::CreateScreenList() const {
return screens;
}
-ApplicationList::ApplicationList(Pinetime::Applications::DisplayApp* app,
+ApplicationList::ApplicationList(DisplayApp* app,
Pinetime::Controllers::Settings& settingsController,
const Pinetime::Controllers::Battery& batteryController,
const Pinetime::Controllers::Ble& bleController,
Controllers::DateTime& dateTimeController,
- Pinetime::Controllers::FS& filesystem)
+ Pinetime::Controllers::FS& filesystem,
+ std::array<Tile::Applications, UserAppTypes::Count>&& apps)
: app {app},
settingsController {settingsController},
batteryController {batteryController},
bleController {bleController},
dateTimeController {dateTimeController},
filesystem{filesystem},
+ apps{std::move(apps)},
screens {app, settingsController.GetAppMenu(), CreateScreenList(), Screens::ScreenListModes::UpDown} {
}
@@ -40,9 +43,14 @@ bool ApplicationList::OnTouchEvent(Pinetime::Applications::TouchEvents event) {
}
std::unique_ptr<Screen> ApplicationList::CreateScreen(unsigned int screenNum) const {
- std::array<Tile::Applications, appsPerScreen> apps;
- for (int i = 0; i < appsPerScreen; i++) {
- apps[i] = applications[screenNum * appsPerScreen + i];
+ std::array<Tile::Applications, appsPerScreen> pageApps;
+
+ for(int i = 0; i < appsPerScreen; i++) {
+ if(i+(screenNum * appsPerScreen) >= apps.size()) {
+ pageApps[i] = {"", Pinetime::Applications::Apps::None, false};
+ } else {
+ pageApps[i] = apps[i + (screenNum * appsPerScreen)];
+ }
}
return std::make_unique<Screens::Tile>(screenNum,
@@ -52,5 +60,5 @@ std::unique_ptr<Screen> ApplicationList::CreateScreen(unsigned int screenNum) co
batteryController,
bleController,
dateTimeController,
- apps);
+ pageApps);
}
diff --git a/src/displayapp/screens/ApplicationList.h b/src/displayapp/screens/ApplicationList.h
index 371ee710..2ad9c7c7 100644
--- a/src/displayapp/screens/ApplicationList.h
+++ b/src/displayapp/screens/ApplicationList.h
@@ -2,15 +2,12 @@
#include <array>
#include <memory>
-
-#include "displayapp/screens/Screen.h"
-#include "displayapp/screens/ScreenList.h"
-#include "components/datetime/DateTimeController.h"
-#include "components/settings/Settings.h"
-#include "components/battery/BatteryController.h"
-#include "displayapp/screens/Symbols.h"
-#include "displayapp/screens/Tile.h"
-#include "displayapp/screens/Navigation.h"
+#include "displayapp/Apps.h"
+#include "Screen.h"
+#include "ScreenList.h"
+#include "displayapp/Controllers.h"
+#include "Symbols.h"
+#include "Tile.h"
namespace Pinetime {
namespace Applications {
@@ -22,7 +19,8 @@ namespace Pinetime {
const Pinetime::Controllers::Battery& batteryController,
const Pinetime::Controllers::Ble& bleController,
Controllers::DateTime& dateTimeController,
- Pinetime::Controllers::FS& filesystem);
+ Pinetime::Controllers::FS& filesystem,
+ std::array<Tile::Applications, UserAppTypes::Count>&& apps);
~ApplicationList() override;
bool OnTouchEvent(TouchEvents event) override;
@@ -36,29 +34,13 @@ namespace Pinetime {
const Pinetime::Controllers::Ble& bleController;
Controllers::DateTime& dateTimeController;
Pinetime::Controllers::FS& filesystem;
+ std::array<Tile::Applications, UserAppTypes::Count> apps;
static constexpr int appsPerScreen = 6;
// Increment this when more space is needed
- static constexpr int nScreens = 2;
-
- std::array<Tile::Applications, appsPerScreen * nScreens> applications {{
- {Symbols::stopWatch, Apps::StopWatch, true},
- {Symbols::clock, Apps::Alarm, true},
- {Symbols::hourGlass, Apps::Timer, true},
- {Symbols::shoe, Apps::Steps, true},
- {Symbols::heartBeat, Apps::HeartRate, true},
- {Symbols::music, Apps::Music, true},
-
- {Symbols::paintbrush, Apps::Paint, true},
- {Symbols::paddle, Apps::Paddle, true},
- {"2", Apps::Twos, true},
- {Symbols::drum, Apps::Metronome, true},
- {Symbols::map, Apps::Navigation, Applications::Screens::Navigation::IsAvailable(filesystem)},
- {Symbols::none, Apps::None, false},
+ static constexpr int nScreens = (UserAppTypes::Count/appsPerScreen)+1;
- // {"M", Apps::Motion},
- }};
ScreenList<nScreens> screens;
};
}
diff --git a/src/displayapp/screens/Clock.h b/src/displayapp/screens/Clock.h
index f3591f43..e67c0260 100644
--- a/src/displayapp/screens/Clock.h
+++ b/src/displayapp/screens/Clock.h
@@ -1,13 +1,12 @@
#pragma once
-#include <lvgl/src/lv_core/lv_obj.h>
#include <chrono>
#include <cstdint>
#include <memory>
-#include <components/heartrate/HeartRateController.h>
+#include "displayapp/Controllers.h"
#include "displayapp/screens/Screen.h"
-#include "components/datetime/DateTimeController.h"
-#include "components/ble/weather/WeatherService.h"
+#include "displayapp/Apps.h"
+#include "Symbols.h"
namespace Pinetime {
namespace Controllers {
@@ -16,6 +15,10 @@ namespace Pinetime {
class Ble;
class NotificationManager;
class MotionController;
+ class DateTime;
+ class HeartRateController;
+ class WeatherService;
+ class FS;
}
namespace Applications {
diff --git a/src/displayapp/screens/HeartRate.h b/src/displayapp/screens/HeartRate.h
index 78ae63db..85da8dee 100644
--- a/src/displayapp/screens/HeartRate.h
+++ b/src/displayapp/screens/HeartRate.h
@@ -4,6 +4,7 @@
#include <chrono>
#include "displayapp/screens/Screen.h"
#include "systemtask/SystemTask.h"
+#include "Symbols.h"
#include <lvgl/src/lv_core/lv_style.h>
#include <lvgl/src/lv_core/lv_obj.h>
@@ -37,5 +38,13 @@ namespace Pinetime {
lv_task_t* taskRefresh;
};
}
+ template <>
+ struct AppTraits<Apps::HeartRate> {
+ static constexpr Apps app = Apps::HeartRate;
+ static constexpr const char* icon = Screens::Symbols::heartBeat;
+ static Screens::Screen* Create(AppControllers& controllers) {
+ return new Screens::HeartRate(controllers.heartRateController, *controllers.systemTask);
+ };
+ };
}
}
diff --git a/src/displayapp/screens/InfiniPaint.h b/src/displayapp/screens/InfiniPaint.h
index ec184c44..a25ace55 100644
--- a/src/displayapp/screens/InfiniPaint.h
+++ b/src/displayapp/screens/InfiniPaint.h
@@ -5,6 +5,9 @@
#include <algorithm> // std::fill
#include "displayapp/screens/Screen.h"
#include "components/motor/MotorController.h"
+#include "Symbols.h"
+#include <displayapp/Apps.h>
+#include <displayapp/Controllers.h>
namespace Pinetime {
namespace Components {
@@ -35,5 +38,13 @@ namespace Pinetime {
uint8_t color = 2;
};
}
+ template <>
+ struct AppTraits<Apps::Paint> {
+ static constexpr Apps app = Apps::Paint;
+ static constexpr const char* icon = Screens::Symbols::paintbrush;
+ static Screens::Screen* Create(AppControllers& controllers) {
+ return new Screens::InfiniPaint(controllers.lvgl, controllers.motorController);
+ };
+ };
}
}
diff --git a/src/displayapp/screens/Metronome.h b/src/displayapp/screens/Metronome.h
index 13b0d664..8820962d 100644
--- a/src/displayapp/screens/Metronome.h
+++ b/src/displayapp/screens/Metronome.h
@@ -3,6 +3,7 @@
#include "systemtask/SystemTask.h"
#include "components/motor/MotorController.h"
#include "displayapp/screens/Screen.h"
+#include "Symbols.h"
namespace Pinetime {
namespace Applications {
@@ -36,5 +37,13 @@ namespace Pinetime {
lv_task_t* taskRefresh;
};
}
+ template <>
+ struct AppTraits<Apps::Metronome> {
+ static constexpr Apps app = Apps::Metronome;
+ static constexpr const char* icon = Screens::Symbols::drum;
+ static Screens::Screen* Create(AppControllers& controllers) {
+ return new Screens::Metronome(controllers.motorController, *controllers.systemTask);
+ };
+ };
}
}
diff --git a/src/displayapp/screens/Motion.h b/src/displayapp/screens/Motion.h
index e4cbe483..3ef570d6 100644
--- a/src/displayapp/screens/Motion.h
+++ b/src/displayapp/screens/Motion.h
@@ -6,6 +6,8 @@
#include <lvgl/src/lv_core/lv_style.h>
#include <lvgl/src/lv_core/lv_obj.h>
#include <components/motion/MotionController.h>
+#include "displayapp/Controllers.h"
+#include "displayapp/Apps.h"
namespace Pinetime {
namespace Applications {
@@ -30,5 +32,13 @@ namespace Pinetime {
lv_task_t* taskRefresh;
};
}
+ template <>
+ struct AppTraits<Apps::Motion> {
+ static constexpr Apps app = Apps::Motion;
+ static constexpr const char* icon = "M";
+ static Screens::Screen* Create(AppControllers& controllers) {
+ return new Screens::Motion(controllers.motionController);
+ };
+ };
}
}
diff --git a/src/displayapp/screens/Music.h b/src/displayapp/screens/Music.h
index 847c6e74..acbb6312 100644
--- a/src/displayapp/screens/Music.h
+++ b/src/displayapp/screens/Music.h
@@ -21,6 +21,9 @@
#include <lvgl/src/lv_core/lv_obj.h>
#include <string>
#include "displayapp/screens/Screen.h"
+#include "displayapp/Apps.h"
+#include "displayapp/Controllers.h"
+#include "Symbols.h"
namespace Pinetime {
namespace Controllers {
@@ -82,5 +85,13 @@ namespace Pinetime {
/** Watchapp */
};
}
+ template <>
+ struct AppTraits<Apps::Music> {
+ static constexpr Apps app = Apps::Music;
+ static constexpr const char* icon = Screens::Symbols::music;
+ static Screens::Screen* Create(AppControllers& controllers) {
+ return new Screens::Music(*controllers.musicService);
+ };
+ };
}
}
diff --git a/src/displayapp/screens/Navigation.h b/src/displayapp/screens/Navigation.h
index eb243b01..d54df13c 100644
--- a/src/displayapp/screens/Navigation.h
+++ b/src/displayapp/screens/Navigation.h
@@ -22,6 +22,9 @@
#include <string>
#include "displayapp/screens/Screen.h"
#include <array>
+#include "displayapp/Apps.h"
+#include "displayapp/Controllers.h"
+#include "Symbols.h"
namespace Pinetime {
namespace Controllers {
@@ -55,5 +58,13 @@ namespace Pinetime {
lv_task_t* taskRefresh;
};
}
+ template <>
+ struct AppTraits<Apps::Navigation> {
+ static constexpr Apps app = Apps::Navigation;
+ static constexpr const char* icon = Screens::Symbols::map;
+ static Screens::Screen* Create(AppControllers& controllers) {
+ return new Screens::Navigation(*controllers.navigationService);
+ };
+ };
}
}
diff --git a/src/displayapp/screens/Paddle.h b/src/displayapp/screens/Paddle.h
index 33dac191..0670e5b1 100644
--- a/src/displayapp/screens/Paddle.h
+++ b/src/displayapp/screens/Paddle.h
@@ -3,6 +3,9 @@
#include <lvgl/lvgl.h>
#include <cstdint>
#include "displayapp/screens/Screen.h"
+#include "displayapp/Apps.h"
+#include "displayapp/Controllers.h"
+#include "Symbols.h"
namespace Pinetime {
namespace Components {
@@ -45,5 +48,13 @@ namespace Pinetime {
lv_task_t* taskRefresh;
};
}
+ template <>
+ struct AppTraits<Apps::Paddle> {
+ static constexpr Apps app = Apps::Paddle;
+ static constexpr const char* icon = Screens::Symbols::paddle;
+ static Screens::Screen* Create(AppControllers& controllers) {
+ return new Screens::Paddle(controllers.lvgl);
+ };
+ };
}
}
diff --git a/src/displayapp/screens/Steps.h b/src/displayapp/screens/Steps.h
index 5dc07eff..5299d67f 100644
--- a/src/displayapp/screens/Steps.h
+++ b/src/displayapp/screens/Steps.h
@@ -4,6 +4,9 @@
#include <lvgl/lvgl.h>
#include "displayapp/screens/Screen.h"
#include <components/motion/MotionController.h>
+#include "displayapp/Apps.h"
+#include "displayapp/Controllers.h"
+#include "Symbols.h"
namespace Pinetime {
@@ -39,5 +42,13 @@ namespace Pinetime {
lv_task_t* taskRefresh;
};
}
+ template <>
+ struct AppTraits<Apps::Steps> {
+ static constexpr Apps app = Apps::Steps;
+ static constexpr const char* icon = Screens::Symbols::shoe;
+ static Screens::Screen* Create(AppControllers& controllers) {
+ return new Screens::Steps(controllers.motionController, controllers.settingsController);
+ };
+ };
}
}
diff --git a/src/displayapp/screens/StopWatch.h b/src/displayapp/screens/StopWatch.h
index d1acd162..c3550fc4 100644
--- a/src/displayapp/screens/StopWatch.h
+++ b/src/displayapp/screens/StopWatch.h
@@ -7,50 +7,65 @@
#include "portmacro_cmsis.h"
#include "systemtask/SystemTask.h"
+#include "displayapp/Apps.h"
+#include "displayapp/Controllers.h"
+#include "Symbols.h"
-namespace Pinetime::Applications::Screens {
+namespace Pinetime {
+ namespace Applications {
+ namespace Screens {
- enum class States { Init, Running, Halted };
+ enum class States { Init, Running, Halted };
- struct TimeSeparated_t {
- int hours;
- int mins;
- int secs;
- int hundredths;
- };
+ struct TimeSeparated_t {
+ int hours;
+ int mins;
+ int secs;
+ int hundredths;
+ };
- class StopWatch : public Screen {
- public:
- explicit StopWatch(System::SystemTask& systemTask);
- ~StopWatch() override;
- void Refresh() override;
+ class StopWatch : public Screen {
+ public:
+ explicit StopWatch(System::SystemTask& systemTask);
+ ~StopWatch() override;
+ void Refresh() override;
- void playPauseBtnEventHandler();
- void stopLapBtnEventHandler();
- bool OnButtonPushed() override;
+ void playPauseBtnEventHandler();
+ void stopLapBtnEventHandler();
+ bool OnButtonPushed() override;
- private:
- void SetInterfacePaused();
- void SetInterfaceRunning();
- void SetInterfaceStopped();
+ private:
+ void SetInterfacePaused();
+ void SetInterfaceRunning();
+ void SetInterfaceStopped();
- void Reset();
- void Start();
- void Pause();
+ void Reset();
+ void Start();
+ void Pause();
- Pinetime::System::SystemTask& systemTask;
- States currentState = States::Init;
- TickType_t startTime;
- TickType_t oldTimeElapsed = 0;
- TickType_t blinkTime = 0;
- static constexpr int maxLapCount = 20;
- TickType_t laps[maxLapCount + 1];
- static constexpr int displayedLaps = 2;
- int lapsDone = 0;
- lv_obj_t *time, *msecTime, *btnPlayPause, *btnStopLap, *txtPlayPause, *txtStopLap;
- lv_obj_t* lapText;
- bool isHoursLabelUpdated = false;
+ Pinetime::System::SystemTask& systemTask;
+ States currentState = States::Init;
+ TickType_t startTime;
+ TickType_t oldTimeElapsed = 0;
+ TickType_t blinkTime = 0;
+ static constexpr int maxLapCount = 20;
+ TickType_t laps[maxLapCount + 1];
+ static constexpr int displayedLaps = 2;
+ int lapsDone = 0;
+ lv_obj_t *time, *msecTime, *btnPlayPause, *btnStopLap, *txtPlayPause, *txtStopLap;
+ lv_obj_t* lapText;
+ bool isHoursLabelUpdated = false;
- lv_task_t* taskRefresh;
- };
+ lv_task_t* taskRefresh;
+ };
+ }
+ template <>
+ struct AppTraits<Apps::StopWatch> {
+ static constexpr Apps app = Apps::StopWatch;
+ static constexpr const char* icon = Screens::Symbols::stopWatch;
+ static Screens::Screen* Create(AppControllers& controllers) {
+ return new Screens::StopWatch(*controllers.systemTask);
+ };
+ };
+ }
}
diff --git a/src/displayapp/screens/Tile.cpp b/src/displayapp/screens/Tile.cpp
index 343755e3..7c392c59 100644
--- a/src/displayapp/screens/Tile.cpp
+++ b/src/displayapp/screens/Tile.cpp
@@ -1,5 +1,4 @@
#include "displayapp/screens/Tile.h"
-#include "displayapp/DisplayApp.h"
#include "displayapp/screens/BatteryIcon.h"
#include "components/ble/BleController.h"
#include "displayapp/InfiniTimeTheme.h"
diff --git a/src/displayapp/screens/Timer.cpp b/src/displayapp/screens/Timer.cpp
index d9488740..a1ede6be 100644
--- a/src/displayapp/screens/Timer.cpp
+++ b/src/displayapp/screens/Timer.cpp
@@ -62,7 +62,7 @@ Timer::Timer(Controllers::Timer& timerController) : timer {timerController} {
txtPlayPause = lv_label_create(lv_scr_act(), nullptr);
lv_obj_align(txtPlayPause, btnPlayPause, LV_ALIGN_CENTER, 0, 0);
- if (timerController.IsRunning()) {
+ if (timer.IsRunning()) {
SetTimerRunning();
} else {
SetTimerStopped();
diff --git a/src/displayapp/screens/Timer.h b/src/displayapp/screens/Timer.h
index e452a9d9..f8e337c2 100644
--- a/src/displayapp/screens/Timer.h
+++ b/src/displayapp/screens/Timer.h
@@ -8,38 +8,48 @@
#include <lvgl/lvgl.h>
#include "components/timer/Timer.h"
+#include "Symbols.h"
-namespace Pinetime::Applications::Screens {
- class Timer : public Screen {
- public:
- Timer(Controllers::Timer& timerController);
- ~Timer() override;
- void Refresh() override;
- void Reset();
- void ToggleRunning();
- void ButtonPressed();
- void MaskReset();
+namespace Pinetime::Applications{
+ namespace Screens {
+ class Timer : public Screen {
+ public:
+ Timer(Controllers::Timer& timerController);
+ ~Timer() override;
+ void Refresh() override;
+ void Reset();
+ void ToggleRunning();
+ void ButtonPressed();
+ void MaskReset();
- private:
- void SetTimerRunning();
- void SetTimerStopped();
- void UpdateMask();
- Controllers::Timer& timer;
+ private:
+ void SetTimerRunning();
+ void SetTimerStopped();
+ void UpdateMask();
+ Pinetime::Controllers::Timer& timer;
- lv_obj_t* btnPlayPause;
- lv_obj_t* txtPlayPause;
+ lv_obj_t* btnPlayPause;
+ lv_obj_t* txtPlayPause;
- lv_obj_t* btnObjectMask;
- lv_obj_t* highlightObjectMask;
- lv_objmask_mask_t* btnMask;
- lv_objmask_mask_t* highlightMask;
+ lv_obj_t* btnObjectMask;
+ lv_obj_t* highlightObjectMask;
+ lv_objmask_mask_t* btnMask;
+ lv_objmask_mask_t* highlightMask;
- lv_task_t* taskRefresh;
- Widgets::Counter minuteCounter = Widgets::Counter(0, 59, jetbrains_mono_76);
- Widgets::Counter secondCounter = Widgets::Counter(0, 59, jetbrains_mono_76);
+ lv_task_t* taskRefresh;
+ Widgets::Counter minuteCounter = Widgets::Counter(0, 59, jetbrains_mono_76);
+ Widgets::Counter secondCounter = Widgets::Counter(0, 59, jetbrains_mono_76);
- bool buttonPressing = false;
- lv_coord_t maskPosition = 0;
- TickType_t pressTime = 0;
+ bool buttonPressing = false;
+ lv_coord_t maskPosition = 0;
+ TickType_t pressTime = 0;
+ };
+ }
+
+ template<>
+ struct AppTraits<Apps::Timer> {
+ static constexpr Apps app = Apps::Timer;
+ static constexpr const char* icon = Screens::Symbols::hourGlass;
+ static Screens::Screen *Create(AppControllers& controllers) { return new Screens::Timer(controllers.timer); };
};
}
diff --git a/src/displayapp/screens/Twos.h b/src/displayapp/screens/Twos.h
index e731eae6..4e6980f5 100644
--- a/src/displayapp/screens/Twos.h
+++ b/src/displayapp/screens/Twos.h
@@ -1,7 +1,8 @@
#pragma once
-#include <lvgl/src/lv_core/lv_obj.h>
+#include "displayapp/Apps.h"
#include "displayapp/screens/Screen.h"
+#include "displayapp/Controllers.h"
namespace Pinetime {
namespace Applications {
@@ -35,5 +36,11 @@ namespace Pinetime {
bool placeNewTile();
};
}
+ template<>
+ struct AppTraits<Apps::Twos> {
+ static constexpr Apps app = Apps::Twos;
+ static constexpr const char* icon = "2";
+ static Screens::Screen *Create(AppControllers& /*controllers*/) { return new Screens::Twos(); };
+ };
}
}
diff --git a/src/displayapp/screens/Weather.h b/src/displayapp/screens/Weather.h
index 459534aa..888dc257 100644
--- a/src/displayapp/screens/Weather.h
+++ b/src/displayapp/screens/Weather.h
@@ -1,9 +1,12 @@
#pragma once
#include <memory>
-#include <components/ble/weather/WeatherService.h>
+#include "components/ble/weather/WeatherService.h"
#include "Screen.h"
#include "ScreenList.h"
+#include "displayapp/Apps.h"
+#include "displayapp/Controllers.h"
+#include "Symbols.h"
namespace Pinetime {
namespace Applications {
@@ -41,5 +44,13 @@ namespace Pinetime {
std::unique_ptr<Screen> CreateScreenHumidity();
};
}
+ template <>
+ struct AppTraits<Apps::Weather> {
+ static constexpr Apps app = Apps::Weather;
+ static constexpr const char* icon = Screens::Symbols::sun;
+ static Screens::Screen* Create(AppControllers& controllers) {
+ return new Screens::Weather(controllers.displayApp, *controllers.weatherController);
+ };
+ };
}
}