Bonsoir. J'ai encore un petit souci. J'espère que ce sera le dernier.
J'ai créé un programme avec un menu avec des RadioButton et
j'ai également créé dans mon interface un groupe de RadioButton.
Quand je clique sur le bouton 'Valider' j'aimerais savoir :
- Quel radioButton est actif dans mon menu
- ET Quel radioButton est choisi dans mon interface.
J'arrive à faire les deux séparement mais je n'arrive pas à voir
comment faire pour connaitre l'état des deux à la fois et ainsi
pouvoir éxécuter mon code en fonction des cases cochées dans
ces deux groupes de boutons.
Voilà la partie du code qui appel mes fonctions pour savoir
quel bouton est actif. La première ligne concerne les Radio
boutons du menu et la deuxième ligne les radio boutons
de mon interface.
Edit : Cela se rapproche des problèmes suivants je suppose :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 gtk_action_group_add_radio_actions (pActionGroupe, radio_entries, G_N_ELEMENTS (radio_entries), 0, (GCallback)whatAlgo, NULL); .... g_signal_connect(G_OBJECT(Go), "clicked", G_CALLBACK(onValider), boutonP);
http://www.developpez.net/forums/d21...vec-arguments/
http://www.developpez.net/forums/sho...light=callback
J'essaie en vain de créer une structure mais je vois pas comment faire. A chaque
fois j'ai une erreur... J'arrive pas à prendre l'information contenue dans la
GtkActionRadio...
voilà ce que j'ai fait :
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 typedef struct { GtkWidget *boutonP; GtkWidget *nbSommet; GtkRadioAction *courant; } mesArguments; int main (int argc, char* argv[]) { ... /* mesArguments */ mesArguments mesArgs; static GtkRadioActionEntry radio_entries[] = { { "PlusProcheVoisinAction", "TSP_PROCHE", "Plus Proche Voisin", NULL, "Plus Proche Voisin", _PPV}, { "PlusProcheAdditionAction", "TSP_ADDITION", "Plus Proche Addition", NULL, "Plus Proche Addition" , _PPA }, { "InsertionMoindreCoutAction", "TSP_MOINDRE_COUT", "Insertion Moindre Cout", NULL, "Insertion Moindre Cout" , _IMC }, { "InsertionPlusLointaineAction", "TSP_PLUS_LOIN", "Insertion Plus Lointaine", NULL, "Insertion Plus Lointaine", _IPL }, }; .... gtk_action_group_add_radio_actions (pActionGroupe, radio_entries, G_N_ELEMENTS (radio_entries), 0, (GCallback)onValider, &mesArgs); ... /* Appuie sur le bouton Valider */ g_signal_connect(G_OBJECT(Go), "clicked", G_CALLBACK(onValider), &mesArgs); ... }
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 void onValider(GtkWidget *pBtn, gpointer data) { GtkWidget *pInfo; GtkWidget *pWindow; GSList *pList; const gchar *sLabel; mesArguments * mesArgs = (mesArguments *) data; //printf("test->nbSommet = %d\n", gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(mesArgs->nbSommet)) ); /* Récupération de la liste des boutons */ pList = gtk_radio_button_get_group(GTK_RADIO_BUTTON(mesArgs->boutonP)); /* Parcours de la liste */ while(pList) { /* Le bouton est-il sélectionné */ if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(pList->data))) { /* OUI -> on copie le label du bouton */ sLabel = gtk_button_get_label(GTK_BUTTON(pList->data)); /* On met la liste a NULL pour sortir de la boucle */ pList = NULL; } else { /* NON -> on passe au bouton suivant */ pList = g_slist_next(pList); } } /* On récupére la fenêtre principale */ /* /* A partir d'un widget, gtk_widget_get_toplevel /* remonte jusqu'à la fenêtre mère qui nous est /* utile pour l'affichage de la boite de dialogue */ pWindow = gtk_widget_get_toplevel(GTK_WIDGET(data)); pInfo = gtk_message_dialog_new (GTK_WINDOW(pWindow), GTK_DIALOG_MODAL, GTK_MESSAGE_INFO, GTK_BUTTONS_OK, "Vous avez choisi : %s et %d et Algo = %d", sLabel, gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(mesArgs->nbSommet)), gtk_radio_action_get_current_value (mesArgs->courant) ); gtk_dialog_run(GTK_DIALOG(pInfo)); gtk_widget_destroy(pInfo); }
Merci.
Partager