mirror of
https://github.com/ArthurSonzogni/FTXUI.git
synced 2024-12-05 09:21:57 +08:00
fcd050c017
Some checks failed
Build / Tests (gcc, gcov, Linux GCC, ubuntu-latest) (push) Failing after 9m27s
Build / Tests (llvm, llvm-cov gcov, Linux Clang, ubuntu-latest) (push) Failing after 6s
Build / documentation (push) Failing after 5s
CodeQL / Analyze (cpp) (push) Failing after 24s
Build / Tests (cl, Windows MSVC, windows-latest) (push) Has been cancelled
Build / Tests (llvm, llvm-cov gcov, MacOS clang, macos-latest) (push) Has been cancelled
Build / Create release (push) Has been cancelled
Build / Build packages (build/ftxui*Darwin*, macos-latest) (push) Has been cancelled
Build / Build packages (build/ftxui*Linux*, ubuntu-latest) (push) Has been cancelled
Build / Build packages (build/ftxui*Win64*, windows-latest) (push) Has been cancelled
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:https://github.com/ArthurSonzogni/FTXUI/issues/912
96 lines
2.6 KiB
C++
96 lines
2.6 KiB
C++
// Copyright 2021 Arthur Sonzogni. All rights reserved.
|
|
// Use of this source code is governed by the MIT license that can be found in
|
|
// the LICENSE file.
|
|
#ifndef FTXUI_DOM_TABLE
|
|
#define FTXUI_DOM_TABLE
|
|
|
|
#include <string> // for string
|
|
#include <vector> // for vector
|
|
|
|
#include "ftxui/dom/elements.hpp" // for Element, BorderStyle, LIGHT, Decorator
|
|
|
|
namespace ftxui {
|
|
|
|
// Usage:
|
|
//
|
|
// Initialization:
|
|
// ---------------
|
|
//
|
|
// auto table = Table({
|
|
// {"X", "Y"},
|
|
// {"-1", "1"},
|
|
// {"+0", "0"},
|
|
// {"+1", "1"},
|
|
// });
|
|
//
|
|
// table.SelectAll().Border(LIGHT);
|
|
//
|
|
// table.SelectRow(1).Border(DOUBLE);
|
|
// table.SelectRow(1).SeparatorInternal(Light);
|
|
//
|
|
// std::move(table).Element();
|
|
|
|
class Table;
|
|
class TableSelection;
|
|
|
|
class Table {
|
|
public:
|
|
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);
|
|
TableSelection SelectRows(int row_min, int row_max);
|
|
TableSelection SelectColumn(int column_index);
|
|
TableSelection SelectColumns(int column_min, int column_max);
|
|
TableSelection SelectRectangle(int column_min,
|
|
int column_max,
|
|
int row_min,
|
|
int row_max);
|
|
Element Render();
|
|
|
|
private:
|
|
void Initialize(std::vector<std::vector<Element>>);
|
|
friend TableSelection;
|
|
std::vector<std::vector<Element>> elements_;
|
|
int input_dim_x_ = 0;
|
|
int input_dim_y_ = 0;
|
|
int dim_x_ = 0;
|
|
int dim_y_ = 0;
|
|
};
|
|
|
|
class TableSelection {
|
|
public:
|
|
void Decorate(Decorator);
|
|
void DecorateAlternateRow(Decorator, int modulo = 2, int shift = 0);
|
|
void DecorateAlternateColumn(Decorator, int modulo = 2, int shift = 0);
|
|
|
|
void DecorateCells(Decorator);
|
|
void DecorateCellsAlternateColumn(Decorator, int modulo = 2, int shift = 0);
|
|
void DecorateCellsAlternateRow(Decorator, int modulo = 2, int shift = 0);
|
|
|
|
void Border(BorderStyle border = LIGHT);
|
|
void BorderLeft(BorderStyle border = LIGHT);
|
|
void BorderRight(BorderStyle border = LIGHT);
|
|
void BorderTop(BorderStyle border = LIGHT);
|
|
void BorderBottom(BorderStyle border = LIGHT);
|
|
|
|
void Separator(BorderStyle border = LIGHT);
|
|
void SeparatorVertical(BorderStyle border = LIGHT);
|
|
void SeparatorHorizontal(BorderStyle border = LIGHT);
|
|
|
|
private:
|
|
friend Table;
|
|
Table* table_;
|
|
int x_min_;
|
|
int x_max_;
|
|
int y_min_;
|
|
int y_max_;
|
|
};
|
|
|
|
} // namespace ftxui
|
|
|
|
#endif /* end of include guard: FTXUI_DOM_TABLE */
|