summaryrefslogtreecommitdiff
path: root/src/DisplayApp/Screens/ApplicationList.cpp
diff options
context:
space:
mode:
authorJF <jf@codingfield.com>2020-08-14 09:46:37 +0200
committerJF <jf@codingfield.com>2020-08-14 09:46:37 +0200
commitf5328ec9eb9d55423b4e511910721d839cacadd8 (patch)
tree8cbc6faf0c87dca43fb33e0dcdaa6ea1e64d0b05 /src/DisplayApp/Screens/ApplicationList.cpp
parent27fa273d8315f972931dba7971a99b0fbba7360e (diff)
Refactor ScreenList to make it more generic : it can now contain any Screen type.
Integrate this new ScreenList in SystemInfo. Add ApplicationList, which is a ScreenList of Tile. This allows to display a menu of more than 6 applications.
Diffstat (limited to 'src/DisplayApp/Screens/ApplicationList.cpp')
-rw-r--r--src/DisplayApp/Screens/ApplicationList.cpp80
1 files changed, 80 insertions, 0 deletions
diff --git a/src/DisplayApp/Screens/ApplicationList.cpp b/src/DisplayApp/Screens/ApplicationList.cpp
new file mode 100644
index 00000000..c7c096f4
--- /dev/null
+++ b/src/DisplayApp/Screens/ApplicationList.cpp
@@ -0,0 +1,80 @@
+#include <libs/lvgl/lvgl.h>
+#include <DisplayApp/DisplayApp.h>
+#include <functional>
+#include "ApplicationList.h"
+#include "Tile.h"
+#include "Symbols.h"
+
+using namespace Pinetime::Applications::Screens;
+
+ApplicationList::ApplicationList(Pinetime::Applications::DisplayApp *app) :
+ Screen(app),
+ screens{app, {
+ [this]() -> std::unique_ptr<Screen> { return CreateScreen1(); },
+ //[this]() -> std::unique_ptr<Screen> { return CreateScreen2(); },
+ //[this]() -> std::unique_ptr<Screen> { return CreateScreen3(); }
+ }
+ } {}
+
+
+ApplicationList::~ApplicationList() {
+ lv_obj_clean(lv_scr_act());
+}
+
+bool ApplicationList::Refresh() {
+ if(running)
+ running = screens.Refresh();
+ return running;
+}
+
+bool ApplicationList::OnButtonPushed() {
+ running = false;
+ app->StartApp(Apps::Clock);
+ return true;
+}
+
+bool ApplicationList::OnTouchEvent(Pinetime::Applications::TouchEvents event) {
+ return screens.OnTouchEvent(event);
+}
+
+std::unique_ptr<Screen> ApplicationList::CreateScreen1() {
+ std::array<Screens::Tile::Applications, 6> applications {
+ {{Symbols::asterisk, Apps::Meter},
+ {Symbols::tachometer, Apps::Gauge},
+ {Symbols::clock, Apps::Clock},
+ {Symbols::music, Apps::Music},
+ {Symbols::list, Apps::SysInfo},
+ {Symbols::sun, Apps::Brightness}
+ }
+ };
+
+ return std::unique_ptr<Screen>(new Screens::Tile(app, applications));
+}
+
+std::unique_ptr<Screen> ApplicationList::CreateScreen2() {
+ std::array<Screens::Tile::Applications, 6> applications {
+ {{"0", Apps::Meter},
+ {"1", Apps::Gauge},
+ {"2", Apps::Clock},
+ {"3", Apps::Music},
+ {"4", Apps::SysInfo},
+ {"5", Apps::Brightness}
+ }
+ };
+
+ return std::unique_ptr<Screen>(new Screens::Tile(app, applications));
+}
+
+std::unique_ptr<Screen> ApplicationList::CreateScreen3() {
+ std::array<Screens::Tile::Applications, 6> applications {
+ {{"A", Apps::Meter},
+ {"B", Apps::Gauge},
+ {"C", Apps::Clock},
+ {"D", Apps::Music},
+ {"E", Apps::SysInfo},
+ {"F", Apps::Brightness}
+ }
+ };
+
+ return std::unique_ptr<Screen>(new Screens::Tile(app, applications));
+}