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 :

"texte" cliquable dans un gtktreeview


Sujet :

GTK+ avec C & C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    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 "texte" cliquable dans un gtktreeview
    Bonjour à tous,

    J'aurais quelques questions concernant la création d'un petit tree.
    Je vous livrerais le code si nécessaire en attendant je préfère m'en tenir à une petite description du problème en image.

    Donc quelques information sur le problème.
    A l'aide de Glade j'ai crée une fenêtre puis inséré un arbre. Cet arbre est rempli à l'aide de données externes et ça doit le rester (la liste affichée par cet arbre sera évolutive)

    J'aimerais bien que cette liste soit en partie interactive. C'est à dire qu'en cliquant sur un élément, on puisse afficher une boite de dialogue (équivalente à ce que produit un clic droit par exemple)



    Grosso modo en cliquant sur p_mesh on produit l'équivalent d'un "menu clic droit"

    Pour l'instant les éléments sont complètement "morts" on ne peut ni les cliquer, ni les sélectionner... ni rien...

    Je ne sais pas trop comment faire ça... une idée ? des pistes de recherche ?
    J'ai suivit jusque là divers tuto mais j'ai pas trouvé l'information voulue.

    De mon coté j'ai essayé de bidouiller les signaux depuis glade, mais sans résultats ...

    Merci beaucoup pour votre aide

  2. #2
    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
    une fois n'est pas coutume je vais me répondre (du moins à une partie de la question, ça donnera la solution aux prochains chercheurs

    Donc pour associer une action à un élément, on peu déclencher le signal lors de la sélection par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    g_signal_connect(gtk_tree_view_get_selection(GTK_TREE_VIEW("Votre arbre")), "changed", G_CALLBACK("votre fonction"), "vos données");
    Ensuite reste à savoir comment faire une petite boite de dialogue sous forme de liste d'actions...

  3. #3
    Modérateur

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    1 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 395
    Par défaut
    Attention, ne pas confondre boite de dialogue et menu contextuel (ce que tu vois sur un clic droit), ça n'a rien à voir. Ensuite je te déconseille de faire dans l'original : voir un menu contextuel s'afficher sur un clic gauche c'est franchement déroutant !

  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
    Oui tout à fait, depuis j'ai compris qu'on pouvait associé un signal au click, j'ai réussi à faire fonctionner ça en "tout en code", je me penche sur l'interfaçage avec Glade, ça fonctionne pas encore...

    Bref quoi qu'il en soit, pour l'occasion, ça n'aurait pas été gênant car les éléments n'ont qu'une fonction indicative mis à part certaines actions que l'on peut avoir sur eux...

    Merci Liberforce

  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
    J'ai de nouveau une question sur ce sujet.
    J'ai bien saisie les manœuvres pour afficher différents popup menu...

    Cependant je me heurte à un nouveau problème et ça fait bien trop longtemps que je cherche, donc je m'adresse à vous

    dans mon tree, j'aimerais affecté une callback à un iter (en fait le callback sera différent selon l'objet que l'on vise (toplevel ou child))

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    GtkTreeIter *gtknode;
     
     ....
     
    g_signal_connect(G_OBJECT(gtknode), "button-press-event", 
                           (G_CALLBACK (CB_gui_analyse_node_click), 
                            treeset);
    Cette méthode ne passe pas l'interface plante... J'ai bien l'impression que ça coince au niveau du G_OBJECT... Quand je remplace le node par le tree carrément (comme j'avais pu le faire dans un autre code qui marche) j'ai une erreur invalide instance pour l'évènement "button-press-event".

    Voila j'suis coincé depuis un moment déjà sur ce point, quelqu'un aurait une idée siouplé ?
    Merci beaucoup

  6. #6
    Membre chevronné
    Inscrit en
    Janvier 2007
    Messages
    329
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 329
    Par défaut
    Salut,

    Je crois pas qu'on puisse connecter un "button-press-event" à un iter.

    Je te conseille plutôt de le connecter au treeview (et pas au treestore), puis de récupérer l'iter avec gtk_tree_view_get_path_at_pos, et enfin de contrôler si ton iter est une racine ou pas avec gtk_tree_store_iter_depth et d'agir en conséquence.

    -

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