2 * (GLABELS) Label and Business Card Creation program for GNOME
4 * item.c: GLabels canvas item wrapper module module
6 * Copyright (C) 2001-2002 Jim Evins <evins@snaught.com>.
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License, or
11 * (at your option) any later version.
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, write to the Free Software
20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
28 #include "item_text.h"
30 #include "item_line.h"
31 #include "item_ellipse.h"
32 #include "item_image.h"
33 #include "item_barcode.h"
37 /*===========================================*/
39 /*===========================================*/
41 /*===========================================*/
43 /*===========================================*/
45 /*===========================================*/
46 /* Local function prototypes */
47 /*===========================================*/
49 /*****************************************************************************/
50 /* Create new canvas item from object. */
51 /*****************************************************************************/
53 gl_item_new (glLabelObject * object,
56 GnomeCanvasItem *item;
58 g_return_val_if_fail (object != NULL, NULL);
59 g_return_val_if_fail (GL_IS_DISPLAY (display), NULL);
61 switch (object->type) {
62 case GL_LABEL_OBJECT_TEXT:
63 item = gl_item_text_new (object, display);
65 case GL_LABEL_OBJECT_BOX:
66 item = gl_item_box_new (object, display);
68 case GL_LABEL_OBJECT_LINE:
69 item = gl_item_line_new (object, display);
71 case GL_LABEL_OBJECT_ELLIPSE:
72 item = gl_item_ellipse_new (object, display);
74 case GL_LABEL_OBJECT_IMAGE:
75 item = gl_item_image_new (object, display);
77 case GL_LABEL_OBJECT_BARCODE:
78 item = gl_item_barcode_new (object, display);
82 WARN ("Invalid label object type."); /* Should not happen! */
89 /*****************************************************************************/
90 /* Free a canvas item and all our associated data. */
91 /*****************************************************************************/
93 gl_item_free (GnomeCanvasItem ** item)
95 glLabelObject *object;
97 GnomeCanvasItem *highlight;
99 g_return_if_fail (GNOME_IS_CANVAS_ITEM (*item));
101 menu = gtk_object_get_data (GTK_OBJECT (*item), "object_menu");
102 object = gtk_object_get_data (GTK_OBJECT (*item), "label_object");
103 highlight = gtk_object_get_data (GTK_OBJECT (*item), "highlight");
105 gtk_menu_popdown (GTK_MENU (menu));
106 gtk_widget_unref (GTK_WIDGET (menu));
108 gl_label_object_free (&object);
110 if (highlight != NULL) {
111 gtk_object_destroy (GTK_OBJECT (highlight));
114 gtk_object_destroy (GTK_OBJECT (*item));
118 /*****************************************************************************/
119 /* Get position and size of object. */
120 /*****************************************************************************/
122 gl_item_get_position_size (GnomeCanvasItem * item,
128 glLabelObject *object;
130 g_return_if_fail (GNOME_IS_CANVAS_ITEM (item));
132 object = gtk_object_get_data (GTK_OBJECT (item), "label_object");
134 switch (object->type) {
135 case GL_LABEL_OBJECT_TEXT:
136 gl_item_text_get_position_size (item, x, y, w, h);
138 case GL_LABEL_OBJECT_BOX:
139 gl_item_box_get_position_size (item, x, y, w, h);
141 case GL_LABEL_OBJECT_LINE:
142 gl_item_line_get_position_size (item, x, y, w, h);
144 case GL_LABEL_OBJECT_ELLIPSE:
145 gl_item_ellipse_get_position_size (item, x, y, w, h);
147 case GL_LABEL_OBJECT_IMAGE:
148 gl_item_image_get_position_size (item, x, y, w, h);
150 case GL_LABEL_OBJECT_BARCODE:
151 gl_item_barcode_get_position_size (item, x, y, w, h);
154 WARN ("Invalid label object type."); /* Should not happen! */
160 /*****************************************************************************/
161 /* Get position and size of object. */
162 /*****************************************************************************/
164 gl_item_set_position_size (GnomeCanvasItem * item,
170 glLabelObject *object;
172 g_return_if_fail (GNOME_IS_CANVAS_ITEM (item));
174 object = gtk_object_get_data (GTK_OBJECT (item), "label_object");
176 switch (object->type) {
177 case GL_LABEL_OBJECT_TEXT:
178 gl_item_text_set_position_size (item, x, y, w, h);
180 case GL_LABEL_OBJECT_BOX:
181 gl_item_box_set_position_size (item, x, y, w, h);
183 case GL_LABEL_OBJECT_LINE:
184 gl_item_line_set_position_size (item, x, y, w, h);
186 case GL_LABEL_OBJECT_ELLIPSE:
187 gl_item_ellipse_set_position_size (item, x, y, w, h);
189 case GL_LABEL_OBJECT_IMAGE:
190 gl_item_image_set_position_size (item, x, y, w, h);
192 case GL_LABEL_OBJECT_BARCODE:
193 gl_item_barcode_set_position_size (item, x, y, w, h);
196 WARN ("Invalid label object type."); /* Should not happen! */
202 /*****************************************************************************/
203 /* Get object associated with canvas item. */
204 /*****************************************************************************/
206 gl_item_get_object (GnomeCanvasItem * item)
208 g_return_val_if_fail (GNOME_IS_CANVAS_ITEM (item), NULL);
210 return gtk_object_get_data (GTK_OBJECT (item), "label_object");
213 /*****************************************************************************/
214 /* Get display associated with canvas item. */
215 /*****************************************************************************/
217 gl_item_get_display (GnomeCanvasItem * item)
219 g_return_val_if_fail (GNOME_IS_CANVAS_ITEM (item), NULL);
221 return gtk_object_get_data (GTK_OBJECT (item), "display");
224 /*****************************************************************************/
225 /* Get menu associated with canvas item. */
226 /*****************************************************************************/
228 gl_item_get_menu (GnomeCanvasItem * item)
230 g_return_val_if_fail (GNOME_IS_CANVAS_ITEM (item), NULL);
232 return gtk_object_get_data (GTK_OBJECT (item), "object_menu");
235 /*****************************************************************************/
236 /* Turn on item highlight. */
237 /*****************************************************************************/
239 gl_item_highlight (GnomeCanvasItem * item)
241 glLabelObject *object;
243 g_return_if_fail (GNOME_IS_CANVAS_ITEM (item));
245 object = gtk_object_get_data (GTK_OBJECT (item), "label_object");
247 switch (object->type) {
248 case GL_LABEL_OBJECT_TEXT:
249 gl_item_text_highlight (item);
251 case GL_LABEL_OBJECT_BOX:
252 gl_item_box_highlight (item);
254 case GL_LABEL_OBJECT_LINE:
255 gl_item_line_highlight (item);
257 case GL_LABEL_OBJECT_ELLIPSE:
258 gl_item_ellipse_highlight (item);
260 case GL_LABEL_OBJECT_IMAGE:
261 gl_item_image_highlight (item);
263 case GL_LABEL_OBJECT_BARCODE:
264 gl_item_barcode_highlight (item);
267 WARN ("Invalid label object type."); /* Should not happen! */
273 /*****************************************************************************/
274 /* Turn off item highlight. */
275 /*****************************************************************************/
277 gl_item_unhighlight (GnomeCanvasItem * item)
279 GnomeCanvasItem *sel_box;
281 g_return_if_fail (GNOME_IS_CANVAS_ITEM (item));
285 sel_box = gtk_object_get_data (GTK_OBJECT (item), "highlight");
286 gnome_canvas_item_hide (sel_box);
291 /*****************************************************************************/
292 /* Get item bounds using appropriate custom function. */
293 /*****************************************************************************/
295 gl_item_get_bounds (GnomeCanvasItem * item,
301 glLabelObject *object;
303 g_return_if_fail (GNOME_IS_CANVAS_ITEM (item));
305 object = gtk_object_get_data (GTK_OBJECT (item), "label_object");
307 switch (object->type) {
308 case GL_LABEL_OBJECT_TEXT:
309 gl_item_text_get_bounds (item, x1, y1, x2, y2);
311 case GL_LABEL_OBJECT_BOX:
312 gl_item_box_get_bounds (item, x1, y1, x2, y2);
314 case GL_LABEL_OBJECT_LINE:
315 gl_item_line_get_bounds (item, x1, y1, x2, y2);
317 case GL_LABEL_OBJECT_ELLIPSE:
318 gl_item_ellipse_get_bounds (item, x1, y1, x2, y2);
320 case GL_LABEL_OBJECT_IMAGE:
321 gl_item_image_get_bounds (item, x1, y1, x2, y2);
323 case GL_LABEL_OBJECT_BARCODE:
324 gl_item_barcode_get_bounds (item, x1, y1, x2, y2);
327 WARN ("Invalid label object type."); /* Should not happen! */
333 /*****************************************************************************/
334 /* launch apropriate edit dialog for item/object */
335 /*****************************************************************************/
337 gl_item_edit_dialog (GnomeCanvasItem * item)
339 glLabelObject *object;
342 g_return_if_fail (GNOME_IS_CANVAS_ITEM (item));
344 object = gtk_object_get_data (GTK_OBJECT (item), "label_object");
345 display = gtk_object_get_data (GTK_OBJECT (item), "display");
347 switch (object->type) {
348 case GL_LABEL_OBJECT_TEXT:
349 gl_item_text_edit_dialog (item);
351 case GL_LABEL_OBJECT_BOX:
352 gl_item_box_edit_dialog (item);
354 case GL_LABEL_OBJECT_LINE:
355 gl_item_line_edit_dialog (item);
357 case GL_LABEL_OBJECT_ELLIPSE:
358 gl_item_ellipse_edit_dialog (item);
360 case GL_LABEL_OBJECT_IMAGE:
361 gl_item_image_edit_dialog (item);
363 case GL_LABEL_OBJECT_BARCODE:
364 gl_item_barcode_edit_dialog (item);
367 WARN ("Invalid label object type."); /* Should not happen! */
371 /* Update highlight of item */
372 gl_item_highlight (item);
375 /*****************************************************************************/
376 /* Return apropos item create mode cursor for given object type. */
377 /*****************************************************************************/
379 gl_item_get_create_cursor (glLabelObjectType type)
383 case GL_LABEL_OBJECT_TEXT:
384 return gl_item_text_get_create_cursor ();
386 case GL_LABEL_OBJECT_BOX:
387 return gl_item_box_get_create_cursor ();
389 case GL_LABEL_OBJECT_LINE:
390 return gl_item_line_get_create_cursor ();
392 case GL_LABEL_OBJECT_ELLIPSE:
393 return gl_item_ellipse_get_create_cursor ();
395 case GL_LABEL_OBJECT_IMAGE:
396 return gl_item_image_get_create_cursor ();
398 case GL_LABEL_OBJECT_BARCODE:
399 return gl_item_barcode_get_create_cursor ();
402 WARN ("Invalid label object type."); /* Should not happen! */
409 /*****************************************************************************/
410 /* Item/object creation canvas event handler. */
411 /*****************************************************************************/
413 gl_item_create_event_handler (GnomeCanvas * canvas,
417 switch (display->create_type) {
419 case GL_LABEL_OBJECT_TEXT:
420 return gl_item_text_create_event_handler (canvas, event,
423 case GL_LABEL_OBJECT_BOX:
424 return gl_item_box_create_event_handler (canvas, event,
427 case GL_LABEL_OBJECT_LINE:
428 return gl_item_line_create_event_handler (canvas, event,
431 case GL_LABEL_OBJECT_ELLIPSE:
432 return gl_item_ellipse_create_event_handler (canvas, event,
435 case GL_LABEL_OBJECT_IMAGE:
436 return gl_item_image_create_event_handler (canvas, event,
439 case GL_LABEL_OBJECT_BARCODE:
440 return gl_item_barcode_create_event_handler (canvas, event,
444 WARN ("Invalid label object type."); /* Should not happen! */