Tento ProgressBar je po částech „vyplňován“, dokud lišta není plná.
#include <gtk/gtk.h>
static gboolean
fill (gpointer user_data)
{
GtkWidget *progress_bar = user_data;
/* Získá aktuální stav průběhu */
gdouble fraction;
fraction = gtk_progress_bar_get_fraction (GTK_PROGRESS_BAR (progress_bar));
/* Zvýší stav lišty o 10% při každém zavolání této funkce */
fraction += 0.1;
/* Vyplní lištu novým podílem */
gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (progress_bar), fraction);
/* Zajistí, že podíl nepřekročí hodnotu 1,0 */
if (fraction < 1.0)
return TRUE;
return FALSE;
}
static void
activate (GtkApplication *app,
gpointer user_data)
{
GtkWidget *window;
GtkWidget *progress_bar;
gdouble fraction = 0.0;
/* Vytvoří okno s názvem, šířkou okraje a výchozí velikostí */
window = gtk_application_window_new (app);
gtk_window_set_title (GTK_WINDOW (window), "ProgressBar Example");
gtk_window_set_default_size (GTK_WINDOW (window), 220, 20);
/* Vytvoří ukazatel průběhu a přidá jej do okna */
progress_bar = gtk_progress_bar_new ();
gtk_container_add (GTK_CONTAINER (window), progress_bar);
/* Vyplní zadaný podíl lišty. Musí být v rozmezí 0,0 až 1,0 včetně */
gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (progress_bar), fraction);
/* Použije každých 500 milisekund funkci vyplňující lištu */
g_timeout_add (500, fill, GTK_PROGRESS_BAR (progress_bar));
gtk_widget_show_all (window);
}
int
main (int argc, char **argv)
{
GtkApplication *app;
int status;
app = gtk_application_new ("org.gtk.example", G_APPLICATION_FLAGS_NONE);
g_signal_connect (app, "activate", G_CALLBACK (activate), NULL);
status = g_application_run (G_APPLICATION (app), argc, argv);
g_object_unref (app);
return status;
}
V této ukázce se používá následující:
GtkApplication
GtkWindow
GtkProgressBar
G_Timeout