1 #ifndef _GNM_SHEET_OBJECT_H_
2 # define _GNM_SHEET_OBJECT_H_
5 #include <gsf/gsf-output.h>
6 #include <goffice/goffice.h>
10 /***********************************************************/
13 GNM_SO_RESIZE_MANUAL
, /* can be manually resized */
14 GNM_SO_RESIZE_AUTO
, /* automatically resized like cell bounded widgets */
15 GNM_SO_RESIZE_NONE
/* can't be resized like some sheet components */
19 GNM_SO_ANCHOR_TWO_CELLS
, /* move and size (if sizeable) with cells) */
20 GNM_SO_ANCHOR_ONE_CELL
, /* move with cells */
21 GNM_SO_ANCHOR_ABSOLUTE
/* anchored to the sheet */
23 GType
gnm_sheet_object_anchor_mode_get_type (void);
24 #define GNM_SHEET_OBJECT_ANCHOR_MODE_TYPE (gnm_sheet_object_anchor_mode_get_type ())
26 struct _SheetObjectAnchor
{
29 GnmRange cell_bound
; /* cellpos containing corners */
30 double offset
[4]; /* offsets from the top left (in LTR of cell_bound) */
33 GType
sheet_object_anchor_get_type (void); /* Boxed type */
35 #define GNM_SO_TYPE (sheet_object_get_type ())
36 #define GNM_SO(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), GNM_SO_TYPE, SheetObject))
37 #define GNM_IS_SO(o) (G_TYPE_CHECK_INSTANCE_TYPE((o), GNM_SO_TYPE))
38 GType
sheet_object_get_type (void);
40 #define GNM_SO_IMAGEABLE_TYPE (sheet_object_imageable_get_type ())
41 #define GNM_SO_IMAGEABLE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GNM_SO_IMAGEABLE_TYPE, SheetObjectImageableIface))
42 #define GNM_IS_SO_IMAGEABLE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GNM_SO_IMAGEABLE_TYPE))
44 GType
sheet_object_imageable_get_type (void);
46 #define GNM_SO_EXPORTABLE_TYPE (sheet_object_exportable_get_type ())
47 #define GNM_SO_EXPORTABLE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GNM_SO_EXPORTABLE_TYPE, SheetObjectExportableIface))
48 #define GNM_IS_SO_EXPORTABLE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GNM_SO_EXPORTABLE_TYPE))
50 GType
sheet_object_exportable_get_type (void);
52 gboolean
sheet_object_set_sheet (SheetObject
*so
, Sheet
*sheet
);
53 Sheet
*sheet_object_get_sheet (SheetObject
const *so
);
54 void sheet_object_clear_sheet (SheetObject
*so
);
56 void sheet_object_set_name (SheetObject
*so
, const char *name
);
57 void sheet_object_set_print_flag (SheetObject
*so
, gboolean
*print
);
59 SheetObject
*sheet_object_dup (SheetObject
const *so
);
60 gboolean
sheet_object_can_print (SheetObject
const *so
);
61 gboolean
sheet_object_can_resize (SheetObject
const *so
);
62 gboolean
sheet_object_can_edit (SheetObject
const *so
);
64 void sheet_object_get_editor (SheetObject
*so
, SheetControl
*sc
);
65 void sheet_object_populate_menu (SheetObject
*so
, GPtrArray
*actions
);
66 GtkWidget
* sheet_object_build_menu (SheetObjectView
*view
,
67 GPtrArray
const *actions
,
69 void sheet_object_update_bounds (SheetObject
*so
, GnmCellPos
const *p
);
70 void sheet_object_default_size (SheetObject
*so
, double *w
, double *h
);
71 gint
sheet_object_adjust_stacking(SheetObject
*so
, gint positions
);
72 gint
sheet_object_get_stacking (SheetObject
*so
);
73 SheetObjectView
*sheet_object_new_view (SheetObject
*so
,
74 SheetObjectViewContainer
*container
);
75 SheetObjectView
*sheet_object_get_view (SheetObject
const *so
,
76 SheetObjectViewContainer
*container
);
77 GnmRange
const *sheet_object_get_range (SheetObject
const *so
);
78 void sheet_object_set_anchor (SheetObject
*so
,
79 SheetObjectAnchor
const *anchor
);
81 SheetObjectAnchor
const *sheet_object_get_anchor (SheetObject
const *so
);
82 void sheet_object_position_pts_get (SheetObject
const *so
, double *coords
);
84 void sheet_object_invalidate_sheet (SheetObject
*so
,
87 typedef void (*SheetObjectForeachDepFunc
) (GnmDependent
*dep
,
90 void sheet_object_foreach_dep (SheetObject
*so
,
91 SheetObjectForeachDepFunc func
,
95 /* Object Management */
96 void sheet_objects_relocate (GnmExprRelocateInfo
const *rinfo
,
97 gboolean update
, GOUndo
**pundo
);
98 void sheet_objects_clear (Sheet
const *sheet
, GnmRange
const *r
,
99 GType t
, GOUndo
**pundo
);
100 GOUndo
*sheet_object_move_undo (GSList
*objects
, gboolean objects_created
);
101 GOUndo
*sheet_object_move_do (GSList
*objects
, GSList
*anchors
,
102 gboolean objects_created
);
103 GSList
*sheet_objects_get (Sheet
const *sheet
, GnmRange
const *r
,
105 void sheet_objects_dup (Sheet
const *src
, Sheet
*dst
, GnmRange
*range
);
107 void sheet_object_direction_set (SheetObject
*so
, gdouble
const *coords
);
108 gboolean
sheet_object_rubber_band_directly (SheetObject
const *so
);
109 void sheet_object_set_anchor_mode (SheetObject
*so
, GnmSOAnchorMode
const *mode
);
111 /* Anchor utilities */
112 void sheet_object_anchor_to_pts (SheetObjectAnchor
const *anchor
,
113 Sheet
const *sheet
, double *res_pts
);
114 void sheet_object_anchor_to_offset_pts (SheetObjectAnchor
const *anchor
,
115 Sheet
const *sheet
, double *res_pts
);
116 void sheet_object_anchor_init (SheetObjectAnchor
*anchor
,
118 const double *offsets
,
119 GODrawingAnchorDir direction
,
120 GnmSOAnchorMode mode
);
121 void sheet_object_pts_to_anchor (SheetObjectAnchor
*anchor
,
122 Sheet
const *sheet
, double const *res_pts
);
124 sheet_object_anchor_dup (SheetObjectAnchor
const *src
);
126 /* Image rendering */
127 GtkTargetList
*sheet_object_get_target_list (SheetObject
const *so
);
128 void sheet_object_write_image (SheetObject
const *so
,
135 GtkTargetList
*sheet_object_exportable_get_target_list (SheetObject
const *so
);
136 void sheet_object_write_object (SheetObject
const *so
,
138 GsfOutput
*output
, GError
**err
,
139 GnmConventions
const *convs
);
141 /* cairo rendering */
142 void sheet_object_draw_cairo (SheetObject
const *so
, cairo_t
*cr
, gboolean rtl
);
143 void sheet_object_draw_cairo_sized (SheetObject
const *so
, cairo_t
*cr
, double width
, double height
);
145 /* management routine to register all the builtin object types */
146 void sheet_objects_init (void);
149 #endif /* _GNM_SHEET_OBJECT_H_ */