]> www.fi.muni.cz Git - evince.git/blob - libview/ev-jobs.h
[libview] Remove unimplemented method ev_job_is_cancelled()
[evince.git] / libview / ev-jobs.h
1 /* this file is part of evince, a gnome document viewer
2  *
3  *  Copyright (C) 2008 Carlos Garcia Campos <carlosgc@gnome.org>
4  *  Copyright (C) 2005 Red Hat, Inc
5  *
6  * Evince is free software; you can redistribute it and/or modify it
7  * under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  *
11  * Evince is distributed in the hope that it will be useful, but
12  * WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14  * General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software
18  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
19  */
20
21 #if !defined (__EV_EVINCE_VIEW_H_INSIDE__) && !defined (EVINCE_COMPILATION)
22 #error "Only <evince-view.h> can be included directly."
23 #endif
24
25 #ifndef __EV_JOBS_H__
26 #define __EV_JOBS_H__
27
28 #include <gio/gio.h>
29 #include <gtk/gtk.h>
30 #include <cairo.h>
31
32 #include <evince-document.h>
33
34 G_BEGIN_DECLS
35
36 typedef struct _EvJob EvJob;
37 typedef struct _EvJobClass EvJobClass;
38
39 typedef struct _EvJobRender EvJobRender;
40 typedef struct _EvJobRenderClass EvJobRenderClass;
41
42 typedef struct _EvJobThumbnail EvJobThumbnail;
43 typedef struct _EvJobThumbnailClass EvJobThumbnailClass;
44
45 typedef struct _EvJobLinks EvJobLinks;
46 typedef struct _EvJobLinksClass EvJobLinksClass;
47
48 typedef struct _EvJobAttachments EvJobAttachments;
49 typedef struct _EvJobAttachmentsClass EvJobAttachmentsClass;
50
51 typedef struct _EvJobFonts EvJobFonts;
52 typedef struct _EvJobFontsClass EvJobFontsClass;
53
54 typedef struct _EvJobLoad EvJobLoad;
55 typedef struct _EvJobLoadClass EvJobLoadClass;
56
57 typedef struct _EvJobSave EvJobSave;
58 typedef struct _EvJobSaveClass EvJobSaveClass;
59
60 typedef struct _EvJobFind EvJobFind;
61 typedef struct _EvJobFindClass EvJobFindClass;
62
63 typedef struct _EvJobLayers EvJobLayers;
64 typedef struct _EvJobLayersClass EvJobLayersClass;
65
66 typedef struct _EvJobExport EvJobExport;
67 typedef struct _EvJobExportClass EvJobExportClass;
68
69 typedef struct _EvJobPrint EvJobPrint;
70 typedef struct _EvJobPrintClass EvJobPrintClass;
71
72 #define EV_TYPE_JOB                          (ev_job_get_type())
73 #define EV_JOB(object)                       (G_TYPE_CHECK_INSTANCE_CAST((object), EV_TYPE_JOB, EvJob))
74 #define EV_JOB_CLASS(klass)                  (G_TYPE_CHECK_CLASS_CAST((klass), EV_TYPE_JOB, EvJobClass))
75 #define EV_IS_JOB(object)                    (G_TYPE_CHECK_INSTANCE_TYPE((object), EV_TYPE_JOB))
76 #define EV_JOB_GET_CLASS(object)             (G_TYPE_INSTANCE_GET_CLASS((object), EV_TYPE_JOB, EvJobClass))
77
78 #define EV_TYPE_JOB_LINKS                    (ev_job_links_get_type())
79 #define EV_JOB_LINKS(object)                 (G_TYPE_CHECK_INSTANCE_CAST((object), EV_TYPE_JOB_LINKS, EvJobLinks))
80 #define EV_JOB_LINKS_CLASS(klass)            (G_TYPE_CHECK_CLASS_CAST((klass), EV_TYPE_JOB_LINKS, EvJobLinksClass))
81 #define EV_IS_JOB_LINKS(object)              (G_TYPE_CHECK_INSTANCE_TYPE((object), EV_TYPE_JOB_LINKS))
82
83 #define EV_TYPE_JOB_ATTACHMENTS              (ev_job_attachments_get_type())
84 #define EV_JOB_ATTACHMENTS(object)           (G_TYPE_CHECK_INSTANCE_CAST((object), EV_TYPE_JOB_ATTACHMENTS, EvJobAttachments))
85 #define EV_JOB_ATTACHMENTS_CLASS(klass)      (G_TYPE_CHECK_CLASS_CAST((klass), EV_TYPE_JOB_ATTACHMENTS, EvJobAttachmentsClass))
86 #define EV_IS_JOB_ATTACHMENTS(object)        (G_TYPE_CHECK_INSTANCE_TYPE((object), EV_TYPE_JOB_ATTACHMENTS))
87
88 #define EV_TYPE_JOB_RENDER                   (ev_job_render_get_type())
89 #define EV_JOB_RENDER(object)                (G_TYPE_CHECK_INSTANCE_CAST((object), EV_TYPE_JOB_RENDER, EvJobRender))
90 #define EV_JOB_RENDER_CLASS(klass)           (G_TYPE_CHECK_CLASS_CAST((klass), EV_TYPE_JOB_RENDER, EvJobRenderClass))
91 #define EV_IS_JOB_RENDER(object)             (G_TYPE_CHECK_INSTANCE_TYPE((object), EV_TYPE_JOB_RENDER))
92
93 #define EV_TYPE_JOB_THUMBNAIL                (ev_job_thumbnail_get_type())
94 #define EV_JOB_THUMBNAIL(object)             (G_TYPE_CHECK_INSTANCE_CAST((object), EV_TYPE_JOB_THUMBNAIL, EvJobThumbnail))
95 #define EV_JOB_THUMBNAIL_CLASS(klass)        (G_TYPE_CHECK_CLASS_CAST((klass), EV_TYPE_JOB_THUMBNAIL, EvJobThumbnailClass))
96 #define EV_IS_JOB_THUMBNAIL(object)          (G_TYPE_CHECK_INSTANCE_TYPE((object), EV_TYPE_JOB_THUMBNAIL))
97
98 #define EV_TYPE_JOB_FONTS                    (ev_job_fonts_get_type())
99 #define EV_JOB_FONTS(object)                 (G_TYPE_CHECK_INSTANCE_CAST((object), EV_TYPE_JOB_FONTS, EvJobFonts))
100 #define EV_JOB_FONTS_CLASS(klass)            (G_TYPE_CHECK_CLASS_CAST((klass), EV_TYPE_JOB_FONTS, EvJobFontsClass))
101 #define EV_IS_JOB_FONTS(object)              (G_TYPE_CHECK_INSTANCE_TYPE((object), EV_TYPE_JOB_FONTS))
102
103 #define EV_TYPE_JOB_LOAD                     (ev_job_load_get_type())
104 #define EV_JOB_LOAD(object)                  (G_TYPE_CHECK_INSTANCE_CAST((object), EV_TYPE_JOB_LOAD, EvJobLoad))
105 #define EV_JOB_LOAD_CLASS(klass)             (G_TYPE_CHECK_CLASS_CAST((klass), EV_TYPE_JOB_LOAD, EvJobLoadClass))
106 #define EV_IS_JOB_LOAD(object)               (G_TYPE_CHECK_INSTANCE_TYPE((object), EV_TYPE_JOB_LOAD))
107
108 #define EV_TYPE_JOB_SAVE                     (ev_job_save_get_type())
109 #define EV_JOB_SAVE(object)                  (G_TYPE_CHECK_INSTANCE_CAST((object), EV_TYPE_JOB_SAVE, EvJobSave))
110 #define EV_JOB_SAVE_CLASS(klass)             (G_TYPE_CHECK_CLASS_CAST((klass), EV_TYPE_JOB_SAVE, EvJobSaveClass))
111 #define EV_IS_JOB_SAVE(object)               (G_TYPE_CHECK_INSTANCE_TYPE((object), EV_TYPE_JOB_SAVE))
112
113 #define EV_TYPE_JOB_FIND                     (ev_job_find_get_type())
114 #define EV_JOB_FIND(object)                  (G_TYPE_CHECK_INSTANCE_CAST((object), EV_TYPE_JOB_FIND, EvJobFind))
115 #define EV_JOB_FIND_CLASS(klass)             (G_TYPE_CHECK_CLASS_CAST((klass), EV_TYPE_JOB_FIND, EvJobFindClass))
116 #define EV_IS_JOB_FIND(object)               (G_TYPE_CHECK_INSTANCE_TYPE((object), EV_TYPE_JOB_FIND))
117
118 #define EV_TYPE_JOB_LAYERS                   (ev_job_layers_get_type())
119 #define EV_JOB_LAYERS(object)                (G_TYPE_CHECK_INSTANCE_CAST((object), EV_TYPE_JOB_LAYERS, EvJobLayers))
120 #define EV_JOB_LAYERS_CLASS(klass)           (G_TYPE_CHECK_CLASS_CAST((klass), EV_TYPE_JOB_LAYERS, EvJobLayersClass))
121 #define EV_IS_JOB_LAYERS(object)             (G_TYPE_CHECK_INSTANCE_TYPE((object), EV_TYPE_JOB_LAYERS))
122
123 #define EV_TYPE_JOB_EXPORT                    (ev_job_export_get_type())
124 #define EV_JOB_EXPORT(object)                 (G_TYPE_CHECK_INSTANCE_CAST((object), EV_TYPE_JOB_EXPORT, EvJobExport))
125 #define EV_JOB_EXPORT_CLASS(klass)            (G_TYPE_CHECK_CLASS_CAST((klass), EV_TYPE_JOB_EXPORT, EvJobExportClass))
126 #define EV_IS_JOB_EXPORT(object)              (G_TYPE_CHECK_INSTANCE_TYPE((object), EV_TYPE_JOB_EXPORT))
127
128 #define EV_TYPE_JOB_PRINT                    (ev_job_print_get_type())
129 #define EV_JOB_PRINT(object)                 (G_TYPE_CHECK_INSTANCE_CAST((object), EV_TYPE_JOB_PRINT, EvJobPrint))
130 #define EV_JOB_PRINT_CLASS(klass)            (G_TYPE_CHECK_CLASS_CAST((klass), EV_TYPE_JOB_PRINT, EvJobPrintClass))
131 #define EV_IS_JOB_PRINT(object)              (G_TYPE_CHECK_INSTANCE_TYPE((object), EV_TYPE_JOB_PRINT))
132
133 typedef enum {
134         EV_JOB_RUN_THREAD,
135         EV_JOB_RUN_MAIN_LOOP
136 } EvJobRunMode;
137
138 struct _EvJob
139 {
140         GObject parent;
141         
142         EvDocument *document;
143
144         EvJobRunMode run_mode;
145
146         guint cancelled : 1;
147         guint finished : 1;
148         guint failed : 1;
149         
150         GError *error;
151         GCancellable *cancellable;
152
153         guint idle_finished_id;
154         guint idle_cancelled_id;
155 };
156
157 struct _EvJobClass
158 {
159         GObjectClass parent_class;
160
161         gboolean (*run)         (EvJob *job);
162         
163         /* Signals */
164         void     (* cancelled)  (EvJob *job);
165         void     (* finished)   (EvJob *job);
166 };
167
168 struct _EvJobLinks
169 {
170         EvJob parent;
171
172         GtkTreeModel *model;
173 };
174
175 struct _EvJobLinksClass
176 {
177         EvJobClass parent_class;
178 };
179
180 struct _EvJobAttachments
181 {
182         EvJob parent;
183
184         GList *attachments;
185 };
186
187 struct _EvJobAttachmentsClass
188 {
189         EvJobClass parent_class;
190 };
191
192 typedef enum {
193         EV_RENDER_INCLUDE_NONE      = 0,
194         EV_RENDER_INCLUDE_LINKS     = 1 << 0,
195         EV_RENDER_INCLUDE_TEXT      = 1 << 1,
196         EV_RENDER_INCLUDE_SELECTION = 1 << 2,
197         EV_RENDER_INCLUDE_IMAGES    = 1 << 3,
198         EV_RENDER_INCLUDE_FORMS     = 1 << 4,
199         EV_RENDER_INCLUDE_ANNOTS    = 1 << 5,
200         EV_RENDER_INCLUDE_ALL       = (1 << 6) - 1
201 } EvRenderFlags;
202
203 struct _EvJobRender
204 {
205         EvJob parent;
206
207         gint page;
208         gint rotation;
209         gdouble scale;
210
211         EvPage *ev_page;
212         gboolean page_ready;
213         gint target_width;
214         gint target_height;
215         cairo_surface_t *surface;
216
217         GList *link_mapping;
218         GdkRegion *text_mapping;
219         GList *image_mapping;
220         GList *form_field_mapping;
221         GList *annots_mapping;
222
223         cairo_surface_t *selection;
224         GdkRegion *selection_region;
225         EvRectangle selection_points;
226         EvSelectionStyle selection_style;
227         GdkColor base;
228         GdkColor text; 
229
230         EvRenderFlags flags;
231 };
232
233 struct _EvJobRenderClass
234 {
235         EvJobClass parent_class;
236
237         void    (* page_ready) (EvJobRender *job);
238 };
239
240 struct _EvJobThumbnail
241 {
242         EvJob parent;
243
244         gint page;
245         gint rotation;
246         gdouble scale;
247         
248         GdkPixbuf *thumbnail;
249 };
250
251 struct _EvJobThumbnailClass
252 {
253         EvJobClass parent_class;
254 };
255
256 struct _EvJobFonts
257 {
258         EvJob parent;
259         gboolean scan_completed;
260 };
261
262 struct _EvJobFontsClass
263 {
264         EvJobClass parent_class;
265
266         /* Signals */
267         void (* updated)  (EvJobFonts *job,
268                            gdouble     progress);
269 };
270
271 struct _EvJobLoad
272 {
273         EvJob parent;
274
275         gchar *uri;
276         gchar *password;
277 };
278
279 struct _EvJobLoadClass
280 {
281         EvJobClass parent_class;
282 };
283
284 struct _EvJobSave
285 {
286         EvJob parent;
287
288         gchar *uri;
289         gchar *document_uri;
290 };
291
292 struct _EvJobSaveClass
293 {
294         EvJobClass parent_class;
295 };
296
297 struct _EvJobFind
298 {
299         EvJob parent;
300
301         gint start_page;
302         gint current_page;
303         gint n_pages;
304         GList **pages;
305         gchar *text;
306         gboolean case_sensitive;
307         gboolean has_results;
308 };
309
310 struct _EvJobFindClass
311 {
312         EvJobClass parent_class;
313
314         /* Signals */
315         void (* updated)  (EvJobFind *job,
316                            gint       page);
317 };
318
319 struct _EvJobLayers
320 {
321         EvJob parent;
322
323         GtkTreeModel *model;
324 };
325
326 struct _EvJobLayersClass
327 {
328         EvJobClass parent_class;
329 };
330
331 struct _EvJobExport
332 {
333         EvJob parent;
334
335         gint page;
336         EvRenderContext *rc;
337 };
338
339 struct _EvJobExportClass
340 {
341         EvJobClass parent_class;
342 };
343
344 struct _EvJobPrint
345 {
346         EvJob parent;
347
348         gint page;
349         cairo_t *cr;
350 };
351
352 struct _EvJobPrintClass
353 {
354         EvJobClass parent_class;
355 };
356
357 /* Base job class */
358 GType           ev_job_get_type           (void) G_GNUC_CONST;
359 gboolean        ev_job_run                (EvJob          *job);
360 void            ev_job_cancel             (EvJob          *job);
361 void            ev_job_failed             (EvJob          *job,
362                                            GQuark          domain,
363                                            gint            code,
364                                            const gchar    *format,
365                                            ...);
366 void            ev_job_failed_from_error  (EvJob          *job,
367                                            GError         *error);
368 void            ev_job_succeeded          (EvJob          *job);
369 gboolean        ev_job_is_finished        (EvJob          *job);
370 gboolean        ev_job_is_failed          (EvJob          *job);
371 EvJobRunMode    ev_job_get_run_mode       (EvJob          *job);
372 void            ev_job_set_run_mode       (EvJob          *job,
373                                            EvJobRunMode    run_mode);
374
375 /* EvJobLinks */
376 GType           ev_job_links_get_type     (void) G_GNUC_CONST;
377 EvJob          *ev_job_links_new          (EvDocument     *document);
378
379 /* EvJobAttachments */
380 GType           ev_job_attachments_get_type (void) G_GNUC_CONST;
381 EvJob          *ev_job_attachments_new      (EvDocument     *document);
382
383 /* EvJobRender */
384 GType           ev_job_render_get_type    (void) G_GNUC_CONST;
385 EvJob          *ev_job_render_new         (EvDocument      *document,
386                                            gint             page,
387                                            gint             rotation,
388                                            gdouble          scale,
389                                            gint             width,
390                                            gint             height,
391                                            EvRenderFlags    flags);
392 void     ev_job_render_set_selection_info (EvJobRender     *job,
393                                            EvRectangle     *selection_points,
394                                            EvSelectionStyle selection_style,
395                                            GdkColor        *text,
396                                            GdkColor        *base);
397 /* EvJobThumbnail */
398 GType           ev_job_thumbnail_get_type (void) G_GNUC_CONST;
399 EvJob          *ev_job_thumbnail_new      (EvDocument      *document,
400                                            gint             page,
401                                            gint             rotation,
402                                            gdouble          scale);
403 /* EvJobFonts */
404 GType           ev_job_fonts_get_type     (void) G_GNUC_CONST;
405 EvJob          *ev_job_fonts_new          (EvDocument      *document);
406
407 /* EvJobLoad */
408 GType           ev_job_load_get_type      (void) G_GNUC_CONST;
409 EvJob          *ev_job_load_new           (const gchar     *uri);
410 void            ev_job_load_set_uri       (EvJobLoad       *load,
411                                            const gchar     *uri);
412 void            ev_job_load_set_password  (EvJobLoad       *job,
413                                            const gchar     *password);
414
415 /* EvJobSave */
416 GType           ev_job_save_get_type      (void) G_GNUC_CONST;
417 EvJob          *ev_job_save_new           (EvDocument      *document,
418                                            const gchar     *uri,
419                                            const gchar     *document_uri);
420 /* EvJobFind */
421 GType           ev_job_find_get_type      (void) G_GNUC_CONST;
422 EvJob          *ev_job_find_new           (EvDocument      *document,
423                                            gint             start_page,
424                                            gint             n_pages,
425                                            const gchar     *text,
426                                            gboolean         case_sensitive);
427 gint            ev_job_find_get_n_results (EvJobFind       *job,
428                                            gint             pages);
429 gdouble         ev_job_find_get_progress  (EvJobFind       *job);
430 gboolean        ev_job_find_has_results   (EvJobFind       *job);
431 GList         **ev_job_find_get_results   (EvJobFind       *job);
432
433 /* EvJobLayers */
434 GType           ev_job_layers_get_type    (void) G_GNUC_CONST;
435 EvJob          *ev_job_layers_new         (EvDocument     *document);
436
437 /* EvJobExport */
438 GType           ev_job_export_get_type    (void) G_GNUC_CONST;
439 EvJob          *ev_job_export_new         (EvDocument     *document);
440 void            ev_job_export_set_page    (EvJobExport    *job,
441                                            gint            page);
442 /* EvJobPrint */
443 GType           ev_job_print_get_type    (void) G_GNUC_CONST;
444 EvJob          *ev_job_print_new         (EvDocument     *document);
445 void            ev_job_print_set_page    (EvJobPrint     *job,
446                                           gint            page);
447 void            ev_job_print_set_cairo   (EvJobPrint     *job,
448                                           cairo_t        *cr);
449
450 G_END_DECLS
451
452 #endif /* __EV_JOBS_H__ */