diff options
| author | Niall Cooling <niallcooling@gmail.com> | 2021-03-22 17:23:49 +0000 |
|---|---|---|
| committer | Niall Cooling <niallcooling@gmail.com> | 2021-03-22 17:23:49 +0000 |
| commit | e5e3fc02b8a2adf9ea100c162d1290cecdf617ef (patch) | |
| tree | 78d4da0239ff8bf7a8694c28f804f81d2496979f /src/displayapp/screens/ScreenList.h | |
| parent | 14bd790701f4e2f6d75ef8a1f52b9f38023c2dd9 (diff) | |
| parent | 9f9d0eb5df8ff86b9cd1e095afa3159094dde53c (diff) | |
Updated to include WatchFaceAnalog and fixed clashes
Diffstat (limited to 'src/displayapp/screens/ScreenList.h')
| -rw-r--r-- | src/displayapp/screens/ScreenList.h | 97 |
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; }; } } |
