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

Contribuez Discussion :

Les menus avec et sans glade


Sujet :

Contribuez

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 Les menus avec et sans glade
    Bonjour

    Est-ce vous pensez qu'il serait une bonne idée de développer mon pense-bête que je complète petit à petit pour en faire un article :

    1) Mettre une fenêtre «*Niveaux supérieurs->Fenêtres*» («*Toplevels->Window*») sur l'écran principal.
    2) Poser un contenant au choix sur la fenêtre pouvant contenir un menu (si le choix ne convient pas*: le supprimer et recommencer) .Je choisis «*boite*» («*Box*») dans «*Conteneur*» («*containers*») car la hauteur et la largeur s'adaptent automatiquement. Si j'ai besoin d'un autre conteneur pour placer mes futurs items, je les mettrai dans une case de la boite qui ne peut avoir que deux cases*: celle du menu et celle qui contient le conteneur que vous souhaitez avoir.
    3) Je place le menu dans la boite du haut*: «*Barre de menu*» dans «*Conteneur*». Vous pouvez la mettre en bas si vous préférez, voir même à gauche ou à droite si vous modifiez la boite Général->Orientation->Horizontal.
    4) Tester le système de fenêtres
    a) Le programme C qui correspond*:
    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
    #include <stdio.h> 
    #include <stdlib.h> 
    #include <glib.h> 
    #include <gtk/gtk.h> 
     
    struct widgets 
    { 
    	GtkWidget *window; 
    }; 
     
    void cb_quit(void); 
     
    static void get_widgets(struct widgets *widgets, GtkBuilder *builder); 
     
    int main(int argc, char **argv) 
    { 
    	GtkBuilder *builder; 
    	GError *error = NULL; 
    	struct widgets *widgets; 
     
    	gtk_init(&argc, &argv); 
     
    	builder = gtk_builder_new(); 
    	if (!gtk_builder_add_from_file(builder, "test_menu1.glade", &error)) 
    	{ 
    		g_warning("%s", error->message); 
    		exit(EXIT_FAILURE); 
    	} 
     
    	widgets = g_slice_new(struct widgets); 
    	get_widgets(widgets, builder); 
    	gtk_builder_connect_signals(builder, widgets); 
    	g_object_unref(G_OBJECT(builder)); 
     
    	g_signal_connect (widgets->window, "destroy", G_CALLBACK (cb_quit), NULL); 
            gtk_widget_show(widgets->window); 
    	gtk_main(); 
     
    	g_slice_free(struct widgets, widgets); 
     
    	exit(EXIT_SUCCESS); 
    } 
     
    void cb_quit(void) 
    { 
    	gtk_main_quit(); 
    } 
     
    static void get_widgets(struct widgets *widgets, GtkBuilder *builder) 
    { 
    	widgets->window = GTK_WIDGET(gtk_builder_get_object(builder,"window1")); 
    }
    Le makefile*:
    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
    CC=gcc 
     
     CFLAGS= -Wshadow  -Winit-self  -Wredundant-decls  -Wcast-align  -Wundef  -Wfloat-equal  -Winline  -Wunreachable-code  -Wmissing-declarations  -Wmissing-include-dirs  -Wswitch-enum  -Wswitch-default  -Wmain  -Wall  `pkg-config gtk+-3.0 –cflags` -export-dynamic
     
      LDFLAGS=`pkg-config gtk+-3.0 –libs` -export-dynamic 
     
       EXEC=test 
       SRC= $(wildcard *.c) 
    OBJ= $(SRC:.c=.o) 
     
    all: $(EXEC) 
     
    $(EXEC) : $(OBJ) 
    		$(CC) -o $@ $^ $(LDFLAGS) 
     
     
    %.o: %.c 
    		$(CC) -o $@ -c $< $(CFLAGS) 
     
    clean: 
    		rm *.o 
     
    mrproper: clean 
    		rm $(EXEC)
    La compilation*:
    L'exécution*:
    5) En l'état ça marche, mais quand je ferme la fenêtre, ça ne me rend pas la main dans la ligne de commande.
    6) Connecter les signaux
    C'est pour cela que l'option -export-dynamic est indispensable lors de la compilation. Sinon, les signaux du fichier glade n'arrivent pas à se connecter.
    a) fermer gtk après la fermeture de la fenêtre
    Il faut sélectionner la fenêtre d'origine et l'onglet Signaux->GtkWidjet->destroy. Dans gestionnaire, j'ai mis le nom de la fonction qui ferme gtk*: cb_quit .
    b) Tester un item du menu
    Je choisis le premier item du premier menu. Voici la liste des fenêtres à ouvrir*: windows1->box1->menuitem1->menu1>imagemenuitem1 . Je vais dans l'onglet signaux->activate et j'indique la fonction «*affiche*» dans le gestionnaire. Je la rajoute dans mon main*:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    void affiche(GtkWidget *p_widget, gpointer param) 
    { 
     printf("1\n"); 
     
     (void) p_widget; 
     (void) param; 
    }
    Dès que j'active le premier item du menu, j'ai un «*1*» qui s'affiche dans la ligne de commande.
    Comprendre.
    7) Lire l'arborescence du menu et des fenêtres.
    Une petite fonction à améliorer*:
    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
    void arboscence(GtkWidget * window,unsigned short niveau) 
    { 
     GList * G_List; 
     unsigned short i; 
     guint nb_s,f; 
     char espace[1024]; 
     
     G_List= gtk_container_get_children(window); 
     while (G_List) 
     { 
            for (i=0;i<niveau;i++) espace[i]=' '; 
            espace [i]=0; 
    	printf("\n%s%s\n",espace,gtk_widget_get_name(G_List->data)); 
                //if ( !GTK_IS_ACCEL_LABEL(G_List->data) && !GTK_IS_MENU_ITEM(G_List->data)  && !GTK_IS_MENU_BAR(G_List->data)   && !GTK_IS_BOX(G_List->data)  ) 
    	    {  /* trouver la liste des propriétés d'un item */ 
    		 GParamSpec ** l_spec=g_object_class_list_properties(G_OBJECT_GET_CLASS(G_List->data),&nb_s); 
    		 for (f=0;f<nb_s;f++)           /* afficher la liste des propriétés */ 
    		 { 
    		     printf("%s| %s \n",espace,l_spec[f]->name); 
    		 } 
    		 printf("%s|____________\n",espace); 
    	    } 
            if ( GTK_IS_CONTAINER(G_List->data) ) 
    		arboscence(G_List->data,niveau+1); 
    	G_List=G_List->next; 
     }
    }
    appelée comme ça*:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    printf("%s\n",gtk_widget_get_name(widgets->window)); 
    arboscence(widgets->window,1);
    8) Modifier le menu avec glade
    Dans la fenêtre où est affichée la hiérarchie des objets gtk, nous allons éditer les différents éléments du menu.
    Sur la barre de menu, ou tout élément de ce menu*: clic droit sur Menubar->Edit, onglet Hiérarchie, nous ouvrons la boite de dialogue pour travailler le menu. Un clic droit sur un élément du menu ouvre une boite de dialogue

    Ajout de boutons radio dans un menuitem
    faire un clic droit sur l'entrée du menu et choisir «*ajouter un élément fils radio*» pour entrer un item radio de plus dans le menu ou sur un item du menu «*ajouter élément radio*» pour ajouter un item près l'item courant dans le menu. Les boutons radios doivent être regroupés en famille qui ne doit avoir qu'un et qu'un seul élément sélectionné. Pour ceci, il faut sélectionner un bouton radio, dans l'onglet hiérarchie, à la propriété groupe cliquer sur le bouton de droite*: tous les boutons radios apparaissent avec une cache à cocher à gauche (sauf celui sur lequel on travaille), activer la cache d'un bouton qui est dans son groupe et valider.
    Vous pouvez aller dans la fenêtre principale de glade pour tester le groupe de bouton. Attention, il se peut qu'avant la création du groupe vous ayez sélectionné plusieurs boutons radio du groupe*: ils seront encore sélectionnés, commencez à réduire à un le nombre de boutons radios activés en cliquant sur les boutons sélectionnés.

    Menu de Fichiers récents
    Il faut rajouter un fils à un item Élément. Si cet élément ne peut pas avoir de fils, vous aurez alors une fenêtre qui s'ouvrira pour vous prévenir. Ce menu peut être mis par exemple sur un élément image ou un élément normal.
    On peut ensuite effectuer un tri sur les fichiers récents*: par défaut il n'y en a pas. Il faut sélectionner l'entrée Menu de fichiers récents (recentchoosemenu) dans la fenêtre «*inspecteur*» et ensuite dans la fenêtre «*propriétés*» choisir un filtre. S'il n'y en a pas ou si vous en voulez un nouveau cliquez sur [nouveau]. Affectez le bon filtre à votre menu.
    Après, il faut configurer le filtre. Dans la fenêtre «*inspecteur*», le filtre est apparu en bas*: cliquez dessus et confectionnez votre filtre. Le type MIME indiquera les type que vous souhaiter voir apparaître «*text/plain*» ou «*image/**» par exemple. L'entrée Motifs fera un filtre sur vos fichiers comme «**.add*» ou «**.pers*». Attention, vous afficherez les fichiers validant au moins une des conditions.

    Pour les autres éléments la manipulation est la même, mais un peu plus simple*: il n'y a pas à créer de groupe. La différence entre un «*élément image*» («*imagemenuitem*») et un «*élément normal*» («*menuitem*») est qu'on peut attribuer une image au premier un dessin qui sera soit une image prédéfinie («*élément de la collection*») ou une image personnelle («*Étiquette et image personnalisées*»).
    Quoi qu'il en soit, on peut modifier après coup le type d'entrée avec l'entrée type juste en dessous du nom.
    9) Le fichier xml généré.
    C'est un fichier xml assez facilement compréhensible et modifiable.

    10) Rajouter/modifier la configuration avec le programme.
    A ) Rajouter élément dans arborescence hors menu
    Si vous avez utilisé glade juste pour faire votre menu, vous pouvez ensuite facilement construire votre fenêtre.
    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
    G_List= gtk_container_get_children(GTK_CONTAINER(widgets->window)); 
    while ( !GTK_IS_BOX(G_List->data) ) 
    { 
      G_List=G_List->next; 
    } /* le fichier est conçu pour que le menu soit dans un vbox, en dessous, on met ce qu'on veut */ 
    if ( GTK_IS_BOX(G_List->data) ) 
    { /* ici, je mets un bouton */ 
      bouton = gtk_button_new_with_label ("test"); 
      gtk_box_pack_start (GTK_BOX (G_List->data), bouton, TRUE, TRUE, 0); 
      gtk_widget_show(bouton); 
    } 
    else 
    { 
      printf("problème\n"); 
    }
    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
    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
    Ping ?

    Je reprends un peu ce travail car j'ai un peu de temps... Mais, Est-ce que ça vaut le coup ?
    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...

  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
    Pong ?
    Toujours aucun intérêt ? je continue le travail pour moi ? Ou pour tous ?

    Bon, je viens de rajouter quelques lignes et j'en ai d'autres à rajouter suite à un petit test.
    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
    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 crois que je laisse tomber...

    En effet,
    1) Personne ne semble intéressé
    2) Je ne trouve aucune doc (français ou anglais), ni aucun exemple sur ce que je cherche à faire : modifier de façon dynamique un menu généré par glade.
    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...

  5. #5
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 308
    Billets dans le blog
    5
    Par défaut
    Houla ! La déprime te guète

    Je viens à ton secours. Pourrais-tu mettre le code source xml du fichier glade de ton application pour que je puisse tester de mon côté ?

  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'ai laisser tomber cette partie de mon programme, car je me sers surtout de l'autre...
    Ce qui m'intéresse, c'est d'avoir le principale, ou le squelette du menu en XML, puis après de pouvoir modifier/compléter des sous menus une fois que le programme est lancé avec ses propres menus venant de glade. Et là, je ne vois pas du tout comment faire. Je ne trouve aucun exemple. Peut-être que ma phobie de l'anglais ne me permet pas de tout saisir dans la doc gtk, mais je n'ai rien vu me permettant d'y arriver.
    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
    Citation Envoyé par troumad Voir le message
    L'entrée Motifs fera un filtre sur vos fichiers comme «**.add*» ou «**.pers*». Attention, vous afficherez les fichiers validant au moins une des conditions.
    Pour compléter mon aide, que faire si je souhaite que le système n'affiche que les grp ET les pers ?

    Édit : Je me réponds à moi-même : il faut remplir deux lignes dans motifs. Il me semblait que j'avais essayé, mais que ça ne marchait pas... Cette fois, j'y suis arrivé !
    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
    Membre chevronné Avatar de Gaulouis
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2015
    Messages
    252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2015
    Messages : 252
    Par défaut
    Salutations,

    De mon petit avis, j’aurais apprécié un article avec vidéo tutoriel montrant comment faire un menu polymorphe(qui change selon le contexte) avec Glade. Donc ma petite personne est intéressé par un tel tutoriel.

    J'ai réussis à trouvé des tutoriels pour le faire programmatiquement -mais là c'est casse tête-; ou avec GtkUIMAnager mais pas avec Glade.
    Et aussi une vidéo qui montre comment créer un
    mais c'est statique.

    Le scénario classique, une application charge des plugins qui enrichissent l'interface graphique donc le menu.

    Pour ce qui est des menu item dynamique comme "Fichier récente" là ça sort de mon cadre de compétences.

    Bien à vous,

  9. #9
    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
    Ce ne sera pas moi qui ferai une telle vidéo car je ne comprends pas l'intérêt de ces vidéo où j'ai l'impression de perdre mon temps devant un film lent alors qu'un écrit se parcourt plus rapidement et qu'après, on peut revenir sur les points importants plu facilement*. Mais, si tu en fais un, je pourrais le regarder pour te donner mon avis.

    * : c'est peut-être une histoire de génération et je suis peut-être vieux-jeu...
    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
    Membre chevronné Avatar de Gaulouis
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2015
    Messages
    252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2015
    Messages : 252
    Par défaut
    J'disais que j’étais intéressé et par quoi.

    Mais bon, pour ne pas contre dire l'adage: "Qui s'y frotte s'y colle" j'vais essayer de le faire marché déjà, et si j'y arrive j'écrirai un tutoriel avec une vidéo, mais bon moi c'est vite fais, vous attendez pas a 4 page de texte et une vidéo de 1 heures.

    c'est peut-être une histoire de génération et je suis peut-être vieux-jeu...
    Bha ché pas, t'as quel âge ? moi j'trouve que les vidéo c'est plus simple pour tout ce qui est graphique : Une petite vidéo vaux mieux qu'un grand tutoriel ... Mais je te rejoins en disant que pour la programmation , ce genre de
    c'est l’horreur

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. Supprimer les doublons avec ou sans tri préalable
    Par ouskel'n'or dans le forum Contribuez
    Réponses: 0
    Dernier message: 19/12/2007, 20h24
  3. [MySQL] Differencier les champs avec et sans accent.
    Par Rakken dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 08/12/2006, 18h18
  4. [Eclipse] [VE] Créer des menus avec les classes SWT de VE
    Par jbcorens dans le forum SWT/JFace
    Réponses: 3
    Dernier message: 30/08/2005, 12h25
  5. Pb avec les menus
    Par Ph. B. dans le forum XMLRAD
    Réponses: 6
    Dernier message: 29/01/2003, 11h57

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