« Programmation GTK/Barres de progression » : différence entre les versions

Un livre de Wikilivres.
Contenu supprimé Contenu ajouté
Tavernierbot (discussion | contributions)
STyx (discussion | contributions)
m wikifié
Ligne 1 : Ligne 1 :
Les barres de progression sont utilisées pour afficher la progression d'une opération. Elles sont très simple à utiliser comme vous pourrez le constater en étudiant le code ci-dessous. Commençons d'abord par l'appel permettant de créer une nouvelle barre.
Les barres de progression sont utilisées pour afficher la progression d'une opération. Elles sont très simple à utiliser comme vous pourrez le constater en étudiant le code ci-dessous. Commençons d'abord par l'appel permettant de créer une nouvelle barre.


GtkWidget *gtk_progress_bar_new (void);
GtkWidget *gtk_progress_bar_new (void);


Maintenant que la barre est créée, nous pouvons l'utiliser.
Maintenant que la barre est créée, nous pouvons l'utiliser.


void gtk_progress_bar_update (GtkProgressBar *pbar, gfloat percentage);
void gtk_progress_bar_update (GtkProgressBar *pbar, gfloat percentage);


Le premier paramètre est la barre de progression sur laquelle on veut agir, et le second est le pourcentage « effectué », signifiant le remplissage de la barres de 0 à 100 % (réel compris entre 0 et 1).
Le premier paramètre est la barre de progression sur laquelle on veut agir, et le second est le pourcentage « effectué », signifiant le remplissage de la barres de 0 à 100 % (réel compris entre 0 et 1).


Les barres de progression sont généralement utilisées avec les délais d'expiration ou autres fonctions identiques (voir la section sur Expirations, fonctions d'E/S et d'attente) pour donner l'illusion du multi-tâches. Toutes emploient la fonction gtk_progress_bar_update de la même façon.
Les barres de progression sont généralement utilisées avec les délais d'expiration ou autres fonctions identiques (voir la section sur Expirations, fonctions d'E/S et d'attente) pour donner l'illusion du multi-tâches. Toutes emploient la fonction <code>gtk_progress_bar_update</code> de la même façon.


Voici un exemple de barre de progression mise à jour par des expirations. Ce code montre aussi comment réinitialiser une barre.
Voici un exemple de barre de progression mise à jour par des expirations. Ce code montre aussi comment réinitialiser une barre.


#include <gtk/gtk.h>
#include <gtk/gtk.h>

static int ptimer = 0;
static int ptimer = 0;
int pstat = TRUE;
int pstat = TRUE;

/* Cette fonction incrémente et met à jour la barre de progression,
/* Cette fonction incrémente et met à jour la barre de progression,
* elle la réinitialise si pstat vaut FALSE */
* elle la réinitialise si pstat vaut FALSE */

gint progress (gpointer data)
gint progress (gpointer data)
{
{
gfloat pvalue;
gfloat pvalue;
/* récupération de la valeur courante de la barre */
/* récupération de la valeur courante de la barre */

pvalue = GTK_PROGRESS_BAR (data)->percentage;
pvalue = GTK_PROGRESS_BAR (data)->percentage;
if ((pvalue >= 1.0) || (pstat == FALSE)) {
if ((pvalue >= 1.0) || (pstat == FALSE)) {
pvalue = 0.0;
pvalue = 0.0;
Ligne 38 : Ligne 38 :
return TRUE;
return TRUE;
}
}


/* Cette fonction signale une réinitialisation de la barre */
/* Cette fonction signale une réinitialisation de la barre */

void progress_r (void)
void progress_r (void)
{
{
pstat = FALSE;
pstat = FALSE;
}
}


void destroy (GtkWidget *widget, gpointer *data)
void destroy (GtkWidget *widget, gpointer *data)
{
{
gtk_main_quit ();
gtk_main_quit ();
}
}


int main (int argc, char *argv[])
int main (int argc, char *argv[])
{
{
GtkWidget *window;
GtkWidget *window;
GtkWidget *button;
GtkWidget *button;
Ligne 77 : Ligne 77 :
/* Crée une barre, la place dans la table et l'affiche */
/* Crée une barre, la place dans la table et l'affiche */

pbar = gtk_progress_bar_new ();
pbar = gtk_progress_bar_new ();
gtk_table_attach_defaults(GTK_TABLE(table), pbar, 0,2,1,2);
gtk_table_attach_defaults(GTK_TABLE(table), pbar, 0,2,1,2);
Ligne 84 : Ligne 84 :
/* Configure le délai d'expiration pour gérer automatiquement la
/* Configure le délai d'expiration pour gérer automatiquement la
* mise à jour de la barre */
* mise à jour de la barre */

ptimer = gtk_timeout_add (100, progress, pbar);
ptimer = gtk_timeout_add (100, progress, pbar);
/* Ce bouton indique à la barre qu'elle doit se réinitialiser */
/* Ce bouton indique à la barre qu'elle doit se réinitialiser */

button = gtk_button_new_with_label ("Reset");
button = gtk_button_new_with_label ("Reset");
gtk_signal_connect (GTK_OBJECT (button), "clicked",
gtk_signal_connect (GTK_OBJECT (button), "clicked",
Ligne 108 : Ligne 108 :
return 0;
return 0;
}
}


Dans ce petit programme, il y a quatre parties concernant le fonctionnement général des barres de progression, nous les étudierons dans l'ordre de leurs appels.
Dans ce petit programme, il y a quatre parties concernant le fonctionnement général des barres de progression, nous les étudierons dans l'ordre de leurs appels.


pbar = gtk_progress_bar_new ();
pbar = gtk_progress_bar_new ();


Cet appel crée une nouvelle barre, nommée pbar.
Cet appel crée une nouvelle barre, nommée <code>pbar</code>.


ptimer = gtk_timeout_add (100, progress, pbar);
ptimer = gtk_timeout_add (100, progress, pbar);


Cet appel utilise des délais d'expiration pour permettre un intervalle de temps constant. ces délais ne sont pas nécessaires à l'utilisation des barres de progression.
Cet appel utilise des délais d'expiration pour permettre un intervalle de temps constant. ces délais ne sont pas nécessaires à l'utilisation des barres de progression.


pvalue = GTK_PROGRESS_BAR (data)->percentage;
pvalue = GTK_PROGRESS_BAR (data)->percentage;


Ce code assigne à pvalue la valeur du pourcentage de la barre.
Ce code assigne à pvalue la valeur du pourcentage de la barre.


gtk_progress_bar_update (GTK_PROGRESS_BAR (data), pvalue);
gtk_progress_bar_update (GTK_PROGRESS_BAR (data), pvalue);


Finalement, ce code met à jour la barre avec la valeur de pvalue.
Finalement, ce code met à jour la barre avec la valeur de <code>pvalue</code>.


Et c'est tout ce qu'il y a à savoir sur les barres de progression. Amusez-vous bien.
Et c'est tout ce qu'il y a à savoir sur les barres de progression. Amusez-vous bien.

Version du 19 avril 2007 à 19:16

Les barres de progression sont utilisées pour afficher la progression d'une opération. Elles sont très simple à utiliser comme vous pourrez le constater en étudiant le code ci-dessous. Commençons d'abord par l'appel permettant de créer une nouvelle barre.

GtkWidget *gtk_progress_bar_new (void);

Maintenant que la barre est créée, nous pouvons l'utiliser.

void gtk_progress_bar_update (GtkProgressBar *pbar, gfloat percentage);

Le premier paramètre est la barre de progression sur laquelle on veut agir, et le second est le pourcentage « effectué », signifiant le remplissage de la barres de 0 à 100 % (réel compris entre 0 et 1).

Les barres de progression sont généralement utilisées avec les délais d'expiration ou autres fonctions identiques (voir la section sur Expirations, fonctions d'E/S et d'attente) pour donner l'illusion du multi-tâches. Toutes emploient la fonction gtk_progress_bar_update de la même façon.

Voici un exemple de barre de progression mise à jour par des expirations. Ce code montre aussi comment réinitialiser une barre.

#include <gtk/gtk.h>

static int ptimer = 0;
int pstat = TRUE;

/* Cette fonction incrémente et met à jour la barre de progression,
 * elle la réinitialise si pstat vaut FALSE */

gint progress (gpointer data)
{
   gfloat pvalue;
    
   /* récupération de la valeur courante de la barre */

   pvalue = GTK_PROGRESS_BAR (data)->percentage;
    
   if ((pvalue >= 1.0) || (pstat == FALSE)) {
       pvalue = 0.0;
       pstat = TRUE;
   }
   pvalue += 0.01;
   
   gtk_progress_bar_update (GTK_PROGRESS_BAR (data), pvalue);
   
   return TRUE;
}
/* Cette fonction signale une réinitialisation de la barre */

void progress_r (void)
{ 
   pstat = FALSE;  
}
void destroy (GtkWidget *widget, gpointer *data)
{
   gtk_main_quit ();
}
int main (int argc, char *argv[])
{
   GtkWidget *window;
   GtkWidget *button;
   GtkWidget *label;
   GtkWidget *table;
   GtkWidget *pbar;
   
   gtk_init (&argc, &argv);
   
   window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
   
   gtk_signal_connect (GTK_OBJECT (window), "delete_event",
                       GTK_SIGNAL_FUNC (destroy), NULL);
   
   gtk_container_border_width (GTK_CONTAINER (window), 10);
   
   table = gtk_table_new(3,2,TRUE);
   gtk_container_add (GTK_CONTAINER (window), table);
   
   label = gtk_label_new ("Exemple de barre de progression");
   gtk_table_attach_defaults(GTK_TABLE(table), label, 0,2,0,1);
   gtk_widget_show(label);
   
   /* Crée une barre, la place dans la table et l'affiche */

   pbar = gtk_progress_bar_new ();
   gtk_table_attach_defaults(GTK_TABLE(table), pbar, 0,2,1,2);
   gtk_widget_show (pbar);
   
   /* Configure le délai d'expiration pour gérer automatiquement la
    *  mise à jour de la barre */ 

   ptimer = gtk_timeout_add (100, progress, pbar);
   
   /* Ce bouton indique à la barre qu'elle doit se réinitialiser */

   button = gtk_button_new_with_label ("Reset");
   gtk_signal_connect (GTK_OBJECT (button), "clicked",
                       GTK_SIGNAL_FUNC (progress_r), NULL);
   gtk_table_attach_defaults(GTK_TABLE(table), button, 0,1,2,3);
   gtk_widget_show(button);
   
   button = gtk_button_new_with_label ("Annuler");
   gtk_signal_connect (GTK_OBJECT (button), "clicked",
                       GTK_SIGNAL_FUNC (destroy), NULL);
   
   gtk_table_attach_defaults(GTK_TABLE(table), button, 1,2,2,3);
   gtk_widget_show (button);
   
   gtk_widget_show(table);
   gtk_widget_show(window);
   
   gtk_main ();
   
   return 0;
}

Dans ce petit programme, il y a quatre parties concernant le fonctionnement général des barres de progression, nous les étudierons dans l'ordre de leurs appels.

pbar = gtk_progress_bar_new ();

Cet appel crée une nouvelle barre, nommée pbar.

ptimer = gtk_timeout_add (100, progress, pbar);

Cet appel utilise des délais d'expiration pour permettre un intervalle de temps constant. ces délais ne sont pas nécessaires à l'utilisation des barres de progression.

pvalue = GTK_PROGRESS_BAR (data)->percentage;

Ce code assigne à pvalue la valeur du pourcentage de la barre.

gtk_progress_bar_update (GTK_PROGRESS_BAR (data), pvalue);

Finalement, ce code met à jour la barre avec la valeur de pvalue.

Et c'est tout ce qu'il y a à savoir sur les barres de progression. Amusez-vous bien.