1 /* Dia -- an diagram creation/manipulation program -*- c -*-
2 * Copyright (C) 1998 Alexander Larsson
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the Free Software
16 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
25 /* #include "object.h" later after declaring types */
31 struct _NewDiagramData
{
33 gfloat tmargin
, bmargin
, lmargin
, rmargin
;
37 gint fitwidth
, fitheight
;
38 Color bg_color
, pagebreak_color
, grid_color
;
40 gchar
*unit
, *font_unit
;
43 GType
diagram_data_get_type (void) G_GNUC_CONST
;
45 #define DIA_TYPE_DIAGRAM_DATA (diagram_data_get_type ())
46 #define DIA_DIAGRAM_DATA(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), DIA_TYPE_DIAGRAM_DATA, DiagramData))
47 #define DIA_DIAGRAM_DATA_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), DIA_TYPE_DIAGRAM_DATA, DiagramDataClass))
48 #define DIA_IS_DIAGRAM_DATA(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), DIA_TYPE_DIAGRAM_DATA))
49 #define DIA_DIAGRAM_DATA_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), DIA_TYPE_DIAGRAM_DATA, DiagramDataClass))
54 GObject parent_instance
;
56 Rectangle extents
; /* The extents of the diagram */
60 PaperInfo paper
; /* info about the page info for the diagram */
61 gboolean is_compressed
; /* TRUE if by default it should be save compressed.
62 The user can override this in Save As... */
64 GPtrArray
*layers
; /* Layers ordered by decreasing z-order */
67 guint selected_count_private
; /* kept for binary compatibility and sanity, don't use ! */
68 GList
*selected
; /* List of objects that are selected,
69 all from the active layer! */
71 /** List of text fields that can be edited in the diagram.
72 * Updated by text_register_focusable. */
74 /** Units and font units used in this diagram. Default cm and point */
75 gchar
*unit
, *font_unit
;
78 typedef struct _DiagramDataClass
{
79 GObjectClass parent_class
;
82 void (* object_add
) (DiagramData
*, Layer
*, DiaObject
*);
83 void (* object_remove
) (DiagramData
*, Layer
*, DiaObject
*);
89 Rectangle extents
; /* The extents of the layer */
91 GList
*objects
; /* List of objects in the layer,
92 sorted by decreasing z-valued,
93 objects can ONLY be connected to objects
97 gboolean connectable
; /* Whether the layer can currently be connected to.
98 The selected layer is by default connectable */
100 DiagramData
*parent_diagram
; /* Back-pointer to the diagram. This
101 must only be set by functions internal
102 to the diagram, and accessed via
103 layer_get_parent_diagram() */
107 #include "dynamic_obj.h"
109 DIAVAR
int render_bounding_boxes
;
111 Layer
*new_layer (char *name
, DiagramData
*parent
);
112 void layer_destroy(Layer
*layer
);
114 void data_raise_layer(DiagramData
*data
, Layer
*layer
);
115 void data_lower_layer(DiagramData
*data
, Layer
*layer
);
117 void data_add_layer(DiagramData
*data
, Layer
*layer
);
118 void data_add_layer_at(DiagramData
*data
, Layer
*layer
, int pos
);
119 void data_set_active_layer(DiagramData
*data
, Layer
*layer
);
120 void data_delete_layer(DiagramData
*data
, Layer
*layer
);
121 void data_select(DiagramData
*data
, DiaObject
*obj
);
122 void data_unselect(DiagramData
*data
, DiaObject
*obj
);
123 void data_remove_all_selected(DiagramData
*data
);
124 gboolean
data_update_extents(DiagramData
*data
); /* returns true if changed. */
125 GList
*data_get_sorted_selected(DiagramData
*data
);
126 GList
*data_get_sorted_selected_remove(DiagramData
*data
);
127 void data_set_unit(DiagramData
*data
, gchar
*unit
);
128 gchar
*data_get_unit(DiagramData
*data
);
129 float data_get_unit_multiplier(DiagramData
*data
);
130 void data_set_font_unit(DiagramData
*data
, gchar
*unit
);
131 gchar
*data_get_font_unit(DiagramData
*data
);
132 float data_get_font_unit_multiplier(DiagramData
*data
);
133 void data_emit(DiagramData
*data
,Layer
*layer
,DiaObject
* obj
,const char *signal_name
);
137 typedef void (*ObjectRenderer
)(DiaObject
*obj
, DiaRenderer
*renderer
,
140 void data_render(DiagramData
*data
, DiaRenderer
*renderer
, Rectangle
*update
,
141 ObjectRenderer obj_renderer
/* Can be NULL */,
143 void layer_render(Layer
*layer
, DiaRenderer
*renderer
, Rectangle
*update
,
144 ObjectRenderer obj_renderer
/* Can be NULL */,
148 int layer_object_index(Layer
*layer
, DiaObject
*obj
);
149 void layer_add_object(Layer
*layer
, DiaObject
*obj
);
150 void layer_add_object_at(Layer
*layer
, DiaObject
*obj
, int pos
);
151 void layer_add_objects(Layer
*layer
, GList
*obj_list
);
152 void layer_add_objects_first(Layer
*layer
, GList
*obj_list
);
153 void layer_remove_object(Layer
*layer
, DiaObject
*obj
);
154 void layer_remove_objects(Layer
*layer
, GList
*obj_list
);
155 GList
*layer_find_objects_intersecting_rectangle(Layer
*layer
, Rectangle
*rect
);
156 GList
*layer_find_objects_in_rectangle(Layer
*layer
, Rectangle
*rect
);
157 DiaObject
*layer_find_closest_object(Layer
*layer
, Point
*pos
, real maxdist
);
158 DiaObject
*layer_find_closest_object_except(Layer
*layer
, Point
*pos
,
159 real maxdist
, GList
*avoid
);
160 real
layer_find_closest_connectionpoint(Layer
*layer
,
161 ConnectionPoint
**closest
,
164 int layer_update_extents(Layer
*layer
); /* returns true if changed. */
165 void layer_replace_object_with_list(Layer
*layer
, DiaObject
*obj
,
167 void layer_set_object_list(Layer
*layer
, GList
*list
);
168 DiagramData
*layer_get_parent_diagram(Layer
*layer
);
169 /* Make sure all objects that are in the layer and not in the new
170 list eventually gets destroyed. */
172 #endif /* DIAGRAMDATA_H */