]> git.llucax.com Git - z.facultad/75.42/figuras.git/blobdiff - callbacks.cpp
Se agrega el fuente de la interfaz glade.
[z.facultad/75.42/figuras.git] / callbacks.cpp
index 89c17a50d8eea9ae6a135ce95f165de2d52a7052..e07c57261b842da570a1cc11f1cbac630989d05e 100644 (file)
 #include "rectangulo.h"
 #include "circulo.h"
 #include "callbacks.h"
 #include "rectangulo.h"
 #include "circulo.h"
 #include "callbacks.h"
-#include "interface.h"
+#include "tp5window.h"
 #include <gtk/gtk.h>
 
 #include <gtk/gtk.h>
 
-#include <iostream>
+#ifdef DEBUG
+#   include <iostream>
+#endif
 
 
-gboolean on_drawingarea_expose_event(GtkWidget *widget, GdkEventExpose *event,
+gboolean on_drawingarea_expose_event(GtkWidget* widget, GdkEventExpose* event,
         gpointer user_data) {
         gpointer user_data) {
+#ifdef DEBUG
     std::cerr << "En expose_event." << std::endl;
     std::cerr << "En expose_event." << std::endl;
+#endif
     // Dibujo.
     static_cast<Dibujo*>(user_data)->dibujar(widget);
     return FALSE;
 }
 
     // Dibujo.
     static_cast<Dibujo*>(user_data)->dibujar(widget);
     return FALSE;
 }
 
-void on_button_borrar_clicked(GtkButton *button, gpointer user_data) {
+void on_button_borrar_clicked(GtkButton* button, gpointer user_data) {
+#ifdef DEBUG
     std::cerr << "En borrar event." << std::endl;
     std::cerr << "En borrar event." << std::endl;
+#endif
     // Borro dibujo.
     static_cast<Dibujo*>(user_data)->borrar_todo();
 }
 
     // Borro dibujo.
     static_cast<Dibujo*>(user_data)->borrar_todo();
 }
 
-void on_button_graficar_clicked(GtkButton *button, gpointer user_data) {
+void on_button_graficar_clicked(GtkButton* button, gpointer user_data) {
+#ifdef DEBUG
     std::cerr << "En graficar event." << std::endl;
     std::cerr << "En graficar event." << std::endl;
+#endif
     // Indica que hay que redibujar el widget user_data, que será el área de
     // dibujo.
     gtk_widget_queue_draw(GTK_WIDGET(user_data));
 }
 
     // Indica que hay que redibujar el widget user_data, que será el área de
     // dibujo.
     gtk_widget_queue_draw(GTK_WIDGET(user_data));
 }
 
-void on_button_salir_clicked(GtkButton *button, gpointer user_data) {
+void on_button_salir_clicked(GtkButton* button, gpointer user_data) {
+#ifdef DEBUG
     std::cerr << "En salir event." << std::endl;
     std::cerr << "En salir event." << std::endl;
+#endif
     // Termina el loop principal.
     gtk_main_quit();
 }
 
     // Termina el loop principal.
     gtk_main_quit();
 }
 
-void on_button_agregar_clicked(GtkButton *button, gpointer user_data) {
+void on_button_agregar_clicked(GtkButton* button, gpointer user_data) {
+#ifdef DEBUG
     std::cerr << "En agregar event." << std::endl;
     std::cerr << "En agregar event." << std::endl;
-    // FIXME: hacer una estructura para guardar todos los punteros a los datos
-    // que necesito: radio buttons, y todas las entradas, más la lista enlazada,
-    // más, tal vez, el drawingarea.
-    Figura* figura = new Circulo(1, 1, Punto(50, 50), "Lala", 50);
-    static_cast<Dibujo*>(user_data)->agregar_figura(figura);
+#endif
+    TP5Window* win = static_cast<TP5Window*>(user_data);
+#ifdef DEBUG
+    std::cerr << "Color: " << win->get_color() << std::endl;
+#endif
+    Figura* figura;
+    // Si se agrega una línea.
+    if (gtk_toggle_button_get_active(
+                GTK_TOGGLE_BUTTON(win->radiobutton_linea))) {
+        // Creo la nueva línea con los parámetros ingresados por el usuario.
+        figura = new Linea(
+            win->get_color(),                                 // Color
+            gtk_spin_button_get_value_as_int(
+                GTK_SPIN_BUTTON(win->spinbutton_grosor)),     // Grosor
+            Punto(GTK_SPIN_BUTTON(win->spinbutton_centro_x),  // Centro X
+                GTK_SPIN_BUTTON(win->spinbutton_centro_y)),   // Centro Y
+            gtk_entry_get_text(GTK_ENTRY(win->entry_nombre)), // Nombre
+            Punto(GTK_SPIN_BUTTON(win->spinbutton_inicio_x),  // Inicio X
+                GTK_SPIN_BUTTON(win->spinbutton_inicio_y)),   // Inicio Y
+            Punto(GTK_SPIN_BUTTON(win->spinbutton_fin_x),     // Fin X
+                GTK_SPIN_BUTTON(win->spinbutton_fin_y))       // Fin Y
+        );
+    // Si se agrega un cuadrado.
+    } else if (gtk_toggle_button_get_active(
+                GTK_TOGGLE_BUTTON(win->radiobutton_cuadrado))) {
+        // Creo la figura con los párametros ingresados por el usuario.
+        figura = new Cuadrado(
+            win->get_color(),                                 // Color   
+            gtk_spin_button_get_value_as_int(                            
+                GTK_SPIN_BUTTON(win->spinbutton_grosor)),     // Grosor  
+            Punto(GTK_SPIN_BUTTON(win->spinbutton_centro_x),  // Centro X
+                GTK_SPIN_BUTTON(win->spinbutton_centro_y)),   // Centro Y
+            gtk_entry_get_text(GTK_ENTRY(win->entry_nombre)), // Nombre  
+            gtk_spin_button_get_value_as_int(
+                GTK_SPIN_BUTTON(win->spinbutton_alto))        // Lado.
+        );
+    // Si se agrega un rectángulo.
+    } else if (gtk_toggle_button_get_active(
+                GTK_TOGGLE_BUTTON(win->radiobutton_rectangulo))) {
+        // Creo la figura con los párametros ingresados por el usuario.
+        figura = new Rectangulo(
+            win->get_color(),                                 // Color   
+            gtk_spin_button_get_value_as_int(                            
+                GTK_SPIN_BUTTON(win->spinbutton_grosor)),     // Grosor  
+            Punto(GTK_SPIN_BUTTON(win->spinbutton_centro_x),  // Centro X
+                GTK_SPIN_BUTTON(win->spinbutton_centro_y)),   // Centro Y
+            gtk_entry_get_text(GTK_ENTRY(win->entry_nombre)), // Nombre  
+            gtk_spin_button_get_value_as_int(
+                GTK_SPIN_BUTTON(win->spinbutton_alto)),       // Alto.
+            gtk_spin_button_get_value_as_int(
+                GTK_SPIN_BUTTON(win->spinbutton_ancho))       // Ancho.
+        );
+    // Si no, se agrega un círculo.
+    } else {
+        // Creo la figura con los párametros ingresados por el usuario.
+        figura = new Circulo(
+            win->get_color(),                                 // Color   
+            gtk_spin_button_get_value_as_int(                            
+                GTK_SPIN_BUTTON(win->spinbutton_grosor)),     // Grosor  
+            Punto(GTK_SPIN_BUTTON(win->spinbutton_centro_x),  // Centro X
+                GTK_SPIN_BUTTON(win->spinbutton_centro_y)),   // Centro Y
+            gtk_entry_get_text(GTK_ENTRY(win->entry_nombre)), // Nombre  
+            gtk_spin_button_get_value_as_int(
+                GTK_SPIN_BUTTON(win->spinbutton_radio))       // Radio
+        );
+    }
+    // Agrego la figura nueva al dibujo.
+    win->dibujo.agregar_figura(figura);
+    // Indico que se debe redibujar para que se vean los cambios.
+    gtk_widget_queue_draw(GTK_WIDGET(win->drawingarea));
 }
 
 }
 
-gboolean on_window_delete_event(GtkWidget *widget, GdkEvent *event,
+gboolean on_window_delete_event(GtkWidget* widget, GdkEvent* event,
         gpointer user_data) {
         gpointer user_data) {
+#ifdef DEBUG
     std::cerr << "En delete_event." << std::endl;
     std::cerr << "En delete_event." << std::endl;
+#endif
     // Termina el loop principal.
     gtk_main_quit();
     // Al devolver FALSE se indica que se debe ocultar la ventana FIXME.
     return FALSE;
 }
 
     // Termina el loop principal.
     gtk_main_quit();
     // Al devolver FALSE se indica que se debe ocultar la ventana FIXME.
     return FALSE;
 }
 
+void on_radiobutton_linea_toggled(GtkToggleButton* togglebutton,
+        gpointer user_data) {
+#ifdef DEBUG
+    std::cerr << "En linea event." << std::endl;
+#endif
+    // Activo y desactivos los campos necesarios.
+    TP5Window* win = static_cast<TP5Window*>(user_data);
+    gtk_widget_set_sensitive(win->spinbutton_inicio_x, true);
+    gtk_widget_set_sensitive(win->spinbutton_inicio_y, true);
+    gtk_widget_set_sensitive(win->spinbutton_fin_x, true);
+    gtk_widget_set_sensitive(win->spinbutton_fin_y, true);
+    gtk_widget_set_sensitive(win->spinbutton_alto, false);
+    gtk_widget_set_sensitive(win->spinbutton_ancho, false);
+    gtk_widget_set_sensitive(win->spinbutton_radio, false);
+}
+
+void on_radiobutton_cuadrado_toggled(GtkToggleButton* togglebutton,
+        gpointer user_data) {
+#ifdef DEBUG
+    std::cerr << "En cuadrado event." << std::endl;
+#endif
+    // Activo y desactivos los campos necesarios.
+    TP5Window* win = static_cast<TP5Window*>(user_data);
+    gtk_widget_set_sensitive(win->spinbutton_inicio_x, false);
+    gtk_widget_set_sensitive(win->spinbutton_inicio_y, false);
+    gtk_widget_set_sensitive(win->spinbutton_fin_x, false);
+    gtk_widget_set_sensitive(win->spinbutton_fin_y, false);
+    gtk_widget_set_sensitive(win->spinbutton_alto, true);
+    gtk_widget_set_sensitive(win->spinbutton_ancho, false);
+    gtk_widget_set_sensitive(win->spinbutton_radio, false);
+}
+
+void on_radiobutton_rectangulo_toggled(GtkToggleButton* togglebutton,
+        gpointer user_data) {
+#ifdef DEBUG
+    std::cerr << "En rectangulo event." << std::endl;
+#endif
+    // Activo y desactivos los campos necesarios.
+    TP5Window* win = static_cast<TP5Window*>(user_data);
+    gtk_widget_set_sensitive(win->spinbutton_inicio_x, false);
+    gtk_widget_set_sensitive(win->spinbutton_inicio_y, false);
+    gtk_widget_set_sensitive(win->spinbutton_fin_x, false);
+    gtk_widget_set_sensitive(win->spinbutton_fin_y, false);
+    gtk_widget_set_sensitive(win->spinbutton_alto, true);
+    gtk_widget_set_sensitive(win->spinbutton_ancho, true);
+    gtk_widget_set_sensitive(win->spinbutton_radio, false);
+}
+
+void on_radiobutton_circulo_toggled(GtkToggleButton* togglebutton,
+        gpointer user_data) {
+#ifdef DEBUG
+    std::cerr << "En circulo event." << std::endl;
+#endif
+    // Activo y desactivos los campos necesarios.
+    TP5Window* win = static_cast<TP5Window*>(user_data);
+    gtk_widget_set_sensitive(win->spinbutton_inicio_x, false);
+    gtk_widget_set_sensitive(win->spinbutton_inicio_y, false);
+    gtk_widget_set_sensitive(win->spinbutton_fin_x, false);
+    gtk_widget_set_sensitive(win->spinbutton_fin_y, false);
+    gtk_widget_set_sensitive(win->spinbutton_alto, false);
+    gtk_widget_set_sensitive(win->spinbutton_ancho, false);
+    gtk_widget_set_sensitive(win->spinbutton_radio, true);
+}
+