celular_medio_funcional.c

   1 /**
   2  * celular_medio_funcional.c
   3  *
   4  * @author Luis Alejandro Bernal Romero
   5  *
   6  * Ese programa simula el funcionamiento de un celular, no hace
   7  * llamadas, por eso es "medio funcional".
   8  *
   9  * Para compilar este programa sólo digite el siguiente comando en la
  10  * consola:
  11  *
  12  *   gcc -Wall -pedantic -o celular_medio_funcional celular_medio_funcional.c `pkg-config --cflags --libs gtk+-2.0`
  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 }

CategoryLenguajeC | CategoryProgramacion

LenguajeC/Programas/celular_medio_funcional.c (last edited 2008-04-20 14:39:16 by localhost)