/* * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ #include "Host/GraphicsAppManager.hpp" #include "ExampleAppList.hpp" #include #include #include #include #include // for Event, Event::Custom #include #include using namespace OpenVulkano; int main(int argc, char** argv) { std::vector examples; for (const auto& e : EXAMPLE_APPS) { examples.emplace_back(e.first); } int selectedExample = 0; ftxui::MenuOption option; auto screen = ftxui::ScreenInteractive::TerminalOutput(); screen.ForceHandleCtrlC(true); //screen.ForceHandleCtrlZ(true); option.on_enter = screen.ExitLoopClosure(); auto menu = ftxui::Menu(&examples, &selectedExample, option); bool shouldExit = false; menu |= ftxui::CatchEvent( [&](ftxui::Event event) { if (event == ftxui::Event::CtrlC || event == ftxui::Event::CtrlZ) { screen.ExitLoopClosure()(); shouldExit = true; } return false; }); screen.Loop(menu); if (shouldExit) { return 0; } if (selectedExample >= examples.size()) { throw std::runtime_error("Invalid menu selection!"); } std::unique_ptr app(EXAMPLE_APPS[selectedExample].second()); GraphicsAppManager manager(app.get()); manager.Run(); return 0; }