diff options
Diffstat (limited to 'cli/component.hpp')
| -rw-r--r-- | cli/component.hpp | 37 |
1 files changed, 34 insertions, 3 deletions
diff --git a/cli/component.hpp b/cli/component.hpp index 7fe9c6d..fe02d0b 100644 --- a/cli/component.hpp +++ b/cli/component.hpp @@ -1,27 +1,58 @@ #pragma once +#include <algorithm> #include <ftxui/component/component_base.hpp> +#include <ftxui/component/component.hpp> #include "katja/repository.hpp" namespace katja { - class WelcomePage final : public ftxui::ComponentBase + class PageBase : public ftxui::ComponentBase { + public: + virtual void Load() = 0; + }; + + using Page = std::shared_ptr<PageBase>; + + class PageContainer final : public ftxui::ComponentBase + { + int menu_selected{ 0 }; + ftxui::Component menu; + ftxui::Component content; + std::vector<std::string> menu_entries; + + public: + std::function<void()> on_enter; + + PageContainer(std::vector<std::pair<std::string, Page>> pages); + ftxui::Element Render() override; + bool OnEvent(ftxui::Event event) override; }; - class UpdatesPage final : public ftxui::ComponentBase + class WelcomePage final : public PageBase + { + public: + void Load() override; + ftxui::Element Render() override; + }; + + class UpdatesPage final : public PageBase { std::vector<package_identifier> updatable; public: explicit UpdatesPage(std::vector<package_identifier>&& updatable); + void Load() override; ftxui::Element Render() override; }; - class SearchPage final : public ftxui::ComponentBase + class SearchPage final : public PageBase { + public: + void Load() override; }; } |
