1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 #include <gtk/gtk.h>
16 #include <string.h>
17
18 static gboolean cerrar(GtkWidget *ventana, GdkEvent *evento, gpointer datos){
19 gtk_main_quit();
20 return FALSE;
21 }
22
23 static void al_oprimir_tecla(GtkWidget *tecla, gpointer datos){
24 GtkWidget *pantalla;
25 gchar etiqueta[100 + 1];
26 pantalla = (GtkWidget*)datos;
27 sprintf(etiqueta, "%s%s",gtk_label_get_text(GTK_LABEL(pantalla)), gtk_button_get_label(GTK_BUTTON(tecla)));
28 gtk_label_set_text(GTK_LABEL(pantalla), etiqueta);
29 }
30
31 static void borrar_digito(GtkWidget *tecla, gpointer datos){
32 GtkWidget *pantalla;
33 gchar etiqueta[100 + 1];
34 pantalla = (GtkWidget*)datos;
35 strcpy(etiqueta, gtk_label_get_text(GTK_LABEL(pantalla)));
36 etiqueta[strlen(etiqueta) - 1] = '\0';
37 gtk_label_set_text(GTK_LABEL(pantalla), etiqueta);
38 }
39
40 int main(int argc, char *argv[]){
41 GtkWidget *ventana;
42 GtkWidget *tabla;
43 GtkWidget *pantalla;
44 GtkWidget *tecla[10];
45 GtkWidget *tecla_asterisco;
46 GtkWidget *tecla_numeral;
47 GtkWidget *tecla_llamar;
48 GtkWidget *tecla_borrar;
49 gint i, j, k;
50 gchar etiqueta[2 + 1];
51
52 gtk_init(&argc, &argv);
53 ventana = gtk_window_new(GTK_WINDOW_TOPLEVEL);
54 g_signal_connect(G_OBJECT(ventana), "delete_event", G_CALLBACK(cerrar), NULL);
55 tabla = gtk_table_new(5, 4, TRUE);
56 gtk_container_add(GTK_CONTAINER(ventana), tabla);
57 pantalla = gtk_label_new("");
58 gtk_table_attach_defaults(GTK_TABLE(tabla), pantalla, 0, 4, 0, 1);
59 gtk_widget_show(pantalla);
60 for(i = 0; i < 10; i++){
61 sprintf(etiqueta, "%d", i);
62 tecla[i] = gtk_button_new_with_label(etiqueta);
63 g_signal_connect(G_OBJECT(tecla[i]), "clicked", G_CALLBACK(al_oprimir_tecla), (gpointer)pantalla);
64 }
65 tecla_asterisco = gtk_button_new_with_label("*");
66 g_signal_connect(G_OBJECT(tecla_asterisco), "clicked", G_CALLBACK(al_oprimir_tecla), (gpointer)pantalla);
67 tecla_numeral = gtk_button_new_with_label("#");
68 g_signal_connect(G_OBJECT(tecla_numeral), "clicked", G_CALLBACK(al_oprimir_tecla), (gpointer)pantalla);
69 for(k = 1, i = 1; i < 4; i++){
70 for(j = 0; j < 3; j++){
71 gtk_table_attach_defaults(GTK_TABLE(tabla), tecla[k], j, j + 1, i, i + 1);
72 gtk_widget_show(tecla[k++]);
73 }
74 }
75 gtk_table_attach_defaults(GTK_TABLE(tabla), tecla_asterisco, 0, 1, 4, 5);
76 gtk_widget_show(tecla_asterisco);
77 gtk_table_attach_defaults(GTK_TABLE(tabla), tecla[0], 1, 2, 4, 5);
78 gtk_widget_show(tecla[0]);
79 gtk_table_attach_defaults(GTK_TABLE(tabla), tecla_numeral, 2, 3, 4, 5);
80 gtk_widget_show(tecla_numeral);
81 tecla_llamar = gtk_button_new_with_label("Llamar");
82 gtk_table_attach_defaults(GTK_TABLE(tabla), tecla_llamar, 3, 4, 1, 3);
83 gtk_widget_show(tecla_llamar);
84 tecla_borrar = gtk_button_new_with_label("Borrar");
85 g_signal_connect(G_OBJECT(tecla_borrar), "clicked", G_CALLBACK(borrar_digito), (gpointer)pantalla);
86 gtk_table_attach_defaults(GTK_TABLE(tabla), tecla_borrar, 3, 4, 3, 5);
87 gtk_widget_show(tecla_borrar);
88 gtk_widget_show(tabla);
89 gtk_widget_show(ventana);
90 gtk_main();
91
92 return 0;
93 }