15class ResizableSplitLeftBase :
public ComponentBase {
18 : main_(main), child_(child), main_size_(main_size) {
25 bool OnEvent(Event event)
final {
27 return OnMouseEvent(std::move(event));
31 bool OnMouseEvent(Event event) {
33 captured_mouse_.reset();
39 separator_box_.Contain(event.mouse().x, event.mouse().y) &&
41 captured_mouse_ = CaptureMouse(event);
45 if (captured_mouse_) {
46 *main_size_ =
event.mouse().x - box_.x_min;
57 child_->Render() |
xflex,
65 int*
const main_size_;
71class ResizableSplitRightBase :
public ComponentBase {
74 : main_(main), child_(child), main_size_(main_size) {
81 bool OnEvent(Event event)
final {
83 return OnMouseEvent(std::move(event));
87 bool OnMouseEvent(Event event) {
89 captured_mouse_.reset();
95 separator_box_.Contain(event.mouse().x, event.mouse().y) &&
97 captured_mouse_ = CaptureMouse(event);
101 if (captured_mouse_) {
102 *main_size_ = box_.x_max -
event.mouse().x;
111 child_->Render() |
xflex,
121 int*
const main_size_;
127class ResizableSplitTopBase :
public ComponentBase {
130 : main_(main), child_(child), main_size_(main_size) {
137 bool OnEvent(Event event)
final {
138 if (event.is_mouse())
139 return OnMouseEvent(std::move(event));
143 bool OnMouseEvent(Event event) {
145 captured_mouse_.reset();
151 separator_box_.Contain(event.mouse().x, event.mouse().y) &&
153 captured_mouse_ = CaptureMouse(event);
157 if (captured_mouse_) {
158 *main_size_ =
event.mouse().y - box_.y_min;
169 child_->Render() |
yflex,
177 int*
const main_size_;
183class ResizableSplitBottomBase :
public ComponentBase {
186 : main_(main), child_(child), main_size_(main_size) {
193 bool OnEvent(Event event)
final {
194 if (event.is_mouse())
195 return OnMouseEvent(std::move(event));
199 bool OnMouseEvent(Event event) {
201 captured_mouse_.reset();
207 separator_box_.Contain(event.mouse().x, event.mouse().y) &&
209 captured_mouse_ = CaptureMouse(event);
213 if (captured_mouse_) {
214 *main_size_ = box_.y_max -
event.mouse().y;
223 child_->Render() |
yflex,
233 int*
const main_size_;
virtual bool OnEvent(Event)
Called in response to an event.
Component Horizontal(Components children)
A list of components, drawn one by one horizontally and navigated horizontally using left/right arrow...
Component Vertical(Components children)
A list of components, drawn one by one vertically and navigated vertically using up/down arrow key or...
Element xflex(Element)
Expand/Minimize if possible/needed on the X axis.
Component ResizableSplitTop(Component main, Component back, int *main_size)
An vertical split in between two components, configurable using the mouse.
std::unique_ptr< CapturedMouseInterface > CapturedMouse
std::shared_ptr< T > Make(Args &&... args)
std::shared_ptr< Node > Element
Element yflex(Element)
Expand/Minimize if possible/needed on the Y axis.
Element hbox(Elements)
A container displaying elements horizontally one by one.
Component ResizableSplitRight(Component main, Component back, int *main_size)
An horizontal split in between two components, configurable using the mouse.
Decorator reflect(Box &box)
Component ResizableSplitBottom(Component main, Component back, int *main_size)
An vertical split in between two components, configurable using the mouse.
void Render(Screen &screen, const Element &node)
Display an element on a ftxui::Screen.
Decorator size(Direction, Constraint, int value)
Apply a constraint on the size of an element.
Component ResizableSplitLeft(Component main, Component back, int *main_size)
An horizontal split in between two components, configurable using the mouse.
std::shared_ptr< ComponentBase > Component
Element vbox(Elements)
A container displaying elements vertically one by one.