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 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154
| #include <stdlib.h>
#include <gtk/gtk.h>
#define TAILLE 16
void cb_affiche(GtkButton *pBouton, gpointer user_data)
{
/*init variables*/
GtkTextBuffer *Mon_Buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (user_data));
GtkTextIter iter;
/*comme ce n'est que de la saisie caractère par caractère je pense que 2 octets c'est largement suffisant*/
gchar *LocalLabel=NULL;
/*on recupere le label propre au bouton*/
const gchar* stock_clic = gtk_button_get_label (pBouton);
/* Conversion du label en UTF8 si besoin. */
if (g_utf8_validate(stock_clic, -1, NULL)==FALSE)
LocalLabel=g_locale_to_utf8(stock_clic, -1, NULL, NULL, NULL);
else
LocalLabel=g_strdup(stock_clic);
/*tentative de recuperer le label et de le mettre dans le buffer de ma GtkTextView*/
gtk_text_buffer_get_end_iter (Mon_Buffer, &iter);
gtk_text_buffer_insert (Mon_Buffer, &iter, LocalLabel, -1);
/* Libération de LocalLabel devenu inutile. */
g_free(LocalLabel);
}
int main(int argc, char **argv)
{
/*widget principal*/
GtkWidget *Ma_Fenetre = NULL;
/*widget important (conteneur)*/
GtkWidget *Mon_Tableau = NULL;
/*widgets actions (boutons ou zone de textes ...)*/
GtkWidget *Mon_Bouton_Quitter = NULL;
GtkWidget *Ma_Zone_Texte = NULL;
GtkWidget *Mon_Bouton[TAILLE] = {NULL};
/* Initialisation de GTK+ */
gtk_init (&argc, &argv);
/* Creation de la fenetre principale de notre application */
Ma_Fenetre = gtk_window_new (GTK_WINDOW_TOPLEVEL);/*Création officielle de la fenetre xd*/
gtk_window_set_default_size(GTK_WINDOW (Ma_Fenetre), 420, 380);
gtk_window_set_title (GTK_WINDOW (Ma_Fenetre), "Calculatrice");
gtk_window_set_position(GTK_WINDOW (Ma_Fenetre), GTK_WIN_POS_CENTER);
/*Lorsque l'utilisateur appuie sur la croix le programme est stoppé (il ne tourne plus)*/
g_signal_connect (G_OBJECT (Ma_Fenetre), "destroy", G_CALLBACK (gtk_main_quit), NULL);
/* Creation du tableau et placement*/
Mon_Tableau = gtk_table_new(7,4,TRUE);
gtk_container_add(GTK_CONTAINER(Ma_Fenetre),GTK_WIDGET(Mon_Tableau));
/* Creation de la zone de texte */
Ma_Zone_Texte = gtk_text_view_new ();
/*Gauche, Droite toujours + grand que gauche, Haut, Bas toujours + grand que haut*/
gtk_table_attach_defaults (GTK_TABLE (Mon_Tableau), Ma_Zone_Texte, 0, 4, 0, 1);
/*Creation du bouton Quitter*/
Mon_Bouton_Quitter = gtk_button_new_from_stock (GTK_STOCK_QUIT);
gtk_table_attach_defaults(GTK_TABLE(Mon_Tableau),Mon_Bouton_Quitter,2,3,6,7);
/*Lorsque l'utilisateur appuie sur le bouton quitter le programme est stoppé (il ne tourne plus)*/
g_signal_connect (G_OBJECT (Mon_Bouton_Quitter), "clicked", G_CALLBACK (gtk_main_quit), NULL);
/* Creation des boutons standars de la calculatrice et placement*/
/* C'est cette partie qui me pose probleme*/
Mon_Bouton[0] = gtk_button_new_with_label("0");
gtk_table_attach_defaults(GTK_TABLE(Mon_Tableau),Mon_Bouton[0],0,1,6,7);
g_signal_connect (G_OBJECT (Mon_Bouton[0]), "clicked", G_CALLBACK (cb_affiche), Ma_Zone_Texte);
Mon_Bouton[1] = gtk_button_new_with_label("1");
gtk_table_attach_defaults(GTK_TABLE(Mon_Tableau),Mon_Bouton[1],0,1,5,6);
g_signal_connect (G_OBJECT (Mon_Bouton[1]), "clicked", G_CALLBACK (cb_affiche), Ma_Zone_Texte);
Mon_Bouton[2] = gtk_button_new_with_label("2");
gtk_table_attach_defaults(GTK_TABLE(Mon_Tableau),Mon_Bouton[2],1,2,5,6);
g_signal_connect (G_OBJECT (Mon_Bouton[2]), "clicked", G_CALLBACK (cb_affiche), Ma_Zone_Texte);
Mon_Bouton[3] = gtk_button_new_with_label("3");
gtk_table_attach_defaults(GTK_TABLE(Mon_Tableau),Mon_Bouton[3],2,3,5,6);
g_signal_connect (G_OBJECT (Mon_Bouton[3]), "clicked", G_CALLBACK (cb_affiche), Ma_Zone_Texte);
Mon_Bouton[4] = gtk_button_new_with_label("4");
gtk_table_attach_defaults(GTK_TABLE(Mon_Tableau),Mon_Bouton[4],0,1,4,5);
g_signal_connect (G_OBJECT (Mon_Bouton[4]), "clicked", G_CALLBACK (cb_affiche), Ma_Zone_Texte);
Mon_Bouton[5] = gtk_button_new_with_label("5");
gtk_table_attach_defaults(GTK_TABLE(Mon_Tableau),Mon_Bouton[5],1,2,4,5);
g_signal_connect (G_OBJECT (Mon_Bouton[5]), "clicked", G_CALLBACK (cb_affiche), Ma_Zone_Texte);
Mon_Bouton[6] = gtk_button_new_with_label("6");
gtk_table_attach_defaults(GTK_TABLE(Mon_Tableau),Mon_Bouton[6],2,3,4,5);
g_signal_connect (G_OBJECT (Mon_Bouton[6]), "clicked", G_CALLBACK (cb_affiche), Ma_Zone_Texte);
Mon_Bouton[7] = gtk_button_new_with_label("7");
gtk_table_attach_defaults(GTK_TABLE(Mon_Tableau),Mon_Bouton[7],0,1,3,4);
g_signal_connect (G_OBJECT (Mon_Bouton[7]), "clicked", G_CALLBACK (cb_affiche), Ma_Zone_Texte);
Mon_Bouton[8] = gtk_button_new_with_label("8");
gtk_table_attach_defaults(GTK_TABLE(Mon_Tableau),Mon_Bouton[8],1,2,3,4);
g_signal_connect (G_OBJECT (Mon_Bouton[8]), "clicked", G_CALLBACK (cb_affiche), Ma_Zone_Texte);
Mon_Bouton[9] = gtk_button_new_with_label("9");
gtk_table_attach_defaults(GTK_TABLE(Mon_Tableau),Mon_Bouton[9],2,3,3,4);
g_signal_connect (G_OBJECT (Mon_Bouton[9]), "clicked", G_CALLBACK (cb_affiche), Ma_Zone_Texte);
Mon_Bouton[10] = gtk_button_new_with_label("=");
gtk_table_attach_defaults(GTK_TABLE(Mon_Tableau),Mon_Bouton[10],3,4,5,7);
g_signal_connect (G_OBJECT (Mon_Bouton[10]), "clicked", G_CALLBACK (cb_affiche), Ma_Zone_Texte);
Mon_Bouton[11] = gtk_button_new_with_label("+");
gtk_table_attach_defaults(GTK_TABLE(Mon_Tableau),Mon_Bouton[11],3,4,3,5);
g_signal_connect (G_OBJECT (Mon_Bouton[11]), "clicked", G_CALLBACK (cb_affiche), Ma_Zone_Texte);
Mon_Bouton[12] = gtk_button_new_with_label("-");
gtk_table_attach_defaults(GTK_TABLE(Mon_Tableau),Mon_Bouton[12],3,4,1,3);
g_signal_connect (G_OBJECT (Mon_Bouton[12]), "clicked", G_CALLBACK (cb_affiche), Ma_Zone_Texte);
Mon_Bouton[13] = gtk_button_new_with_label("*");
gtk_table_attach_defaults(GTK_TABLE(Mon_Tableau),Mon_Bouton[13],2,3,1,3);
g_signal_connect (G_OBJECT (Mon_Bouton[13]), "clicked", G_CALLBACK (cb_affiche), Ma_Zone_Texte);
Mon_Bouton[14] = gtk_button_new_with_label("/");
gtk_table_attach_defaults(GTK_TABLE(Mon_Tableau),Mon_Bouton[14],1,2,1,3);
g_signal_connect (G_OBJECT (Mon_Bouton[14]), "clicked", G_CALLBACK (cb_affiche), Ma_Zone_Texte);
Mon_Bouton[15] = gtk_button_new_with_label(",");
gtk_table_attach_defaults(GTK_TABLE(Mon_Tableau),Mon_Bouton[15],1,2,6,7);
g_signal_connect (G_OBJECT (Mon_Bouton[15]), "clicked", G_CALLBACK (cb_affiche), Ma_Zone_Texte);
/* Affichage de la fenetre principale et de toutes ses applications */
gtk_widget_show_all (Ma_Fenetre);
/* Lancement de la boucle principale */
gtk_main ();
return EXIT_SUCCESS;
} |
Partager