IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

GTK+ avec C & C++ Discussion :

Barre de progression dans un GtkTreeStore


Sujet :

GTK+ avec C & C++

Mode arborescent

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2006
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 48
    Par défaut Barre de progression dans un GtkTreeStore
    Bonjour.

    Je suis en train d'essayer d'intergrer une barre de progression dans un GtkTreeStore. Pour intergrer la barre de progresion dans mon GtkTreeStore, j'utilise la fonction gtk_cell_renderer_text_new().

    Dans le code ci-dessous, je voudrais que lorsque j'appuie sur un bouton, une ligne (contenant une barre de progression) s'ajoute au GtkTreeStore.
    La ligne s'ajoute bien, mais GTK+ ne rend pas la main, ce qui fait que la barre de progression ne s'affiche qu'une fois remplie (100%).

    J'utilise la fonction gtk_main_iteration (void), mais visiblement pas de la bonne manière.

    Voici le code de mon fichier main.c:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
     
    #include <unistd.h>
    /*
     * Glib/Gtk+-2.0
     */
    #include <gtk/gtk.h>
    #include <glib/gprintf.h>
     
     
     
    enum {
        Name,
        Progress,
        N_COLUMN
    };
     
     
    static GtkTreeStore *load_tree;
    static GtkWidget		*pWindow;
     
    static void download (GtkWidget *pWidget, gpointer id)
    {
    	GtkTreeIter pIter;
    	gint iTotal = 101;
    	gint i;
    	//gdouble fract;
     
    	//GtkWidget *bar;
    	//bar = gtk_progress_bar_new();
     
    	gtk_tree_store_append(load_tree, &pIter, NULL);
    	gtk_tree_store_set(load_tree, &pIter, Name, "filename.iso", Progress, (gdouble)0, -1);
    	//gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(bar), (gdouble)1);
     
    	for(i = 0 ; i < iTotal ; ++i)
      {
    		//fract = (gdouble)i / (gdouble)iTotal;
    		//fprintf(stderr, "--> %.2f\n", fract);
    		gtk_tree_store_set(load_tree, &pIter, Name, "filename.iso", Progress, (gdouble)i, -1);
    		//gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(bar), fract);
    		//sleep(1);
    		gtk_main_iteration ();
      }
     
    }
     
    /*
     * Main program for daemon.
     */
    int main (int argc, char **argv)
    {
    	GtkWidget		*pVBox;
      GtkWidget		*pToolbar = NULL;
    	GtkWidget		*load_scrollbar;
    	GtkWidget		*List_HBox;
    	GtkWidget		*pNotebook;
    	GtkWidget		*load_view;
    	GtkWidget		*pTabLabel;
     
      GtkTreeViewColumn *pColumn = NULL;
      GtkCellRenderer *pCellRenderer;
     
    	gtk_init(&argc, &argv);
     
      /* Creation de la fenetre principale
    	 * pWindows = principale Windows
    	 */
      pWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL);
      gtk_window_set_title(GTK_WINDOW(pWindow), " -Test- ");
      gtk_window_set_default_size(GTK_WINDOW(pWindow), 640, 480);
      g_signal_connect(G_OBJECT(pWindow), "destroy", G_CALLBACK(gtk_main_quit), NULL);
     
      /* Creation de la pVBox */
      pVBox = gtk_vbox_new(FALSE, 0);
    	/* Ajout de la pVBox dans la fenetre */
      gtk_container_add(GTK_CONTAINER(pWindow), pVBox);
     
     
    	/* Creation de la barre d'outils */
      pToolbar = gtk_toolbar_new();
    	/* Ajout de la barre d'outil dans pVBox */
    	gtk_box_pack_start(GTK_BOX(pVBox), pToolbar, FALSE, FALSE, 0);
     
    	// Creation a partir de stock
      gtk_toolbar_insert_stock(GTK_TOOLBAR(pToolbar),
          GTK_STOCK_ADD,
          "Download",
          NULL,
          G_CALLBACK(download),
          pColumn,
          -1);
     
    	// Creation a partir de stock
      gtk_toolbar_insert_stock(GTK_TOOLBAR(pToolbar),
          GTK_STOCK_QUIT,
          "Quit",
          NULL,
          G_CALLBACK(gtk_main_quit),
          pColumn,
          -1);
     
       // Modification de la taille des icones
       gtk_toolbar_set_icon_size(GTK_TOOLBAR(pToolbar), GTK_ICON_SIZE_DIALOG);
     
       // Affichage uniquement des icones
       gtk_toolbar_set_style(GTK_TOOLBAR(pToolbar), GTK_TOOLBAR_ICONS);
     
     
    	/************************/
    	/* Creation de la liste */
    	/************************/
    	/* Creation de la box horizontale  qui va contenir la liste */
      List_HBox = gtk_hbox_new(TRUE, 0);
    	/* Ajout de la List_HBox dans la pVBox */
    	gtk_box_pack_start(GTK_BOX(pVBox), List_HBox, TRUE, TRUE, 0);
     
    	/**********************/
    	/* Rajout des onglets */
    	/**********************/
     
    	/* Creation du GtkNotebook */
      pNotebook = gtk_notebook_new();
     
    	/* Position des onglets : en haut */
      gtk_notebook_set_tab_pos(GTK_NOTEBOOK(pNotebook), GTK_POS_TOP);
    	gtk_notebook_set_scrollable(GTK_NOTEBOOK(pNotebook), 1 );
    	gtk_box_pack_start(GTK_BOX(List_HBox), pNotebook, TRUE, TRUE, 0);
     
    	/****************************************/
    	/* creation de l'onglet Download/Upload */
    	/****************************************/
    	// Mise en place d'un arbre vide
      // Creation du modele
      load_tree = gtk_tree_store_new(N_COLUMN, G_TYPE_STRING, G_TYPE_DOUBLE);
     
      // Creation de la vue
      load_view = gtk_tree_view_new_with_model(GTK_TREE_MODEL(load_tree));
     
      // Creation de la premiere colonne
      pCellRenderer = gtk_cell_renderer_text_new();
      pColumn = gtk_tree_view_column_new_with_attributes("Nom du fichier", pCellRenderer, "text", Name, NULL);
      // Ajout de la colonne à la vue
      gtk_tree_view_append_column(GTK_TREE_VIEW(load_view), pColumn);
     
     
    	// Creation de la troisieme colonne
      pCellRenderer = gtk_cell_renderer_progress_new();
      pColumn = gtk_tree_view_column_new_with_attributes("Progression", pCellRenderer, "value", Progress, NULL);
      // Ajout de la colonne à la vue
      gtk_tree_view_append_column(GTK_TREE_VIEW(load_view), pColumn);
     
    	// Ajout de la scrollbar verticale
    	load_scrollbar = gtk_scrolled_window_new(NULL, NULL);
    	/* Ligne qui fait chier */
    	gtk_container_add(GTK_CONTAINER(load_scrollbar), load_view);
     
    	gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(load_scrollbar), 
    		GTK_POLICY_AUTOMATIC,
    		GTK_POLICY_AUTOMATIC);
    	gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(load_scrollbar), GTK_SHADOW_IN);
     
    	/* Creation de la tabulation de la liste */
      pTabLabel = gtk_label_new("Download/Upload");
    	gtk_notebook_append_page(GTK_NOTEBOOK(pNotebook), load_scrollbar, pTabLabel);
     
      gtk_widget_show_all(pWindow);
      gtk_main();
    	return 0;
    }
    Je compile le fichier ci-dessus de la manière suivante:
    gcc `pkg-config --libs --cflags gtk+-2.0` -g -Wall -O2 main.c -o test
    La compilation se fait avec les WARNINGs suivant chez moi (OpenBSD 4.6-current):
    /usr/local/lib/libglib-2.0.so.1801.0: warning: vsprintf() is often misused, please use vsnprintf()
    /usr/local/lib/libgtk-x11-2.0.so.1401.0: warning: strcpy() is almost always misused, please use strlcpy()
    /usr/local/lib/libgtk-x11-2.0.so.1401.0: warning: strcat() is almost always misused, please use strlcat()
    /usr/local/lib/libgtk-x11-2.0.so.1401.0: warning: sprintf() is often misused, please use snprintf()
    Liste des posts qui m'ont aidé a pondre le code:



    J'espère avoir mis assez d'informations pour vous permettre de m'aider.

    D'avance merci.
    Fichiers attachés Fichiers attachés
    • Type de fichier : c main.c (4,7 Ko, 73 affichages)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Une barre de progression dans une JSP
    Par info.men dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 31/08/2012, 15h14
  2. Une barre de progression dans une JSP
    Par info.men dans le forum Servlets/JSP
    Réponses: 0
    Dernier message: 20/07/2012, 09h33
  3. Barre de progression dans une boucle : impossible de modifier son avancement
    Par piero-la-lune dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 21/01/2012, 11h24
  4. [XL-2007] Barre de progression dans UserForm
    Par Tempas dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 21/05/2010, 10h05
  5. Barre de progression dans un GtkListStore
    Par flo_k dans le forum GTK+ avec C & C++
    Réponses: 4
    Dernier message: 06/03/2009, 14h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo