From 7b41ae16582f4c108d4fa55279b371ae2351e81c Mon Sep 17 00:00:00 2001 From: Přemysl Janouch Date: Mon, 5 Jun 2017 19:39:06 +0200 Subject: Simplify view code Now we beep if selection movement is impossible. It still looks a bit more obfuscated than it needs to be. --- nncmpp.c | 67 ++++++++++++++++++++++++++-------------------------------------- 1 file changed, 27 insertions(+), 40 deletions(-) diff --git a/nncmpp.c b/nncmpp.c index 16bd1de..e973d3f 100644 --- a/nncmpp.c +++ b/nncmpp.c @@ -1120,7 +1120,6 @@ app_draw_status (void) static void app_draw_header (void) { - // TODO: call app_fix_view_range() if it changes from the previous value g.header_height = 0; g.tabs_offset = -1; @@ -1372,22 +1371,9 @@ app_draw_statusbar (void) app_flush_buffer (&buf, COLS, APP_ATTR (NORMAL)); } -static void -app_on_refresh (void *user_data) -{ - (void) user_data; - poller_idle_reset (&g.refresh_event); - - app_draw_header (); - app_draw_view (); - app_draw_statusbar (); - - refresh (); -} - -// --- Actions ----------------------------------------------------------------- +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -/// Checks what items are visible and returns if fixes were needed +/// Checks what items are visible and returns if the range was alright static bool app_fix_view_range (void) { @@ -1395,7 +1381,6 @@ app_fix_view_range (void) if (tab->item_top < 0) { tab->item_top = 0; - app_invalidate (); return false; } @@ -1407,12 +1392,27 @@ app_fix_view_range (void) if (tab->item_top > max_item_top) { tab->item_top = max_item_top; - app_invalidate (); return false; } return true; } +static void +app_on_refresh (void *user_data) +{ + (void) user_data; + poller_idle_reset (&g.refresh_event); + + app_draw_header (); + app_fix_view_range(); + app_draw_view (); + app_draw_statusbar (); + + refresh (); +} + +// --- Actions ----------------------------------------------------------------- + /// Scroll down (positive) or up (negative) @a n items static bool app_scroll (int n) @@ -1443,11 +1443,11 @@ static bool app_move_selection (int diff) { struct tab *tab = g.active_tab; - int fixed = tab->item_selected += diff; + int fixed = tab->item_selected + diff; fixed = MIN (fixed, (int) tab->item_count - 1); fixed = MAX (fixed, 0); - bool result = tab->item_selected != fixed; + bool result = !diff || tab->item_selected != fixed; tab->item_selected = fixed; app_invalidate (); @@ -1696,33 +1696,26 @@ app_process_action (enum action action) break; case ACTION_GOTO_ITEM_PREVIOUS: - app_move_selection (-1); - break; + return app_move_selection (-1); case ACTION_GOTO_ITEM_NEXT: - app_move_selection (1); - break; + return app_move_selection (1); case ACTION_GOTO_PAGE_PREVIOUS: app_scroll (-app_visible_items ()); - app_move_selection (-app_visible_items ()); - break; + return app_move_selection (-app_visible_items ()); case ACTION_GOTO_PAGE_NEXT: app_scroll (app_visible_items ()); - app_move_selection (app_visible_items ()); - break; + return app_move_selection (app_visible_items ()); case ACTION_GOTO_VIEW_TOP: g.active_tab->item_selected = g.active_tab->item_top; - app_move_selection (0); - break; + return app_move_selection (0); case ACTION_GOTO_VIEW_CENTER: g.active_tab->item_selected = g.active_tab->item_top; - app_move_selection (MAX (0, app_visible_items () / 2 - 1)); - break; + return app_move_selection (MAX (0, app_visible_items () / 2 - 1)); case ACTION_GOTO_VIEW_BOTTOM: g.active_tab->item_selected = g.active_tab->item_top; - app_move_selection (MAX (0, app_visible_items () - 1)); - break; + return app_move_selection (MAX (0, app_visible_items () - 1)); // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -1795,11 +1788,8 @@ app_process_left_mouse_click (int line, int column, bool double_click) // TODO: handle the scrollbar a bit better than this int visible_items = app_visible_items (); if ((int) tab->item_count > visible_items && column == COLS - 1) - { tab->item_top = (float) row_index / visible_items * (int) tab->item_count - visible_items / 2; - app_fix_view_range (); - } else tab->item_selected = row_index + tab->item_top; app_invalidate (); @@ -1986,7 +1976,6 @@ static void current_tab_update (void) { g_current_tab.item_count = g.playlist.len; - app_fix_view_range (); app_invalidate (); } @@ -2221,7 +2210,6 @@ library_tab_on_data (const struct mpd_response *response, (int (*) (const void *, const void *)) library_tab_compare); g_library_tab.super.item_count = items->len; - app_fix_view_range (); app_move_selection (0); app_invalidate (); } @@ -3203,7 +3191,6 @@ app_on_signal_pipe_readable (const struct pollfd *fd, void *user_data) { g_winch_received = false; update_curses_terminal_size (); - app_fix_view_range (); app_invalidate (); } } -- cgit v1.2.3-70-g09d2