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 :

Deplacer GtkTreeIter entre 2 GtkListStore/gtkTreeview


Sujet :

GTK+ avec C & C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Novembre 2005
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 14
    Par défaut Deplacer GtkTreeIter entre 2 GtkListStore/gtkTreeview
    Bonjour

    Je cherche à copier une ligne de VhcStore à CompStore
    Ces 2 magasin sont définis de la même manière
    Vhcstore = gtk_list_store_new(3, G_TYPE_STRING, G_TYPE_STRING,G_TYPE_STRING);
    Compstore = gtk_list_store_new(3, G_TYPE_STRING, G_TYPE_STRING,G_TYPE_STRING);
    Lors d'un clic sur une ligne de Vhc_TreeView, je souhaite copier l'ensemble de la ligne dans Comp_TreeView

    Pour cela, je récupère un gtkTreeiter (iter) et je l'ajoute à compstore avec gtk_list_store_append(Compstore, &iter);

    Mais avec cette méthode, je n'ajoute qu'une ligne vide à Comp_treeView.

    __declspec(dllexport) void on_SC_Select_xxx_trv_row_activated (GtkTreeView *p_tree_view, GtkTreePath *arg1, GtkTreeViewColumn *arg2, gpointer user_data)
    {
    //VARS
    GtkTreeModel *p_tree_model = NULL;
    GtkTreeIter iter;


    p_tree_model = gtk_tree_view_get_model (p_tree_view);
    gtk_tree_model_get_iter (p_tree_model, &iter, arg1);

    gtk_list_store_append(Compstore, &iter);

    Quelqu'un peut il me dire si c'est possible, ou bien faut-il ressortir le contenu de l'iter avec gtk_tree_model_get et recréer un iter avec gtk_list_store_append et gtk_list_store_set.

    De plus, il serait intéressant pour moi si les 2 treeviews pointaient vers le même iter, de manière à ce que la modification des paramètres soit synchronisée.

    Je travaille sous Wiindows avec Visual Studio et Glade.

    Merci.

    Aragorc

  2. #2
    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
    Ca ne m'étonne pas que le transfert d'iterateur d'un arbre à un autre ne fonctionne pas... Par contre, tu peux peut être bosser avec un unique modèle, et avoir deux GtkTreeModelFilter au dessus pour sélectionner ce que tu affiches/n'affiche pas ? Ca résoudrait en partie ton pb de synchronisation je epnse

  3. #3
    Membre averti
    Inscrit en
    Novembre 2005
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 14
    Par défaut
    C'est fort possible....
    Je vais me documenter sur les GtkTreeModelFilter.

    Merci

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 71
    Par défaut
    Décidément j'ai plein de questions, j'ai toujours un peu peur de polluer le forum, mais on est là pour apprendre après tout...

    Bref ma question, s'assimile un peu à ce problème là.

    En fait dans une fonction je crée un iter "parent" seul et je stocke sa valeur dans une variable.

    Fonction 1:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    GtkTreeIter *gtk_node; 
     
    gtk_tree_store_append(treestore, gtk_node, NULL);
    gtk_tree_store_set(treestore, gtk_node, COL_TYPE, "toto", -1);
     
    blabla = gtk_node;
    Fonction 2:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    GtkTreeIter *gtk_node; 
    GtkTreeIter *gtk_subnode; 
     
    """quelque chose du genre"""
    gtk_node = blabla
     
    gtk_tree_store_append(treestore, gtk_subnode, gtk_node);
    gtk_tree_store_set(treestore, gtk_subnode, COL_TYPE, "titi", -1);
    Dans une autre fonction j'aimerais récupérer cet iter dont la valeur est dans la variable, il deviendra le "parent" d'un autre iter.

    Pourquoi est ce que je procède par différentes fonctions ? Simplement parce que le GTK est une surcouche à un tree codé en C permettant à la fois de stocker, extraire, analyser des données. Le Tree GTK doit pouvoir seulement les afficher.
    Le découplage de l'ajout des "parents" est obligatoire pour moi.

    Je sais pas trop si mon problème vous parait clair ?

    Merci pour toutes aides éventuelles.


    EDIT: j'ai trouvé la solution avec un peu de mal...

    gtk_node = (GtkTreeIter*)(blabla)

    bien Inspiré sur le coup...

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 71
    Par défaut
    EDIT: j'ai trouvé la solution avec un peu de mal...

    gtk_node = (GtkTreeIter*)(blabla)

    bien Inspiré sur le coup...
    En fait ce que je propose là ne marche pas, je ne sais pas pourquoi ça modifie une valeur de "blabla" et fait foirer un une boucle plus tardive dans mon code... Il me faudrait une autre solution...

    Donc je résume, je cherche à transmettre la valeur d'un GtkTreeIter d'une fonction à une autre sans utiliser de variables globales et de préférence en passant par une variable intermédiaire.

  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
    Un GtkTreeIter, c'est un objet qui est fait pour avoir une durée de vie courte (il devient invalide dés que l'arbre est modifié par exemple) et c'est en général alloué sur la pile, donc je ne m'aventurerais pas à passer des pointeurs de GtkTreeIter de fonctions en fonctions. Tu peux sois transmettre un GtkTreePath et ensuite itérer sur les valeurs contenues à cet endroit là pour les stocker dans ton second modèle, ou bien faire une structure dont le seul but sera de transmettre les données contenue à l'endroit qui t'intéresse d'un des modèles à l'autre.

Discussions similaires

  1. [ZF 1.10] Se deplacer entre modules
    Par touness dans le forum Zend Framework
    Réponses: 2
    Dernier message: 25/11/2011, 20h20
  2. Réponses: 3
    Dernier message: 04/08/2011, 20h01
  3. [WD-2007] Deplacement entre titres de même niveau
    Par Sergio06 dans le forum VBA Word
    Réponses: 2
    Dernier message: 22/06/2011, 08h57
  4. [OL-2007] Macro detectant le deplacment d'un mail entre des boites
    Par siven_7 dans le forum VBA Outlook
    Réponses: 0
    Dernier message: 21/09/2009, 17h41
  5. [EasyPHP] deplacer EasyPHP entre 2 PC
    Par kh12040 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 29/10/2008, 09h22

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