1 /* vim: set et sts=4 sw=4 fdm=indent fdn=1 fo+=t tw=80:
3 * Taller de Programación (75.42).
6 * Graficador de figuras.
8 * Copyleft 2003 - Leandro Lucarella <llucare@fi.uba.ar>
9 * Puede copiar, modificar y distribuir este programa bajo los términos de
10 * la licencia GPL (http://www.gnu.org/).
12 * Creado: mié oct 1 23:24:12 ART 2003
20 #include "rectangulo.h"
22 #include "callbacks.h"
23 #include "tp5window.h"
30 gboolean on_drawingarea_expose_event(GtkWidget* widget, GdkEventExpose* event,
33 std::cerr << "En expose_event." << std::endl;
36 static_cast<Dibujo*>(user_data)->dibujar(widget);
40 void on_button_borrar_clicked(GtkButton* button, gpointer user_data) {
42 std::cerr << "En borrar event." << std::endl;
45 static_cast<Dibujo*>(user_data)->borrar_todo();
48 void on_button_graficar_clicked(GtkButton* button, gpointer user_data) {
50 std::cerr << "En graficar event." << std::endl;
52 // Indica que hay que redibujar el widget user_data, que será el área de
54 gtk_widget_queue_draw(GTK_WIDGET(user_data));
57 void on_button_salir_clicked(GtkButton* button, gpointer user_data) {
59 std::cerr << "En salir event." << std::endl;
61 // Termina el loop principal.
65 void on_button_agregar_clicked(GtkButton* button, gpointer user_data) {
67 std::cerr << "En agregar event." << std::endl;
69 TP5Window* win = static_cast<TP5Window*>(user_data);
71 std::cerr << "Color: " << win->get_color() << std::endl;
73 Figura* figura = new Circulo(1, 1, Punto(50, 50), "Lala", 50);
74 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(win->radiobutton_linea))) {
77 gtk_spin_button_get_value_as_int(
78 GTK_SPIN_BUTTON(win->spinbutton_grosor)),
79 Punto(GTK_SPIN_BUTTON(win->spinbutton_centro_x),
80 GTK_SPIN_BUTTON(win->spinbutton_centro_y)),
81 gtk_entry_get_text(GTK_ENTRY(win->entry_nombre)),
82 Punto(GTK_SPIN_BUTTON(win->spinbutton_inicio_x),
83 GTK_SPIN_BUTTON(win->spinbutton_inicio_y)),
84 Punto(GTK_SPIN_BUTTON(win->spinbutton_fin_x),
85 GTK_SPIN_BUTTON(win->spinbutton_fin_y))
87 } else if (gtk_toggle_button_get_active(
88 GTK_TOGGLE_BUTTON(win->radiobutton_cuadrado))) {
89 figura = new Cuadrado(
91 gtk_spin_button_get_value_as_int(
92 GTK_SPIN_BUTTON(win->spinbutton_grosor)),
93 Punto(GTK_SPIN_BUTTON(win->spinbutton_centro_x),
94 GTK_SPIN_BUTTON(win->spinbutton_centro_y)),
95 gtk_entry_get_text(GTK_ENTRY(win->entry_nombre)),
96 gtk_spin_button_get_value_as_int(
97 GTK_SPIN_BUTTON(win->spinbutton_alto))
99 } else if (gtk_toggle_button_get_active(
100 GTK_TOGGLE_BUTTON(win->radiobutton_rectangulo))) {
101 figura = new Rectangulo(
103 gtk_spin_button_get_value_as_int(
104 GTK_SPIN_BUTTON(win->spinbutton_grosor)),
105 Punto(GTK_SPIN_BUTTON(win->spinbutton_centro_x),
106 GTK_SPIN_BUTTON(win->spinbutton_centro_y)),
107 gtk_entry_get_text(GTK_ENTRY(win->entry_nombre)),
108 gtk_spin_button_get_value_as_int(
109 GTK_SPIN_BUTTON(win->spinbutton_alto)),
110 gtk_spin_button_get_value_as_int(
111 GTK_SPIN_BUTTON(win->spinbutton_ancho))
114 figura = new Circulo(
116 gtk_spin_button_get_value_as_int(
117 GTK_SPIN_BUTTON(win->spinbutton_grosor)),
118 Punto(GTK_SPIN_BUTTON(win->spinbutton_centro_x),
119 GTK_SPIN_BUTTON(win->spinbutton_centro_y)),
120 gtk_entry_get_text(GTK_ENTRY(win->entry_nombre)),
121 gtk_spin_button_get_value_as_int(
122 GTK_SPIN_BUTTON(win->spinbutton_radio))
125 // Agrego la figura nueva al dibujo.
126 win->dibujo.agregar_figura(figura);
127 // Indico que se debe redibujar para que se vean los cambios.
128 gtk_widget_queue_draw(GTK_WIDGET(win->drawingarea));
131 gboolean on_window_delete_event(GtkWidget* widget, GdkEvent* event,
132 gpointer user_data) {
134 std::cerr << "En delete_event." << std::endl;
136 // Termina el loop principal.
138 // Al devolver FALSE se indica que se debe ocultar la ventana FIXME.
142 void on_radiobutton_linea_toggled(GtkToggleButton* togglebutton,
143 gpointer user_data) {
145 std::cerr << "En linea event." << std::endl;
148 TP5Window* win = static_cast<TP5Window*>(user_data);
149 gtk_widget_set_sensitive(win->spinbutton_inicio_x, true);
150 gtk_widget_set_sensitive(win->spinbutton_inicio_y, true);
151 gtk_widget_set_sensitive(win->spinbutton_fin_x, true);
152 gtk_widget_set_sensitive(win->spinbutton_fin_y, true);
153 gtk_widget_set_sensitive(win->spinbutton_alto, false);
154 gtk_widget_set_sensitive(win->spinbutton_ancho, false);
155 gtk_widget_set_sensitive(win->spinbutton_radio, false);
158 void on_radiobutton_cuadrado_toggled(GtkToggleButton* togglebutton,
159 gpointer user_data) {
161 std::cerr << "En cuadrado event." << std::endl;
164 TP5Window* win = static_cast<TP5Window*>(user_data);
165 gtk_widget_set_sensitive(win->spinbutton_inicio_x, false);
166 gtk_widget_set_sensitive(win->spinbutton_inicio_y, false);
167 gtk_widget_set_sensitive(win->spinbutton_fin_x, false);
168 gtk_widget_set_sensitive(win->spinbutton_fin_y, false);
169 gtk_widget_set_sensitive(win->spinbutton_alto, true);
170 gtk_widget_set_sensitive(win->spinbutton_ancho, false);
171 gtk_widget_set_sensitive(win->spinbutton_radio, false);
174 void on_radiobutton_rectangulo_toggled(GtkToggleButton* togglebutton,
175 gpointer user_data) {
177 std::cerr << "En rectangulo event." << std::endl;
180 TP5Window* win = static_cast<TP5Window*>(user_data);
181 gtk_widget_set_sensitive(win->spinbutton_inicio_x, false);
182 gtk_widget_set_sensitive(win->spinbutton_inicio_y, false);
183 gtk_widget_set_sensitive(win->spinbutton_fin_x, false);
184 gtk_widget_set_sensitive(win->spinbutton_fin_y, false);
185 gtk_widget_set_sensitive(win->spinbutton_alto, true);
186 gtk_widget_set_sensitive(win->spinbutton_ancho, true);
187 gtk_widget_set_sensitive(win->spinbutton_radio, false);
190 void on_radiobutton_circulo_toggled(GtkToggleButton* togglebutton,
191 gpointer user_data) {
193 std::cerr << "En circulo event." << std::endl;
196 TP5Window* win = static_cast<TP5Window*>(user_data);
197 gtk_widget_set_sensitive(win->spinbutton_inicio_x, false);
198 gtk_widget_set_sensitive(win->spinbutton_inicio_y, false);
199 gtk_widget_set_sensitive(win->spinbutton_fin_x, false);
200 gtk_widget_set_sensitive(win->spinbutton_fin_y, false);
201 gtk_widget_set_sensitive(win->spinbutton_alto, false);
202 gtk_widget_set_sensitive(win->spinbutton_ancho, false);
203 gtk_widget_set_sensitive(win->spinbutton_radio, true);