summaryrefslogtreecommitdiff
path: root/src/DisplayApp/Screens/ScreenList.h
diff options
context:
space:
mode:
authorJF <jf@codingfield.com>2020-08-14 19:54:43 +0200
committerJF <jf@codingfield.com>2020-08-14 19:54:43 +0200
commite6f5ab7b9145e842708611cc5b13066f89a1673d (patch)
tree421d23a9b963459276b7a462f009462d50d36dbc /src/DisplayApp/Screens/ScreenList.h
parentbbfc20c3ff4b741cd21b162389905a59a8e22f3f (diff)
parent32f20fa994fec9e21d2af4d7bd287b94316b3970 (diff)
Merge develop and fix conflicts.
Diffstat (limited to 'src/DisplayApp/Screens/ScreenList.h')
-rw-r--r--src/DisplayApp/Screens/ScreenList.h70
1 files changed, 47 insertions, 23 deletions
diff --git a/src/DisplayApp/Screens/ScreenList.h b/src/DisplayApp/Screens/ScreenList.h
index b0ee016b..d873336d 100644
--- a/src/DisplayApp/Screens/ScreenList.h
+++ b/src/DisplayApp/Screens/ScreenList.h
@@ -2,40 +2,64 @@
#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:
- explicit ScreenList(DisplayApp* app,
- Pinetime::Controllers::DateTime& dateTimeController,
- Pinetime::Controllers::Battery& batteryController,
- Pinetime::Controllers::BrightnessController& brightnessController,
- Pinetime::Controllers::Ble& bleController,
- Pinetime::Drivers::WatchdogView& watchdog);
- ~ScreenList() override;
- bool Refresh() override;
- bool OnButtonPushed() override;
- bool OnTouchEvent(TouchEvents event) override;
- private:
- bool running = true;
- uint8_t screenIndex = 0;
+ 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 {
- // TODO choose another container without dynamic alloc
- std::vector<Screens::Label> screens;
- Pinetime::Controllers::DateTime& dateTimeController;
- Pinetime::Controllers::Battery& batteryController;
- Pinetime::Controllers::BrightnessController& brightnessController;
- Pinetime::Controllers::Ble& bleController;
- Pinetime::Drivers::WatchdogView& watchdog;
+ }
+ bool Refresh() override {
+ running = current->Refresh();
+ return running;
+ }
- char t1[200];
- char t2[200];
- char t3[30];
+ 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;
};
}
}