summaryrefslogtreecommitdiff
path: root/cli/component.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'cli/component.hpp')
-rw-r--r--cli/component.hpp68
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 = {});
+
}