Bonjour à tous,
J'essaye de coder actuellement un petit programme ou l'on peut cliquer sur 2 boutons. Ces boutons permettent d'ouvrir une fenetre et de remplir un petit formulaire. Cependant j'ai 2 petits problèmes, le premier est que la 2e fenetre ne veut pas s'ouvrir sans "une bidouille" (car j'ai au départ crée une structure qui est censé regroupé tous les widgets de la 2e fenetre, cependant je suis forcé de faire un malloc dans la fonction void ce qui n'est pas normal) et la 2e est que je n'arrive pas à récupérer les données du formulaire au moment ou je quitte ma 2e fenetre(elle disparaisse de ma structure qui se trouve dans le main mais qui était pourtant presente dans la fonction void).
En espérant avoir votre aide! Merci beaucoup !
P.S: j'ai parfois mis des choses en commentaire, en général ce sont des tests que j'ai fait pour "resoudre" le problème mais sans succès
Edit: Après quelques tests supplémentaires ( initialisation de wind_aj->media titre,isbn,auteur,date dans le main), j'ai remarqué que le problème vient à partir du moment où l'on fait a un callback, c'est comme si wind_aj se formatait.
main.c
graph.c
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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106 #include <stdlib.h> #include <gtk/gtk.h> #include <gdk-pixbuf/gdk-pixbuf.h> #include "graph.h" int main(int argc, char **argv) { GtkWidget * bouton1; GtkWidget * bouton2; GtkWidget* toolbar; GtkWidget* vbox; GtkWidget* file_selection; GtkWidget* scrolled_window; struct fenetre_ajout* wind_aj=(struct fenetre_ajout*)malloc(sizeof(struct fenetre_ajout)); /*wind_aj->media->titre= malloc(sizeof(char*)); wind_aj->media->auteur= malloc(sizeof(char*)); wind_aj->media->date= malloc(sizeof(char*));*/ /*wind_aj->media->titre= NULL; wind_aj->media->auteur= NULL; wind_aj->media->date= NULL;*/ gint fhauteur=480; gint flargeur=640; /* Initialisation de GTK+ */ gtk_init(&argc, &argv); GtkWidget * MainWindow = NULL; // On déclare notre prochaine fenetre principal /*Creation fenetre et icone*/ MainWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL); // Creation de la fenetre principal g_signal_connect(G_OBJECT(MainWindow), "delete-event", G_CALLBACK(gtk_main_quit), NULL); /*Personnalisation fenetre*/ gtk_window_set_title(GTK_WINDOW(MainWindow),"Media Collection");//titre /*Position et taille*/ gtk_window_set_default_size(GTK_WINDOW(MainWindow),flargeur,fhauteur);//taille gtk_window_set_position(GTK_WINDOW(MainWindow), GTK_WIN_POS_CENTER);//position gtk_window_deiconify(GTK_WINDOW(MainWindow));//deconifier /*bouton fermer*/ gtk_window_set_deletable (GTK_WINDOW(MainWindow), TRUE);//activer /*Affichage de la fenetre et boucle événementielle*/ /*creation vbox*/ /*barre de defilement*/ /*scrolled_window = gtk_scrolled_window_new (NULL, NULL); gtk_container_add(GTK_CONTAINER(MainWindow),scrolled_window); vbox=gtk_vbox_new(FALSE,5); gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrolled_window), vbox); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);*/ vbox=gtk_vbox_new(FALSE,5); gtk_container_add(GTK_CONTAINER(MainWindow),vbox); /*Personnalisation barre d'outil*/ toolbar= gtk_toolbar_new(); gtk_box_pack_start(GTK_BOX(vbox), toolbar, FALSE, FALSE, 0); /* Création à partir de stock */ gtk_toolbar_insert_stock(GTK_TOOLBAR(toolbar),GTK_STOCK_NEW,"Nouveau",NULL,G_CALLBACK(gtk_main_quit),NULL,-1); gtk_toolbar_insert_stock(GTK_TOOLBAR(toolbar),GTK_STOCK_OPEN,"Ouvrir",NULL,G_CALLBACK(gtk_main_quit),NULL,-1); gtk_toolbar_insert_stock(GTK_TOOLBAR(toolbar),GTK_STOCK_APPLY,"Confirmer",NULL,G_CALLBACK(gtk_main_quit),NULL,-1); gtk_toolbar_append_space(GTK_TOOLBAR(toolbar)); //ajoute un espace gtk_toolbar_insert_stock(GTK_TOOLBAR(toolbar),GTK_STOCK_SAVE,"Enregistrer",NULL,(GCallback)afficher_media_ajout,wind_aj,-1); gtk_toolbar_insert_stock(GTK_TOOLBAR(toolbar),GTK_STOCK_QUIT,"Fermer",NULL,G_CALLBACK(gtk_main_quit),NULL,-1); gtk_toolbar_set_icon_size(GTK_TOOLBAR(toolbar),GTK_ICON_SIZE_LARGE_TOOLBAR); gtk_toolbar_set_style(GTK_TOOLBAR(toolbar), GTK_TOOLBAR_ICONS ) ;//seulement icone /*personnalisation bouton*/ bouton1= gtk_button_new_with_label("Ajouter un media"); gtk_box_pack_start(GTK_BOX(vbox),bouton1,FALSE , FALSE,0); bouton2=gtk_button_new_with_label("Chercher un media"); gtk_box_pack_start(GTK_BOX(vbox),bouton2,FALSE,FALSE,2); g_signal_connect(G_OBJECT(bouton1), "clicked", G_CALLBACK(wind_ajout3), wind_aj); g_signal_connect(G_OBJECT(bouton2), "clicked", G_CALLBACK(gtk_main_quit), NULL); /*On affiche 'Fenetre' et tout ce qu'il contient*/ //gtk_widget_show_all(vbox); gtk_widget_show_all(MainWindow); gtk_main(); gtk_exit(EXIT_SUCCESS); // Fermeture de GTK+ return EXIT_SUCCESS; }
graph.h
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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104 #include "graph.h" #include <stdlib.h> #include <gtk/gtk.h> gint FH=700; gint FL=1000; void ajout_media_but(GtkWidget *fenetre,GtkWidget *selection, gpointer data){ //ajouter media apres avoir cliquer boutton ((struct fenetre_ajout *)data)->media=malloc(sizeof(struct Media));//bidouille ((struct fenetre_ajout*)data)->media->titre=strdup((char*)gtk_entry_get_text(GTK_ENTRY(((struct fenetre_ajout*)data)->form_ajout0))); ((struct fenetre_ajout*)data)->media->auteur=(char*)gtk_entry_get_text(GTK_ENTRY(((struct fenetre_ajout*)data)->form_ajout1)); ((struct fenetre_ajout*)data)->media->date=(char*)gtk_entry_get_text(GTK_ENTRY(((struct fenetre_ajout*)data)->form_ajout2)); ((struct fenetre_ajout*)data)->media->isbn=atoi((char*)gtk_entry_get_text(GTK_ENTRY(((struct fenetre_ajout*)data)->form_ajout3)));//convertir char* en int atoi printf("%s \n",((struct fenetre_ajout*)data)->media->auteur); printf("%s \n",((struct fenetre_ajout*)data)->media->titre); printf("%s \n",((struct fenetre_ajout*)data)->media->date); printf("%d \n",((struct fenetre_ajout*)data)->media->isbn); } void wind_ajout3(GtkWidget *fenetre,GtkWidget *selection,gpointer data){ // struct fenetre_ajout* ajout; //ajout=(struct fenetre_ajout*)malloc(sizeof(struct fenetre_ajout)); //ajout->media=malloc(sizeof(struct Media)); /*ajout->media->auteur=malloc(sizeof(char)); ajout->media->titre=malloc(sizeof(char)); ajout->media->date=malloc(sizeof(char));*/ /*creation fenetre+icone*/ data=(struct fenetre_ajout*)malloc(sizeof(struct fenetre_ajout));//bidouille ((struct fenetre_ajout*)data)->fenetre=gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(((struct fenetre_ajout *)data)->fenetre),"Accéder à la bibliotheque multimedia");//titre gtk_window_set_modal(GTK_WINDOW(((struct fenetre_ajout *)data)->fenetre), TRUE); gtk_window_set_default_size(GTK_WINDOW(((struct fenetre_ajout *)data)->fenetre),FL-200,FH-100);//taille gtk_window_set_position(GTK_WINDOW(((struct fenetre_ajout *)data)->fenetre), GTK_WIN_POS_CENTER);//position g_signal_connect(G_OBJECT(((struct fenetre_ajout *)data)->fenetre), "delete-event", G_CALLBACK(gtk_widget_destroy), ((struct fenetre_ajout *)data)->fenetre); /*creation box*/ ((struct fenetre_ajout *)data)->pVBox = gtk_vbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(((struct fenetre_ajout *)data)->fenetre), ((struct fenetre_ajout *)data)->pVBox); /*Insertion choix*/ /*Insertion tableau pour organiser le formulaire*/ ((struct fenetre_ajout *)data)->tableau=gtk_table_new(5,2,TRUE); gtk_container_add(GTK_CONTAINER(((struct fenetre_ajout *)data)->pVBox),((struct fenetre_ajout *)data)->tableau); /*Insertion formulaire*/ /*titre*/ ((struct fenetre_ajout *)data)->titre=gtk_label_new("Titre"); gtk_table_attach(GTK_TABLE(((struct fenetre_ajout *)data)->tableau),((struct fenetre_ajout *)data)->titre,0, 1,0, 1,GTK_EXPAND | GTK_FILL, GTK_EXPAND,0, 0); ((struct fenetre_ajout *)data)->form_ajout0=gtk_entry_new(); gtk_table_attach(GTK_TABLE(((struct fenetre_ajout *)data)->tableau),((struct fenetre_ajout *)data)->form_ajout0,1, 2,0, 1,GTK_EXPAND | GTK_FILL, GTK_EXPAND,0, 0); /*auteur*/ ((struct fenetre_ajout *)data)->auteur=gtk_label_new("Auteur"); gtk_table_attach(GTK_TABLE(((struct fenetre_ajout *)data)->tableau), ((struct fenetre_ajout *)data)->auteur,0, 1,1,2,GTK_EXPAND | GTK_FILL, GTK_EXPAND,0, 0); ((struct fenetre_ajout *)data)->form_ajout1=gtk_entry_new(); gtk_table_attach(GTK_TABLE(((struct fenetre_ajout *)data)->tableau), ((struct fenetre_ajout *)data)->form_ajout1,1,2,1,2,GTK_EXPAND | GTK_FILL, GTK_EXPAND,0, 0); /*date*/ ((struct fenetre_ajout *)data)->date=gtk_label_new("Date de publication"); gtk_table_attach(GTK_TABLE(((struct fenetre_ajout *)data)->tableau), ((struct fenetre_ajout *)data)->date,0, 1,2,3,GTK_EXPAND | GTK_FILL, GTK_EXPAND,0, 0); ((struct fenetre_ajout *)data)->form_ajout2=gtk_entry_new(); gtk_table_attach(GTK_TABLE(((struct fenetre_ajout *)data)->tableau), ((struct fenetre_ajout *)data)->form_ajout2,1, 2,2, 3,GTK_EXPAND | GTK_FILL, GTK_EXPAND,0, 0); /*ISBN*/ ((struct fenetre_ajout *)data)->ISBN=gtk_label_new("ISBN"); gtk_table_attach(GTK_TABLE(((struct fenetre_ajout *)data)->tableau), ((struct fenetre_ajout *)data)->ISBN,0, 1,3,4,GTK_EXPAND | GTK_FILL, GTK_EXPAND,0, 0); ((struct fenetre_ajout *)data)->form_ajout3=gtk_entry_new(); gtk_table_attach(GTK_TABLE(((struct fenetre_ajout *)data)->tableau),((struct fenetre_ajout *)data)->form_ajout3,1, 2,3,4,GTK_EXPAND | GTK_FILL, GTK_EXPAND,0, 0); /*bouton ajout*/ ((struct fenetre_ajout *)data)->ajout=gtk_button_new_with_label("Ajouter le media"); //gtk_table_attach(GTK_TABLE(ajout->tableau), ajout->ajout,1, 2,4, 5,GTK_EXPAND|GTK_SHRINK, GTK_EXPAND,0, 0); gtk_box_pack_start(GTK_BOX(((struct fenetre_ajout *)data)->pVBox), ((struct fenetre_ajout *)data)->ajout, TRUE, FALSE, 0); g_signal_connect(((struct fenetre_ajout *)data)->ajout, "button-press-event", (GCallback) ajout_media_but, data); //g_signal_connect(ajout->ajout, "button-release-event", (GCallback) ajout_media_but, ajout); //data=ajout; //data = (void *)ajout; gtk_widget_show_all( ((struct fenetre_ajout *)data)->fenetre); //gtk_widget_show_all( ajout->fenetre); } void afficher_media_ajout(GtkWidget *fenetre,GtkWidget *selection,gpointer add){ printf("%s \n",((struct fenetre_ajout *)add)->media->auteur); printf("%s \n",((struct fenetre_ajout *)add)->media->titre); printf("%s \n",((struct fenetre_ajout *)add)->media->date); printf("%d \n",((struct fenetre_ajout *)add)->media->isbn); }
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 #ifndef GRAPH_H #define GRAPH_H #include <gtk/gtk.h> #include<stdio.h> #include<stdlib.h> #include<string.h> struct fenetre_ajout{ struct Media* media; GtkWidget* fenetre; GtkWidget* pNotebook; GtkWidget* pVBox; GtkWidget* titre; GtkWidget* auteur; GtkWidget* ISBN; GtkWidget* date; GtkWidget* tableau; GtkWidget* ajout; GtkWidget *form_ajout0; GtkWidget *form_ajout1; GtkWidget *form_ajout2; GtkWidget *form_ajout3; /*char* auteur1; char* titre1; char* date1; int isbn1;*/ GtkWidget* label; }fen_ajout; typedef struct Media{ int type; char *titre; char *auteur; char *date; int isbn; }Med; void ajout_media_but(GtkWidget *fenetre,GtkWidget *selection,gpointer data); void afficher_media_ajout(GtkWidget *fenetre,GtkWidget *selection,gpointer add); void wind_ajout3(GtkWidget *fenetre,GtkWidget *selection,gpointer data); #endif
Partager