Improve the footer

This commit is contained in:
Přemysl Eric Janouch 2016-12-29 23:33:41 +01:00
parent c6881e8815
commit 5c4be81f25
Signed by: p
GPG Key ID: B715679E3A361BE6
1 changed files with 92 additions and 21 deletions

113
hex.c
View File

@ -403,8 +403,6 @@ static void
app_draw_footer (void) app_draw_footer (void)
{ {
move (app_visible_items (), 0); move (app_visible_items (), 0);
// TODO: write the footer
app_write_line ("Connecting to MPD...", APP_ATTR (HEADER));
// XXX: can we get rid of this and still make it look acceptable? // XXX: can we get rid of this and still make it look acceptable?
chtype a_normal = APP_ATTR (BAR); chtype a_normal = APP_ATTR (BAR);
@ -413,12 +411,70 @@ app_draw_footer (void)
struct row_buffer buf; struct row_buffer buf;
row_buffer_init (&buf); row_buffer_init (&buf);
// TODO: print the filename here instead
row_buffer_append (&buf, APP_TITLE, a_normal); row_buffer_append (&buf, APP_TITLE, a_normal);
row_buffer_append (&buf, " ", a_normal); row_buffer_append (&buf, " ", a_normal);
// TODO: transcode from locale encoding
row_buffer_append (&buf, g_ctx.filename, a_active);
// TODO: endian indication, position indication struct str right;
str_init (&right);
str_append_printf (&right, "%08" PRIx64 " ", g_ctx.view_cursor);
// TODO: endian switch
str_append (&right, "?? ");
// TODO: position indication
str_append (&right, "???");
row_buffer_align (&buf, COLS - right.len, a_normal);
row_buffer_append (&buf, right.str, a_normal);
app_flush_buffer (&buf, COLS, a_normal); app_flush_buffer (&buf, COLS, a_normal);
uint64_t end_addr = g_ctx.data_offset + g_ctx.data_len;
if (g_ctx.view_cursor < g_ctx.data_offset
|| g_ctx.view_cursor >= end_addr)
return;
struct str x; str_init (&x);
struct str u; str_init (&u);
struct str s; str_init (&s);
int64_t len = end_addr - g_ctx.view_cursor;
uint8_t *cursor = g_ctx.data + (g_ctx.view_cursor - g_ctx.data_offset);
// TODO: convert endianity, show full numbers
// TODO: make the headers bold
const char *coding = "??";
if (len >= 1)
{
str_append_printf (&x, "x8 %02x", cursor[0]);
str_append_printf (&u, "u8 %4u", cursor[0]);
str_append_printf (&s, "s8 %4d", cursor[0]);
}
if (len >= 2)
{
str_append_printf (&x, " x16%s %04x", coding, cursor[0]);
str_append_printf (&u, " u16%s %6u", coding, cursor[0]);
str_append_printf (&s, " s16%s %6d", coding, cursor[0]);
}
if (len >= 4)
{
str_append_printf (&x, " x32%s %08x", coding, cursor[0]);
str_append_printf (&u, " u32%s %11u", coding, cursor[0]);
str_append_printf (&s, " s32%s %11d", coding, cursor[0]);
}
if (len >= 8)
{
str_append_printf (&x, " x64%s %016x", coding, cursor[0]);
str_append_printf (&u, " u64%s %20u", coding, cursor[0]);
str_append_printf (&s, " s64%s %20d", coding, cursor[0]);
}
app_write_line (x.str, APP_ATTR (HEADER));
app_write_line (u.str, APP_ATTR (HEADER));
app_write_line (s.str, APP_ATTR (HEADER));
str_free (&x);
str_free (&u);
str_free (&s);
} }
static void static void
@ -431,7 +487,10 @@ app_on_refresh (void *user_data)
app_draw_view (); app_draw_view ();
app_draw_footer (); app_draw_footer ();
// TODO: move the cursor where it belongs int64_t diff = g_ctx.view_cursor - g_ctx.view_top;
int y = diff / ROW_SIZE;
int x = diff % ROW_SIZE;
move (y, x + 10 + x/8 + x/2);
refresh (); refresh ();
} }
@ -510,16 +569,22 @@ enum action
ACTION_NONE, ACTION_NONE,
ACTION_QUIT, ACTION_QUIT,
ACTION_REDRAW, ACTION_REDRAW,
ACTION_CHOOSE, ACTION_CHOOSE,
ACTION_DELETE, ACTION_DELETE,
ACTION_SCROLL_UP, ACTION_SCROLL_UP,
ACTION_SCROLL_DOWN, ACTION_SCROLL_DOWN,
ACTION_GOTO_TOP, ACTION_GOTO_TOP,
ACTION_GOTO_BOTTOM, ACTION_GOTO_BOTTOM,
ACTION_GOTO_ITEM_PREVIOUS,
ACTION_GOTO_ITEM_NEXT,
ACTION_GOTO_PAGE_PREVIOUS, ACTION_GOTO_PAGE_PREVIOUS,
ACTION_GOTO_PAGE_NEXT, ACTION_GOTO_PAGE_NEXT,
ACTION_UP,
ACTION_DOWN,
ACTION_LEFT,
ACTION_RIGHT,
ACTION_COUNT ACTION_COUNT
}; };
@ -565,13 +630,6 @@ app_process_action (enum action action)
} }
break; break;
case ACTION_GOTO_ITEM_PREVIOUS:
app_move_selection (-1);
break;
case ACTION_GOTO_ITEM_NEXT:
app_move_selection (1);
break;
case ACTION_GOTO_PAGE_PREVIOUS: case ACTION_GOTO_PAGE_PREVIOUS:
app_scroll (FOOTER_SIZE - LINES); app_scroll (FOOTER_SIZE - LINES);
app_move_selection (FOOTER_SIZE - LINES); app_move_selection (FOOTER_SIZE - LINES);
@ -581,6 +639,19 @@ app_process_action (enum action action)
app_move_selection (LINES - FOOTER_SIZE); app_move_selection (LINES - FOOTER_SIZE);
break; break;
case ACTION_UP:
app_move_selection (-1);
break;
case ACTION_DOWN:
app_move_selection (1);
break;
case ACTION_LEFT:
// TODO: decrement cursor, check bounds, invalidate
break;
case ACTION_RIGHT:
// TODO: increment cursor, check bounds, invalidate
break;
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
case ACTION_NONE: case ACTION_NONE:
@ -647,14 +718,14 @@ g_default_bindings[] =
{ "End", ACTION_GOTO_BOTTOM }, { "End", ACTION_GOTO_BOTTOM },
{ "M-<", ACTION_GOTO_TOP }, { "M-<", ACTION_GOTO_TOP },
{ "M->", ACTION_GOTO_BOTTOM }, { "M->", ACTION_GOTO_BOTTOM },
{ "Up", ACTION_GOTO_ITEM_PREVIOUS }, { "Up", ACTION_UP },
{ "Down", ACTION_GOTO_ITEM_NEXT }, { "Down", ACTION_DOWN },
{ "k", ACTION_GOTO_ITEM_PREVIOUS }, { "k", ACTION_UP },
{ "j", ACTION_GOTO_ITEM_NEXT }, { "j", ACTION_DOWN },
{ "PageUp", ACTION_GOTO_PAGE_PREVIOUS }, { "PageUp", ACTION_GOTO_PAGE_PREVIOUS },
{ "PageDown", ACTION_GOTO_PAGE_NEXT }, { "PageDown", ACTION_GOTO_PAGE_NEXT },
{ "C-p", ACTION_GOTO_ITEM_PREVIOUS }, { "C-p", ACTION_UP },
{ "C-n", ACTION_GOTO_ITEM_NEXT }, { "C-n", ACTION_DOWN },
{ "C-b", ACTION_GOTO_PAGE_PREVIOUS }, { "C-b", ACTION_GOTO_PAGE_PREVIOUS },
{ "C-f", ACTION_GOTO_PAGE_NEXT }, { "C-f", ACTION_GOTO_PAGE_NEXT },
// TODO: C-e and C-y scroll up and down // TODO: C-e and C-y scroll up and down