// String widget
-const char* pakfire_progressbar_string_print(struct pakfire_progressbar* p,
+const char* pakfire_progressbar_string(struct pakfire_progressbar* p,
struct pakfire_progressbar_widget* widget, int width, void* data) {
return (const char*)data;
}
if (!s)
return ENOMEM;
- return pakfire_progressbar_add_widget(p, pakfire_progressbar_string_print, free, 0, s);
+ return pakfire_progressbar_add_widget(p, pakfire_progressbar_string, free, 0, s);
}
// Counter
-const char* pakfire_progressbar_counter_print(struct pakfire_progressbar* p,
+const char* pakfire_progressbar_counter(struct pakfire_progressbar* p,
struct pakfire_progressbar_widget* widget, int width, void* data) {
int r = snprintf(widget->buffer, sizeof(widget->buffer), "%lu", p->value);
if (r < 0)
}
int pakfire_progressbar_add_counter(struct pakfire_progressbar* p) {
- return pakfire_progressbar_add_widget(p, pakfire_progressbar_counter_print, free, 0, NULL);
+ return pakfire_progressbar_add_widget(p, pakfire_progressbar_counter, NULL, 0, NULL);
+}
+
+// Percentage
+
+const char* pakfire_progressbar_percentage(struct pakfire_progressbar* p,
+ struct pakfire_progressbar_widget* widget, int width, void* data) {
+ double percentage = p->value * 100.0 / p->value_max;
+
+ int r = snprintf(widget->buffer, sizeof(widget->buffer), "%3.0f%%", percentage);
+ if (r < 0)
+ return NULL;
+
+ return widget->buffer;
+}
+
+int pakfire_progressbar_add_percentage(struct pakfire_progressbar* p) {
+ return pakfire_progressbar_add_widget(p, pakfire_progressbar_percentage, NULL, 0, NULL);
}