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 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121
| #include <gtk/gtk.h>
#include <stdlib.h>
#define max 30
void cb_update_entry(GtkWidget *pBtn, gpointer entry)
{
gchar stext[max];// normalement je devai allouer la memoire dynamiquement mais pour faire simple ..
// if faut recuperer le text de l'Entry (saisi) avec gtk_entry_get_text();
// puis formater la chaine stext avec le text recuperé
g_sprintf(stext,"%s",gtk_entry_get_text(GTK_ENTRY(entry)));
// remarque que j'appele une fonction a l'interieure d'une autre
// 1 - recuperer le label du bouton
// 2 - ajouter ce label a la fin de stext (comme expliqué en haut )
strcat(stext,gtk_button_get_label(GTK_BUTTON(pBtn)));
// cette fonction met a jour le text de ton entry
gtk_entry_set_text(GTK_ENTRY(entry), stext);
}
int main(int argc, char **argv)
{
GtkWidget *mafenetre;
GtkWidget *boxv;
GtkWidget *saisi;
GtkWidget *matable;
GtkWidget *monlabel;
GtkWidget *bouton[17];
gtk_init(&argc,&argv);
mafenetre= gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(mafenetre),"Calculatrice");
gtk_window_set_default_size(GTK_WINDOW(mafenetre),700,600);
g_signal_connect(G_OBJECT(mafenetre),"destroy",G_CALLBACK(gtk_main_quit),NULL);
matable=gtk_table_new(7,4,TRUE);
gtk_container_add(GTK_CONTAINER(mafenetre),GTK_WIDGET(matable));
//saisi = gtk_entry_new();
saisi = gtk_entry_new_with_max_length(max);
// jette un pti coup d'oeil au #define
bouton[0]=gtk_button_new_with_label("0");
bouton[1]=gtk_button_new_with_label(",");
bouton[2]=gtk_button_new_with_label("-");
bouton[3]=gtk_button_new_with_label("1");
bouton[4]=gtk_button_new_with_label("2");
bouton[5]=gtk_button_new_with_label("3");
bouton[6]=gtk_button_new_with_label("4");
bouton[7]=gtk_button_new_with_label("5");
bouton[8]=gtk_button_new_with_label("6");
bouton[9]=gtk_button_new_with_label("7");
bouton[10]=gtk_button_new_with_label("8");
bouton[11]=gtk_button_new_with_label("9");
bouton[12]=gtk_button_new_with_label("=");
bouton[13]=gtk_button_new_with_label("+");
bouton[14]=gtk_button_new_with_label("-");
bouton[15]=gtk_button_new_with_label("*");
bouton[16]=gtk_button_new_with_label("/");
//tu ne fait rien avec mon label donc tu peut t'en passer
monlabel = gtk_label_new(NULL);
// il fallait atacher ton entry 'saisi' a la bable pour qu'il s'affiche
gtk_table_attach_defaults(GTK_TABLE(matable),saisi,1,3,1,2);
gtk_table_attach_defaults(GTK_TABLE(matable),bouton[0],0,1,6,7);
g_signal_connect(G_OBJECT(bouton[0]), "clicked", G_CALLBACK(cb_update_entry),(GtkWidget*)saisi);
gtk_table_attach_defaults(GTK_TABLE(matable),bouton[1],1,2,6,7);
g_signal_connect(G_OBJECT(bouton[1]), "clicked", G_CALLBACK(cb_update_entry),(GtkWidget*)saisi);
gtk_table_attach_defaults(GTK_TABLE(matable),bouton[2],2,3,6,7);
g_signal_connect(G_OBJECT(bouton[2]), "clicked", G_CALLBACK(cb_update_entry),(GtkWidget*)saisi);
gtk_table_attach_defaults(GTK_TABLE(matable),bouton[3],0,1,5,6);
g_signal_connect(G_OBJECT(bouton[3]), "clicked", G_CALLBACK(cb_update_entry),(GtkWidget*)saisi);
gtk_table_attach_defaults(GTK_TABLE(matable),bouton[4],1,2,5,6);
g_signal_connect(G_OBJECT(bouton[4]), "clicked", G_CALLBACK(cb_update_entry),(GtkWidget*)saisi);
gtk_table_attach_defaults(GTK_TABLE(matable),bouton[5],2,3,5,6);
g_signal_connect(G_OBJECT(bouton[5]), "clicked", G_CALLBACK(cb_update_entry),(GtkWidget*)saisi);
gtk_table_attach_defaults(GTK_TABLE(matable),bouton[6],0,1,4,5);
g_signal_connect(G_OBJECT(bouton[6]), "clicked", G_CALLBACK(cb_update_entry),(GtkWidget*)saisi);
gtk_table_attach_defaults(GTK_TABLE(matable),bouton[7],1,2,4,5);
g_signal_connect(G_OBJECT(bouton[7]), "clicked", G_CALLBACK(cb_update_entry),(GtkWidget*)saisi);
gtk_table_attach_defaults(GTK_TABLE(matable),bouton[8],2,3,4,5);
g_signal_connect(G_OBJECT(bouton[8]), "clicked", G_CALLBACK(cb_update_entry),(GtkWidget*)saisi);
gtk_table_attach_defaults(GTK_TABLE(matable),bouton[9],0,1,3,4);
g_signal_connect(G_OBJECT(bouton[9]), "clicked", G_CALLBACK(cb_update_entry),(GtkWidget*)saisi);
gtk_table_attach_defaults(GTK_TABLE(matable),bouton[10],1,2,3,4);
g_signal_connect(G_OBJECT(bouton[10]), "clicked", G_CALLBACK(cb_update_entry),(GtkWidget*)saisi);
gtk_table_attach_defaults(GTK_TABLE(matable),bouton[11],2,3,3,4);
g_signal_connect(G_OBJECT(bouton[11]), "clicked", G_CALLBACK(cb_update_entry),(GtkWidget*)saisi);
gtk_table_attach_defaults(GTK_TABLE(matable),bouton[12],3,4,6,7);
g_signal_connect(G_OBJECT(bouton[12]), "clicked", G_CALLBACK(cb_update_entry),(GtkWidget*)saisi);
gtk_table_attach_defaults(GTK_TABLE(matable),bouton[13],3,4,5,6);
g_signal_connect(G_OBJECT(bouton[13]), "clicked", G_CALLBACK(cb_update_entry),(GtkWidget*)saisi);
gtk_table_attach_defaults(GTK_TABLE(matable),bouton[14],3,4,4,5);
g_signal_connect(G_OBJECT(bouton[14]), "clicked", G_CALLBACK(cb_update_entry),(GtkWidget*)saisi);
gtk_table_attach_defaults(GTK_TABLE(matable),bouton[15],3,4,3,4);
g_signal_connect(G_OBJECT(bouton[15]), "clicked", G_CALLBACK(cb_update_entry),(GtkWidget*)saisi);
gtk_widget_show_all(mafenetre);
gtk_main();
return EXIT_SUCCESS;
} |