X-Git-Url: https://git.lttng.org/?p=lttngtop.git;a=blobdiff_plain;f=src%2Fcursesdisplay.c;h=9e7afb2bcadf13ce91a45e757d5bd210858980dd;hp=36951315c52ae6596f4dbe5060414d29d33bdb5b;hb=54645d5cab414bb3391837ef7acb919cf106c71f;hpb=da4353bbbb28c19bd28447018edb94845ae71673 diff --git a/src/cursesdisplay.c b/src/cursesdisplay.c index 3695131..9e7afb2 100644 --- a/src/cursesdisplay.c +++ b/src/cursesdisplay.c @@ -15,6 +15,10 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ +#include + +#ifdef HAVE_LIBNCURSES + #include #include #include @@ -62,6 +66,8 @@ int toggle_threads = 1; int toggle_virt = -1; int toggle_pause = -1; +int filter_host_panel = 0; + int max_center_lines; pthread_t keyboard_thread; @@ -242,7 +248,7 @@ void update_selected_processes() if (process_selected(selected_process)) { remove_filter_tid_list(selected_process->tid); } else { - add_filter_tid_list(selected_process->tid, selected_process); + add_filter_tid_list(selected_process); } } @@ -1307,22 +1313,96 @@ void update_perf_pref(int *line_selected, int toggle_view, int toggle_sort) doupdate(); } +void update_hostname_pref(int *line_selected, int toggle_filter, int toggle_sort) +{ + int i; + struct host *host; + GList *hostlist; + int size; + + if (!data) + return; + if (pref_panel_window) { + del_panel(pref_panel); + delwin(pref_panel_window); + } + size = g_hash_table_size(global_host_list); + + pref_panel_window = create_window(size + 2, 30, 10, 10); + pref_panel = new_panel(pref_panel_window); + + werase(pref_panel_window); + box(pref_panel_window, 0 , 0); + set_window_title(pref_panel_window, "Hosts Preferences "); + wattron(pref_panel_window, A_BOLD); + mvwprintw(pref_panel_window, g_hash_table_size(global_host_list) + 1, 1, + " space : toggle filter"); + wattroff(pref_panel_window, A_BOLD); + + if (*line_selected > (size - 1)) + *line_selected = size - 1; + else if (*line_selected < 0) + *line_selected = 0; + + i = 0; + hostlist = g_list_first(g_hash_table_get_keys(global_host_list)); + while (hostlist) { + host = g_hash_table_lookup(global_host_list, hostlist->data); + if (i == *line_selected && toggle_filter == 1) { + host->filter = host->filter == 1 ? 0:1; + update_hostname_filter(host); + update_current_view(); + } + if (i == *line_selected) { + wattron(pref_panel_window, COLOR_PAIR(5)); + mvwhline(pref_panel_window, i + 1, 1, ' ', 30 - 2); + } + if (host->filter == 1) + wattron(pref_panel_window, A_BOLD); + mvwprintw(pref_panel_window, i + 1, 1, "[%c] %s", + host->filter == 1 ? 'x' : ' ', + (char *) hostlist->data); + wattroff(pref_panel_window, A_BOLD); + wattroff(pref_panel_window, COLOR_PAIR(5)); + i++; + hostlist = g_list_next(hostlist); + } + update_panels(); + doupdate(); +} + int update_preference_panel(int *line_selected, int toggle_view, int toggle_sort) { int ret = 0; switch(current_view) { case perf: - update_perf_pref(line_selected, toggle_view, toggle_sort); + if (filter_host_panel) + update_hostname_pref(line_selected, + toggle_view, toggle_sort); + else + update_perf_pref(line_selected, + toggle_view, toggle_sort); break; case cpu: - update_cpu_pref(line_selected, toggle_view, toggle_sort); + if (filter_host_panel) + update_hostname_pref(line_selected, + toggle_view, toggle_sort); + else + update_cpu_pref(line_selected, + toggle_view, toggle_sort); break; case iostream: - update_iostream_pref(line_selected, toggle_view, toggle_sort); + if (filter_host_panel) + update_hostname_pref(line_selected, + toggle_view, toggle_sort); + else + update_iostream_pref(line_selected, + toggle_view, toggle_sort); break; case process_details: - update_process_detail_pref(line_selected, toggle_view, toggle_sort); + update_process_detail_pref(line_selected, + toggle_view, toggle_sort); break; default: ret = -1; @@ -1357,7 +1437,6 @@ int update_sort(int *line_selected) return ret; } - void toggle_pref_panel(void) { int ret; @@ -1376,6 +1455,25 @@ void toggle_pref_panel(void) doupdate(); } +void toggle_host_panel(void) +{ + int ret; + + filter_host_panel = filter_host_panel ? 0 : 1; + if (pref_panel_visible) { + hide_panel(pref_panel); + pref_panel_visible = 0; + } else { + ret = update_preference_panel(&pref_line_selected, 0, 0); + if (ret < 0) + return; + show_panel(pref_panel); + pref_panel_visible = 1; + } + update_panels(); + doupdate(); +} + void display(unsigned int index) { last_display_index = index; @@ -1494,8 +1592,6 @@ void *handle_keyboard(void *p) update_selected_processes(); if (toggle_filter > 0) { max_elements = g_hash_table_size(global_filter_list); - fprintf(stderr, "select : %d, max : %d\n", - selected_line, max_elements); if (selected_line >= max_elements) selected_line = max_elements - 1; } @@ -1591,6 +1687,9 @@ void *handle_keyboard(void *p) max_elements = data->process_table->len; update_current_view(); break; + case 'h': + toggle_host_panel(); + break; case 't': toggle_threads *= -1; update_current_view(); @@ -1676,3 +1775,5 @@ void init_ncurses() pthread_create(&keyboard_thread, NULL, handle_keyboard, (void *)NULL); } + +#endif /* HAVE_LIBNCURSES */