#include #include #include #include #include #include "katja/sbo.hpp" #include "katja/database.hpp" #include "component.hpp" class MyContainer final : public ftxui::ComponentBase { public: std::vector menu_entries; std::vector menu_pages; int menu_selected{ 0 }; ftxui::Component menu; std::function on_enter; MyContainer(std::vector> pages) { std::transform(std::cbegin(pages), std::cend(pages), std::back_inserter(this->menu_entries), [](const std::pair& pair) { return pair.first; }); std::transform(std::cbegin(pages), std::cend(pages), std::back_inserter(this->menu_pages), [](const std::pair& pair) { return pair.second; }); ftxui::MenuOption menu_option = ftxui::MenuOption::Horizontal(); menu = ftxui::Menu(&this->menu_entries, &this->menu_selected, menu_option); } ftxui::Element Render() override { return ftxui::vbox({ this->menu->Render(), this->menu_pages.at(this->menu_selected)->Render() }); } bool OnEvent(ftxui::Event event) override { if (event.character() == "q") { on_enter(); return true; } return menu->OnEvent(event); } }; int main(int argc, const char **argv) { auto configuration = toml::parse("config/katja.toml"); std::multimap installed_database = katja::read_installed_database(); for (const auto& [repository_name, repository_value] : configuration.as_table()) { std::filesystem::path slackbuild_repository{ repository_value.at("path").as_string() }; katja::sbo_repository repository{ slackbuild_repository }; auto updates = repository.get_updates(installed_database); auto screen = ftxui::ScreenInteractive::Fullscreen(); auto container = std::make_shared(std::vector>{ { "Home", std::make_shared() }, { "Updates", std::make_shared(std::move(updates)) }, { "Search", std::make_shared() } }); container->on_enter = screen.ExitLoopClosure(); screen.Loop(container); } return EXIT_SUCCESS; }