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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    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 GtkUIManager et radioItem
    Bonjour

    liberforce vient de me signaler que GtkItemFactoryEntry est obsolète et que je dois utiliser GtkUIManager. Je regarde comment faire ce que j'avais commencé à faire :
    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
    static GtkItemFactoryEntry MenuItem[] = {
        { "/_Fichier", NULL, NULL, 0, "<Branch>" },
        { "/Fichier/_Nouveau", NULL, NULL, 0, "<StockItem>", GTK_STOCK_NEW },
        { "/Fichier/_Ouvrir", NULL, NULL, 0, "<StockItem>", GTK_STOCK_OPEN },
        { "/Fichier/Enregi_strer", "<ctrl>S", NULL, 0, "<StockItem>", GTK_STOCK_SAVE },
        { "/Fichier/_Fermer", "<ctrl>F", NULL, 0, "<StockItem>", GTK_STOCK_CLOSE },
        { "/Fichier/Sep1", NULL, NULL, 0, "<Separator>" },
        { "/Fichier/_Quitter", NULL, 0, 1, "<StockItem>", GTK_STOCK_QUIT},
        { "/_Tirage", NULL, NULL, 0, "<Branch>" },
        { "/Tirage/_Choix du mode de tirage", "<ALT>C", NULL, 0, "<Branch>",  },
        { "/Tirage/Choix du mode de tirage/3 dès 6", NULL, print_selected, _3D6, "<RadioItem>",},
        { "/Tirage/Choix du mode de tirage/Meilleurs de 4 dès 6", NULL, print_selected, _4D6, "/Tirage/Choix du mode de tirage/3 dès 6",  },
        { "/Tirage/Choix du mode de tirage/Meilleurs de 5 dès 6", NULL, print_selected,_5D6, "/Tirage/Choix du mode de tirage/3 dès 6",  },
        { "/Tirage/Choix du mode de tirage/Meilleurs de 6 fois 3 dès 6",NULL, print_selected, _3D6x6, "/Tirage/Choix du mode de tirage/3 dès 6", },
        { "/Tirage/Choix des _Minima", "<ALT>M", NULL, 0, "<StockItem>",  },
        { "/_?", NULL, NULL, 0, "<Branch>" },
        { "/?/_A propos de...", "<CTRL>A", explication, 0, "<StockItem>", GTK_STOCK_HELP}
    };
    [...]
      gtk_item_factory_create_items(pItemFactory, iNbMenuItem, MenuItem, (gpointer)param);
    Je commence par un premier problème : faire des boutons radios. Il y avait aussi des checkbox qui m'intéressaient...
    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
    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
    Je ne sais pas s'ils utilisent des boutons radio, mais tu peux jeter un coup d'oeil à ce tutoriel:
    http://live.gnome.org/GnomeLove/UIManagerTutorial

  3. #3
    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 ne pense pas

    J'ai trouvé ça : http://gtk.developpez.com/cours/gtk2/Gtk.Les.menus.php .
    Ça donne l'impression d'une grosse machine avec des tâches répétitives qu'on devrait pouvoir automatiser.
    C'est ce que faisait GtkItemFactoryEntry et c'est ce que fait GtkUIManager. Je serais surpris de devoir tout faire à la main ! S'il n'existe rien d'officiel, je serais surpris que personne, aucun projet n'ait fait le sien !
    D'un autre côté, je serais surpris que GtkUIManager ne gère ni les bouton radio ni les checkbox !
    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
    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
    A priori il faut regarder du côté de GtkActionGroup, et en particulier gtk_action_group_add_radio_actions.

    Si j'ai bien compris:
    1. Tu crées des GtkActionGroup
    2. Tu y insères ce que tu veux comme actions avec la fonction qui va bien: gtk_action_group_add_actions, gtk_action_group_add_radio_actions, gtk_action_group_add_toggle_actions
    3. Les noms des actions doivent correspondre entre le xml et ta définition des actions groups.

    Je pense aussi que le nom que tu as donné au groupe lors de sa création est utilisé pour savoir où l'intégrer dans les menus. Si tu as une balise placeholder avec un nom identique à celui de ton groupe, il devrait être intégré tel quel.

    Reprends le tutoriel, et regarde comment sont faits les action groups.

  5. #5
    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 vu un developpeur gtk, il m'a conseillé cette page que je regarderai demain : http://library.gnome.org/devel/gtk/s...omeuiinfo.html
    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. #6
    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'arrive à faire mes menus...
    Maintenant il faudrait que j'arrive à trouver la valeur de l'item sélectionné !

    Il me semble que c'est gtk_radio_action_get_current_value que je dois utiliser. Le paramètre est l'item sélectionné. Il faut que je cherche comment trouver l'item sélectionné.
    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
    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
    Encore...

    Si je rajoute les lignes suivates à la main du main, je parcours 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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
      GList * gl=gtk_action_group_list_actions (p_actionGroup),*k;
      //gchar *aname = gtk_action_get_name((GtkAction *) gl->next);
     
      for (k = gl; k != NULL; k = g_list_next(k))
      {
                    gchar *action_label;
                    gchar *action_name;
                    gchar *action_stock;
                    gchar action_active;
                    GtkAction *action;
                    action = GTK_ACTION(k->data);
                    g_object_get(action,
                                 "label",    &action_label,
                                 "name",     &action_name,
                                 "stock-id", &action_stock,
                                 NULL);
                    if (strcmp(action_name,"guerrier")==0)
                    {
                        //g_object_get(action,"is_active",&action_active,NULL);
                        printf("%hu\n",gtk_toggle_button_get_active((GtkToggleButton *)action));
                    }
                    if (strcmp(action_name,"barde")==0)
                    {
                        //g_object_get(action,"is_active",&action_active,NULL);
                        printf("%hu\n",gtk_toggle_button_get_active((GtkToggleButton *)action));
                    }
                    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);
     
      }
    Mais, je ne trouve pas (encore) comment trouver l'état des boutons !
    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...

  8. #8
    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...

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