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 :

Equivalent de "row_activated" sur une sélection multiple


Sujet :

GTK+

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 8
    Points : 7
    Points
    7
    Par défaut [Résolu] Equivalent de "row_activated" sur une sélection multiple
    Voilà mon problème :

    dans un treeview, j'ai une colonne avec des boutons "toggle". Lorsque je sélectionne plusieurs lignes et que j'appuie sur "espace" ou "entrée", je souhaiterais que l'état des boutons sélectionnés soient inversés.

    La sélection des lignes et l'inversion des boutons ne me posent pas de problèmes, mais je n'arrive pas à récupérer de signal lorsque "espace" ou "entrée" est utilisé. Remarquez que j'y arrive avec "delete".

    Comprenant que ces touches étaient en quelque sorte réservée au signal "row_activated", j'ai alors voulu utilisé ce signal. Sauf que juste avant l'envoie de ce signal, c'est la dernière ligne sélectionnée qui reste sélectionnée. Les autre devenant donc non-sélectionnées.

    Auriez-vous une idée pour soit intercepté les touches "espace" et "entrée" avant l'activation d'une ligne, ou au moins conserver ma sélection en l'état afin de pouvoir utiliser "row_activated" ?

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 8
    Points : 7
    Points
    7
    Par défaut
    A force d'explorer les fichiers de la lib gtk, j'ai fini par trouvé que l'appui sur "entrée" ou "espace" émet un signal "select-cursor-row" :
    Code gtktreeview.c:1200 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    gtk_binding_entry_add_signal (binding_set, GDK_Return, 0, "select-cursor-row", 1,
    				G_TYPE_BOOLEAN, TRUE);
    Code gtktreeview.c:1059 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
      tree_view_signals[SELECT_CURSOR_ROW] =
        g_signal_new (I_("select-cursor-row"),
    		  G_TYPE_FROM_CLASS (object_class),
    		  G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
    		  G_STRUCT_OFFSET (GtkTreeViewClass, select_cursor_row),
    		  NULL, NULL,
    		  _gtk_marshal_BOOLEAN__BOOLEAN,
    		  G_TYPE_BOOLEAN, 1,
    		  G_TYPE_BOOLEAN);

    Le problème c'est que le signal est connecté à une fonction privée qu'il ne m'est donc pas possible de masquer (enfin en tout cas je ne le pense pas):
    Code gtktreeview.c:559 : Sélectionner tout - Visualiser dans une fenêtre à part
    class->select_cursor_row = gtk_tree_view_real_select_cursor_row;
    Code gtktreeview.c:261 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    static gboolean gtk_tree_view_real_select_cursor_row      (GtkTreeView     *tree_view,
    							   gboolean         start_editing);

    Pensez-vous qu'il soit possible de désactiver le signal envoyé par les touches ?
    Et si vous avez une solution qui fonctionne avec gtkmm ce serait le top

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 8
    Points : 7
    Points
    7
    Par défaut
    Je viens d'essayer ceci pour court-circuiter l'émission du signal, mais ça n'a pas l'air de fonctionner
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Treeview_Special::Treeview_Special() : Gtk::TreeView()
    {
        GtkBindingSet* p_binding_set = gtk_binding_set_find("GtkTreeView");
        gtk_binding_entry_remove(p_binding_set, GDK_Return, (GdkModifierType) 0);
        gtk_binding_entry_remove(p_binding_set, GDK_ISO_Enter, (GdkModifierType) 0);
        gtk_binding_entry_remove(p_binding_set, GDK_KP_Enter, (GdkModifierType) 0);
        gtk_binding_entry_remove(p_binding_set, GDK_space, (GdkModifierType) 0);
        gtk_binding_entry_remove(p_binding_set, GDK_KP_Space, (GdkModifierType) 0);
        gtk_binding_entry_remove(p_binding_set, GDK_space, GDK_SHIFT_MASK);
        gtk_binding_entry_remove(p_binding_set, GDK_KP_Space, GDK_SHIFT_MASK);
    }
    Bien que ce soit du gtkmm, les fonctions appelée sont en gtk++.
    Je suis toujours preneur d'une solution

    Edit : en fait ça à l'air d'avoir un impact sur la touche espace, dont le fonctionnement est à présent modifié, mais pas sur les touches entrée

    Edit 2 : finalement ça semble fonctionner. C'est la fonction de recherche "search" qui reprenait la main. Il ne me reste donc qu'a intercepter les touches en masquant le key_press_event.

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

Discussions similaires

  1. action sur une sélection multiple dans un DBGRID
    Par tarmo57 dans le forum Débuter
    Réponses: 3
    Dernier message: 09/09/2012, 14h16
  2. Lancer une procédure avec "Worksheet_Change" sur une sélection multiple
    Par man_coef dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 20/06/2008, 11h29
  3. Problème d'apostrophe sur une sélection
    Par _Jnie_ dans le forum DB2
    Réponses: 14
    Dernier message: 22/12/2006, 16h01

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