summaryrefslogtreecommitdiff
path: root/src/gtkext
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2016-04-03 12:48:41 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2016-04-03 12:48:41 (GMT)
commitf80c4c6ee0479070f7319a5ce7e30e05406cdb8f (patch)
tree94bc363a6d1aeac29c1985a9627ceda962d1c38a /src/gtkext
parent36a5b2577d67ab7c9f2c5817f6dba7a9601d1f20 (diff)
Reorganized the whole disassembling process and displayed the relative progression.
Diffstat (limited to 'src/gtkext')
-rw-r--r--src/gtkext/gtkstatusstack.c49
-rw-r--r--src/gtkext/gtkstatusstack.h6
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);