#include "rectangulo.h"
#include "circulo.h"
#include "callbacks.h"
-#include "interface.h"
+#include "tp5window.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) {
+#ifdef DEBUG
std::cerr << "En expose_event." << std::endl;
+#endif
// 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;
+#endif
// 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;
+#endif
// 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;
+#endif
// 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;
- // 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) {
+#ifdef DEBUG
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;
}
+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);
+}
+