libui/unix/progressbar.c

60 lines
1.1 KiB
C

// 11 june 2015
#include "uipriv_unix.h"
struct uiProgressBar {
uiUnixControl c;
GtkWidget *widget;
GtkProgressBar *pbar;
int indeterminate;
};
uiUnixControlAllDefaults(uiProgressBar)
int uiProgressBarValue(uiProgressBar *p)
{
if (p->indeterminate)
return -1;
return (int) (gtk_progress_bar_get_fraction(p->pbar) * 100);
}
gboolean uiProgressBarPulse(void* data)
{
uiProgressBar *p = (uiProgressBar*) data;
if (!GTK_IS_WIDGET(p->pbar) || !p->indeterminate)
return 0;
gtk_progress_bar_pulse(p->pbar);
return 1;
}
void uiProgressBarSetValue(uiProgressBar *p, int value)
{
if (value == -1) {
if (!p->indeterminate) {
p->indeterminate = 1;
g_timeout_add(100, uiProgressBarPulse, p);
}
return;
}
if (value < 0 || value > 100)
userbug("Value %d is out of range for a uiProgressBar.", value);
p->indeterminate = 0;
gtk_progress_bar_set_fraction(p->pbar, ((gdouble) value) / 100);
}
uiProgressBar *uiNewProgressBar(void)
{
uiProgressBar *p;
uiUnixNewControl(uiProgressBar, p);
p->widget = gtk_progress_bar_new();
p->pbar = GTK_PROGRESS_BAR(p->widget);
return p;
}