62 lines
1.5 KiB
C++
62 lines
1.5 KiB
C++
#pragma once
|
|
|
|
#include <ftxui/component/event.hpp>
|
|
#include <ftxui/component/component_base.hpp>
|
|
#include <ftxui/component/component.hpp>
|
|
|
|
#include "katja/repository.hpp"
|
|
|
|
namespace katja
|
|
{
|
|
class PageBase : 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;
|
|
|
|
public:
|
|
ScreenContainer(std::vector<std::pair<std::string, Page>> pages, std::function<void()> on_enter);
|
|
|
|
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;
|
|
|
|
public:
|
|
explicit UpdatesPage(std::vector<package_identifier>&& updatable);
|
|
|
|
void Load() override;
|
|
ftxui::Element OnRender() override;
|
|
};
|
|
|
|
class SearchPage final : public PageBase
|
|
{
|
|
public:
|
|
void Load() override;
|
|
};
|
|
}
|