1 #ifndef _GOFFICE_FILE_H_
2 #define _GOFFICE_FILE_H_
3 
4 #include <glib-object.h>
5 #include <goffice/app/goffice-app.h>
6 
7 G_BEGIN_DECLS
8 
9 /**
10  * GOFileFormatLevel:
11  * @GO_FILE_FL_NONE: no name assigned, won't happen.
12  * @GO_FILE_FL_WRITE_ONLY: PostScript etc, won't be remembered.
13  * @GO_FILE_FL_NEW: Wb just created.
14  * @GO_FILE_FL_MANUAL: Save gets punted to save as.
15  * @GO_FILE_FL_MANUAL_REMEMBER: Ditto, but remember in history.
16  * @GO_FILE_FL_AUTO: Save will save to this filename.
17  * @GO_FILE_FL_LAST: last value, won't happen.
18  *
19  * File format levels. They are ordered. When we save a file, we
20  * remember the name, but not if we already have a name at a higher level.
21  * When created, workbooks are assigned a name at level GO_FILE_FL_NEW.
22  */
23 typedef enum {
24 	GO_FILE_FL_NONE,            /* No name assigned, won't happen */
25 	GO_FILE_FL_WRITE_ONLY,      /* PostScript etc, won't be remembered */
26 	GO_FILE_FL_NEW,             /* Wb just created */
27 	GO_FILE_FL_MANUAL,          /* Save gets punted to save as */
28 	GO_FILE_FL_MANUAL_REMEMBER, /* Ditto, but remember in history */
29 	GO_FILE_FL_AUTO,            /* Save will save to this filename */
30 	GO_FILE_FL_LAST
31 } GOFileFormatLevel;
32 GType go_file_format_level_get_type (void);
33 #define GO_TYPE_FILE_FORMAT_LEVEL (go_file_format_level_get_type ())
34 
35 /**
36  * GOFileSaveScope:
37  * @GO_FILE_SAVE_WORKBOOK: save the whole file.
38  * @GO_FILE_SAVE_SHEET: save only current page.
39  * @GO_FILE_SAVE_RANGE: save only a selected range.
40  * @GO_FILE_SAVE_LAST: last value, won't happen.
41  *
42  * GOFileSaveScope specifies what information file saver can save in a file.
43  * Many savers can save the whole workbook (with all sheets), but others
44  * save only current sheet, usually because of file format limitations.
45  */
46 typedef enum {
47 	GO_FILE_SAVE_WORKBOOK,
48 	GO_FILE_SAVE_SHEET,
49 	GO_FILE_SAVE_RANGE,
50 	GO_FILE_SAVE_LAST
51 } GOFileSaveScope;
52 GType go_file_save_scope_get_type (void);
53 #define GO_TYPE_FILE_SAVE_SCOPE (go_file_save_scope_get_type ())
54 
55 /*
56  * GOFileOpener
57  */
58 
59 typedef struct _GOFileOpenerClass GOFileOpenerClass;
60 
61 #define GO_TYPE_FILE_OPENER             (go_file_opener_get_type ())
62 #define GO_FILE_OPENER(obj)             (G_TYPE_CHECK_INSTANCE_CAST ((obj), GO_TYPE_FILE_OPENER, GOFileOpener))
63 #define GO_IS_FILE_OPENER(obj)          (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GO_TYPE_FILE_OPENER))
64 
65 typedef gboolean (*GOFileOpenerProbeFunc) (GOFileOpener const *fo,
66 					    GsfInput *input,
67 					    GOFileProbeLevel pl);
68 typedef void     (*GOFileOpenerOpenFunc) (GOFileOpener const *fo,
69 					  GOIOContext *io_context,
70 					  GoView *view,
71 					  GsfInput *input);
72 typedef void     (*GOFileOpenerOpenFuncWithEnc) (GOFileOpener const *fo,
73 						 gchar const *enc,
74 						 GOIOContext *io_context,
75 						 GoView *view,
76 						 GsfInput *input);
77 
78 GType go_file_opener_get_type (void);
79 
80 GOFileOpener *go_file_opener_new (char const *id,
81 				  char const *description,
82 				  GSList *suffixes,
83 				  GSList *mimes,
84 				  GOFileOpenerProbeFunc probe_func,
85 				  GOFileOpenerOpenFunc open_func);
86 
87 GOFileOpener *go_file_opener_new_with_enc (char const *id,
88 					   char const *description,
89 					   GSList *suffixes,
90 					   GSList *mimes,
91 					   GOFileOpenerProbeFunc probe_func,
92 					   GOFileOpenerOpenFuncWithEnc open_func);
93 
94 
95 gboolean     go_file_opener_probe (GOFileOpener const *fo, GsfInput *input,
96 				    GOFileProbeLevel pl);
97 void         go_file_opener_open (GOFileOpener const *fo, gchar const *opt_enc,
98 				  GOIOContext *io_context,
99 				  GoView *view,
100 				  GsfInput *input);
101 
102 char const *go_file_opener_get_id		  (GOFileOpener const *fo);
103 char const *go_file_opener_get_description	  (GOFileOpener const *fo);
104 gboolean    go_file_opener_is_encoding_dependent  (GOFileOpener const *fo);
105 gboolean    go_file_opener_can_probe		  (GOFileOpener const *fo,
106 						   GOFileProbeLevel pl);
107 GSList const *go_file_opener_get_suffixes	  (GOFileOpener const *fo);
108 GSList const *go_file_opener_get_mimes	  	  (GOFileOpener const *fo);
109 
110 /*
111  * GOFileSaver
112  */
113 
114 typedef struct _GOFileSaverClass GOFileSaverClass;
115 
116 #define GO_TYPE_FILE_SAVER             (go_file_saver_get_type ())
117 #define GO_FILE_SAVER(obj)             (G_TYPE_CHECK_INSTANCE_CAST ((obj), GO_TYPE_FILE_SAVER, GOFileSaver))
118 #define GO_IS_FILE_SAVER(obj)          (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GO_TYPE_FILE_SAVER))
119 
120 typedef void (*GOFileSaverSaveFunc) (GOFileSaver const *fs,
121 				     GOIOContext *io_context,
122 				     GoView const *view,
123 				     GsfOutput *output);
124 
125 GType go_file_saver_get_type (void);
126 
127 GOFileSaver *go_file_saver_new (char const *id,
128 				char const *extension,
129 				char const *description,
130 				GOFileFormatLevel level,
131 				GOFileSaverSaveFunc save_func);
132 
133 
134 void          go_file_saver_set_save_scope (GOFileSaver *fs, GOFileSaveScope scope);
135 GOFileSaveScope go_file_saver_get_save_scope (GOFileSaver const *fs);
136 
137 gboolean     go_file_saver_set_export_options (GOFileSaver *fs,
138 					       GODoc *doc,
139 					       const char *options,
140 					       GError **err);
141 
142 void         go_file_saver_save (GOFileSaver const *fs, GOIOContext *io_context,
143 				 GoView *view,
144 				 GsfOutput *output);
145 void         go_file_saver_set_overwrite_files	(GOFileSaver *fs,
146 						 gboolean overwrite);
147 char const *go_file_saver_get_id	  	(GOFileSaver const *fs);
148 char const *go_file_saver_get_extension	(GOFileSaver const *fs);
149 char const *go_file_saver_get_mime_type	(GOFileSaver const *fs);
150 char const *go_file_saver_get_description	(GOFileSaver const *fs);
151 GOFileFormatLevel go_file_saver_get_format_level	(GOFileSaver const *fs);
152 
153 /*
154  *
155  */
156 
157 GList *go_get_file_openers (void);
158 void		 go_file_opener_unregister (GOFileOpener *fo);
159 void		 go_file_opener_register   (GOFileOpener *fo, gint priority);
160 GOFileOpener	*go_file_opener_for_id	    (char const *id);
161 
162 GList *go_get_file_savers (void);
163 void go_file_saver_unregister	(GOFileSaver *fs);
164 void go_file_saver_register	(GOFileSaver *fs);
165 void go_file_saver_register_as_default (GOFileSaver *fs, gint priority);
166 
167 GOFileSaver	*go_file_saver_get_default (void);
168 GOFileSaver	*go_file_saver_for_mime_type	(char const *mime_type);
169 GOFileSaver	*go_file_saver_for_file_name	(char const *file_name);
170 GOFileSaver	*go_file_saver_for_id		(char const *id);
171 
172 G_END_DECLS
173 
174 #endif /* _GOFFICE_FILE_H_ */
175