1 #ifndef _GNM_SHEET_OBJECT_H_ 2 # define _GNM_SHEET_OBJECT_H_ 3 4 #include <gnumeric.h> 5 #include <gsf/gsf-output.h> 6 #include <goffice/goffice.h> 7 8 G_BEGIN_DECLS 9 10 /***********************************************************/ 11 12 typedef enum { 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 */ 16 } GnmSOResizeMode; 17 18 typedef enum { 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 */ 22 } GnmSOAnchorMode; 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 ()) 25 26 struct _SheetObjectAnchor { 27 GODrawingAnchor base; 28 29 GnmRange cell_bound; /* cellpos containing corners */ 30 double offset[4]; /* offsets from the top left (in LTR of cell_bound) */ 31 GnmSOAnchorMode mode; 32 }; 33 GType sheet_object_anchor_get_type (void); /* Boxed type */ 34 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); 39 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)) 43 44 GType sheet_object_imageable_get_type (void); 45 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)) 49 50 GType sheet_object_exportable_get_type (void); 51 52 void 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); 55 56 void sheet_object_set_name (SheetObject *so, const char *name); 57 void sheet_object_set_print_flag (SheetObject *so, gboolean *print); 58 gboolean sheet_object_get_print_flag (SheetObject *so); 59 60 SheetObject *sheet_object_dup (SheetObject const *so); 61 gboolean sheet_object_can_print (SheetObject const *so); 62 gboolean sheet_object_can_resize (SheetObject const *so); 63 gboolean sheet_object_can_edit (SheetObject const *so); 64 65 void sheet_object_get_editor (SheetObject *so, SheetControl *sc); 66 void sheet_object_populate_menu (SheetObject *so, GPtrArray *actions); 67 GtkWidget * sheet_object_build_menu (SheetObjectView *view, 68 GPtrArray const *actions, 69 unsigned *i); 70 void sheet_object_update_bounds (SheetObject *so, GnmCellPos const *p); 71 void sheet_object_default_size (SheetObject *so, double *w, double *h); 72 gint sheet_object_adjust_stacking(SheetObject *so, gint positions); 73 gint sheet_object_get_stacking (SheetObject *so); 74 SheetObjectView *sheet_object_new_view (SheetObject *so, 75 SheetObjectViewContainer *container); 76 SheetObjectView *sheet_object_get_view (SheetObject const *so, 77 SheetObjectViewContainer *container); 78 GnmRange const *sheet_object_get_range (SheetObject const *so); 79 void sheet_object_set_anchor (SheetObject *so, 80 SheetObjectAnchor const *anchor); 81 82 SheetObjectAnchor const *sheet_object_get_anchor (SheetObject const *so); 83 void sheet_object_position_pts_get (SheetObject const *so, double *coords); 84 85 void sheet_object_invalidate_sheet (SheetObject *so, 86 Sheet const *sheet); 87 88 typedef void (*SheetObjectForeachDepFunc) (GnmDependent *dep, 89 SheetObject *so, 90 gpointer user); 91 void sheet_object_foreach_dep (SheetObject *so, 92 SheetObjectForeachDepFunc func, 93 gpointer user); 94 95 96 /* Object Management */ 97 void sheet_objects_relocate (GnmExprRelocateInfo const *rinfo, 98 gboolean update, GOUndo **pundo); 99 void sheet_objects_clear (Sheet const *sheet, GnmRange const *r, 100 GType t, GOUndo **pundo); 101 GOUndo *sheet_object_move_undo (GSList *objects, gboolean objects_created); 102 GOUndo *sheet_object_move_do (GSList *objects, GSList *anchors, 103 gboolean objects_created); 104 GSList *sheet_objects_get (Sheet const *sheet, GnmRange const *r, 105 GType t); 106 void sheet_objects_dup (Sheet const *src, Sheet *dst, GnmRange *range); 107 108 void sheet_object_direction_set (SheetObject *so, gdouble const *coords); 109 gboolean sheet_object_rubber_band_directly (SheetObject const *so); 110 void sheet_object_set_anchor_mode (SheetObject *so, GnmSOAnchorMode const *mode); 111 112 /* Anchor utilities */ 113 void sheet_object_anchor_to_pts (SheetObjectAnchor const *anchor, 114 Sheet const *sheet, double *res_pts); 115 void sheet_object_anchor_to_offset_pts (SheetObjectAnchor const *anchor, 116 Sheet const *sheet, double *res_pts); 117 void sheet_object_anchor_init (SheetObjectAnchor *anchor, 118 GnmRange const *r, 119 const double *offsets, 120 GODrawingAnchorDir direction, 121 GnmSOAnchorMode mode); 122 void sheet_object_pts_to_anchor (SheetObjectAnchor *anchor, 123 Sheet const *sheet, double const *res_pts); 124 SheetObjectAnchor * 125 sheet_object_anchor_dup (SheetObjectAnchor const *src); 126 127 /* Image rendering */ 128 GtkTargetList *sheet_object_get_target_list (SheetObject const *so); 129 void sheet_object_write_image (SheetObject const *so, 130 char const *format, 131 double resolution, 132 GsfOutput *output, 133 GError **err); 134 void sheet_object_save_as_image (SheetObject const *so, 135 char const *format, 136 double resolution, 137 const char *url, 138 GError **err); 139 140 /* Object export */ 141 GtkTargetList *sheet_object_exportable_get_target_list (SheetObject const *so); 142 void sheet_object_write_object (SheetObject const *so, 143 char const *format, 144 GsfOutput *output, GError **err, 145 GnmConventions const *convs); 146 147 /* cairo rendering */ 148 void sheet_object_draw_cairo (SheetObject const *so, cairo_t *cr, gboolean rtl); 149 void sheet_object_draw_cairo_sized (SheetObject const *so, cairo_t *cr, double width, double height); 150 151 /* management routine to register all the builtin object types */ 152 void sheet_objects_init (void); 153 void sheet_objects_shutdown (void); 154 G_END_DECLS 155 156 #endif /* _GNM_SHEET_OBJECT_H_ */ 157