1 #ifndef _GNM_WORKBOOK_VIEW_H_
2 # define _GNM_WORKBOOK_VIEW_H_
3 
4 #include <gnumeric.h>
5 #include <dependent.h>
6 #include <goffice/goffice.h>
7 
8 G_BEGIN_DECLS
9 
10 struct _WorkbookView {
11 	GoView  base;
12 
13 	Workbook *wb;
14 	GPtrArray *wb_controls;
15 
16 	Sheet	  *current_sheet;	/* convenience */
17 	SheetView *current_sheet_view;
18 
19 	/* preferences */
20 	gboolean   show_horizontal_scrollbar;
21 	gboolean   show_vertical_scrollbar;
22 	gboolean   show_notebook_tabs;
23 	gboolean   show_function_cell_markers;
24 	gboolean   show_extension_markers;
25 	gboolean   do_auto_completion;
26 	gboolean   is_protected;
27 
28 	/* Non-normative size information */
29 	int preferred_width, preferred_height;
30 
31 	/* The auto-expression */
32 	struct {
33 		GnmFunc *func;
34 		char *descr;
35 		GnmValue *value;
36 		gboolean use_max_precision;
37 		GnmDepManaged dep;
38 		gulong sheet_detached_sig;
39 	} auto_expr;
40 
41 	/* selection */
42 	char	  *selection_description;
43 
44 	/* Style for feedback */
45 	GnmStyle const	*current_style;
46 	SheetObject	*in_cell_combo;	/* validation or data slicer */
47 };
48 
49 typedef struct {
50 	GObjectClass   base_class;
51 	void (*sheet_entered) (Sheet *sheet);
52 } WorkbookViewClass;
53 
54 #define GNM_WORKBOOK_VIEW_TYPE     (workbook_view_get_type ())
55 #define GNM_WORKBOOK_VIEW(obj)     (G_TYPE_CHECK_INSTANCE_CAST ((obj), GNM_WORKBOOK_VIEW_TYPE, WorkbookView))
56 #define GNM_IS_WORKBOOK_VIEW(o)    (G_TYPE_CHECK_INSTANCE_TYPE ((o), GNM_WORKBOOK_VIEW_TYPE))
57 
58 /* Lifecycle */
59 GType		 workbook_view_get_type	  (void);
60 WorkbookView	*workbook_view_new	  (Workbook *wb);
61 void		 wb_view_attach_control	  (WorkbookView *wbv, WorkbookControl *wbc);
62 void		 wb_view_detach_control	  (WorkbookControl *wbc);
63 void             wb_view_detach_from_workbook (WorkbookView *wbv);
64 
65 /* Information */
66 GODoc		*wb_view_get_doc	  (WorkbookView const *wbv);
67 Workbook	*wb_view_get_workbook	  (WorkbookView const *wbv);
68 int		 wb_view_get_index_in_wb  (WorkbookView const *wbv);
69 Sheet		*wb_view_cur_sheet	  (WorkbookView const *wbv);
70 SheetView	*wb_view_cur_sheet_view	  (WorkbookView const *wbv);
71 void		 wb_view_sheet_focus	  (WorkbookView *wbv, Sheet *sheet);
72 void		 wb_view_sheet_add	  (WorkbookView *wbv, Sheet *new_sheet);
73 gboolean	 wb_view_is_protected	  (WorkbookView *wbv, gboolean check_sheet);
74 
75 /* Manipulation */
76 void        	 wb_view_set_attribute	  (WorkbookView *wbv, char const *name,
77 					   char const *value);
78 void		 wb_view_preferred_size	  (WorkbookView *wbv,
79 					   int w_pixels, int h_pixels);
80 void		 wb_view_style_feedback   (WorkbookView *wbv);
81 void             wb_view_menus_update     (WorkbookView *wbv);
82 void		 wb_view_selection_desc   (WorkbookView *wbv, gboolean use_pos,
83 					   WorkbookControl *wbc);
84 void		 wb_view_edit_line_set	  (WorkbookView *wbv,
85 					   WorkbookControl *wbc);
86 void		 wb_view_auto_expr_recalc (WorkbookView *wbv);
87 
88 /* I/O routines */
89 gboolean workbook_view_save_as (WorkbookView *wbv, GOFileSaver *fs,
90 				char const *uri, GOCmdContext *cc);
91 gboolean workbook_view_save	 (WorkbookView *wbv, GOCmdContext *cc);
92 void	 workbook_view_save_to_output (WorkbookView *wbv,
93 				       GOFileSaver const *fs,
94 				       GsfOutput *output,
95 				       GOIOContext *io_context);
96 void     workbook_view_save_to_uri (WorkbookView *wbv, GOFileSaver const *fs,
97 				    char const *uri, GOIOContext *io_context);
98 
99 WorkbookView *workbook_view_new_from_input (GsfInput *input,
100                                             const char *uri,
101                                             GOFileOpener const *file_opener,
102                                             GOIOContext *io_context,
103                                             gchar const *encoding);
104 WorkbookView *workbook_view_new_from_uri  (char const *uri,
105                                            GOFileOpener const *file_opener,
106                                            GOIOContext *io_context,
107                                            gchar const *encoding);
108 
109 #define WORKBOOK_VIEW_FOREACH_CONTROL(wbv, control, code)			\
110 do {										\
111 	int jNd;								\
112 	GPtrArray *wb_controls = (wbv)->wb_controls;				\
113 	if (wb_controls != NULL) /* Reverse is important during destruction */	\
114 		for (jNd = wb_controls->len; jNd-- > 0 ;) {			\
115 			WorkbookControl *control =				\
116 				g_ptr_array_index (wb_controls, jNd);		\
117 			code							\
118 		}								\
119 } while (0)
120 
121 
122 G_END_DECLS
123 
124 #endif /* _GNM_WORKBOOK_VIEW_H_ */
125