FTXUI 6.1.9
C++ functional terminal UI.
载入中...
搜索中...
未找到
modal.cpp
浏览该文件的文档.
1// 版权所有 2022 Arthur Sonzogni. 保留所有权利。
2// 此源代码的使用受 MIT 许可证的约束,您可以在
3// LICENSE 文件中找到该许可证。
4#include <ftxui/component/event.hpp> // for Event
5#include <ftxui/dom/elements.hpp> // for operator|, Element, center, clear_under, dbox
6#include <memory> // for __shared_ptr_access, shared_ptr
7#include <utility> // for move
8
9#include "ftxui/component/component.hpp" // for Make, Tab, ComponentDecorator, Modal
10#include "ftxui/component/component_base.hpp" // for Component, ComponentBase
11
12namespace ftxui {
13
14// 在 |main| 组件顶部添加一个 |modal| 窗口。当 |show_modal| 为 true 时,它将显示在
15// 其他组件的顶部。
16/// @ingroup component
17// NOLINTNEXTLINE
18Component Modal(Component main, Component modal, const bool* show_modal) {
19 class Impl : public ComponentBase {
20 public:
21 explicit Impl(Component main, Component modal, const bool* show_modal)
22 : main_(std::move(main)),
23 modal_(std::move(modal)),
24 show_modal_(show_modal) {
25 Add(Container::Tab({main_, modal_}, &selector_));
26 }
27
28 private:
29 Element OnRender() override {
30 selector_ = *show_modal_;
31 auto document = main_->Render();
32 if (*show_modal_) {
33 document = dbox({
34 document,
35 modal_->Render() | clear_under | center,
36 });
37 }
38 return document;
39 }
40
41 bool OnEvent(Event event) override {
42 selector_ = *show_modal_;
43 return ComponentBase::OnEvent(event);
44 }
45
46 Component main_;
47 Component modal_;
48 const bool* show_modal_;
49 int selector_ = *show_modal_;
50 };
51 return Make<Impl>(main, modal, show_modal);
52}
53
54// 装饰一个组件。在其顶部添加一个 |modal| 窗口。当 |show_modal| 为 true 时,它将显示在
55// 其他组件的顶部。
56/// @ingroup component
57// NOLINTNEXTLINE
58ComponentDecorator Modal(Component modal, const bool* show_modal) {
59 return [modal, show_modal](Component main) {
60 return Modal(std::move(main), modal, show_modal);
61 };
62}
63
64} // namespace ftxui
它将自身实现为 ftxui::Element。它通过响应 ftxui::Event 来实现键盘导航。
Component Modal(Component main, Component modal, const bool *show_modal)
代表一个事件。它可以是按键事件、终端大小调整等等...
#include "ftxui/component/component_base.hpp" // 用于 ComponentBase
std::shared_ptr< T > Make(Args &&... args)
std::shared_ptr< Node > Element
std::function< Component(Component)> ComponentDecorator
std::shared_ptr< ComponentBase > Component