On Thu, Apr 21, 2016 at 2:53 PM, Tobias Klauser <[email protected]> wrote:
> On 2016-04-17 at 19:31:30 +0200, Vadim Kochan <[email protected]> wrote:
>> Add new module ui.c which is responsible to render
>> different kinds of UI widgets - tables, etc.
>>
>> Implemented generic API for print table-like list of elements.
>> This table API might be used for print flows in curses or text mode.
>>
>> Signed-off-by: Vadim Kochan <[email protected]>
>
> Looks good in general, a few minor nits below.
>
>> ---
>> ui.c | 142
>> +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
>> ui.h | 53 +++++++++++++++++++++++++
>
> How about calling the module ui_table, which is a bit more specific?
> Also all function names already start with "ui_table_".
I thought that ui.c might keep other UI helpers (widgets), so I called
it just "ui", so if
there will be some other UI widget, then ui_xxx naming will be still OK.
>
>> 2 files changed, 195 insertions(+)
>> create mode 100644 ui.c
>> create mode 100644 ui.h
>>
>> diff --git a/ui.c b/ui.c
>> new file mode 100644
>> index 0000000..d5fe1a7
>> --- /dev/null
>> +++ b/ui.c
>> @@ -0,0 +1,142 @@
>> +/*
>> + * netsniff-ng - the packet sniffing beast
>> + * Subject to the GPL, version 2.
>> + */
>> +
>> +#include "ui.h"
>> +#include "xmalloc.h"
>> +
>> +#include <curses.h>
>
> Global headers should come first, i.e.
>
> #include <curses.h>
>
> #include "ui.h"
> #include "xmalloc.h"
>
>> +void ui_table_init(struct ui_table *tbl)
>> +{
>> + memset(tbl, 0, sizeof(*tbl));
>> +
>> + getsyx(tbl->y, tbl->x);
>> +
>> + tbl->rows_y = tbl->y;
>> + tbl->width = COLS;
>> + tbl->col_pad = 1;
>> +
>> + INIT_LIST_HEAD(&tbl->cols);
>> +}
>> +
>> +void ui_table_uninit(struct ui_table *tbl)
>> +{
>> + struct ui_col *col, *tmp;
>> +
>> + list_for_each_entry_safe(col, tmp, &tbl->cols, entry)
>> + xfree(col);
>> +}
>> +
>> +void ui_table_pos_set(struct ui_table *tbl, int y, int x)
>> +{
>> + tbl->y = y;
>> + tbl->x = x;
>> + tbl->rows_y = y;
>> +}
>> +
>> +static struct ui_col *ui_table_col_get(struct ui_table *tbl, uint32_t id)
>> +{
>> + struct ui_col *col;
>> +
>> + list_for_each_entry(col, &tbl->cols, entry) {
>> + if (col->id == id)
>> + return col;
>> + }
>> +
>> + /* Should not happen in normal case */
>> + panic("Invalid column id %u\n", id);
>
> I'd rather omit the panic() here, return NULL and gracefully handle (if
> possible) NULL returns in the callers.
>
Hm, for me it looks like more programmers's issue so may be
bug_on(...) will be better ?
But I will still think on it more ...
>> +
>> +void ui_table_header_print(struct ui_table *tbl)
>> +{
>> + struct ui_col *col;
>> + int max_width = tbl->width;
>> + int width = 0;
>> +
>> + attron(tbl->hdr_color);
>> +
>> + mvprintw(tbl->y, tbl->x, "%-*.*s", max_width - tbl->x, max_width -
>> tbl->x, "");
>> + mvprintw(tbl->y, tbl->x, "");
>> +
>> + list_for_each_entry(col, &tbl->cols, entry) {
>> + __ui_table_row_print(tbl, col, col->name);
>> + width += col->len + tbl->col_pad;
>> + }
>> +
>
> Trailing whitespace (tab) here.
>
>> + mvprintw(tbl->y, width, "%*s", max_width - width, " ");
>> + attroff(tbl->hdr_color);
>> +}
>> diff --git a/ui.h b/ui.h
>> new file mode 100644
>> index 0000000..02d1da2
>> --- /dev/null
>> +++ b/ui.h
>> @@ -0,0 +1,53 @@
>> +#ifndef UI_H
>> +#define UI_H
>> +
>> +#include "list.h"
>> +
>> +#include <stdbool.h>
>> +#include <inttypes.h>
>
> Global headers should come first.
>
--
You received this message because you are subscribed to the Google Groups
"netsniff-ng" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.