X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=blobdiff_plain;ds=sidebyside;f=shell%2Fev-jobs.h;h=27b40a1c102a31f83f4d629c44a632afab31bfe9;hb=b2ad055bb54dd89f3e8748302cfbd5c6f746d6a4;hp=fc681d371a2ec43d3eead18ab954d4f8b51bb562;hpb=217797d63b2d3b1c9a7a0511af1bbf3d99f0d482;p=evince.git diff --git a/shell/ev-jobs.h b/shell/ev-jobs.h index fc681d37..27b40a1c 100644 --- a/shell/ev-jobs.h +++ b/shell/ev-jobs.h @@ -1,5 +1,6 @@ /* this file is part of evince, a gnome document viewer * + * Copyright (C) 2008 Carlos Garcia Campos * Copyright (C) 2005 Red Hat, Inc * * Evince is free software; you can redistribute it and/or modify it @@ -20,8 +21,12 @@ #ifndef __EV_JOBS_H__ #define __EV_JOBS_H__ +#include #include + #include "ev-document.h" +#include "ev-selection.h" +#include "ev-render-context.h" #include "ev-window.h" G_BEGIN_DECLS @@ -38,25 +43,43 @@ typedef struct _EvJobThumbnailClass EvJobThumbnailClass; typedef struct _EvJobLinks EvJobLinks; typedef struct _EvJobLinksClass EvJobLinksClass; +typedef struct _EvJobAttachments EvJobAttachments; +typedef struct _EvJobAttachmentsClass EvJobAttachmentsClass; + typedef struct _EvJobFonts EvJobFonts; typedef struct _EvJobFontsClass EvJobFontsClass; typedef struct _EvJobLoad EvJobLoad; typedef struct _EvJobLoadClass EvJobLoadClass; -typedef struct _EvJobPrint EvJobPrint; -typedef struct _EvJobPrintClass EvJobPrintClass; +typedef struct _EvJobSave EvJobSave; +typedef struct _EvJobSaveClass EvJobSaveClass; + +typedef struct _EvJobFind EvJobFind; +typedef struct _EvJobFindClass EvJobFindClass; + +typedef struct _EvJobLayers EvJobLayers; +typedef struct _EvJobLayersClass EvJobLayersClass; + +typedef struct _EvJobExport EvJobExport; +typedef struct _EvJobExportClass EvJobExportClass; #define EV_TYPE_JOB (ev_job_get_type()) #define EV_JOB(object) (G_TYPE_CHECK_INSTANCE_CAST((object), EV_TYPE_JOB, EvJob)) #define EV_JOB_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), EV_TYPE_JOB, EvJobClass)) #define EV_IS_JOB(object) (G_TYPE_CHECK_INSTANCE_TYPE((object), EV_TYPE_JOB)) +#define EV_JOB_GET_CLASS(object) (G_TYPE_INSTANCE_GET_CLASS((object), EV_TYPE_JOB, EvJobClass)) #define EV_TYPE_JOB_LINKS (ev_job_links_get_type()) #define EV_JOB_LINKS(object) (G_TYPE_CHECK_INSTANCE_CAST((object), EV_TYPE_JOB_LINKS, EvJobLinks)) #define EV_JOB_LINKS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), EV_TYPE_JOB_LINKS, EvJobLinksClass)) #define EV_IS_JOB_LINKS(object) (G_TYPE_CHECK_INSTANCE_TYPE((object), EV_TYPE_JOB_LINKS)) +#define EV_TYPE_JOB_ATTACHMENTS (ev_job_attachments_get_type()) +#define EV_JOB_ATTACHMENTS(object) (G_TYPE_CHECK_INSTANCE_CAST((object), EV_TYPE_JOB_ATTACHMENTS, EvJobAttachments)) +#define EV_JOB_ATTACHMENTS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), EV_TYPE_JOB_ATTACHMENTS, EvJobAttachmentsClass)) +#define EV_IS_JOB_ATTACHMENTS(object) (G_TYPE_CHECK_INSTANCE_TYPE((object), EV_TYPE_JOB_ATTACHMENTS)) + #define EV_TYPE_JOB_RENDER (ev_job_render_get_type()) #define EV_JOB_RENDER(object) (G_TYPE_CHECK_INSTANCE_CAST((object), EV_TYPE_JOB_RENDER, EvJobRender)) #define EV_JOB_RENDER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), EV_TYPE_JOB_RENDER, EvJobRenderClass)) @@ -77,29 +100,59 @@ typedef struct _EvJobPrintClass EvJobPrintClass; #define EV_JOB_LOAD_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), EV_TYPE_JOB_LOAD, EvJobLoadClass)) #define EV_IS_JOB_LOAD(object) (G_TYPE_CHECK_INSTANCE_TYPE((object), EV_TYPE_JOB_LOAD)) -#define EV_TYPE_JOB_PRINT (ev_job_print_get_type()) -#define EV_JOB_PRINT(object) (G_TYPE_CHECK_INSTANCE_CAST((object), EV_TYPE_JOB_PRINT, EvJobPrint)) -#define EV_JOB_PRINT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), EV_TYPE_JOB_PRINT, EvJobPrintClass)) -#define EV_IS_JOB_PRINT(object) (G_TYPE_CHECK_INSTANCE_TYPE((object), EV_TYPE_JOB_PRINT)) +#define EV_TYPE_JOB_SAVE (ev_job_save_get_type()) +#define EV_JOB_SAVE(object) (G_TYPE_CHECK_INSTANCE_CAST((object), EV_TYPE_JOB_SAVE, EvJobSave)) +#define EV_JOB_SAVE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), EV_TYPE_JOB_SAVE, EvJobSaveClass)) +#define EV_IS_JOB_SAVE(object) (G_TYPE_CHECK_INSTANCE_TYPE((object), EV_TYPE_JOB_SAVE)) + +#define EV_TYPE_JOB_FIND (ev_job_find_get_type()) +#define EV_JOB_FIND(object) (G_TYPE_CHECK_INSTANCE_CAST((object), EV_TYPE_JOB_FIND, EvJobFind)) +#define EV_JOB_FIND_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), EV_TYPE_JOB_FIND, EvJobFindClass)) +#define EV_IS_JOB_FIND(object) (G_TYPE_CHECK_INSTANCE_TYPE((object), EV_TYPE_JOB_FIND)) + +#define EV_TYPE_JOB_LAYERS (ev_job_layers_get_type()) +#define EV_JOB_LAYERS(object) (G_TYPE_CHECK_INSTANCE_CAST((object), EV_TYPE_JOB_LAYERS, EvJobLayers)) +#define EV_JOB_LAYERS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), EV_TYPE_JOB_LAYERS, EvJobLayersClass)) +#define EV_IS_JOB_LAYERS(object) (G_TYPE_CHECK_INSTANCE_TYPE((object), EV_TYPE_JOB_LAYERS)) + +#define EV_TYPE_JOB_EXPORT (ev_job_export_get_type()) +#define EV_JOB_EXPORT(object) (G_TYPE_CHECK_INSTANCE_CAST((object), EV_TYPE_JOB_EXPORT, EvJobExport)) +#define EV_JOB_EXPORT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), EV_TYPE_JOB_EXPORT, EvJobExportClass)) +#define EV_IS_JOB_EXPORT(object) (G_TYPE_CHECK_INSTANCE_TYPE((object), EV_TYPE_JOB_EXPORT)) typedef enum { - EV_JOB_PRIORITY_LOW, - EV_JOB_PRIORITY_HIGH, -} EvJobPriority; + EV_JOB_RUN_THREAD, + EV_JOB_RUN_MAIN_LOOP +} EvJobRunMode; struct _EvJob { GObject parent; + EvDocument *document; - gboolean finished; - gboolean async; + + EvJobRunMode run_mode; + + guint cancelled : 1; + guint finished : 1; + guint failed : 1; + + GError *error; + GCancellable *cancellable; + + guint idle_finished_id; + guint idle_cancelled_id; }; struct _EvJobClass { GObjectClass parent_class; - void (* finished) (EvJob *job); + gboolean (*run) (EvJob *job); + + /* Signals */ + void (* cancelled) (EvJob *job); + void (* finished) (EvJob *job); }; struct _EvJobLinks @@ -114,11 +167,38 @@ struct _EvJobLinksClass EvJobClass parent_class; }; +struct _EvJobAttachments +{ + EvJob parent; + + GList *attachments; +}; + +struct _EvJobAttachmentsClass +{ + EvJobClass parent_class; +}; + +typedef enum { + EV_RENDER_INCLUDE_NONE = 0, + EV_RENDER_INCLUDE_LINKS = 1 << 0, + EV_RENDER_INCLUDE_TEXT = 1 << 1, + EV_RENDER_INCLUDE_SELECTION = 1 << 2, + EV_RENDER_INCLUDE_IMAGES = 1 << 3, + EV_RENDER_INCLUDE_FORMS = 1 << 4, + EV_RENDER_INCLUDE_ALL = (1 << 5) - 1 +} EvRenderFlags; + struct _EvJobRender { EvJob parent; - EvRenderContext *rc; + gint page; + gint rotation; + gdouble scale; + + EvPage *ev_page; + gboolean page_ready; gint target_width; gint target_height; cairo_surface_t *surface; @@ -126,29 +206,33 @@ struct _EvJobRender GList *link_mapping; GdkRegion *text_mapping; GList *image_mapping; + GList *form_field_mapping; cairo_surface_t *selection; GdkRegion *selection_region; EvRectangle selection_points; + EvSelectionStyle selection_style; GdkColor base; GdkColor text; - gint include_links : 1; - gint include_text : 1; - gint include_selection : 1; - gint include_images : 1; + EvRenderFlags flags; }; struct _EvJobRenderClass { EvJobClass parent_class; + + void (* page_ready) (EvJobRender *job); }; struct _EvJobThumbnail { EvJob parent; - EvRenderContext *rc; + gint page; + gint rotation; + gdouble scale; + GdkPixbuf *thumbnail; }; @@ -166,6 +250,10 @@ struct _EvJobFonts struct _EvJobFontsClass { EvJobClass parent_class; + + /* Signals */ + void (* updated) (EvJobFonts *job, + gdouble progress); }; struct _EvJobLoad @@ -174,8 +262,9 @@ struct _EvJobLoad EvLinkDest *dest; EvWindowRunMode mode; - GError *error; + gchar *search_string; gchar *uri; + gchar *password; }; struct _EvJobLoadClass @@ -183,85 +272,155 @@ struct _EvJobLoadClass EvJobClass parent_class; }; -struct _EvJobPrint +struct _EvJobSave { EvJob parent; - GError *error; - const gchar *format; - gchar *temp_file; - EvPrintRange *ranges; - gint n_ranges; - EvPrintPageSet page_set; - gint copies; - gboolean collate; - gboolean reverse; - gdouble width; - gdouble height; + gchar *uri; + gchar *document_uri; +}; + +struct _EvJobSaveClass +{ + EvJobClass parent_class; +}; + +struct _EvJobFind +{ + EvJob parent; + + gint start_page; + gint current_page; + gint n_pages; + GList **pages; + gchar *text; + gboolean case_sensitive; + gboolean has_results; +}; + +struct _EvJobFindClass +{ + EvJobClass parent_class; + + /* Signals */ + void (* updated) (EvJobFind *job, + gint page); +}; + +struct _EvJobLayers +{ + EvJob parent; + + GtkTreeModel *model; }; -struct _EvJobPrintClass +struct _EvJobLayersClass +{ + EvJobClass parent_class; +}; + +struct _EvJobExport +{ + EvJob parent; + + gint page; + EvRenderContext *rc; +}; + +struct _EvJobExportClass { EvJobClass parent_class; }; /* Base job class */ GType ev_job_get_type (void) G_GNUC_CONST; -void ev_job_finished (EvJob *job); +gboolean ev_job_run (EvJob *job); +void ev_job_cancel (EvJob *job); +void ev_job_failed (EvJob *job, + GQuark domain, + gint code, + const gchar *format, + ...); +void ev_job_failed_from_error (EvJob *job, + GError *error); +void ev_job_succeeded (EvJob *job); +gboolean ev_job_is_cancelled (EvJob *job); +gboolean ev_job_is_finished (EvJob *job); +gboolean ev_job_is_failed (EvJob *job); +EvJobRunMode ev_job_get_run_mode (EvJob *job); +void ev_job_set_run_mode (EvJob *job, + EvJobRunMode run_mode); /* EvJobLinks */ GType ev_job_links_get_type (void) G_GNUC_CONST; EvJob *ev_job_links_new (EvDocument *document); -void ev_job_links_run (EvJobLinks *thumbnail); + +/* EvJobAttachments */ +GType ev_job_attachments_get_type (void) G_GNUC_CONST; +EvJob *ev_job_attachments_new (EvDocument *document); /* EvJobRender */ GType ev_job_render_get_type (void) G_GNUC_CONST; EvJob *ev_job_render_new (EvDocument *document, - EvRenderContext *rc, + gint page, + gint rotation, + gdouble scale, gint width, gint height, + EvRenderFlags flags); +void ev_job_render_set_selection_info (EvJobRender *job, EvRectangle *selection_points, + EvSelectionStyle selection_style, GdkColor *text, - GdkColor *base, - gboolean include_links, - gboolean include_images, - gboolean include_text, - gboolean include_selection); -void ev_job_render_run (EvJobRender *thumbnail); - + GdkColor *base); /* EvJobThumbnail */ GType ev_job_thumbnail_get_type (void) G_GNUC_CONST; EvJob *ev_job_thumbnail_new (EvDocument *document, - EvRenderContext *rc); -void ev_job_thumbnail_run (EvJobThumbnail *thumbnail); - + gint page, + gint rotation, + gdouble scale); /* EvJobFonts */ GType ev_job_fonts_get_type (void) G_GNUC_CONST; EvJob *ev_job_fonts_new (EvDocument *document); -void ev_job_fonts_run (EvJobFonts *fonts); /* EvJobLoad */ GType ev_job_load_get_type (void) G_GNUC_CONST; EvJob *ev_job_load_new (const gchar *uri, EvLinkDest *dest, - EvWindowRunMode mode); + EvWindowRunMode mode, + const gchar *search_string); void ev_job_load_set_uri (EvJobLoad *load, const gchar *uri); -void ev_job_load_run (EvJobLoad *load); - -/* EvJobPrint */ -GType ev_job_print_get_type (void) G_GNUC_CONST; -EvJob *ev_job_print_new (EvDocument *document, - const gchar *format, - gdouble width, - gdouble height, - EvPrintRange *ranges, - gint n_ranges, - EvPrintPageSet page_set, - gint copies, - gdouble collate, - gdouble reverse); -void ev_job_print_run (EvJobPrint *print); +void ev_job_load_set_password (EvJobLoad *job, + const gchar *password); + +/* EvJobSave */ +GType ev_job_save_get_type (void) G_GNUC_CONST; +EvJob *ev_job_save_new (EvDocument *document, + const gchar *uri, + const gchar *document_uri); +/* EvJobFind */ +GType ev_job_find_get_type (void) G_GNUC_CONST; +EvJob *ev_job_find_new (EvDocument *document, + gint start_page, + gint n_pages, + const gchar *text, + gboolean case_sensitive); +gint ev_job_find_get_n_results (EvJobFind *job, + gint pages); +gdouble ev_job_find_get_progress (EvJobFind *job); +gboolean ev_job_find_has_results (EvJobFind *job); +GList **ev_job_find_get_results (EvJobFind *job); + +/* EvJobLayers */ +GType ev_job_layers_get_type (void) G_GNUC_CONST; +EvJob *ev_job_layers_new (EvDocument *document); + +/* EvJobExport */ +GType ev_job_export_get_type (void) G_GNUC_CONST; +EvJob *ev_job_export_new (EvDocument *document); +void ev_job_export_set_page (EvJobExport *job, + gint page); G_END_DECLS