aboutsummaryrefslogtreecommitdiff
path: root/cli/component.hpp
diff options
context:
space:
mode:
authorEugen Wissner <belka@caraus.de>2025-04-05 14:23:44 +0200
committerEugen Wissner <belka@caraus.de>2025-04-05 14:23:44 +0200
commit24ecc7becd7a59d151f7ae14645b7b762452b168 (patch)
treeafa91f3fae38ac87c1fbe5edb040eca462a3caf7 /cli/component.hpp
parentff3c508ceb185d631aea7fed93329525d77a1704 (diff)
downloadkazbek-24ecc7becd7a59d151f7ae14645b7b762452b168.tar.gz
katja: Use the tab container for pages
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;
};
}