summaryrefslogtreecommitdiff
path: root/src/displayapp/screens/ScreenList.h
diff options
context:
space:
mode:
authorJoaquim <joaquim.org@gmail.com>2021-04-26 21:29:48 +0100
committerJoaquim <joaquim.org@gmail.com>2021-04-26 21:29:48 +0100
commitcd0d85dff95bbc5f285d92eb78a642aab1ae4b8b (patch)
treefc568aa2516c8c64cc55eb0d08e9a929c11b454a /src/displayapp/screens/ScreenList.h
parent5fc07a8df7d18d1fa9c4971f2c7b69ea68db559b (diff)
parenteedff2c06c292bda8dcb92fc04c67097fe72e22f (diff)
Merge branch 'develop' of
https://github.com/JF002/InfiniTime into StepsApp
Diffstat (limited to 'src/displayapp/screens/ScreenList.h')
-rw-r--r--src/displayapp/screens/ScreenList.h160
1 files changed, 79 insertions, 81 deletions
diff --git a/src/displayapp/screens/ScreenList.h b/src/displayapp/screens/ScreenList.h
index 23bcd98b..73ea4610 100644
--- a/src/displayapp/screens/ScreenList.h
+++ b/src/displayapp/screens/ScreenList.h
@@ -10,100 +10,98 @@ namespace Pinetime {
namespace Applications {
namespace Screens {
- enum class ScreenListModes {UpDown, RightLeft, LongPress};
- template <size_t N>
- class ScreenList : public Screen {
- public:
+ enum class ScreenListModes { UpDown, RightLeft, LongPress };
+ template <size_t N> class ScreenList : public Screen {
+ public:
+ ScreenList(DisplayApp* app,
+ uint8_t initScreen,
+ std::array<std::function<std::unique_ptr<Screen>()>, N>&& screens,
+ ScreenListModes mode)
+ : Screen(app), initScreen {initScreen}, screens {std::move(screens)}, mode {mode}, current {this->screens[initScreen]()} {
+ screenIndex = initScreen;
+ }
- ScreenList(DisplayApp* app, uint8_t initScreen, std::array<std::function<std::unique_ptr<Screen>()>, N>&& screens, ScreenListModes mode)
- : Screen(app), initScreen{initScreen}, screens{std::move(screens)}, mode{mode}, current{this->screens[initScreen]()} {
- screenIndex = initScreen;
- }
+ ~ScreenList() override {
+ lv_obj_clean(lv_scr_act());
+ }
- ~ScreenList() override {
- lv_obj_clean(lv_scr_act());
- }
+ bool Refresh() override {
+ running = current->Refresh();
+ return running;
+ }
- bool Refresh() override {
- running = current->Refresh();
- return running;
- }
+ bool OnTouchEvent(TouchEvents event) override {
- bool OnTouchEvent(TouchEvents event) override {
-
- if ( mode == ScreenListModes::UpDown) {
- switch (event) {
- case TouchEvents::SwipeDown:
- if (screenIndex > 0) {
- current.reset(nullptr);
- app->SetFullRefresh(DisplayApp::FullRefreshDirections::Down);
- screenIndex--;
- current = screens[screenIndex]();
- return true;
- } else {
- return false;
- }
-
- case TouchEvents::SwipeUp:
- if (screenIndex < screens.size() - 1) {
- current.reset(nullptr);
- app->SetFullRefresh(DisplayApp::FullRefreshDirections::Up);
- screenIndex++;
- current = screens[screenIndex]();
- }
+ if (mode == ScreenListModes::UpDown) {
+ switch (event) {
+ case TouchEvents::SwipeDown:
+ if (screenIndex > 0) {
+ current.reset(nullptr);
+ app->SetFullRefresh(DisplayApp::FullRefreshDirections::Down);
+ screenIndex--;
+ current = screens[screenIndex]();
return true;
- default:
+ } else {
return false;
- }
- } else if ( mode == ScreenListModes::RightLeft) {
- switch (event) {
- case TouchEvents::SwipeRight:
- if (screenIndex > 0) {
- current.reset(nullptr);
- app->SetFullRefresh(DisplayApp::FullRefreshDirections::None);
- screenIndex--;
- current = screens[screenIndex]();
- return true;
- } else {
- return false;
- }
-
- case TouchEvents::SwipeLeft:
- if (screenIndex < screens.size() - 1) {
- current.reset(nullptr);
- app->SetFullRefresh(DisplayApp::FullRefreshDirections::None);
- screenIndex++;
- current = screens[screenIndex]();
- }
+ }
+
+ 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;
+ }
+ } else if (mode == ScreenListModes::RightLeft) {
+ switch (event) {
+ case TouchEvents::SwipeRight:
+ if (screenIndex > 0) {
+ current.reset(nullptr);
+ app->SetFullRefresh(DisplayApp::FullRefreshDirections::None);
+ screenIndex--;
+ current = screens[screenIndex]();
return true;
- default:
+ } else {
return false;
- }
- } else if ( event == TouchEvents::LongTap ) {
- if (screenIndex < screens.size() - 1) {
- screenIndex++;
- } else {
- screenIndex = 0;
- }
- current.reset(nullptr);
- app->SetFullRefresh(DisplayApp::FullRefreshDirections::None);
- current = screens[screenIndex]();
- return true;
- }
+ }
- return false;
+ case TouchEvents::SwipeLeft:
+ if (screenIndex < screens.size() - 1) {
+ current.reset(nullptr);
+ app->SetFullRefresh(DisplayApp::FullRefreshDirections::None);
+ screenIndex++;
+ current = screens[screenIndex]();
+ }
+ return true;
+ default:
+ return false;
+ }
+ } else if (event == TouchEvents::LongTap) {
+ if (screenIndex < screens.size() - 1) {
+ screenIndex++;
+ } else {
+ screenIndex = 0;
+ }
+ current.reset(nullptr);
+ app->SetFullRefresh(DisplayApp::FullRefreshDirections::None);
+ current = screens[screenIndex]();
+ return true;
}
- private:
-
- uint8_t initScreen = 0;
- std::array<std::function<std::unique_ptr<Screen>()>, N> screens;
- ScreenListModes mode = ScreenListModes::UpDown;
+ return false;
+ }
- uint8_t screenIndex = 0;
- std::unique_ptr<Screen> current;
+ private:
+ uint8_t initScreen = 0;
+ std::array<std::function<std::unique_ptr<Screen>()>, N> screens;
+ ScreenListModes mode = ScreenListModes::UpDown;
-
+ uint8_t screenIndex = 0;
+ std::unique_ptr<Screen> current;
};
}
}