1 /* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
2 #ifndef _GNM_CLIPBOARD_H_
3 # define _GNM_CLIPBOARD_H_
6 #include <goffice/goffice.h>
11 PASTE_CONTENTS
= 1 << 0, /* either CONTENTS or AS_VALUES */
12 PASTE_AS_VALUES
= 1 << 1, /* can be applied, not both */
13 PASTE_FORMATS
= 1 << 2,
14 PASTE_COMMENTS
= 1 << 3,
15 PASTE_OBJECTS
= 1 << 4,
17 /* Operations that can be performed at paste time on a cell */
18 PASTE_OPER_ADD
= 1 << 5,
19 PASTE_OPER_SUB
= 1 << 6,
20 PASTE_OPER_MULT
= 1 << 7,
21 PASTE_OPER_DIV
= 1 << 8,
23 /* Whether the paste transposes or not */
24 PASTE_TRANSPOSE
= 1 << 9,
28 /* If copying a range that includes blank cells, this
29 prevents pasting blank cells over existing data */
30 PASTE_SKIP_BLANKS
= 1 << 11,
32 /* Do not paste merged regions (probably not needed) */
33 PASTE_DONT_MERGE
= 1 << 12,
35 /* Internal flag : see cmd_merge_cells_undo for details */
36 PASTE_IGNORE_COMMENTS_AT_ORIGIN
= 1 << 13,
38 /* Update the row height when pasting? (for large fonts, etc.) */
39 PASTE_UPDATE_ROW_HEIGHT
= 1 << 14,
41 PASTE_EXPR_LOCAL_RELOCATE
= 1 << 15,
43 /* Avoid flagging dependencies. */
44 PASTE_NO_RECALC
= 1 << 16,
46 /* Whether the paste flips or not */
47 PASTE_FLIP_H
= 1 << 17,
48 PASTE_FLIP_V
= 1 << 18
51 #define PASTE_ALL_TYPES (PASTE_CONTENTS | PASTE_FORMATS | PASTE_COMMENTS | PASTE_OBJECTS)
52 #define PASTE_DEFAULT PASTE_ALL_TYPES
53 #define PASTE_OPER_MASK (PASTE_OPER_ADD | PASTE_OPER_SUB | PASTE_OPER_MULT | PASTE_OPER_DIV)
56 GnmCellPos
const offset
; /* must be first element */
58 GnmExprTop
const *texpr
;
61 GType
gnm_cell_copy_get_type (void);
63 struct _GnmCellRegion
{
64 Sheet
*origin_sheet
; /* can be NULL */
65 const GODateConventions
*date_conv
; /* can be NULL */
68 ColRowStateList
*col_state
, *row_state
;
69 GHashTable
*cell_content
;
73 gboolean not_as_contents
;
78 struct _GnmPasteTarget
{
84 GType
gnm_paste_target_get_type (void);
86 GnmCellRegion
*clipboard_copy_range (Sheet
*sheet
, GnmRange
const *r
);
87 GOUndo
*clipboard_copy_range_undo (Sheet
*sheet
, GnmRange
const *r
);
88 GOUndo
*clipboard_copy_ranges_undo (Sheet
*sheet
, GSList
*ranges
);
89 GnmCellRegion
*clipboard_copy_obj (Sheet
*sheet
, GSList
*objects
);
90 gboolean
clipboard_paste_region (GnmCellRegion
const *cr
,
91 GnmPasteTarget
const *pt
,
93 GnmPasteTarget
*paste_target_init (GnmPasteTarget
*pt
,
94 Sheet
*sheet
, GnmRange
const *r
,
97 GType
gnm_cell_region_get_type (void);
98 GnmCellRegion
*gnm_cell_region_new (Sheet
*origin_sheet
);
99 void cellregion_ref (GnmCellRegion
*cr
);
100 void cellregion_unref (GnmCellRegion
*cr
);
101 GString
*cellregion_to_string (GnmCellRegion
const *cr
,
102 gboolean only_visible
,
103 GODateConventions
const *date_conv
);
104 int cellregion_cmd_size (GnmCellRegion
const *cr
);
105 void cellregion_invalidate_sheet (GnmCellRegion
*cr
, Sheet
*sheet
);
107 GnmCellCopy
*gnm_cell_copy_new (GnmCellRegion
*cr
,
108 int col_offset
, int row_offset
);
110 void clipboard_init (void);
111 void clipboard_shutdown (void);
116 #endif /* _GNM_CLIPBOARD_H_ */