Merge branch 'x86-fpu-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git...
[pandora-kernel.git] / tools / perf / util / ui / progress.c
1 #include <stdlib.h>
2 #include <newt.h>
3 #include "../cache.h"
4 #include "progress.h"
5
6 struct ui_progress {
7         newtComponent form, scale;
8 };
9
10 struct ui_progress *ui_progress__new(const char *title, u64 total)
11 {
12         struct ui_progress *self = malloc(sizeof(*self));
13
14         if (self != NULL) {
15                 int cols;
16
17                 if (use_browser <= 0)
18                         return self;
19                 newtGetScreenSize(&cols, NULL);
20                 cols -= 4;
21                 newtCenteredWindow(cols, 1, title);
22                 self->form  = newtForm(NULL, NULL, 0);
23                 if (self->form == NULL)
24                         goto out_free_self;
25                 self->scale = newtScale(0, 0, cols, total);
26                 if (self->scale == NULL)
27                         goto out_free_form;
28                 newtFormAddComponent(self->form, self->scale);
29                 newtRefresh();
30         }
31
32         return self;
33
34 out_free_form:
35         newtFormDestroy(self->form);
36 out_free_self:
37         free(self);
38         return NULL;
39 }
40
41 void ui_progress__update(struct ui_progress *self, u64 curr)
42 {
43         /*
44          * FIXME: We should have a per UI backend way of showing progress,
45          * stdio will just show a percentage as NN%, etc.
46          */
47         if (use_browser <= 0)
48                 return;
49         newtScaleSet(self->scale, curr);
50         newtRefresh();
51 }
52
53 void ui_progress__delete(struct ui_progress *self)
54 {
55         if (use_browser > 0) {
56                 newtFormDestroy(self->form);
57                 newtPopWindow();
58         }
59         free(self);
60 }