This commit is contained in:
Your Name 2025-04-21 20:56:54 +12:00
parent b135bed29c
commit 749efef29d
3 changed files with 28 additions and 3 deletions

View File

@ -54,7 +54,7 @@ std::vector<ServerInfo> get_configured_servers() {
void list_servers() { void list_servers() {
auto servers = get_configured_servers(); auto servers = get_configured_servers();
tableprint tp; tableprint tp("All DropShell Servers");
tp.add_row({"Name", "Address"}); tp.add_row({"Name", "Address"});
for (const auto& server : servers) { for (const auto& server : servers) {
tp.add_row({server.name, server.ssh_host}); tp.add_row({server.name, server.ssh_host});

View File

@ -4,13 +4,17 @@
#include <locale> #include <locale>
#include <cwchar> #include <cwchar>
tableprint::tableprint() { tableprint::tableprint(const std::string title) : title(title) {
// Set locale for wide character support // Set locale for wide character support
std::setlocale(LC_ALL, ""); std::setlocale(LC_ALL, "");
} }
tableprint::~tableprint() {} tableprint::~tableprint() {}
void tableprint::set_title(const std::string title) {
this->title = title;
}
void tableprint::add_row(const std::vector<std::string>& row) { void tableprint::add_row(const std::vector<std::string>& row) {
rows.push_back(row); rows.push_back(row);
} }
@ -26,6 +30,25 @@ void tableprint::print() {
} }
} }
// Calculate total table width
size_t total_width = 0;
for (size_t width : col_widths) {
total_width += width + 2; // +2 for padding
}
total_width += col_widths.size() - 1; // Add space for vertical borders
// Print title if it exists
if (!title.empty()) {
std::wcout << L"\033[90m"; // Dark grey color for borders
std::wcout << L"" << std::wstring(total_width, L'') << L"" << std::endl;
std::wcout << L"" << L"\033[1;37m"; // White color for title
size_t padding = (total_width - title.length()) / 2;
std::wcout << std::wstring(padding, L' ') << std::wstring(title.begin(), title.end())
<< std::wstring(total_width - title.length() - padding, L' ');
std::wcout << L"\033[90m│" << std::endl;
std::wcout << L"" << std::wstring(total_width, L'') << L"" << std::endl;
}
// Print top border // Print top border
std::wcout << L"\033[90m"; // Dark grey color for borders std::wcout << L"\033[90m"; // Dark grey color for borders
std::wcout << L""; std::wcout << L"";

View File

@ -11,12 +11,14 @@
// assumes the first row is the header. // assumes the first row is the header.
class tableprint { class tableprint {
public: public:
tableprint(); tableprint(const std::string title = "");
~tableprint(); ~tableprint();
void add_row(const std::vector<std::string>& row); void add_row(const std::vector<std::string>& row);
void print(); void print();
void set_title(const std::string title);
private: private:
std::vector<std::vector<std::string>> rows; std::vector<std::vector<std::string>> rows;
std::string title;
}; };
# endif # endif