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 :

Article sur les menus GTK avec GtkUiManager


Sujet :

GTK+ avec C & C++

  1. #1
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2003
    Messages
    5 597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 597
    Points : 7 832
    Points
    7 832
    Par défaut Article sur les menus GTK avec GtkUiManager
    Bonjour

    C'est ici que j'attends vos commentaires sur mon article : http://troumad.developpez.com/C/gtk/gtk_ui_manager/

    Je ne suis pas un expert en GTK+, mais comme je n'ai rien trouvé sur le sujet, je me suis fait ma documentation que je partage. À vous de m'aider à 'améliorer !
    Modérateur Mageia/Mandriva Linux
    Amicalement VOOotre
    Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
    Mes tutoriels : xrandr, algorigramme et C, xml et gtk...

  2. #2
    Membre du Club
    Homme Profil pro
    Chercheur
    Inscrit en
    Mars 2009
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Chercheur

    Informations forums :
    Inscription : Mars 2009
    Messages : 61
    Points : 54
    Points
    54
    Par défaut Terrible merci !
    Vraiment pratique tout ça merci !

    Une petite question, sais tu si il est possible d'insérer un widget 'non-standard' dans
    un menu ?
    Imaginons par exemple que je souhaite insérer un un GtkScale dans un menu contextuel ... est-ce possible ?

    Encore merci pour le tuto.

    S.

  3. #3
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2003
    Messages
    5 597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 597
    Points : 7 832
    Points
    7 832
    Par défaut
    Je n'en sais rien du tout... Essaie et complète mon article

    Comme je l'ai dit dans ma présentation, je ne suis pas un expert ! J'ai voulu faire quelque choses, j'y suis arrivé sans avoir trouvé la doc que je cherchais, je l'ai donc faite.
    Modérateur Mageia/Mandriva Linux
    Amicalement VOOotre
    Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
    Mes tutoriels : xrandr, algorigramme et C, xml et gtk...

  4. #4
    Membre du Club
    Homme Profil pro
    Chercheur
    Inscrit en
    Mars 2009
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Chercheur

    Informations forums :
    Inscription : Mars 2009
    Messages : 61
    Points : 54
    Points
    54
    Par défaut Re
    Salut,
    j'ai trouvé une piste, GtkMenuItem étant un descendant de GtkContainer il est possible
    d'utiliser l'instruction gtk_container_add ():

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ..
    GtkWidget * menuitem = gtk_menu_item_new ();
    GtkWidget * vscale = gtk_vscale_new_with_range (1.0, 100.0, 1.0); 
    gtk_container_add (GTK_CONTAINER(menu_item), vscale);
    ...
    Cela fonctionne et le widget vscale apparait alors dans le menu, un hic subsiste ...
    ... et de taille ... le widget perd sa fonctionnalité (impossible de le rendre sensible)
    et se comporte comme un simple bouton soit un simple GtkMenuItem ...

    ... du coup nouvelle question: est il possible de rendre sa sensibilité au widget et le cas échéant comment ?

  5. #5
    Membre confirmé
    Profil pro
    Retraité
    Inscrit en
    Novembre 2009
    Messages
    329
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2009
    Messages : 329
    Points : 606
    Points
    606
    Par défaut
    C'est une bonne idée de faire un petit guide pour les gens qui, comme moi, ont du mal à maîtriser la complexité de Gtk.

    Je viens de me poser la question "comment rajouter une entrée dans le menu contextuel d'une GtkEntry" et au vu de la doc et de google, cela ne me sautait pas aux yeux.
    Grace à liberforce j'ai pris la bonne direction, d'où le petit programme de test qui suit. C'est tout simple, mais je pense qu'un petit paragraphe sur la question pourrait être utile dans ton guide.
    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
    64
    65
    66
    67
     
    /* Comment rajouter une entrée dans le menu contextuel d'une GtkEntry
     *
     * Principe:
     *   on connecte le signal "populate-popup" à un callback menu_populate_CB()
     *      qui crée la nouvelle entrée avec gtk_menu_shell_append()
     *   et menu_populate_CB() connecte cette dernière à l'action souhaitée.
     *   
     */
     
    #include <stdlib.h>
    #include <string.h>
    #include <gtk/gtk.h>
     
     
    /* Ce callback est appelé quand le nouvel item "essai" 
     * est selectionné dans le menu
     */
    void essai_CB (GtkMenuItem *item ,gpointer p)
    {
      GtkEntry *entry = GTK_ENTRY (p);
      gchar str[] = "texte en plus";
      gint tmp_pos;
      tmp_pos = entry->current_pos;
      gtk_editable_insert_text  (GTK_EDITABLE (entry), str, strlen (str), &tmp_pos);
      gtk_editable_set_position (GTK_EDITABLE (entry), tmp_pos);
     
    }
     
    /* Ce callback rajoute une entrée "essai" dans le menu de "entry"
     * et connecte essai_CB  quand le nouvel item est sélectionné
     */
    void menu_populate_CB (GtkEntry *entry ,GtkMenu *menu ,gpointer p)
    {
      gchar str[] = "essai";
      GtkWidget *nouvel_item = gtk_menu_item_new_with_label (str);
      gtk_menu_shell_append (GTK_MENU_SHELL (menu) ,nouvel_item);
      gtk_widget_show (nouvel_item);
      g_signal_connect (nouvel_item ,"activate" ,G_CALLBACK (essai_CB) ,entry);
    }
     
    int main( int argc,  char *argv[] )
    {
      GtkWidget *window = NULL;
      GtkWidget *w_entry;
     
    /* Initialisation */
      gtk_init (&argc, &argv);
     
      /* Main window */
      window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
     
      /* Creation de la GtkEntry */
      w_entry = gtk_entry_new ();
      gtk_entry_set_width_chars (GTK_ENTRY (w_entry) ,50);
      gtk_container_add (GTK_CONTAINER (window), w_entry);
     
     
      g_signal_connect (w_entry ,"populate-popup" ,G_CALLBACK (menu_populate_CB) ,NULL);
      g_signal_connect (window  ,"destroy" 	      ,G_CALLBACK (gtk_main_quit) ,NULL);
     
      /*  Affichage et boucle principale */
      gtk_widget_show_all (window);
      gtk_main ();
     
      return (EXIT_SUCCESS);
    }
    GraceGTK: a plotting tool at https://sourceforge.net/projects/gracegtk

  6. #6
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2003
    Messages
    5 597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 597
    Points : 7 832
    Points
    7 832
    Par défaut
    Je regarde vite ton document...

    Tu as en gros utilisé les mêmes commandes que moi au http://troumad.developpez.com/C/gtk/..._manager/#L6.1 Tu penses que je devrais plus insister sur ces commandes ?
    Tu utilises gtk_widget_show . C'est obligatoire dans ton cas ? Moi, je n'en ai pas besoin.

    Mais, l'environnement n'est pas le même : tu n'utilise pas gtk_ui_manager ! Si ? Dans ma routine, il y a en plus le besoin de trouver l'entrée du menu par son chemin généré par gtk_ui_manager.
    Modérateur Mageia/Mandriva Linux
    Amicalement VOOotre
    Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
    Mes tutoriels : xrandr, algorigramme et C, xml et gtk...

  7. #7
    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
    Points : 2 002
    Points
    2 002
    Par défaut
    Citation Envoyé par troumad Voir le message
    Mais, l'environnement n'est pas le même : tu n'utilise pas gtk_ui_manager ! Si ? Dans ma routine, il y a en plus le besoin de trouver l'entrée du menu par son chemin généré par gtk_ui_manager.
    Effectivement, mais le titre du fil de discussion est trompeur "Article sur les menus GTK", tout simplement parce que GtkUiManager gère les menus, mais aussi les barres d'outils. Son exemple a sa place si l'on considère que l'on parle de la gestion des menus en GTK, mais pas si l'on parle de les gérer avec GtkUiManager...
    Documentation officielle GTK+ 3:
    GTK en C, GTK en Python

    Tutoriels GTK+ 3:
    GTK en C, GTK en Python

    Tutoriels par l'exemple (platform-demos):
    GTK (tous langages)

  8. #8
    Membre confirmé
    Profil pro
    Retraité
    Inscrit en
    Novembre 2009
    Messages
    329
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2009
    Messages : 329
    Points : 606
    Points
    606
    Par défaut
    liberforce a raison: ton article est très bien si on utilise systématiquement le GtkUiManager, mais comme je ne l'utilise que pour la menubar principale, je n'avais pas vu comment il pouvait me servir dans le contexte qui m'intéresse.
    GraceGTK: a plotting tool at https://sourceforge.net/projects/gracegtk

  9. #9
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2003
    Messages
    5 597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 597
    Points : 7 832
    Points
    7 832
    Par défaut
    Vu que je mélange gtkuimanager et l'autre méthode, je ressens aussi une limite... Je vais essayer de rajouter un mot ou deux dans mon article à ce sujet. Mais, pour le moment, j'expérimente.
    Modérateur Mageia/Mandriva Linux
    Amicalement VOOotre
    Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
    Mes tutoriels : xrandr, algorigramme et C, xml et gtk...

  10. #10
    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
    Points : 2 002
    Points
    2 002
    Par défaut
    Sinon je ne sais pas si tu as évoqué le tutoriel GtkUIManager sur le wiki GNOME ?
    Documentation officielle GTK+ 3:
    GTK en C, GTK en Python

    Tutoriels GTK+ 3:
    GTK en C, GTK en Python

    Tutoriels par l'exemple (platform-demos):
    GTK (tous langages)

  11. #11
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2003
    Messages
    5 597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 597
    Points : 7 832
    Points
    7 832
    Par défaut
    Je ne sais même pas si je l'ai regardé.

    Il faudra que je regarde de plus prêt s'il y a des choses de plus. Pour le moment, j'ai plein de boulot et mon serveur m'a laché de WE => je travaille à en remettre un en état (en plus de boulot que j'ai é faire et que je ne fais donc pas )
    Modérateur Mageia/Mandriva Linux
    Amicalement VOOotre
    Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
    Mes tutoriels : xrandr, algorigramme et C, xml et gtk...

  12. #12
    Futur Membre du Club
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Juin 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations professionnelles :
    Activité : Auditeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2011
    Messages : 5
    Points : 7
    Points
    7
    Par défaut
    Joli travail.
    Merci.

  13. #13
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2003
    Messages
    5 597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 597
    Points : 7 832
    Points
    7 832
    Par défaut
    Merci !
    Si tu as une remarque à faire pour l'améliorer, les suivants n'en seront que plus heureux.
    Modérateur Mageia/Mandriva Linux
    Amicalement VOOotre
    Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
    Mes tutoriels : xrandr, algorigramme et C, xml et gtk...

Discussions similaires

  1. Aide sur les menus avec gtkuimanager
    Par troumad dans le forum Contribuez
    Réponses: 6
    Dernier message: 14/12/2010, 11h48
  2. Réponses: 0
    Dernier message: 12/09/2010, 22h02
  3. Réponses: 2
    Dernier message: 07/05/2010, 22h54
  4. [XSLT] Bug IE sur les menus déroulant avec
    Par cassy dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 01/05/2007, 12h51

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