summaryrefslogtreecommitdiff
path: root/src/displayapp/screens/ScreenList.h
diff options
context:
space:
mode:
authorJean-François Milants <jf@codingfield.com>2021-03-20 11:41:49 +0100
committerJean-François Milants <jf@codingfield.com>2021-03-20 11:41:49 +0100
commit405c85c160b0d72407498a25555677d484b822f1 (patch)
tree71b22af329f7b5ee7a6f37ddca4c738f0e379593 /src/displayapp/screens/ScreenList.h
parente63596b291f973cdeb01cd0ac276861895bd4489 (diff)
parent9e9bb2085e70a9c8b8c2e74f6027f5392e366158 (diff)
Merge branch 'develop' of github.com:JF002/Pinetime into develop
# Conflicts: # src/main.cpp # src/systemtask/SystemTask.h
Diffstat (limited to 'src/displayapp/screens/ScreenList.h')
-rw-r--r--src/displayapp/screens/ScreenList.h97
1 files changed, 73 insertions, 24 deletions
diff --git a/src/displayapp/screens/ScreenList.h b/src/displayapp/screens/ScreenList.h
index 736e3634..43b33f40 100644
--- a/src/displayapp/screens/ScreenList.h
+++ b/src/displayapp/screens/ScreenList.h
@@ -9,16 +9,19 @@
namespace Pinetime {
namespace Applications {
namespace Screens {
+
+ enum class ScreenListModes {UpDown, RightLeft, LongPress};
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(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());
}
bool Refresh() override {
@@ -32,34 +35,80 @@ namespace Pinetime {
}
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;
+
+ 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]();
+ }
+ 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;
+ } else {
+ 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;
}
+
return false;
}
private:
- bool running = true;
- uint8_t screenIndex = 0;
+
+ 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;
+
+ bool running = true;
};
}
}