diff options
Diffstat (limited to 'src/gtkext')
-rw-r--r-- | src/gtkext/gtkstatusstack.c | 49 | ||||
-rw-r--r-- | src/gtkext/gtkstatusstack.h | 6 |
2 files changed, 31 insertions, 24 deletions
diff --git a/src/gtkext/gtkstatusstack.c b/src/gtkext/gtkstatusstack.c index 9177399..880f4ed 100644 --- a/src/gtkext/gtkstatusstack.c +++ b/src/gtkext/gtkstatusstack.c @@ -134,7 +134,11 @@ typedef struct _progress_status activity_id_t id; /* Identifiant unique */ char *message; /* Indication à faire valoir */ - double value; /* Centième de pourcentage */ + + unsigned long current; /* Position courante */ + unsigned long max; /* Couverture à parcourir */ + + double last_updated; /* Dernière valeur poussée */ } progress_status; @@ -802,6 +806,7 @@ static GtkWidget *build_progress_status_stack(GtkStatusStack *stack) progress = gtk_progress_bar_new(); g_object_set_data(ref, "progress", progress); gtk_widget_set_size_request(progress, 200, -1); + gtk_widget_set_valign(progress, GTK_ALIGN_CENTER); gtk_widget_show(progress); gtk_box_pack_start(GTK_BOX(result), progress, FALSE, TRUE, 8); @@ -817,7 +822,7 @@ static GtkWidget *build_progress_status_stack(GtkStatusStack *stack) * * * Paramètres : stack = barre de statut à actualiser. * * msg = nouveau message de statut à copier. * -* value = nouvelle valeur pour une progression donnée. * +* max = taille de la plage à parcourir. * * * * Description : Démarre le suivi d'une nouvelle activité. * * * @@ -827,7 +832,7 @@ static GtkWidget *build_progress_status_stack(GtkStatusStack *stack) * * ******************************************************************************/ -activity_id_t gtk_status_stack_add_activity(GtkStatusStack *stack, const char *msg, double value) +activity_id_t gtk_status_stack_add_activity(GtkStatusStack *stack, const char *msg, unsigned long max) { activity_id_t result; /* Numéro unique à renvoyer */ progress_info *info; /* Informations à consulter */ @@ -844,7 +849,7 @@ activity_id_t gtk_status_stack_add_activity(GtkStatusStack *stack, const char *m info->statuses = (progress_status *)realloc(info->statuses, info->count * sizeof(progress_status)); - info->statuses[new].id = new; + info->statuses[new].id = result; /* Intitulé */ @@ -855,7 +860,8 @@ activity_id_t gtk_status_stack_add_activity(GtkStatusStack *stack, const char *m /* Valeur */ - info->statuses[new].value = value; + info->statuses[new].current = 0; + info->statuses[new].max = max; /* Actualisation */ @@ -876,7 +882,6 @@ activity_id_t gtk_status_stack_add_activity(GtkStatusStack *stack, const char *m * Paramètres : stack = barre de statut à actualiser. * * id = identifiant de l'activité à cibler. * * msg = nouveau message de statut à copier. * -* value = nouvelle valeur pour une progression donnée. * * * * Description : Actualise les informations concernant une activité. * * * @@ -886,7 +891,7 @@ activity_id_t gtk_status_stack_add_activity(GtkStatusStack *stack, const char *m * * ******************************************************************************/ -void gtk_status_stack_update_activity(GtkStatusStack *stack, activity_id_t id, const char *msg, double value) +void gtk_status_stack_update_activity(GtkStatusStack *stack, activity_id_t id, const char *msg) { progress_info *info; /* Informations à consulter */ size_t i; /* Boucle de parcours */ @@ -923,15 +928,9 @@ void gtk_status_stack_update_activity(GtkStatusStack *stack, activity_id_t id, c else info->statuses[i].message = strdup(msg); - /* Valeur */ - - old = info->statuses[i].value; - - info->statuses[i].value = value; - /* On n'actualise que le sommet de la pile */ - if ((i + 1) == info->count && (msg_changed || (value - old) > 1.0)) + if ((i + 1) == info->count) { if (info->tag != 0) g_source_remove(info->tag); @@ -951,7 +950,7 @@ void gtk_status_stack_update_activity(GtkStatusStack *stack, activity_id_t id, c * * * Paramètres : stack = barre de statut à actualiser. * * id = identifiant de l'activité à cibler. * -* value = nouvelle valeur pour une progression donnée. * +* inc = nouvelle valeur pour une progression donnée. * * * * Description : Actualise la progression d'une activité. * * * @@ -961,11 +960,13 @@ void gtk_status_stack_update_activity(GtkStatusStack *stack, activity_id_t id, c * * ******************************************************************************/ -void gtk_status_stack_update_activity_value(GtkStatusStack *stack, activity_id_t id, double value) +void gtk_status_stack_update_activity_value(GtkStatusStack *stack, activity_id_t id, unsigned long inc) { progress_info *info; /* Informations à consulter */ size_t i; /* Boucle de parcours */ - double old; /* Conservation pour la diff. */ + progress_status *status; /* Raccourci de confort */ + double old; /* Ancienne progression */ + double new; /* Nouvelle progression */ info = stack->prog_info; @@ -977,15 +978,21 @@ void gtk_status_stack_update_activity_value(GtkStatusStack *stack, activity_id_t if (i < info->count) { + status = &info->statuses[i]; + /* Valeur */ - old = info->statuses[i].value; + status->current += inc; - info->statuses[i].value = value; + new = (status->current * 1.0) / status->max; /* On n'actualise que le sommet de la pile */ - if ((i + 1) == info->count && (value - old) > 1.0) + + //fprintf(stderr, "PROG %g -> %g <=> %g ==> %d\n", old, new, new - old, (new - old) > 0.1); + + + if ((i + 1) == info->count && (new - status->last_updated) > 0.1) { if (info->tag != 0) g_source_remove(info->tag); @@ -1099,7 +1106,7 @@ static gboolean gtk_status_stack_show_current_activity(GtkStatusStack *stack) last = &info->statuses[info->count - 1]; progress = GTK_PROGRESS_BAR(g_object_get_data(ref, "progress")); - gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress), last->value); + gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress), (last->current * 1.0) / last->max); label = GTK_LABEL(g_object_get_data(ref, "message")); gtk_label_set_text(label, last->message); diff --git a/src/gtkext/gtkstatusstack.h b/src/gtkext/gtkstatusstack.h index afc3213..590f562 100644 --- a/src/gtkext/gtkstatusstack.h +++ b/src/gtkext/gtkstatusstack.h @@ -77,13 +77,13 @@ typedef unsigned long activity_id_t; /* Démarre le suivi d'une nouvelle activité. */ -activity_id_t gtk_status_stack_add_activity(GtkStatusStack *, const char *, double); +activity_id_t gtk_status_stack_add_activity(GtkStatusStack *, const char *, unsigned long); /* Actualise les informations concernant une activité. */ -void gtk_status_stack_update_activity(GtkStatusStack *, activity_id_t, const char *, double); +void gtk_status_stack_update_activity(GtkStatusStack *, activity_id_t, const char *); /* Actualise la progression d'une activité. */ -void gtk_status_stack_update_activity_value(GtkStatusStack *, activity_id_t, double); +void gtk_status_stack_update_activity_value(GtkStatusStack *, activity_id_t, unsigned long); /* Met fin au suivi d'une activité donnée. */ void gtk_status_stack_remove_activity(GtkStatusStack *, activity_id_t); |