summaryrefslogtreecommitdiff
path: root/src/displayapp/screens/ScreenList.h
diff options
context:
space:
mode:
authorAvamander <avamander@gmail.com>2020-10-02 21:49:55 +0300
committerAvamander <avamander@gmail.com>2020-10-02 21:49:55 +0300
commit4daab2692692d47af24a9384eb0f402821527882 (patch)
treebc525f6fc2ea8a378ac4e6fba729c956f7dc1d66 /src/displayapp/screens/ScreenList.h
parente3fb2f0b8974f3e9a124d27f4b568e754ccfb782 (diff)
Renamed displayapp/Screens to displayapp/screens
Diffstat (limited to 'src/displayapp/screens/ScreenList.h')
-rw-r--r--src/displayapp/screens/ScreenList.h66
1 files changed, 66 insertions, 0 deletions
diff --git a/src/displayapp/screens/ScreenList.h b/src/displayapp/screens/ScreenList.h
new file mode 100644
index 00000000..d873336d
--- /dev/null
+++ b/src/displayapp/screens/ScreenList.h
@@ -0,0 +1,66 @@
+#pragma once
+
+#include <vector>
+#include <Components/Ble/NimbleController.h>
+#include <functional>
+#include "Screen.h"
+#include "Label.h"
+
+namespace Pinetime {
+ namespace Applications {
+ namespace Screens {
+ template <size_t N>
+ class ScreenList : public Screen {
+ public:
+ ScreenList(DisplayApp* app, std::array<std::function<std::unique_ptr<Screen>()>, N>&& screens)
+ : Screen(app), screens{std::move(screens)}, current{this->screens[0]()} {
+
+ }
+
+ ~ScreenList() override {
+
+ }
+
+ bool Refresh() override {
+ running = current->Refresh();
+ return running;
+ }
+
+ bool OnButtonPushed() override {
+ running = false;
+ return true;
+ }
+
+ bool OnTouchEvent(TouchEvents event) override {
+ switch (event) {
+ case TouchEvents::SwipeDown:
+ if (screenIndex > 0) {
+ current.reset(nullptr);
+ app->SetFullRefresh(DisplayApp::FullRefreshDirections::Down);
+ screenIndex--;
+ current = screens[screenIndex]();
+ }
+ return true;
+ case TouchEvents::SwipeUp:
+ if (screenIndex < screens.size() - 1) {
+ current.reset(nullptr);
+ app->SetFullRefresh(DisplayApp::FullRefreshDirections::Up);
+ screenIndex++;
+ current = screens[screenIndex]();
+ }
+ return true;
+ default:
+ return false;
+ }
+ return false;
+ }
+
+ private:
+ bool running = true;
+ uint8_t screenIndex = 0;
+ std::array<std::function<std::unique_ptr<Screen>()>, N> screens;
+ std::unique_ptr<Screen> current;
+ };
+ }
+ }
+} \ No newline at end of file