1 #ifndef _GNM_WORKBOOK_H_
2 # define _GNM_WORKBOOK_H_
3 
4 #include <gnumeric.h>
5 #include <goffice/goffice.h>
6 #include <glib-object.h>
7 #include <gui-file.h>
8 
9 G_BEGIN_DECLS
10 
11 #define GNM_WORKBOOK_TYPE        (workbook_get_type ())
12 #define WORKBOOK(o)          (G_TYPE_CHECK_INSTANCE_CAST ((o), GNM_WORKBOOK_TYPE, Workbook))
13 #define GNM_IS_WORKBOOK(o)       (G_TYPE_CHECK_INSTANCE_TYPE ((o), GNM_WORKBOOK_TYPE))
14 
15 GType       workbook_get_type            (void);
16 Workbook   *workbook_new                 (void);
17 Workbook   *workbook_new_with_sheets     (int sheet_count);
18 
19 void        workbook_mark_dirty          (Workbook *wb);
20 
21 /* Sheet support routines */
22 GPtrArray  *workbook_sheets              (Workbook const *wb);
23 int         workbook_sheet_count         (Workbook const *wb);
24 Sheet      *workbook_sheet_by_index	 (Workbook const *wb, int i);
25 Sheet      *workbook_sheet_by_name       (Workbook const *wb, char const *sheet_name);
26 void        workbook_sheet_attach        (Workbook *wb, Sheet *new_sheet);
27 void        workbook_sheet_attach_at_pos (Workbook *wb, Sheet *new_sheet, int pos);
28 Sheet	   *workbook_sheet_add		 (Workbook *wb, int pos, int columns, int rows);
29 Sheet	   *workbook_sheet_add_with_type (Workbook *wb, GnmSheetType sheet_type, int pos, int columns, int rows);
30 void        workbook_sheet_delete        (Sheet *sheet);
31 void        workbook_sheet_move          (Sheet *sheet, int direction);
32 char       *workbook_sheet_get_free_name (Workbook *wb,
33 					  char const *base,
34 					  gboolean always_suffix,
35 					  gboolean handle_counter);
36 gboolean    workbook_sheet_reorder       (Workbook *wb,
37 					  GSList *new_order);
38 gboolean    workbook_sheet_rename        (Workbook *wb,
39 					  GSList *sheet_indices,
40 					  GSList *new_names,
41 					  GOCmdContext *cc);
42 
43 unsigned    workbook_find_command	(Workbook *wb,
44 					 gboolean is_undo, gpointer cmd);
45 
46 GnmExprSharer *workbook_share_expressions (Workbook *wb, gboolean freeit);
47 void        workbook_optimize_style     (Workbook *wb);
48 
49 void        workbook_update_graphs      (Workbook *wb);
50 
51 /* IO Routines */
52 gboolean       workbook_set_saveinfo	(Workbook *wb, GOFileFormatLevel lev,
53 					 GOFileSaver *saver);
54 void           workbook_update_history  (Workbook *wb, GnmFileSaveAsStyle type);
55 GOFileSaver *workbook_get_file_saver	(Workbook *wb);
56 GOFileSaver *workbook_get_file_exporter	(Workbook *wb);
57 gchar const *workbook_get_last_export_uri (Workbook *wb);
58 void         workbook_set_file_exporter	  (Workbook *wb, GOFileSaver *fs);
59 void         workbook_set_last_export_uri (Workbook *wb, const gchar *uri);
60 
61 /* See also sheet_foreach_cell_in_region */
62 GnmValue   *workbook_foreach_cell_in_range (GnmEvalPos const  *pos,
63 					    GnmValue const *cell_range,
64 					    CellIterFlags   flags,
65 					    CellIterFunc    handler,
66 					    gpointer	    closure);
67 GPtrArray  *workbook_cells               (Workbook *wb, gboolean comments,
68 					  GnmSheetVisibility vis);
69 
70 void workbook_foreach_name (Workbook const *wb, gboolean globals_only,
71 			    GHFunc func, gpointer data);
72 
73 
74 /* Calculation */
75 void     workbook_recalc                 (Workbook *wb); /* in dependent.c */
76 void     workbook_recalc_all             (Workbook *wb); /* in dependent.c */
77 gboolean workbook_enable_recursive_dirty (Workbook *wb, gboolean enable);
78 void     workbook_set_recalcmode	 (Workbook *wb, gboolean enable);
79 gboolean workbook_get_recalcmode         (Workbook const *wb);
80 void     workbook_iteration_enabled	 (Workbook *wb, gboolean enable);
81 void     workbook_iteration_max_number	 (Workbook *wb, int max_number);
82 void     workbook_iteration_tolerance	 (Workbook *wb, double tolerance);
83 
84 GODateConventions const *workbook_date_conv (Workbook const *wb);
85 void workbook_set_date_conv (Workbook *wb, GODateConventions const *date_conv);
86 void workbook_set_1904 (Workbook *wb, gboolean base1904);
87 
88 GnmSheetSize const *workbook_get_sheet_size (Workbook const *wb);
89 
90 void workbook_attach_view (WorkbookView *wbv);
91 void workbook_detach_view (WorkbookView *wbv);
92 
93 GType workbook_sheet_state_get_type (void);
94 WorkbookSheetState *workbook_sheet_state_new (Workbook const *wb);
95 void workbook_sheet_state_unref (WorkbookSheetState *wss);
96 void workbook_sheet_state_restore (Workbook *wb, WorkbookSheetState const *wss);
97 int workbook_sheet_state_size	(WorkbookSheetState const *wss);
98 char *workbook_sheet_state_diff (WorkbookSheetState const *wss_a,
99 				 WorkbookSheetState const *wss_b);
100 
101 // For bindings only!
102 GSList *gnm_workbook_sheets0 (Workbook const *wb);
103 
104 #define WORKBOOK_FOREACH_SHEET(wb, sheet, code)				\
105   do {									\
106 	  const Workbook *wb_ = (wb);					\
107 	  unsigned sheetno_;						\
108 	  unsigned sheetcount_ = workbook_sheet_count (wb_);		\
109 	  for (sheetno_ = 0; sheetno_ < sheetcount_; sheetno_++) {	\
110 		  Sheet *sheet = workbook_sheet_by_index (wb_, sheetno_); \
111 		  code;							\
112 	  }								\
113   } while (0)
114 
115 
116 G_END_DECLS
117 
118 #endif /* _GNM_WORKBOOK_H_ */
119