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 GtkListStore


Sujet :

GTK+ avec C & C++

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 87
    Points : 46
    Points
    46
    Par défaut Barre de progression dans un GtkListStore
    Bonjour,

    j'essaye cette fois d'intégrer des barres de progression dans les lignes d'un list store, je crée mon gtklistStore de cette manière :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    pListStore = gtk_list_store_new(4,G_TYPE_STRING,G_TYPE_OBJECT,G_TYPE_STRING,G_TYPE_POINTER);	
    pListView =gtk_tree_view_new_with_model(GTK_TREE_MODEL(pListStore));
    Je pense pas qu'il y ait de problèmes à ce niveau ?
    J'ai 4 colonnes, la deuxième est la barre de progression, j'ai mis un G_TYPE_OBJECT pour cela ?

    Je crée la colonne correspondant à la barre de progression de cette manière :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    pCellRenderer = gtk_cell_renderer_progress_new (); 
     pColumn = gtk_tree_view_column_new_with_attributes ("",pCellRenderer,NULL, 1,NULL);
     
     
    gtk_tree_view_append_column (GTK_TREE_VIEW (pListView), pColumn);
    gtk_tree_view_column_set_visible(pColumn,1);
    Et j'ajoute les "lignes" du gtkliststore de cette manière :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    ...
    maillon->progress = gtk_progress_bar_new();
    gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(maillon->progress), 0.5);
     
    tmp1 = (gchar *)g_malloc(TAILLE_STRUCT_NOM+20);
    tmp2 = (gchar *)g_malloc(40);
     
    gtk_list_store_append(pListStore, &pIter);
    g_sprintf(tmp1,"<small>%s</small>",(gchar *)maillon->nom);
    g_sprintf(tmp2,"<small>%i</small>",(gint)maillon->type);
     
    gtk_list_store_set(pListStore, &pIter,0,tmp1,1,maillon->progress,2,tmp2,3,maillon,-1);
    Voila, la variable maillon est une structure comprenant plein d'informations nottament le widget correspondant à la barre de progression :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    typedef struct P_MAILLON
    {
                    ...
    		GtkWidget *progress;        
     
    } P_MAILLON;
    Et donc le problème c'est que, bien que la barre de progression s'affiche, elle est "vide", alors que initialement je lui donne comme valeur 0.5 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(maillon->progress), 0.5);
    Et bien entendu quand j'essaye de mettre à jour la barre de progression, rien ne change !

    Si quelqu'un a une idée pour résoudre mon problème ?

    Merci

  2. #2
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Points : 11 625
    Points
    11 625
    Par défaut
    Bonjour,

    Il faut utiliser une colonne de type double (G_TYPE_DOUBLE) et ensuite associer la propriété percentage à cette colonne.

    Voici une exemple relativement simple : http://www.google.fr/codesearch/p?hl...r_progress_new

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 87
    Points : 46
    Points
    46
    Par défaut
    Bonjour,
    j'ai parcouru de nombreux sujets toute la soirée,

    et effectivement j'ai testé ce que tu dis, mais ca ne fonctionne pas, j'ai peut etre pas la bonne version de GTK (2.10 pour moi), peut etre que c'est pour ca ?.

    Non seulement ma barre de progression ne s'affiche pas correctement mais j'ai des dizaines de warning à l'execution :

    GLib-GObject-WARNING **: IA__g_object_set_property: object class `GtkCellRendererProgress' has no property named `percentage'

    GLib-GObject-WARNING **: IA__g_object_set_property: object class `GtkCellRendererProgress' has no property named `percentage'

    GLib-GObject-WARNING **: IA__g_object_set_property: object class `GtkCellRendererProgress' has no property named `percentage'
    Par contre j'ai trouvé autre chose, en mettant un GTK_TYPE_INT comme type de colonne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pListStore = gtk_list_store_new(4,G_TYPE_STRING,GTK_TYPE_INT,G_TYPE_STRING,G_TYPE_POINTER);
    ici en deuxième position et un "value" comme propriété, ca marche.
    D'ailleur c'est ce qu'ils semblent dire dans la doc :
    http://library.gnome.org/devel/gtk/u...rProgress.html

    Ma barre s'affiche parfaitement mais j'ai des problèmes de warning à l'execution :
    - seulement lorsque j'essaye de donner une valeur qui est supérieur à 1

    Par contre 0 ou 1, aucun warnings et affichage correct.

    Je met à jour ma barre de progression comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    gtk_list_store_set(GTK_LIST_STORE(pListStore), &pIter,1,(gint)10,-1);
    La, ca me donne ces warnings donc (mais affichage correct) :

    GLib-GObject-WARNING **: invalid cast from `GtkTreeView' to `GtkProgress'

    Gtk-CRITICAL **: gtk_progress_get_current_percentage: assertion `GTK_IS_PROGRESS (progress)' failed
    Alors que la meme chose mais avec d'autres valeur (0 ou 1) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    gtk_list_store_set(GTK_LIST_STORE(pListStore), &pIter,1,(gint)0,-1);
    ou
    gtk_list_store_set(GTK_LIST_STORE(pListStore), &pIter,1,(gint)1,-1);
    Aucun warnings et affichage correct !

    Bref, merci de votre aide, mais effectivement cette histoire de "percentage", il y a beaucoup de codes qui l'utilisent, mais je n'arrive pas a en trouver la trace dans la doc et je n'arrive pas à l'utiliser.

    Si quelqu'un s'est déja confronté au problème.
    Merci encore

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 87
    Points : 46
    Points
    46
    Par défaut
    Bonjour,

    J'ai toujours pas résolu mon problème
    cette fonction gtk_cell_renderer_progress_new() est décidemment pas simple, apparemment la facon du l'utiliser à beaucoup évoluer au fil des versions de GTK.

    J'ai toujours les meme warnings, pourtant en regardant quelques codes sources comme ici :
    http://archives.neohapsis.com/archiv...nitor_dialog.c
    (Nessus c'est important et serieux donc ca doit fonctionner sans warnings je suppose leur interface).

    je fais la meme chose que eux, un peu pret.

    Nessus:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
      store = gtk_list_store_new(NUM_COLS, GDK_TYPE_PIXBUF,
        G_TYPE_STRING, GTK_TYPE_INT, GTK_TYPE_INT);
    ...
    ...
    renderer = gtk_cell_renderer_progress_new();
      column = gtk_tree_view_column_new_with_attributes (_("Portscan"),
        renderer, "value", COL_PORTSCAN, NULL);
      gtk_tree_view_append_column (GTK_TREE_VIEW (w), column);
    ...
    ...
    ...
    gtk_list_store_set(store, &iter, COL_PORTSCAN, f, -1);
    Merci

    (edit)
    voila un programme compilable, si vous voulez tester et voir par vous meme le problème :

    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
     
     
    #include <gtk/gtk.h>
    #include <stdio.h>
     
    void start_gtk(int argc, char **argv)
    {
        GtkWidget *vbox;
        GtkWidget *win;
     
        GtkListStore *pListStore;
        GtkWidget *pListView;
     
        gtk_init(&argc, &argv);
     
        win = gtk_window_new(GTK_WINDOW_TOPLEVEL);
        gtk_container_set_border_width(GTK_CONTAINER(win), 0);
        gtk_window_set_title(GTK_WINDOW(win), "title");
        gtk_window_set_position(GTK_WINDOW(win), GTK_WIN_POS_CENTER);
        gtk_window_set_default_size(GTK_WINDOW(win), 600, 400);
        gtk_widget_realize(win);
        g_signal_connect(win, "destroy", gtk_main_quit, NULL);
     
        vbox = gtk_vbox_new(FALSE, 0);
        gtk_container_add(GTK_CONTAINER(win), vbox);
     
     
        /* **** Gtkliststore *************** */
        pListStore = gtk_list_store_new(1, G_TYPE_INT);
        pListView = gtk_tree_view_new_with_model(GTK_TREE_MODEL(pListStore));
        // XXX - Most likely you should unref pListStore now
        g_object_unref(pListStore);
        // /XXX
     
        GtkCellRenderer *pCellRenderer;
        pCellRenderer = gtk_cell_renderer_progress_new();
     
        // XXX - Here's your problem: After "value", which is an attribute, you need to provide
        //       the column number to map the attribute to, 0 in this case. Then you can end
        //       the function call with NULL.
        gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(pListView), 0, "Progress", pCellRenderer, "value", 0, NULL);
        /* gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(pListView), 0, "Progress", pCellRenderer, "value", NULL); */
        // /XXX
        gtk_box_pack_start(GTK_BOX(vbox), pListView, TRUE, TRUE, 0);
        /* ********************************** */
     
     
        /* **** Test : progress bar : 30% ** */
        GtkTreeIter pIter;
     
        gtk_list_store_append(pListStore, &pIter);
        gtk_list_store_set(pListStore, &pIter, 0, 30, -1);
        /* ********************************** */
     
        gtk_widget_show_all(win);
        gtk_main();
    }
     
     
    int main(int argc, char ** argv)
    {
        start_gtk(argc, argv);
     
        // XXX - If you're #including stdio.h already then you may as well
        //       #include <stdlib.h> too and use EXIT_SUCCESS and EXIT_FAILURE
        return 1;
        // /XXX
    }

  5. #5
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Points : 11 625
    Points
    11 625
    Par défaut
    J'ai trouvé le temps de faire un programme qui fonctionne (écrit en Vala) :
    Code Vala : 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
    private class Window : Gtk.Window
    {
      public Window ()
      {
        Gtk.ListStore list_store = new Gtk.ListStore (1, typeof (double));
     
        Gtk.TreeView tree_view = new Gtk.TreeView.with_model (list_store);
        this.add (tree_view);
     
        Gtk.CellRenderer renderer = new Gtk.CellRendererProgress ();
        Gtk.TreeViewColumn col = new Gtk.TreeViewColumn.with_attributes ("", renderer, "value", 0);
        tree_view.append_column (col);
     
        renderer = new Gtk.CellRendererText ();
        col = new Gtk.TreeViewColumn.with_attributes ("", renderer, "text", 0);
        tree_view.append_column (col);
     
        Gtk.TreeIter iter;
        list_store.append (out iter);
        list_store.set (iter, 0, 50.0);
      }
    }
     
    void main (string[] args)
    {
      Gtk.init (ref args);
     
      Window window = new Window ();
      window.destroy += Gtk.main_quit;
      window.show_all ();
     
      Gtk.main ();
    }

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 GtkTreeStore
    Par Creuvard dans le forum GTK+ avec C & C++
    Réponses: 5
    Dernier message: 30/11/2009, 16h54

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