Skip to content

Commit

Permalink
Table: support initializer list constructor. (#915)
Browse files Browse the repository at this point in the history
To avoid burdening the user with explicit type construction when using
the library, we can use a constructor that accepts an initializer list
(std::initializer_list). This allows users to pass initializer lists
directly without having to wrap them in
std::vector<std::vector<std::string>>. This resolves the ambiguous case
when the inner list contains only two elements.

Bug:#912
  • Loading branch information
ArthurSonzogni authored Aug 13, 2024
1 parent d7de24c commit fcd050c
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 0 deletions.
1 change: 1 addition & 0 deletions include/ftxui/dom/table.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ class Table {
Table();
explicit Table(std::vector<std::vector<std::string>>);
explicit Table(std::vector<std::vector<Element>>);
Table(std::initializer_list<std::vector<std::string>> init);
TableSelection SelectAll();
TableSelection SelectCell(int column, int row);
TableSelection SelectRow(int row_index);
Expand Down
16 changes: 16 additions & 0 deletions src/ftxui/dom/table.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,22 @@ Table::Table(std::vector<std::vector<Element>> input) {
Initialize(std::move(input));
}

// @brief Create a table from a list of list of string.
// @param init The input data.
// @ingroup dom
Table::Table(std::initializer_list<std::vector<std::string>> init) {
std::vector<std::vector<Element>> input;
for (const auto& row : init) {
std::vector<Element> output_row;
output_row.reserve(row.size());
for (const auto& cell : row) {
output_row.push_back(text(cell));
}
input.push_back(std::move(output_row));
}
Initialize(std::move(input));
}

// private
void Table::Initialize(std::vector<std::vector<Element>> input) {
input_dim_y_ = static_cast<int>(input.size());
Expand Down
12 changes: 12 additions & 0 deletions src/ftxui/dom/table_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -733,5 +733,17 @@ TEST(TableTest, Merge) {
screen.ToString());
}

TEST(TableTest, Issue912) {
Table({
{"a"},
});
Table({
{"a", "b"},
});
Table({
{"a", "b", "c"},
});
}

} // namespace ftxui
// NOLINTEND

0 comments on commit fcd050c

Please sign in to comment.