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 :

GtkUIManager et radioItem


Sujet :

GTK+ avec C & C++

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

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 607
    Par défaut
    Je pense y être arrivé !


    Voici le code sur lequel je travaille :
    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
    void supprime(char * ch,gpointer param)
    {
        GtkActionGroup *act_gr = *((GtkActionGroup **)param+3);
        GList * gl=gtk_action_group_list_actions (act_gr),*k;
        gchar *action_label;
        gchar *action_name;
        gchar *action_stock;
        gchar action_active;
        GtkAction *action;
     
      for (k = gl; k != NULL; k = g_list_next(k))
      {
     
      /*gp=k->data;
     
      classe = G_OBJECT_CLASS (g_type_class_peek (G_OBJECT_TYPE(gp)));
      specs = g_object_class_list_properties (classe, &n_specs);
     
      for (i=0;i<n_specs;i++)
      {
          if (strcmp(specs[i]->name,"guerrier")==0)
     
      }*/
     
     
     
     
     
                    action = GTK_ACTION(k->data);
                    g_object_get(action,
                                 "label",    &action_label,
                                 "name",     &action_name,
                                 "stock-id", &action_stock,
                                 NULL);
                    if (strcmp(action_name,ch)==0)
                    {
                        g_object_get(action,"active",&action_active,NULL);
                        printf("deb active %s : %hu\n",action_name,action_active);
                        g_object_set(action,"active",0,NULL);
                        g_object_get(action,"active",&action_active,NULL);
                        printf("fin active %s : %hu\n",action_name,action_active);
                    }
                    /*printf("label :%s , name : %s , stock : %s\n",action_label,action_name,action_stock);*/
                    g_free(action_stock);
                    g_free(action_name);
                    g_free(action_label);
     
      }
     
    }
    Il est en test, je ferais un petit mot dessus quand j'aurais un peu plus compris. Son but est de modifier l'état l'état du bouton dont le nom est dans ch. Pour le moment, j'affiche aussi l'état avant et après.
    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. #22
    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
    Citation Envoyé par troumad Voir le message
    Bin oui, c'est lui même, je suis aussi admin sur les forums francophones GNOME . Bon, effectivement, je suis allé un peu vite, GtkIconFactory n'a pas l'air déprécié, mais en revanche cela n'a pas l'air adapté à ton cas. C'est utilisé pour les thèmes d'icônes. Tu as besoin d'utiliser des icônes standard (stock items), ou des trucs bien à toi ?

    Et tu utilises quelle version de GTK ? Les icônes dans les boutons ont été désactivées il y a une ou 2 versions, il faut les réactiver dans la base gconf sous Linux, ou il y a un fichier à éditer sous windows.

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

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 607
    Par défaut
    Je me suis fais des petites icônes particulières : des dès en nombres différents. J'aimerai pouvoir les utiliser dans certains de mes menus.
    J'utilise "lib64gtk+-devel-1.2.10" pour développer sous Mandriva Linux Cooker (bientôt Mageia Cauldron).
    Je veux bien réactiver mes boutons, mais je ne sais où est gconf.

    Pour le moment, je regrette d'avoir effacer mon code qui listait les propriétés d'un objet... Il va falloir que je le refasse
    C'est promis, je le posterais ici avant de l'effacer ! J'en ai besoin pour mes boutons radios qui ne marchent pas comme les cases à cocher que je suis arrivé à faire marcher !
    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. #24
    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
    Citation Envoyé par troumad Voir le message
    Je me suis fais des petites icônes particulières : des dès en nombres différents. J'aimerai pouvoir les utiliser dans certains de mes menus.
    J'utilise "lib64gtk+-devel-1.2.10" pour développer sous Mandriva Linux Cooker (bientôt Mageia Cauldron).
    Je veux bien réactiver mes boutons, mais je ne sais où est gconf.

    Pour le moment, je regrette d'avoir effacer mon code qui listait les propriétés d'un objet... Il va falloir que je le refasse
    C'est promis, je le posterais ici avant de l'effacer ! J'en ai besoin pour mes boutons radios qui ne marchent pas comme les cases à cocher que je suis arrivé à faire marcher !
    Je suis donc très fier de t'annoncer que lib64gtk+-devel-1.2.10 c'est du GTK1, et que ce n'est certainement pas ce que tu utilises .

    Sous Mandriva Linux/cooker, le paquet de développement en GTK2 c'est lib64gtk+2.0-devel-2.22.0-1mdv2011.0.x86_64.rpm , et pour du GTK3 c'est lib64gtk+3.0-devel-2.90.7-1mdv2011.0.x86_64.rpm (oui, 2.90 c'est une 3.0 en préparation). Désinstalle tout ce qui concerne GTK1.

    Pour gconf, tu n'as qu'à lancer gconf-editor, qui est l'application graphique qui te permet de te balader dans gconf et cocher la clé /desktop/gnome/interface/buttons_have_icons. Tu peux aussi utiliser la commande suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gconftool-2 --type bool --set /desktop/gnome/interface/buttons_have_icons true

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

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 607
    Par défaut
    Oups...

    Il est vrai que en plus j'ai entendu parlé de Gnome3 ! Je ne vais pas me fatiguer à faire une étude poussée de gtk2 quand gtk3 va sortir !
    Comment savoir avec quelle version de gtk travaille ?
    Comment dire à code::blocks de travailler avec gtk3 ?
    Où trouver la doc de gtk 3 ? Quelles sont les différences avec gtk 2 ?

    Je viens de desinstaller gtk1-devel : ça tourne comme avant => je programmais en gtk 2.

    Il faut mettre quoi comme include pour gtk3 :
    #include <gtk/gtk.h>
    ou
    #include <gtk3/gtk/gtk.h>

    Pour finir avec les icônes : aucune réaction à ta manoeuvre ! Faut-il que je me déconnecte pour que ça prenne effet ?
    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...

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

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 607
    Par défaut
    Citation Envoyé par troumad Voir le message
    JPour le moment, je regrette d'avoir effacer mon code qui listait les propriétés d'un objet... Il va falloir que je le refasse
    Le voilà :
    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
      GList * gl=gtk_action_group_list_actions (p_actionGroup),*k; /* p_actionGroup : le menu */
      //gchar *aname = gtk_action_get_name((GtkAction *) gl->next);
      gchar *action_name;
      gchar action_active;
      GtkAction *action;
      unsigned char methode=_5D6;
     
     
     
     
      for (k = gl; k != NULL; k = g_list_next(k))
      {
     
                    action = GTK_ACTION(k->data);
                    g_object_get(action,
                                 "name",     &action_name,
                                 NULL);
                    if (strcmp(action_name,"_3D6")==0)
                    {
                        guint nb_s,f;
                        GParamSpec ** l_spec=g_object_class_list_properties(G_OBJECT_GET_CLASS(action),&nb_s);
                        for (f=0;f<nb_s;f++)
                        {
                            printf("%s \n",l_spec[f]->name);
                        }
                    }
                    printf("%s =<>= ",action_name);
                    g_free(action_name);
      }
    Voici donc les propriétés d'un bouton radio de mon menu :
    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
    label 
    short-label 
    tooltip 
    stock-id 
    icon-name 
    gicon 
    visible-horizontal 
    visible-vertical 
    visible-overflown 
    is-important 
    hide-if-empty 
    sensitive 
    visible 
    action-group 
    always-show-image 
    draw-as-radio 
    active 
    value 
    group 
    current-value
    Ceci me permet donc de trouver quel est le bouton actif du groupe :
    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
    for (k = gl; k != NULL; k = g_list_next(k))
      {
     
                    action = GTK_ACTION(k->data);
                    g_object_get(action,
                                 "name",     &action_name,
                                 NULL);
                    if (strcmp(action_name,"_3D6")==0)
                    {
                        g_object_get(action,"active",&action_active,NULL);
                        if (action_active)
                          methode=_3D6;
                    }
                    if (strcmp(action_name,"_4D6")==0)
                    {
                        g_object_get(action,"active",&action_active,NULL);
                        if (action_active)
                          methode=_4D6;
                    }
                    if (strcmp(action_name,"_5D6")==0)
                    {
                        g_object_get(action,"active",&action_active,NULL);
                        if (action_active)
                          methode=_5D6;
                    }
                    if (strcmp(action_name,"_3D6x6")==0)
                    {
                        g_object_get(action,"active",&action_active,NULL);
                        if (action_active)
                          methode=_3D6x6;
                    }
                    if (strcmp(action_name,"_4D5p3")==0)
                    {
                        g_object_get(action,"active",&action_active,NULL);
                        if (action_active)
                          methode=_4D5p3;
                    }
                    g_free(action_name);
      }
    Mais... ( je ne suis jamais content ! )
    Le mieux serait de trouver le groupe et de voir quel est l'élément sélectionné dans le groupe de bouton radio ! Avec par exemple, la valeur qu'il renvoie.
    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. #27
    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
    Citation Envoyé par troumad Voir le message
    Oups...

    Il est vrai que en plus j'ai entendu parlé de Gnome3 ! Je ne vais pas me fatiguer à faire une étude poussée de gtk2 quand gtk3 va sortir !
    GTK3 est un GTK2 nettoyé et où tout les composants dépréciés disparaissent. Du code correct GTK2 est directement compatible GTK3. Voir http://www.developpez.net/forums/d81...te-gtkp-3-0-a/

    Citation Envoyé par troumad Voir le message
    Comment savoir avec quelle version de gtk travaille ?
    L'appel à pkg-config précise le module à utiliser. Pour GTK2, c'est gtk+-2.0. Voir pkg-config --help et http://library.gnome.org/devel/gtk/s...compiling.html

    Citation Envoyé par troumad Voir le message
    Comment dire à code::blocks de travailler avec gtk3 ?
    Aucune idée, je n'utilise pas code::blocks.

    Citation Envoyé par troumad Voir le message
    Où trouver la doc de gtk 3 ? Quelles sont les différences avec gtk 2 ?
    Pour l'instant, c'est ici: http://library.gnome.org/devel/gtk/unstable/
    Tu peux comparer comment compiler en GTK3:
    http://library.gnome.org/devel/gtk/u...compiling.html

    Citation Envoyé par troumad Voir le message
    Je viens de desinstaller gtk1-devel : ça tourne comme avant => je programmais en gtk 2.
    Logique, car sinon tu aurais eu un paquet d'erreurs sur des symboles qui n'existaient pas.

    Citation Envoyé par troumad Voir le message
    Il faut mettre quoi comme include pour gtk3 :
    #include <gtk/gtk.h>
    ou
    #include <gtk3/gtk/gtk.h>
    #include <gtk/gtk.h>
    C'est pkg-config qui se chargera du reste. Par exmple avec GTK2:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    [liberforce@donald ~]$ pkg-config gtk+-2.0 --cflags
    -pthread -I/usr/include/gtk-2.0 -I/usr/lib/gtk-2.0/include -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng12
    Citation Envoyé par troumad Voir le message
    Pour finir avec les icônes : aucune réaction à ta manoeuvre ! Faut-il que je me déconnecte pour que ça prenne effet ?
    Je ne pense pas. Le problème vient peut être d'ailleurs alors.

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

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 607
    Par défaut
    Crois-tu que si je désinstalle gtk2-devel, je passerais automatiquement en gtk3 ?
    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...

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

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 607
    Par défaut
    À partir de l'action parcourue avant et avec ch, la chaine qui a le nom de l'item à bouger :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (strcmp(action_name,ch)==0) g_object_set(action,"active",1,NULL);
    Par contre, je maintient, qu'il serait plus simple d'optenir un pointeur sur la liste des boutons radios lorsqu'on la crée en faisant le menu !
    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. #30
    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
    Citation Envoyé par troumad Voir le message
    Crois-tu que si je désinstalle gtk2-devel, je passerais automatiquement en gtk3 ?
    Cela n'a pas d'intérêt pour l'instant, tant que GTK3 n'est pas disponible. Si tu compiles ton application en GTK2 avec les flags spécifiés pour dans les liens que je t'ai donné (de mémoire, ceux pour GSEAL, tous les *_DISABLE_DEPRECATED, et les *_SINGLE_INCLUDES), elle fonctionnera en GTK2. Mais il te suffira juste de la recompiler avec gtk3-devel pour qu'elle soit compatible GTK3. Et si tu as les 2 d'installés, tu peux utiliser pkg-config pour choisir entre l'un et l'autre lequel utiliser.

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

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 607
    Par défaut
    J'ai essayé de configurer code::blocks avec les options que tu as indiqué, ça a marché !
    http://www.developpez.net/forums/d99...3/#post5548730
    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. #32
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2003
    Messages
    5 607
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 607
    Par défaut
    À force de disgresser, je fais plein de progrès !
    J'en suis à essayer de mettre par écrit toutes mes trouvailles pour pouvoir faire peut-être un article. Vous pouvez trouvez l'état actuel ici : http://troumad.org/OOo/menu.odt et le programme que je fais : http://troumad.org/OOo/perso.zip (je crois qu'il fonctionne dans son état actuel).

    Pour le moment, j'en reviens au sujet même du fil : les radioitems. J'essaie de comprendre la fonction callback qui leur est associée. Son format est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void print_selected(GtkRadioAction *action, GtkRadioAction *current, gpointer param)
    C'est quoi la différence entre les deux premiers paramètres ?
    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. Utilisation de GtkUIManager
    Par gege2061 dans le forum Contribuez
    Réponses: 7
    Dernier message: 09/12/2013, 17h04
  2. RadioItem et callback
    Par asma.r dans le forum GTK+ avec C & C++
    Réponses: 1
    Dernier message: 12/10/2010, 11h01
  3. GtkUIManager sans Stock_ID
    Par cypher.sephiroth dans le forum GTK+ avec C & C++
    Réponses: 0
    Dernier message: 23/09/2009, 11h26
  4. Arguments des fonctions de callback avec GTKUIManager
    Par mathedit dans le forum GTK+ avec C & C++
    Réponses: 2
    Dernier message: 10/05/2009, 23h26
  5. Utilisation de GtkUIManager, quelques problèmes
    Par bit_o dans le forum GTK+ avec C & C++
    Réponses: 6
    Dernier message: 01/11/2007, 19h22

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