12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- #include <stdlib.h>
- #include <newt.h>
- #include "../cache.h"
- #include "progress.h"
- struct ui_progress {
- newtComponent form, scale;
- };
- struct ui_progress *ui_progress__new(const char *title, u64 total)
- {
- struct ui_progress *self = malloc(sizeof(*self));
- if (self != NULL) {
- int cols;
- if (use_browser <= 0)
- return self;
- newtGetScreenSize(&cols, NULL);
- cols -= 4;
- newtCenteredWindow(cols, 1, title);
- self->form = newtForm(NULL, NULL, 0);
- if (self->form == NULL)
- goto out_free_self;
- self->scale = newtScale(0, 0, cols, total);
- if (self->scale == NULL)
- goto out_free_form;
- newtFormAddComponent(self->form, self->scale);
- newtRefresh();
- }
- return self;
- out_free_form:
- newtFormDestroy(self->form);
- out_free_self:
- free(self);
- return NULL;
- }
- void ui_progress__update(struct ui_progress *self, u64 curr)
- {
- /*
- * FIXME: We should have a per UI backend way of showing progress,
- * stdio will just show a percentage as NN%, etc.
- */
- if (use_browser <= 0)
- return;
- newtScaleSet(self->scale, curr);
- newtRefresh();
- }
- void ui_progress__delete(struct ui_progress *self)
- {
- if (use_browser > 0) {
- newtFormDestroy(self->form);
- newtPopWindow();
- }
- free(self);
- }
|