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+ Discussion :

gtkliste signale d une selection


Sujet :

GTK+

  1. #1
    Membre habitué
    Avatar de yvesall
    Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Novembre 2006
    Messages
    208
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2006
    Messages : 208
    Points : 127
    Points
    127
    Par défaut gtkliste signale d une selection
    salut, je debute en gtk et j aimerais faire une liste, ce que je voudrais c est que quand je clique sur une des ligne de la liste ca appel un fonction, donc comment connaitre le signal (si il y en a un) lorsque je clique sur une ligne
    ca serai un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    g_signal_connect(G_OBJECT(ligne_a _cliquer), "clicked", G_CALLBACK(ma_fonction), autre);
    merci
    i = i++;

  2. #2
    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 : 46
    Localisation : France, Haut Rhin (Alsace)

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Salut !


    Attention à une chose pour commencer, si tu utilise vraiment un GtkList autant te dire que ca fait un bail que ce type de widget est déprécié et il ne faut donc plus l'utiliser, sauf si tu utilise encore GTK+ 1.2

    Pour le nouveau widget, c'est GtkTreeView, tu peux trouver un tutoriel ici !

    Sinon le signal par rapport à ce widget est http://developer.gnome.org/doc/API/2...-row-activated
    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 !

  3. #3
    Membre habitué
    Avatar de yvesall
    Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Novembre 2006
    Messages
    208
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2006
    Messages : 208
    Points : 127
    Points
    127
    Par défaut
    non en effet je suis sous gtk+2.0

    mon code c est tres simpliste parce que pour le moment je fais des teste
    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
    enum {
        TEXT_COLUMN,
        TOGGLE_COLUMN,
        N_COLUMN
    };
     
    void	popup(const char *str)
    {
      GtkWidget	*pAbout;
     
      pAbout = gtk_message_dialog_new (GTK_WINDOW(0), GTK_DIALOG_MODAL,
    				   GTK_MESSAGE_ERROR, GTK_BUTTONS_OK,
    				   str);
      gtk_dialog_run(GTK_DIALOG(pAbout));
      gtk_widget_destroy(pAbout);
    }
     
    int	main(int argc, char **argv)
    {
      GtkWidget	*pWindow;
      GtkWidget	*pListView;
      GtkWidget	*pScrollbar;
      GtkListStore	*pListStore;
      GtkTreeViewColumn	*pColumn;
      GtkCellRenderer	*pCellRenderer;
      char	*objet = "sphere";
      gchar	*sTexte;
      gint	i;
     
      gtk_init(&argc, &argv);
      pWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL);
      gtk_window_set_default_size(GTK_WINDOW(pWindow), 320, 500);
      gtk_window_set_title(GTK_WINDOW(pWindow), "GtkListStore");
      g_signal_connect(G_OBJECT(pWindow), "destroy", G_CALLBACK(gtk_main_quit),
    		   NULL);
      sTexte = g_malloc(12);
      pListStore = gtk_list_store_new(N_COLUMN, G_TYPE_STRING, G_TYPE_BOOLEAN);
     
      for (i = 0 ; i < 5 ; i++)
        {
          GtkTreeIter pIter;
          g_sprintf(sTexte, objet);
          gtk_list_store_append(pListStore, &pIter);
          gtk_list_store_set(pListStore, &pIter, TEXT_COLUMN, sTexte,
    			 TOGGLE_COLUMN, TRUE, -1);
        }
      g_free(sTexte);
     
      pListView = gtk_tree_view_new_with_model(GTK_TREE_MODEL(pListStore));
      pCellRenderer = gtk_cell_renderer_text_new();
      pColumn = gtk_tree_view_column_new_with_attributes
        ("Objet", pCellRenderer, "text", TEXT_COLUMN, NULL);
      gtk_tree_view_append_column(GTK_TREE_VIEW(pListView), pColumn);
      pScrollbar = gtk_scrolled_window_new(NULL, NULL);
      gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(pScrollbar),
    				 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
      gtk_container_add(GTK_CONTAINER(pScrollbar), pListView);
      gtk_container_add(GTK_CONTAINER(pWindow), pScrollbar);
     
      gtk_widget_show_all(pWindow);
      gtk_main();
      return EXIT_SUCCESS;
    }
    donc le but c est que le popup s' ouvre des que une row est selectionnee
    i = i++;

  4. #4
    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 : 46
    Localisation : France, Haut Rhin (Alsace)

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Bin regarde pour utiliser le signal dont je t'ai donné le lien plus haut mais respecte la signature de la fonction callback qui est précisée dans le lien... je le précise tout de suite car j'en ai déjà vu des vertes et des pas mures
    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 !

  5. #5
    Membre habitué
    Avatar de yvesall
    Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Novembre 2006
    Messages
    208
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2006
    Messages : 208
    Points : 127
    Points
    127
    Par défaut
    tu entends par la que ma fonction popup doit etre prototypee de cette maniere ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    void	popup(GtkTreeView *tree_view, GtkTreeIter *iter,
    	       GtkTreePath *path, gpointer user_data)
    i = i++;

  6. #6
    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 : 46
    Localisation : France, Haut Rhin (Alsace)

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Oui, si elle est prévue pour le signal que tu cherchais
    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 !

  7. #7
    Membre habitué
    Avatar de yvesall
    Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Novembre 2006
    Messages
    208
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2006
    Messages : 208
    Points : 127
    Points
    127
    Par défaut
    oki merci, alors maintenant j arrive a ouvrir mon popup lors du double clique sur une ligne, j aurais encore une autre question , en faite c est que je cherche a reccuperer le titre de la selection (admettons que 'sphere' soit le titre de la ligne je voudrais juste reccuperer ca, et apres c est tout j arrete d embetter tout le monde :p)

    donc j ai vu dans un pdf qu il y avais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select = gtk_tree_view_get_selection(GTK_TREE_VIEW(tree_view));
      gtk_tree_selection_set_mode(select, GTK_SELECTION_SINGLE);
    mais j arrive pas a me demerder avec :/
    i = i++;

  8. #8
    Membre habitué
    Avatar de yvesall
    Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Novembre 2006
    Messages
    208
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2006
    Messages : 208
    Points : 127
    Points
    127
    Par défaut
    bon en faite il se trouve que le proto de ma fonction POPUP n etait pas bon, mais j en revient au meme probleme :
    comment a partir de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    void	popup(GtkTreeView *tree_view, GtkTreePath *path, GtkTreeViewColumn *column, char *str) 
    {
      GtkWidget	*pAbout;
     
        pAbout = gtk_message_dialog_new(GTK_WINDOW(0), GTK_DIALOG_MODAL,
    				  GTK_MESSAGE_INFO, GTK_BUTTONS_OK,
    				  str);
      gtk_dialog_run(GTK_DIALOG(pAbout));
      gtk_widget_destroy(pAbout);
    }
    je recuppere le nom de la ligne sur laquelle j ai clique (j ai reussie le nom de la colone mais c'est pas trop la meme chose)
    i = i++;

  9. #9
    Membre habitué
    Avatar de yvesall
    Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Novembre 2006
    Messages
    208
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2006
    Messages : 208
    Points : 127
    Points
    127
    Par défaut
    pitier :'(
    i = i++;

  10. #10
    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 : 46
    Localisation : France, Haut Rhin (Alsace)

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Il faut que tu récupère le modèle avec gtk_tree_view_get_model. Le modèle c'est en fait ton GtkListStore ou GtkTreeStore que tu as affecté au GtkTreeView ! Tu n'as pas besoin de faire cette manip si tu as gardé un pointeur sur ton modèle.

    Ensuite, tu récupère la sélection avec gtk_tree_view_get_selection.

    Pour finir, tu récupère les informations de ta sélection avec la fonction gtk_tree_model_get


    Voilà en gros les manips à faire
    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 !

  11. #11
    Membre habitué
    Avatar de yvesall
    Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Novembre 2006
    Messages
    208
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2006
    Messages : 208
    Points : 127
    Points
    127
    Par défaut
    oki mais je vois que
    prend un model, un iter, et ...
    donc je doit faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gtk_tree_model_get(model, iter, 0, &mon_str, -1);
    mon probleme c est que je n ai pas d iter dans ma fonction popup car son prototype (due au signal) est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void	popup(GtkTreeView *tree_view, GtkTreePath *path, GtkTreeViewColumn *column, char *str)
    a moins que cette manipulation soit a faire a coter du
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    g_signal_connect(G_OBJECT(pListView), "row-activated", G_CALLBACK(popup), "phrase");
    ?
    i = i++;

  12. #12
    Membre habitué
    Avatar de yvesall
    Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Novembre 2006
    Messages
    208
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2006
    Messages : 208
    Points : 127
    Points
    127
    Par défaut
    youpiii j ai reussi
    c est un truc de dingue, j ai regarder ton profil et j ai vu ton site "perso" sur dev.com, j y ai DL une source que tu proposais, et j ai regarder comment tu removais une rows d une liste, et a partitr de la j ai adapter et ca marche ))))) merciiiiiii
    i = i++;

  13. #13
    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 : 46
    Localisation : France, Haut Rhin (Alsace)

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Citation Envoyé par yvesall
    youpiii j ai reussi
    c est un truc de dingue, j ai regarder ton profil et j ai vu ton site "perso" sur dev.com, j y ai DL une source que tu proposais, et j ai regarder comment tu removais une rows d une liste, et a partitr de la j ai adapter et ca marche ))))) merciiiiiii
    Désolé pour mes temps de réponses mais en ce moment j'ai pas mal de choses à faire et je me remet à la modélisation 3D en plus alors bon... au moins je sais que mes sources servent à quelque chose
    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 !

  14. #14
    Nouveau Candidat au Club
    Inscrit en
    Juin 2007
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    salut, pourrais tu nous expliquer comment tu a procédé pour régler ton problème?
    stp

    Pakko

  15. #15
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10
    Points : 9
    Points
    9
    Par défaut
    J'aimerai également connaître la solution à ce problème...

  16. #16
    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 : 40
    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

  17. #17
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10
    Points : 9
    Points
    9
    Par défaut
    Merci!

  18. #18
    Membre habitué
    Avatar de yvesall
    Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Novembre 2006
    Messages
    208
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2006
    Messages : 208
    Points : 127
    Points
    127
    Par défaut
    dans le main il faut utiliser lors du du dbl clique sur la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    g_signal_connect(G_OBJECT(s.pListView), "row-activated", G_CALLBACK(edit), &s);
    "s" est une structure que j ai creer pour me faciliter la vie.

    ensuite la fonction appeler est "edit" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    void    edit(GtkTreeView *tree_view, GtkTreePath *path, GtkTreeViewColumn *column, t_shg *s)
    {
        s->pSelect = gtk_tree_view_get_selection(tree_view);
        gtk_tree_selection_get_selected(s->pSelect, &s->pModel, &s->pIter);
        gtk_tree_model_get(s->pModel, &s->pIter, 0, &s->sObjetSelect, -1);
    }
    et dans ma struct il y a :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    typedef struct   s_shg
    {
        GtkWidget           *pListView;
        char                    *sObjetSelect;
        GtkTreeIter           pIter;
        GtkTreeSelection   *pSelect;
        GtkTreeModel        *pModel;
    }                    t_shg;
    bon y a pas que ca, mais j;ai ecrit que ce qui nous interresse
    pour info "gtk_tree_model_get" attand en 4eme argument un "gchar" mais mon char * et un cast suffisent.

    donc le titre de la ligne sera contenu dans "s->sObjetSelect"
    i = i++;

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

Discussions similaires

  1. Impression d'une selection multicriteres
    Par captainamerica75 dans le forum Access
    Réponses: 10
    Dernier message: 13/01/2006, 19h33
  2. récuperer une selection dans une iframe
    Par dib258 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 03/11/2005, 15h05
  3. ajout de colonnes sur une selection
    Par DaxTaz dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 05/08/2004, 17h44
  4. [C#]Sauvegarde d'une selection multiple d'une listbox?
    Par onouiri dans le forum ASP.NET
    Réponses: 7
    Dernier message: 29/04/2004, 17h16
  5. [Sybase] Select dans une select loop en C
    Par Claudio dans le forum Sybase
    Réponses: 2
    Dernier message: 29/04/2003, 18h06

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