perf ui: Separate showing the entries from running the browser
authorArnaldo Carvalho de Melo <acme@redhat.com>
Mon, 21 Jun 2010 21:04:02 +0000 (18:04 -0300)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Mon, 21 Jun 2010 21:04:02 +0000 (18:04 -0300)
Another patch eroding the changes I had to move to a tree widget that
doesn't requires adding all entries in an existing list/tree structure
to a generic tree widget, but instead allows traversing just the entries
that should appear on the screen on a given moment.

Cc: Frédéric Weisbecker <fweisbec@gmail.com>
Cc: Stephane Eranian <eranian@google.com>
Cc: Tom Zanussi <tzanussi@gmail.com>
LKML-Reference: <new-submission>
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/util/newt.c

index 0ffc828..9fa5b20 100644 (file)
@@ -328,6 +328,32 @@ static void ui_browser__reset_index(struct ui_browser *self)
        self->seek(self, 0, SEEK_SET);
 }
 
+static int ui_browser__show(struct ui_browser *self, const char *title)
+{
+       if (self->form != NULL)
+               return 0;
+       ui_browser__refresh_dimensions(self);
+       newtCenteredWindow(self->width + 2, self->height, title);
+       self->form = newt_form__new();
+       if (self->form == NULL)
+               return -1;
+
+       self->sb = newtVerticalScrollbar(self->width + 1, 0, self->height,
+                                        HE_COLORSET_NORMAL,
+                                        HE_COLORSET_SELECTED);
+       if (self->sb == NULL)
+               return -1;
+
+       newtFormAddHotKey(self->form, NEWT_KEY_UP);
+       newtFormAddHotKey(self->form, NEWT_KEY_DOWN);
+       newtFormAddHotKey(self->form, NEWT_KEY_PGUP);
+       newtFormAddHotKey(self->form, NEWT_KEY_PGDN);
+       newtFormAddHotKey(self->form, NEWT_KEY_HOME);
+       newtFormAddHotKey(self->form, NEWT_KEY_END);
+       newtFormAddComponent(self->form, self->sb);
+       return 0;
+}
+
 static int objdump_line__show(struct objdump_line *self, struct list_head *head,
                              int width, struct hist_entry *he, int len,
                              bool current_entry)
@@ -406,39 +432,10 @@ static int ui_browser__refresh_entries(struct ui_browser *self)
        return 0;
 }
 
-static int ui_browser__run(struct ui_browser *self, const char *title,
-                          struct newtExitStruct *es)
+static int ui_browser__run(struct ui_browser *self, struct newtExitStruct *es)
 {
-       if (self->form) {
-               newtFormDestroy(self->form);
-               newtPopWindow();
-       }
-
-       ui_browser__refresh_dimensions(self);
-       newtCenteredWindow(self->width + 2, self->height, title);
-       self->form = newt_form__new();
-       if (self->form == NULL)
-               return -1;
-
-       self->sb = newtVerticalScrollbar(self->width + 1, 0, self->height,
-                                        HE_COLORSET_NORMAL,
-                                        HE_COLORSET_SELECTED);
-       if (self->sb == NULL)
-               return -1;
-
-       newtFormAddHotKey(self->form, NEWT_KEY_UP);
-       newtFormAddHotKey(self->form, NEWT_KEY_DOWN);
-       newtFormAddHotKey(self->form, NEWT_KEY_PGUP);
-       newtFormAddHotKey(self->form, NEWT_KEY_PGDN);
-       newtFormAddHotKey(self->form, ' ');
-       newtFormAddHotKey(self->form, NEWT_KEY_HOME);
-       newtFormAddHotKey(self->form, NEWT_KEY_END);
-       newtFormAddHotKey(self->form, NEWT_KEY_TAB);
-       newtFormAddHotKey(self->form, NEWT_KEY_RIGHT);
-
        if (ui_browser__refresh_entries(self) < 0)
                return -1;
-       newtFormAddComponent(self->form, self->sb);
 
        while (1) {
                off_t offset;
@@ -733,7 +730,8 @@ int hist_entry__tui_annotate(struct hist_entry *self)
        }
 
        browser.width += 18; /* Percentage */
-       ret = ui_browser__run(&browser, self->ms.sym->name, &es);
+       ui_browser__show(&browser, self->ms.sym->name);
+       ui_browser__run(&browser, &es);
        newtFormDestroy(browser.form);
        newtPopWindow();
        list_for_each_entry_safe(pos, n, &head, node) {