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