diff options
Diffstat (limited to 'cli/component.hpp')
| -rw-r--r-- | cli/component.hpp | 68 |
1 files changed, 10 insertions, 58 deletions
diff --git a/cli/component.hpp b/cli/component.hpp index c419020..8ae3e67 100644 --- a/cli/component.hpp +++ b/cli/component.hpp @@ -1,76 +1,28 @@ #pragma once +#include <optional> + #include <ftxui/component/event.hpp> -#include <ftxui/component/component_base.hpp> #include <ftxui/component/component.hpp> +#include <ftxui/dom/elements.hpp> #include "katja/repository.hpp" -#include "katja/database.hpp" namespace katja { - class PageBase : public ftxui::ComponentBase + class PackageListBase : public ftxui::ComponentBase { - public: - virtual void Load() = 0; - }; - - using Page = std::shared_ptr<PageBase>; - using Pages = std::vector<Page>; - - class ScreenContainer final : public ftxui::ComponentBase - { - int menu_selected{ 0 }; - ftxui::Component menu; - ftxui::Component content; - std::vector<std::string> menu_entries; - Pages menu_pages; - std::function<void()> on_enter; + std::string title; + const std::vector<package_identifier> packages; + std::optional<std::size_t> selected; public: - ScreenContainer(std::vector<std::pair<std::string, Page>> pages, std::function<void()> on_enter); + PackageListBase(const std::string& title, const std::vector<package_identifier>& packages = {}); ftxui::Element OnRender() override; bool OnEvent(ftxui::Event event) override; }; - ftxui::Component Screen(std::vector<std::pair<std::string, Page>> pages, std::function<void()> on_enter); - - class WelcomePage final : public PageBase - { - public: - void Load() override; - ftxui::Element OnRender() override; - }; - - class UpdatesPage final : public PageBase - { - std::vector<package_identifier> updatable; - std::shared_ptr<struct repository> repository; - package_database database; - - public: - UpdatesPage(std::shared_ptr<struct repository> repository, package_database database); - - void Load() override; - ftxui::Element OnRender() override; - }; - - class SearchPage final : public PageBase - { - std::string needle; - ftxui::Component search_input; - ftxui::Component type_input; - std::shared_ptr<struct repository> repository; - std::string architecture; - std::vector<package_identifier> search_results; - int search_type{ 0 }; - - public: - SearchPage(std::shared_ptr<struct repository> repository, const std::string& architecture); - - void Load() override; - ftxui::Element OnRender() override; - bool OnEvent(ftxui::Event event) override; - }; + ftxui::Component PackageList(const std::string& title, const std::vector<package_identifier>& packages = {}); + } |
