int pakfire_progressbar_update(struct pakfire_progressbar* p, unsigned long value);
int pakfire_progressbar_increment(struct pakfire_progressbar* p);
int pakfire_progressbar_finish(struct pakfire_progressbar* p);
+int pakfire_progressbar_reset(struct pakfire_progressbar* p);
+
+void pakfire_progressbar_set_max(struct pakfire_progressbar* p, unsigned long value);
int pakfire_progressbar_add_string(struct pakfire_progressbar* p, const char* format, ...);
int pakfire_progressbar_add_counter(struct pakfire_progressbar* p);
free(widget);
}
-static void pakfire_progressbar_free(struct pakfire_progressbar* p) {
+static void pakfire_progressbar_free_widgets(struct pakfire_progressbar* p) {
struct pakfire_progressbar_widget* widget;
// Free widgets
pakfire_progressbar_widget_free(widget);
}
+}
+static void pakfire_progressbar_free(struct pakfire_progressbar* p) {
+ pakfire_progressbar_free_widgets(p);
pakfire_unref(p->pakfire);
free(p);
}
// Set status
p->status = PAKFIRE_PROGRESSBAR_RUNNING;
- // Store maximum value
- p->value_max = value;
-
- // Redraw immediately
- p->value_redraw = 0;
+ // Set maximum value
+ pakfire_progressbar_set_max(p, value);
// Set start time
int r = clock_gettime(CLOCK_MONOTONIC, &p->time_start);
return 0;
}
+int pakfire_progressbar_reset(struct pakfire_progressbar* p) {
+ // Free all widgets
+ pakfire_progressbar_free_widgets(p);
+
+ // Reset all values
+ p->value = 0;
+ p->value_max = 0;
+ p->value_redraw = 0;
+ p->update_interval = 0;
+ p->time_start.tv_sec = 0;
+ p->time_start.tv_nsec = 0;
+ p->time_redraw.tv_sec = 0;
+ p->time_redraw.tv_nsec = 0;
+
+ return 0;
+}
+
+void pakfire_progressbar_set_max(struct pakfire_progressbar* p, unsigned long value) {
+ // Store maximum value
+ p->value_max = value;
+
+ // Redraw immediately
+ p->value_redraw = 0;
+}
+
static int pakfire_progressbar_add_widget(struct pakfire_progressbar* p,
const char* (*print)(struct pakfire_progressbar* p,
struct pakfire_progressbar_widget* widget, unsigned int width, void* data),