FTXUI  5.0.0
C++ functional terminal UI.
table.hpp
Go to the documentation of this file.
1 // Copyright 2021 Arthur Sonzogni. All rights reserved.
2 // Use of this source code is governed by the MIT license that can be found in
3 // the LICENSE file.
4 #ifndef FTXUI_DOM_TABLE
5 #define FTXUI_DOM_TABLE
6 
7 #include <string> // for string
8 #include <vector> // for vector
9 
10 #include "ftxui/dom/elements.hpp" // for Element, BorderStyle, LIGHT, Decorator
11 
12 namespace ftxui {
13 
14 // Usage:
15 //
16 // Initialization:
17 // ---------------
18 //
19 // auto table = Table({
20 // {"X", "Y"},
21 // {"-1", "1"},
22 // {"+0", "0"},
23 // {"+1", "1"},
24 // });
25 //
26 // table.SelectAll().Border(LIGHT);
27 //
28 // table.SelectRow(1).Border(DOUBLE);
29 // table.SelectRow(1).SeparatorInternal(Light);
30 //
31 // std::move(table).Element();
32 
33 class Table;
34 class TableSelection;
35 
36 class Table {
37  public:
38  Table();
39  explicit Table(std::vector<std::vector<std::string>>);
40  explicit Table(std::vector<std::vector<Element>>);
41  Table(std::initializer_list<std::vector<std::string>> init);
43  TableSelection SelectCell(int column, int row);
44  TableSelection SelectRow(int row_index);
45  TableSelection SelectRows(int row_min, int row_max);
46  TableSelection SelectColumn(int column_index);
47  TableSelection SelectColumns(int column_min, int column_max);
48  TableSelection SelectRectangle(int column_min,
49  int column_max,
50  int row_min,
51  int row_max);
52  Element Render();
53 
54  private:
55  void Initialize(std::vector<std::vector<Element>>);
56  friend TableSelection;
57  std::vector<std::vector<Element>> elements_;
58  int input_dim_x_ = 0;
59  int input_dim_y_ = 0;
60  int dim_x_ = 0;
61  int dim_y_ = 0;
62 };
63 
65  public:
66  void Decorate(Decorator);
67  void DecorateAlternateRow(Decorator, int modulo = 2, int shift = 0);
68  void DecorateAlternateColumn(Decorator, int modulo = 2, int shift = 0);
69 
71  void DecorateCellsAlternateColumn(Decorator, int modulo = 2, int shift = 0);
72  void DecorateCellsAlternateRow(Decorator, int modulo = 2, int shift = 0);
73 
79 
83 
84  private:
85  friend Table;
86  Table* table_;
87  int x_min_;
88  int x_max_;
89  int y_min_;
90  int y_max_;
91 };
92 
93 } // namespace ftxui
94 
95 #endif /* end of include guard: FTXUI_DOM_TABLE */
void DecorateAlternateColumn(Decorator, int modulo=2, int shift=0)
Apply the decorator to the selection. This decorate only the lines modulo modulo with a shift of shif...
Definition: table.cpp:286
void SeparatorVertical(BorderStyle border=LIGHT)
Draw some vertical separator lines in the selection.
Definition: table.cpp:397
void DecorateCells(Decorator)
Apply the decorator to the selection.
Definition: table.cpp:268
void BorderLeft(BorderStyle border=LIGHT)
Draw some separator lines to the left side of the selection.
Definition: table.cpp:425
void DecorateCellsAlternateColumn(Decorator, int modulo=2, int shift=0)
Apply the decorator to the selection. This decorate only the corners modulo modulo with a shift of sh...
Definition: table.cpp:326
void Decorate(Decorator)
Apply the decorator to the selection. This decorate both the cells, the lines and the corners.
Definition: table.cpp:254
void DecorateAlternateRow(Decorator, int modulo=2, int shift=0)
Apply the decorator to the selection. This decorate only the lines modulo modulo with a shift of shif...
Definition: table.cpp:306
void BorderTop(BorderStyle border=LIGHT)
Draw some separator lines to the top side of the selection.
Definition: table.cpp:445
void Separator(BorderStyle border=LIGHT)
Draw some separator lines in the selection.
Definition: table.cpp:381
void BorderBottom(BorderStyle border=LIGHT)
Draw some separator lines to the bottom side of the selection.
Definition: table.cpp:455
void DecorateCellsAlternateRow(Decorator, int modulo=2, int shift=0)
Apply the decorator to the selection. This decorate only the corners modulo modulo with a shift of sh...
Definition: table.cpp:346
void BorderRight(BorderStyle border=LIGHT)
Draw some separator lines to the right side of the selection.
Definition: table.cpp:435
void Border(BorderStyle border=LIGHT)
Apply a border around the selection.
Definition: table.cpp:362
void SeparatorHorizontal(BorderStyle border=LIGHT)
Draw some horizontal separator lines in the selection.
Definition: table.cpp:411
Element Render()
Render the table.
Definition: table.cpp:223
Table()
Create an empty table.
Definition: table.cpp:47
TableSelection SelectCell(int column, int row)
Select a cell of the table.
Definition: table.cpp:177
TableSelection SelectColumn(int column_index)
Select a column of the table.
Definition: table.cpp:159
TableSelection SelectRow(int row_index)
Select a row of the table.
Definition: table.cpp:142
TableSelection SelectColumns(int column_min, int column_max)
Select a range of columns of the table.
Definition: table.cpp:168
TableSelection SelectRows(int row_min, int row_max)
Select a range of rows of the table.
Definition: table.cpp:151
TableSelection SelectAll()
Select all the table.
Definition: table.cpp:210
TableSelection SelectRectangle(int column_min, int column_max, int row_min, int row_max)
Select a rectangle of the table.
Definition: table.cpp:188
std::function< Element(Element)> Decorator
Definition: elements.hpp:24
std::shared_ptr< Node > Element
Definition: elements.hpp:22
Element border(Element)
Draw a border around the element.
Definition: border.cpp:228
BorderStyle
Definition: elements.hpp:27
@ LIGHT
Definition: elements.hpp:28