1 #ifndef _GNM_SHEET_VIEW_H_ 2 # define _GNM_SHEET_VIEW_H_ 3 4 #include <gnumeric.h> 5 #include <glib-object.h> 6 7 G_BEGIN_DECLS 8 9 typedef enum { 10 GNM_SHEET_VIEW_NORMAL_MODE, 11 GNM_SHEET_VIEW_PAGE_BREAK_MODE, 12 GNM_SHEET_VIEW_LAYOUT_MODE 13 } GnmSheetViewMode; 14 15 struct _SheetView { 16 GObject base; 17 18 Sheet *sheet; 19 WorkbookView *sv_wbv; 20 GPtrArray *controls; 21 22 GList *ants; /* animated cursors */ 23 24 /* an ordered list of Ranges, the first of which corresponds to the 25 * a normalized version of SheetView::{cursor.base_corner:move_corner} 26 */ 27 GSList *selections; 28 GSList *selections_simplified; 29 int selection_mode; /* GnmSelectionMode */ 30 31 GnmCellPos edit_pos; /* Cell that would be edited */ 32 GnmCellPos edit_pos_real; /* Even in the middle of a merged cell */ 33 int first_tab_col; /* where to jump to after an Enter */ 34 35 struct { 36 /* Static corner to rubber band the selection range around */ 37 GnmCellPos base_corner; 38 /* Corner that is moved when the selection range is extended */ 39 GnmCellPos move_corner; 40 } cursor; 41 42 GnmCellPos initial_top_left; 43 GnmCellPos frozen_top_left; 44 GnmCellPos unfrozen_top_left; 45 46 /* state flags */ 47 unsigned char enable_insert_rows; 48 unsigned char enable_insert_cols; 49 unsigned char enable_insert_cells; 50 unsigned char reposition_selection; 51 52 GnmSheetViewMode view_mode; 53 54 /* TODO : these should be replaced with Dependents when we support 55 * format based dependents 56 */ 57 unsigned char selection_content_changed; 58 struct { 59 unsigned char location; 60 unsigned char content; /* entered content NOT value */ 61 unsigned char style; 62 } edit_pos_changed; 63 guint auto_expr_timer; 64 }; 65 66 typedef struct { 67 GObjectClass parent_class; 68 } SheetViewClass; 69 70 #define GNM_SHEET_VIEW_TYPE (gnm_sheet_view_get_type ()) 71 #define GNM_SHEET_VIEW(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GNM_SHEET_VIEW_TYPE, SheetView)) 72 #define GNM_IS_SHEET_VIEW(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GNM_SHEET_VIEW_TYPE)) 73 74 /* Lifecycle */ 75 GType gnm_sheet_view_get_type (void); 76 SheetView *gnm_sheet_view_new (Sheet *sheet, WorkbookView *wbv); 77 void gnm_sheet_view_attach_control (SheetView *sv, SheetControl *sc); 78 void gnm_sheet_view_detach_control (SheetView *sv, SheetControl *sc); 79 void gnm_sheet_view_weak_ref (SheetView *sv, SheetView **ptr); 80 void gnm_sheet_view_weak_unref (SheetView **ptr); 81 void gnm_sheet_view_update (SheetView *sv); 82 void gnm_sheet_view_dispose (SheetView *sv); 83 84 /* Information */ 85 Sheet *sv_sheet (SheetView const *sv); 86 WorkbookView *sv_wbv (SheetView const *sv); 87 gboolean gnm_sheet_view_is_frozen (SheetView const *sv); 88 89 GnmFilter *gnm_sheet_view_editpos_in_filter (SheetView const *sv); 90 GnmFilter *gnm_sheet_view_selection_intersects_filter_rows (SheetView const *sv); 91 GnmRange *gnm_sheet_view_selection_extends_filter (SheetView const *sv, 92 GnmFilter const *f); 93 GnmSheetSlicer *gnm_sheet_view_editpos_in_slicer (SheetView const *sv); 94 95 /* Manipulation */ 96 void gnm_sheet_view_flag_status_update_pos (SheetView *sv, GnmCellPos const *pos); 97 void gnm_sheet_view_flag_status_update_range (SheetView *sv, GnmRange const *range); 98 void gnm_sheet_view_flag_style_update_range (SheetView *sv, GnmRange const *range); 99 void gnm_sheet_view_flag_selection_change (SheetView *sv); 100 101 void gnm_sheet_view_unant (SheetView *sv); 102 void gnm_sheet_view_ant (SheetView *sv, GList *ranges); 103 gboolean gnm_sheet_view_selection_copy (SheetView *sv, WorkbookControl *wbc); 104 gboolean gnm_sheet_view_selection_cut (SheetView *sv, WorkbookControl *wbc); 105 106 void gnm_sheet_view_make_cell_visible (SheetView *sv, int col, int row, 107 gboolean couple_panes); 108 void gnm_sheet_view_redraw_range (SheetView *sv, GnmRange const *r); 109 void gnm_sheet_view_redraw_headers (SheetView const *sheet, 110 gboolean col, gboolean row, 111 GnmRange const* r); 112 void gnm_sheet_view_resize (SheetView *sv, gboolean force_scroll); 113 void gnm_sheet_view_cursor_set (SheetView *sv, 114 GnmCellPos const *edit, 115 int base_col, int base_row, 116 int move_col, int move_row, 117 GnmRange const *bound); 118 void gnm_sheet_view_set_edit_pos (SheetView *sv, GnmCellPos const *pos); 119 120 void gnm_sheet_view_freeze_panes (SheetView *sv, 121 GnmCellPos const *frozen_top_left, 122 GnmCellPos const *unfrozen_top_left); 123 void gnm_sheet_view_panes_insdel_colrow (SheetView *sv, gboolean is_cols, 124 gboolean is_insert, int start, int count); 125 void gnm_sheet_view_set_initial_top_left(SheetView *sv, int col, int row); 126 127 #define SHEET_VIEW_FOREACH_CONTROL(sv, control, code) \ 128 do { \ 129 int ctrlno; \ 130 GPtrArray *controls = (sv)->controls; \ 131 for (ctrlno = controls->len; ctrlno-- > 0 ;) { \ 132 SheetControl *control = \ 133 g_ptr_array_index (controls, ctrlno); \ 134 code \ 135 } \ 136 } while (0) 137 138 G_END_DECLS 139 140 #endif /* _GNM_SHEET_VIEW_H_ */ 141