On 09/11/2012 09:55 AM, Sergey Senozhatsky wrote:
On (09/11/12 09:39), Chris Ferron wrote:
> This patch add more ui navigation features allowing for the scrolling
> of PowerTop content for each tab. This is done by controlling the
> location of the winpad, and refreshing the terminal window when
> needed. To do this, the navigation keys have been updated as follows.
>
> "Arrow Keys" now scroll the tab windows
> "Page up/down" scroll tab windows up and down
> "TAB" cycles the next window tab
> "SHIFT+TAB" cycles the previous window tab
> "ENTER" toggles tunables
> "SPACE BAR" toggles tunables
> "r KEY" refresh results and resets view of tab window.
>
> Known issues:
> There is no handler for terminal re-sizing. The workaround is to use
> "r KEY" to refresh if terminal windows size is changed mid session.
> ---
> src/cpu/abstract_cpu.cpp | 1 -
> src/display.cpp | 98
> ++++++++++++++++++++++++++++++++++--------------
> src/display.h | 13 ++++++-
> src/main.cpp | 17 ++++++---
> 4 files changed, 93 insertions(+), 36 deletions(-)
>
>
> diff --git a/src/cpu/abstract_cpu.cpp b/src/cpu/abstract_cpu.cpp
> index 8b4c650..ca6901c 100644
> --- a/src/cpu/abstract_cpu.cpp
> +++ b/src/cpu/abstract_cpu.cpp
> @@ -422,7 +422,6 @@ void abstract_cpu::validate(void)
>
> if (children[i]) {
> if (my_time != children[i]->total_pstate_time())
> - printf("My (%i) time %llu is not the same as child (%i) time %llu\n",
> first_cpu,
> (unsigned long long)my_time,
> children[i]->number,
not sure this will compile.
-ss
Crap thanks, v2 on the way.
-C
> diff --git a/src/display.cpp b/src/display.cpp
> index f48b53f..6a119bc 100644
> --- a/src/display.cpp
> +++ b/src/display.cpp
> @@ -95,7 +95,7 @@ static int current_tab;
>
> void show_tab(unsigned int tab)
> {
> - WINDOW *win;
> + class tab_window *win;
> unsigned int i;
> int tab_pos = 17;
> const char *c;
> @@ -145,11 +145,11 @@ void show_tab(unsigned int tab)
> wrefresh(tab_bar);
> wrefresh(bottom_line);
>
> - win = get_ncurses_win(tab_names[tab]);
> + win = tab_windows[tab_names[tab]];
> if (!win)
> return;
>
> - prefresh(win, 0, 0, 1, 0, LINES - 3, COLS - 1);
> + prefresh(win->win, win->ypad_pos, win->xpad_pos, 1, 0, LINES - 3, COLS -
1);
> }
>
> WINDOW *get_ncurses_win(const char *name)
> @@ -185,42 +185,41 @@ WINDOW *get_ncurses_win(const string &name)
> return get_ncurses_win(name.c_str());
> }
>
> -
> -void show_next_tab(void)
> +void show_prev_tab(void)
> {
> - class tab_window *w;
> + class tab_window *w;
>
> - if (!display)
> - return;
> + if (!display)
> + return;
> + w = tab_windows[tab_names[current_tab]];
> + if (w)
> + w->hide();
>
> - w = tab_windows[tab_names[current_tab]];
> - if (w)
> - w->hide();
> + current_tab --;
> + if (current_tab < 0)
> + current_tab = tab_names.size() - 1;
>
> - current_tab ++;
> - if (current_tab >= (int)tab_names.size())
> - current_tab = 0;
> -
> - w = tab_windows[tab_names[current_tab]];
> - if (w)
> - w->expose();
> + w = tab_windows[tab_names[current_tab]];
> + if (w)
> + w->expose();
>
> - show_tab(current_tab);
> + show_tab(current_tab);
> }
>
> -void show_prev_tab(void)
> +void show_next_tab(void)
> {
> class tab_window *w;
>
> if (!display)
> return;
> +
> w = tab_windows[tab_names[current_tab]];
> if (w)
> w->hide();
>
> - current_tab --;
> - if (current_tab < 0)
> - current_tab = tab_names.size() - 1;
> + current_tab ++;
> + if (current_tab >= (int)tab_names.size())
> + current_tab = 0;
>
> w = tab_windows[tab_names[current_tab]];
> if (w)
> @@ -241,8 +240,16 @@ void cursor_down(void)
> class tab_window *w;
>
> w = tab_windows[tab_names[current_tab]];
> - if (w)
> - w->cursor_down();
> + if (w) {
> + if (tab_names[current_tab] == "Tunables") {
> + if ((w->cursor_pos + 7) >= LINES) {
> + prefresh(w->win, ++w->ypad_pos, w->xpad_pos, 1, 0, LINES - 3, COLS -
1);
> + }
> + w->cursor_down();
> + } else {
> + prefresh(w->win, ++w->ypad_pos, w->xpad_pos, 1, 0, LINES - 3, COLS -
1);
> + }
> + }
>
> show_cur_tab();
> }
> @@ -253,12 +260,45 @@ void cursor_up(void)
>
> w = tab_windows[tab_names[current_tab]];
>
> - if (w)
> - w->cursor_up();
> -
> + if (w) {
> + w->cursor_up();
> + if(w->ypad_pos > 0) {
> + if (tab_names[current_tab] == "Tunables") {
> + prefresh(w->win, --w->ypad_pos, w->xpad_pos, 1, 0,
LINES - 3, COLS - 1);
> + } else {
> + prefresh(w->win, --w->ypad_pos, w->xpad_pos, 1, 0,
LINES - 3, COLS - 1);
> + }
> + }
> + }
> +
> show_cur_tab();
> }
>
> +void cursor_left(void)
> +{
> + class tab_window *w;
> +
> + w = tab_windows[tab_names[current_tab]];
> +
> + if (w) {
> + if (w->xpad_pos > 0) {
> + prefresh(w->win, w->ypad_pos,--w->xpad_pos, 1, 0, LINES - 3, COLS - 1);
> + }
> + }
> +}
> +
> +void cursor_right(void)
> +{
> + class tab_window *w;
> +
> + w = tab_windows[tab_names[current_tab]];
> +
> + if (w) {
> + prefresh(w->win, w->ypad_pos, ++w->xpad_pos, 1, 0, LINES - 3, COLS - 1);
> + }
> +
> +}
> +
> void cursor_enter(void)
> {
> class tab_window *w;
> @@ -279,6 +319,8 @@ void window_refresh()
> w = tab_windows[tab_names[current_tab]];
>
> if (w) {
> + w->ypad_pos = 0;
> + w->xpad_pos = 0;
> w->window_refresh();
> w->repaint();
> }
> diff --git a/src/display.h b/src/display.h
> index 33aaae1..00887aa 100644
> --- a/src/display.h
> +++ b/src/display.h
> @@ -41,6 +41,8 @@ extern void show_prev_tab(void);
> extern void show_cur_tab(void);
> extern void cursor_up(void);
> extern void cursor_down(void);
> +extern void cursor_right(void);
> +extern void cursor_left(void);
> extern void cursor_enter(void);
> extern void window_refresh(void);
>
> @@ -48,10 +50,17 @@ class tab_window {
> public:
> int cursor_pos;
> int cursor_max;
> + int xpad_pos, ypad_pos;
> WINDOW *win;
>
> - virtual void cursor_down(void) { if (cursor_pos < cursor_max ) cursor_pos++;
repaint(); } ;
> - virtual void cursor_up(void) { if (cursor_pos > 0) cursor_pos--; repaint(); };
> + virtual void cursor_down(void) {
> + if (cursor_pos < cursor_max ) cursor_pos++; repaint();
> + } ;
> + virtual void cursor_up(void) {
> + if (cursor_pos > 0) cursor_pos--; repaint();
> + };
> + virtual void cursor_left(void) { };
> + virtual void cursor_right(void) { };
>
> virtual void cursor_enter(void) { };
> virtual void window_refresh() { };
> diff --git a/src/main.cpp b/src/main.cpp
> index cf47b4e..edc4147 100644
> --- a/src/main.cpp
> +++ b/src/main.cpp
> @@ -135,22 +135,29 @@ static void do_sleep(int seconds)
> halfdelay(delta * 10);
>
> c = getch();
> -
> + printf("c (%i)", c);
> switch (c) {
> - case KEY_NPAGE:
> + case 353:
> + show_prev_tab();
> + break;
> + case 9:
> + show_next_tab();
> + break;
> case KEY_RIGHT:
> - show_next_tab();
> + cursor_right();
> break;
> - case KEY_PPAGE:
> case KEY_LEFT:
> - show_prev_tab();
> + cursor_left();
> break;
> + case KEY_NPAGE:
> case KEY_DOWN:
> cursor_down();
> break;
> + case KEY_PPAGE:
> case KEY_UP:
> cursor_up();
> break;
> + case 32:
> case 10:
> cursor_enter();
> break;
>