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 :

Récupérer la ligne d'un GtkTreeView


Sujet :

GTK+ avec C & C++

  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2007
    Messages
    204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2007
    Messages : 204
    Par défaut Récupérer la ligne d'un GtkTreeView
    Bonjour à tous !!!!!

    J'aimerais, comme le dit le titre, savoir comment on peut récuperer la ligne d'un GtkTreeView. J'ai cherché partout mais je ne trouve rien...

    Mon cas est que j'ai un TreeView qui affiche la liste des chansons que la personne a choisi. Cette liste est stocké dans une GSlist. J'ai un bouton "Remove" et celle ci doit enlever la chanson sélectionné du GtkTreeView et de la GSlist.

    Voila j'espere que vous pouvez m'aider ^^. Voici mon code pour ceux qui en aurait besoin :

    Le GtkTreeView :
    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
     
     
    /* Configuration des variables de GtkTreeView */
         TreeStore = gtk_tree_store_new(1, G_TYPE_STRING);
         TreeView = gtk_tree_view_new_with_model(GTK_TREE_MODEL(TreeStore));
         gtk_tree_view_set_reorderable (GTK_TREE_VIEW(TreeView), TRUE);
         CellRenderer = gtk_cell_renderer_text_new();
         Column = gtk_tree_view_column_new_with_attributes("Nom de la musique", CellRenderer, "text", 0, NULL);
         gtk_tree_view_append_column(GTK_TREE_VIEW(TreeView), Column);     
         Box_tree_1 = gtk_vbox_new(FALSE, 0);                  
         Box_tree_2 = gtk_hbox_new(FALSE, 0);
         Bouton_1 = gtk_button_new_from_stock(GTK_STOCK_ADD);
         Bouton_2 = gtk_button_new_from_stock(GTK_STOCK_REMOVE);
         g_signal_connect(G_OBJECT(Bouton_2), "clicked", G_CALLBACK(Supprime_musique), TreeView);
         ScrollBarre = gtk_scrolled_window_new(NULL, NULL);
         gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(ScrollBarre), TreeView);
         gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(ScrollBarre), GTK_POLICY_ALWAYS, GTK_POLICY_ALWAYS);

    Son remplissage (il lit les information dans un fichier. Lorsqu'il ferme la fenetre du GtkTreeView, le fichier se rmeplira avec la GSList) :
    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
     
     /* Remplissage du GtkTreeView */
         FILE *Fichier;
         char Message[2000] = "";
         Fichier = fopen(Path_Musique, "r");
     
         if(Fichier != NULL)
         {
             while(fgets(Message, 2000, Fichier) != NULL)
             {
                  Liste_musique = g_list_append(Liste_musique, Message);
                  gtk_tree_store_append(TreeStore, &Iter_tree, NULL);
                  gtk_tree_store_set(TreeStore, &Iter_tree, 0, g_strdup_printf("%s", g_locale_to_utf8(Message, -1, NULL, NULL, NULL)), -1);                   
             }
     
          fclose(Fichier);          
         }

    Et la fonction Supprime_musique (à partir de cette fonction je ne sais plus quoi faire ) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    void Supprime_musique(GtkWidget *widget, gpointer data)
    {
         /* Creation des variables */
         GtkTreeModel *Model;
         GtkTreeIter Iter;
         GtkTreePath *Path;
         int id;
     
         /* Caracterisation des variables */
         Path = gtk_tree_path_new();
         Model = gtk_tree_view_get_model (data);
     
    }

    Merci d'avance de votre aide.
    Ou bien vous pouvez peut-être me donner d'autres idées pour permettre la personne de choisir ses chansons qui s'affiche. Avoir la possiblité de les supprimer et d'en ajouter

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 27
    Par défaut
    regarde ici il montre comment recuperer une selection.

    http://developer.gnome.org/doc/API/2...reeWidget.html

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2007
    Messages
    204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2007
    Messages : 204
    Par défaut
    Je suis désolé mais je suis déjà aller sur cette page. Je ne vois aucun moyen de récuperer le numéro de la ligne, à moins que j'ai sauté quelque chose...

    En tout cas merci de ton aide

  4. #4
    Membre Expert
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 259
    Par défaut
    Dans ta question initiale, tu ne parles pas de *numéro* de ligne.... Le lien donné montre comment récupérer un GtkTreeIter sur la ligne sélectionnée, et tu peux utiliser cet itérateur pour supprimer ta chanson de ton GtkTreeView.
    Tu peux pas stocker les éléments de ta GList dans le modèle avec le reste des données ? Comme ça tu te poseras pas la question de "comment supprimer ma chanson de la GList" Une donnée présente dans un modèle n'est pas nécessairement affichée dasn le GtkTreeView.

  5. #5
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2007
    Messages
    204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2007
    Messages : 204
    Par défaut
    Donc si j'ai bien compris, je devrais ne pas utiliser les GList ?

    Et ensuite, j'aimerais aussi savoir comment parcourir tout le GTkTreeView.
    Puuisque quand on ajoute ou supprime les données du GtkTreeView, il faut aussi changer les données du fichier qui contient toute la sélection des chansons

    Et enfin, si j'ai le TreeIter de la ligne sélectionné, comment je fais pour supprimer cette ligne ?

    [edit] : et je ne vois pas comment récupérer l'iter de l'item sélectionné avec le lien donné

  6. #6
    Membre Expert
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 259
    Par défaut
    Citation Envoyé par mick009
    Donc si j'ai bien compris, je devrais ne pas utiliser les GList ?
    Je sais pas... Tu peux peut être stocker les données que t'as dans ta GList dans ton modèle, mais peut être pas. C'est toi seul qui peut le savoir vu que tu connais ton appli

    Citation Envoyé par mick009
    Et ensuite, j'aimerais aussi savoir comment parcourir tout le GTkTreeView.
    Puuisque quand on ajoute ou supprime les données du GtkTreeView, il faut aussi changer les données du fichier qui contient toute la sélection des chansons
    Il doit y avior les fonctions appropriées dans http://developer.gnome.org/doc/API/2...TreeModel.html , en particulier gtk_tree_model_get_iter_first et gtk_tree_model_iter_next


    Citation Envoyé par mick009
    Et enfin, si j'ai le TreeIter de la ligne sélectionné, comment je fais pour supprimer cette ligne ?
    gtk_list_store_remove si tu utilises un GtkListStore

    Citation Envoyé par mick009
    [edit] : et je ne vois pas comment récupérer l'iter de l'item sélectionné avec le lien donné
    Cf tree_selection_changed_cb dans le lien donné...

  7. #7
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2007
    Messages
    204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2007
    Messages : 204
    Par défaut
    Merci pour toutes ces informations !!!!

    Cependant, je vais en prendre p'tit bout par p'tit bout.
    Je n'arrive toujours pas à récuperer le TreeIter . J'ai même l'impression de faire n'importe quoi ...

    Voila mon code (Je vous rappele que cette fonction est rélié à un bouton au signal "clicked") :

    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
    void Supprime_musique(GtkWidget *widget, gpointer data)
    {
         /* Creation des variables */
         GtkWidget *TreeView;
         GtkTreeModel *Model;
         GtkTreeIter Iter;
         GtkTreeSelection *Selection;
         gchar *Temp;
     
         /* Caracterisation des variables */
         TreeView = gtk_tree_view_new_with_model(GTK_TREE_MODEL(data));
         Model = gtk_tree_view_get_model (GTK_TREE_VIEW(TreeView));
         gtk_tree_model_get(Model, &Iter, 1, &Temp, -1);
         printf("Tree = %s", Temp);
     
     
    }
    Le résultat de ce code ?
    Cela me ferme mon programme sans me demander mon avis...
    Je pense que sur un ordinateur + perfectionné cela m'afficherait une erreur (et oui, mon ordi commence à se faire vieux ....)

    De +, je ne vois pas à quoi peut me serveir la fonction " gtk_tree_model_get" pour trouver le GtkTreeIter de l'item sélectionné ...

  8. #8
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2007
    Messages
    204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2007
    Messages : 204
    Par défaut
    Merci encore de m'avoir aidé mais je viens d'avoir une autre idée
    Pourquoi ne pas utiliser les combobox qui me permettront dans ce cas d'utiliser facilement les GSList dont j'ai l'habitude ?

    Meric encore pour votre aide

  9. #9
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Cette ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TreeView = gtk_tree_view_new_with_model(GTK_TREE_MODEL(data));
    n'a pas lieu d'être dans cette fonction, vu qu'elle créée un nouveau widget ce qui me paraît pas très juste ! Si la fonction Supprime_musique est le callback de ton GtkTreeView, le pointeur sur ton widget est le premier argument de cette fonction !
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 19/12/2005, 14h24
  2. y'a t il un moyen de récupérer la ligne N d'une requete sql?
    Par c_moi_c_moi dans le forum Langage SQL
    Réponses: 2
    Dernier message: 29/11/2005, 10h47
  3. Récupérer la ligne sélectionnée dans un ListBox
    Par jmjmjm dans le forum Composants VCL
    Réponses: 3
    Dernier message: 11/11/2005, 22h13
  4. récupérer chaque ligne d'une requête ?
    Par ctobini dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 10/11/2005, 09h15
  5. Récupérer la ligne en cours dans un DBGrid
    Par PH69 dans le forum Bases de données
    Réponses: 2
    Dernier message: 28/07/2005, 16h59

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