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
|
#include <stdio.h>
#include <stdlib.h>
#include <gtk/gtk.h>
#include <string.h>
struct _Affichage {
char * texte ;
GtkWidget * label ;
};
typedef struct _Affichage * Affichage ;
gboolean CallBackEgal (GtkWidget * Bouton, gchar * texte)
{
return TRUE ;
}
gboolean CallBackOp (GtkWidget * Bouton , Affichage a)
{
gchar ** t ;
gtk_label_get (GTK_LABEL(a->label),t) ;
strcat (*t, a->texte) ;
gtk_label_set_text (GTK_LABEL(a->label),*t) ;
return TRUE ;
}
int main(int argc, char ** argv)
{
char * Car [] = {"1", "2", "3", "4", "5", "6", "7", "8", "9","0", ",", "(", ")", "/","+","*","-", "EXE", "Quit"} ;
int T [19][4] = {{1,2,1,2},{2,3,1,2},{3,4,1,2},{1,2,2,3},{2,3,2,3},{3,4,2,3},{1,2,3,4},{2,3,3,4},{3,4,3,4} \
,{5,6,1,2},{6,7,1,2},{5,6,2,3},{6,7,2,3},{7,8,2,3},{5,6,3,4},{6,7,3,4},{7,8,3,4},{9,11,0,1},{9,11,1,2}} ;
gint i ;
Affichage a = malloc (sizeof (struct _Affichage)) ;
GtkWidget * Fenetre ;
GtkWidget * Table ;
GtkWidget * Bouton ;
/* initialiation des bibliothèque */
gtk_init (&argc, &argv) ;
/* la fenetre principale */
Fenetre = gtk_window_new (GTK_WINDOW_TOPLEVEL) ;
gtk_window_set_title (GTK_WINDOW (Fenetre), "Calculatrice 4 opérations") ;
gtk_widget_set_usize (Fenetre, 300, 200) ;
gtk_window_set_position (GTK_WINDOW (Fenetre), GTK_WIN_POS_CENTER) ;
/* création et attachement de la table à la fenêtre principale*/
Table = gtk_table_new (5,11,TRUE) ;
gtk_container_add (GTK_CONTAINER (Fenetre), Table) ;
/* Création et attachement du gtklabe */
a -> label = gtk_label_new (":") ;
a -> texte = malloc (2*sizeof(char)) ;
gtk_table_attach_defaults (GTK_TABLE (Table), a->label, 0,11,4,5) ;
/* les boutons : création et connection callback et attachement à la table */
for (i=0; i<19; i++) {
Bouton = gtk_button_new_with_label (Car [i]) ;
if (i<17) {
a -> texte [0] = Car [i][0] ;
a -> texte [1] = '\0' ;
gtk_signal_connect (GTK_OBJECT (Bouton), "clicked", (GtkSignalFunc) CallBackOp, a) ;
}
else if (i==17) gtk_signal_connect (GTK_OBJECT (Bouton), "clicked", (GtkSignalFunc) CallBackEgal, (gpointer) Car [i]) ;
gtk_table_attach_defaults (GTK_TABLE (Table), Bouton, T [i][0],T [i][1],T [i][2],T [i][3]) ;
}
/* destruction de la fenêtre avec le bouton quit */
gtk_signal_connect_object (GTK_OBJECT (Bouton), "clicked", (GtkSignalFunc) gtk_widget_destroy, GTK_OBJECT (Fenetre)) ;
gtk_signal_connect (GTK_OBJECT (Fenetre), "destroy", (GtkSignalFunc) gtk_exit, NULL) ;
/* on affiche le tout */
gtk_widget_show_all (Fenetre) ;
/* La boucle principale */
gtk_main ();
return 0 ;
} |
Partager