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;
74 // Si se agrega una línea.
75 if (gtk_toggle_button_get_active(
76 GTK_TOGGLE_BUTTON(win->radiobutton_linea))) {
77 // Creo la nueva línea con los parámetros ingresados por el usuario.
79 win->get_color(), // Color
80 gtk_spin_button_get_value_as_int(
81 GTK_SPIN_BUTTON(win->spinbutton_grosor)), // Grosor
82 Punto(GTK_SPIN_BUTTON(win->spinbutton_centro_x), // Centro X
83 GTK_SPIN_BUTTON(win->spinbutton_centro_y)), // Centro Y
84 gtk_entry_get_text(GTK_ENTRY(win->entry_nombre)), // Nombre
85 Punto(GTK_SPIN_BUTTON(win->spinbutton_inicio_x), // Inicio X
86 GTK_SPIN_BUTTON(win->spinbutton_inicio_y)), // Inicio Y
87 Punto(GTK_SPIN_BUTTON(win->spinbutton_fin_x), // Fin X
88 GTK_SPIN_BUTTON(win->spinbutton_fin_y)) // Fin Y
90 // Si se agrega un cuadrado.
91 } else if (gtk_toggle_button_get_active(
92 GTK_TOGGLE_BUTTON(win->radiobutton_cuadrado))) {
93 // Creo la figura con los párametros ingresados por el usuario.
94 figura = new Cuadrado(
95 win->get_color(), // Color
96 gtk_spin_button_get_value_as_int(
97 GTK_SPIN_BUTTON(win->spinbutton_grosor)), // Grosor
98 Punto(GTK_SPIN_BUTTON(win->spinbutton_centro_x), // Centro X
99 GTK_SPIN_BUTTON(win->spinbutton_centro_y)), // Centro Y
100 gtk_entry_get_text(GTK_ENTRY(win->entry_nombre)), // Nombre
101 gtk_spin_button_get_value_as_int(
102 GTK_SPIN_BUTTON(win->spinbutton_alto)) // Lado.
104 // Si se agrega un rectángulo.
105 } else if (gtk_toggle_button_get_active(
106 GTK_TOGGLE_BUTTON(win->radiobutton_rectangulo))) {
107 // Creo la figura con los párametros ingresados por el usuario.
108 figura = new Rectangulo(
109 win->get_color(), // Color
110 gtk_spin_button_get_value_as_int(
111 GTK_SPIN_BUTTON(win->spinbutton_grosor)), // Grosor
112 Punto(GTK_SPIN_BUTTON(win->spinbutton_centro_x), // Centro X
113 GTK_SPIN_BUTTON(win->spinbutton_centro_y)), // Centro Y
114 gtk_entry_get_text(GTK_ENTRY(win->entry_nombre)), // Nombre
115 gtk_spin_button_get_value_as_int(
116 GTK_SPIN_BUTTON(win->spinbutton_alto)), // Alto.
117 gtk_spin_button_get_value_as_int(
118 GTK_SPIN_BUTTON(win->spinbutton_ancho)) // Ancho.
120 // Si no, se agrega un círculo.
122 // Creo la figura con los párametros ingresados por el usuario.
123 figura = new Circulo(
124 win->get_color(), // Color
125 gtk_spin_button_get_value_as_int(
126 GTK_SPIN_BUTTON(win->spinbutton_grosor)), // Grosor
127 Punto(GTK_SPIN_BUTTON(win->spinbutton_centro_x), // Centro X
128 GTK_SPIN_BUTTON(win->spinbutton_centro_y)), // Centro Y
129 gtk_entry_get_text(GTK_ENTRY(win->entry_nombre)), // Nombre
130 gtk_spin_button_get_value_as_int(
131 GTK_SPIN_BUTTON(win->spinbutton_radio)) // Radio
134 // Agrego la figura nueva al dibujo.
135 win->dibujo.agregar_figura(figura);
136 // Indico que se debe redibujar para que se vean los cambios.
137 gtk_widget_queue_draw(GTK_WIDGET(win->drawingarea));
140 gboolean on_window_delete_event(GtkWidget* widget, GdkEvent* event,
141 gpointer user_data) {
143 std::cerr << "En delete_event." << std::endl;
145 // Termina el loop principal.
147 // Al devolver FALSE se indica que se debe ocultar la ventana FIXME.
151 void on_radiobutton_linea_toggled(GtkToggleButton* togglebutton,
152 gpointer user_data) {
154 std::cerr << "En linea event." << std::endl;
156 // Activo y desactivos los campos necesarios.
157 TP5Window* win = static_cast<TP5Window*>(user_data);
158 gtk_widget_set_sensitive(win->spinbutton_inicio_x, true);
159 gtk_widget_set_sensitive(win->spinbutton_inicio_y, true);
160 gtk_widget_set_sensitive(win->spinbutton_fin_x, true);
161 gtk_widget_set_sensitive(win->spinbutton_fin_y, true);
162 gtk_widget_set_sensitive(win->spinbutton_alto, false);
163 gtk_widget_set_sensitive(win->spinbutton_ancho, false);
164 gtk_widget_set_sensitive(win->spinbutton_radio, false);
167 void on_radiobutton_cuadrado_toggled(GtkToggleButton* togglebutton,
168 gpointer user_data) {
170 std::cerr << "En cuadrado event." << std::endl;
172 // Activo y desactivos los campos necesarios.
173 TP5Window* win = static_cast<TP5Window*>(user_data);
174 gtk_widget_set_sensitive(win->spinbutton_inicio_x, false);
175 gtk_widget_set_sensitive(win->spinbutton_inicio_y, false);
176 gtk_widget_set_sensitive(win->spinbutton_fin_x, false);
177 gtk_widget_set_sensitive(win->spinbutton_fin_y, false);
178 gtk_widget_set_sensitive(win->spinbutton_alto, true);
179 gtk_widget_set_sensitive(win->spinbutton_ancho, false);
180 gtk_widget_set_sensitive(win->spinbutton_radio, false);
183 void on_radiobutton_rectangulo_toggled(GtkToggleButton* togglebutton,
184 gpointer user_data) {
186 std::cerr << "En rectangulo event." << std::endl;
188 // Activo y desactivos los campos necesarios.
189 TP5Window* win = static_cast<TP5Window*>(user_data);
190 gtk_widget_set_sensitive(win->spinbutton_inicio_x, false);
191 gtk_widget_set_sensitive(win->spinbutton_inicio_y, false);
192 gtk_widget_set_sensitive(win->spinbutton_fin_x, false);
193 gtk_widget_set_sensitive(win->spinbutton_fin_y, false);
194 gtk_widget_set_sensitive(win->spinbutton_alto, true);
195 gtk_widget_set_sensitive(win->spinbutton_ancho, true);
196 gtk_widget_set_sensitive(win->spinbutton_radio, false);
199 void on_radiobutton_circulo_toggled(GtkToggleButton* togglebutton,
200 gpointer user_data) {
202 std::cerr << "En circulo event." << std::endl;
204 // Activo y desactivos los campos necesarios.
205 TP5Window* win = static_cast<TP5Window*>(user_data);
206 gtk_widget_set_sensitive(win->spinbutton_inicio_x, false);
207 gtk_widget_set_sensitive(win->spinbutton_inicio_y, false);
208 gtk_widget_set_sensitive(win->spinbutton_fin_x, false);
209 gtk_widget_set_sensitive(win->spinbutton_fin_y, false);
210 gtk_widget_set_sensitive(win->spinbutton_alto, false);
211 gtk_widget_set_sensitive(win->spinbutton_ancho, false);
212 gtk_widget_set_sensitive(win->spinbutton_radio, true);