| Arnaldo Carvalho de Melo | 34cea7f | 2010-08-08 19:56:47 -0300 | [diff] [blame] | 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 | } |