diff options
author | Lennart Poettering <lennart@poettering.net> | 2019-07-16 12:43:42 +0200 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2019-07-16 12:43:46 +0200 |
commit | 6268974f886ce1a6a63b67c3b0aa5ede586a6b0e (patch) | |
tree | 7c05e38a0498dadf5dd7481cb7356066b8c7ee83 /src/shared | |
parent | dea55040df2e29562024c00818a1ebe9aa9b38c7 (diff) | |
download | systemd-6268974f886ce1a6a63b67c3b0aa5ede586a6b0e.tar.gz systemd-6268974f886ce1a6a63b67c3b0aa5ede586a6b0e.tar.bz2 systemd-6268974f886ce1a6a63b67c3b0aa5ede586a6b0e.zip |
format-table: add ability to set cell attributes within table_add_many()
table_add_many() is so much shorter and easier to read than
table_add_cell() with its accessors. Let's teach table_add_many() more
tricks, so that reverting to table_add_cell() is not needed that often
anymore.
Diffstat (limited to 'src/shared')
-rw-r--r-- | src/shared/format-table.c | 54 | ||||
-rw-r--r-- | src/shared/format-table.h | 12 |
2 files changed, 65 insertions, 1 deletions
diff --git a/src/shared/format-table.c b/src/shared/format-table.c index 54ca1972bd..0422709f27 100644 --- a/src/shared/format-table.c +++ b/src/shared/format-table.c @@ -678,6 +678,7 @@ int table_update(Table *t, TableCell *cell, TableDataType type, const void *data int table_add_many_internal(Table *t, TableDataType first_type, ...) { TableDataType type; va_list ap; + TableCell *last_cell = NULL; int r; assert(t); @@ -770,6 +771,55 @@ int table_add_many_internal(Table *t, TableDataType first_type, ...) { data = &buffer.ifindex; break; + case TABLE_SET_MINIMUM_WIDTH: { + size_t w = va_arg(ap, size_t); + + r = table_set_minimum_width(t, last_cell, w); + break; + } + + case TABLE_SET_MAXIMUM_WIDTH: { + size_t w = va_arg(ap, size_t); + r = table_set_maximum_width(t, last_cell, w); + break; + } + + case TABLE_SET_WEIGHT: { + unsigned w = va_arg(ap, unsigned); + r = table_set_weight(t, last_cell, w); + break; + } + + case TABLE_SET_ALIGN_PERCENT: { + unsigned p = va_arg(ap, unsigned); + r = table_set_align_percent(t, last_cell, p); + break; + } + + case TABLE_SET_ELLIPSIZE_PERCENT: { + unsigned p = va_arg(ap, unsigned); + r = table_set_ellipsize_percent(t, last_cell, p); + break; + } + + case TABLE_SET_COLOR: { + const char *c = va_arg(ap, const char*); + r = table_set_color(t, last_cell, c); + break; + } + + case TABLE_SET_URL: { + const char *u = va_arg(ap, const char*); + r = table_set_url(t, last_cell, u); + break; + } + + case TABLE_SET_UPPERCASE: { + int u = va_arg(ap, int); + r = table_set_uppercase(t, last_cell, u); + break; + } + case _TABLE_DATA_TYPE_MAX: /* Used as end marker */ va_end(ap); @@ -779,7 +829,9 @@ int table_add_many_internal(Table *t, TableDataType first_type, ...) { assert_not_reached("Uh? Unexpected data type."); } - r = table_add_cell(t, NULL, type, data); + if (type < _TABLE_DATA_TYPE_MAX) + r = table_add_cell(t, &last_cell, type, data); + if (r < 0) { va_end(ap); return r; diff --git a/src/shared/format-table.h b/src/shared/format-table.h index 62e2d146db..e1c0dab4d0 100644 --- a/src/shared/format-table.h +++ b/src/shared/format-table.h @@ -25,6 +25,18 @@ typedef enum TableDataType { TABLE_PERCENT, TABLE_IFINDEX, _TABLE_DATA_TYPE_MAX, + + /* The following are not really data types, but commands for table_add_cell_many() to make changes to + * a cell just added. */ + TABLE_SET_MINIMUM_WIDTH, + TABLE_SET_MAXIMUM_WIDTH, + TABLE_SET_WEIGHT, + TABLE_SET_ALIGN_PERCENT, + TABLE_SET_ELLIPSIZE_PERCENT, + TABLE_SET_COLOR, + TABLE_SET_URL, + TABLE_SET_UPPERCASE, + _TABLE_DATA_TYPE_INVALID = -1, } TableDataType; |