краткое описание#include <gtk/gtk.h> gtkprintoperation; enum gtkprintstatus; enum gtkprintoperationaction; enum gtkprintoperationresult; enum gtkprinterror; #define gtk_print_error gtkprintoperation* gtk_print_operation_new (void); void gtk_print_operation_set_allow_async (gtkprintoperation *op, gboolean allow_async); void gtk_print_operation_get_error (gtkprintoperation *op, gerror **error); void gtk_print_operation_set_default_page_setup (gtkprintoperation *op, gtkpagesetup *default_page_setup); gtkpagesetup* gtk_print_operation_get_default_page_setup (gtkprintoperation *op); void gtk_print_operation_set_print_settings (gtkprintoperation *op, gtkprintsettings *print_settings); gtkprintsettings* gtk_print_operation_get_print_settings (gtkprintoperation *op); void gtk_print_operation_set_job_name (gtkprintoperation *op, const gchar *job_name); void gtk_print_operation_set_n_pages (gtkprintoperation *op, gint n_pages); void gtk_print_operation_set_current_page (gtkprintoperation *op, gint current_page); void gtk_print_operation_set_use_full_page (gtkprintoperation *op, gboolean full_page); void gtk_print_operation_set_unit (gtkprintoperation *op, gtkunit unit); void gtk_print_operation_set_export_filename (gtkprintoperation *op, const gchar *filename); void gtk_print_operation_set_show_progress (gtkprintoperation *op, gboolean show_progress); void gtk_print_operation_set_track_print_status (gtkprintoperation *op, gboolean track_status); void gtk_print_operation_set_custom_tab_label (gtkprintoperation *op, const gchar *label); gtkprintoperationresult gtk_print_operation_run (gtkprintoperation *op, gtkprintoperationaction action, gtkwindow *parent, gerror **error); void gtk_print_operation_cancel (gtkprintoperation *op); gtkprintstatus gtk_print_operation_get_status (gtkprintoperation *op); const gchar* gtk_print_operation_get_status_string (gtkprintoperation *op); gboolean gtk_print_operation_is_finished (gtkprintoperation *op); void gtk_print_operation_get_error (gtkprintoperation *op, gerror **error); gtkpagesetup* gtk_print_run_page_setup_dialog (gtkwindow *parent, gtkpagesetup *page_setup, gtkprintsettings *settings); void (*gtkpagesetupdonefunc) (gtkpagesetup *page_setup, gpointer data); void gtk_print_run_page_setup_dialog_async (gtkwindow *parent, gtkpagesetup *page_setup, gtkprintsettings *settings, gtkpagesetupdonefunc done_cb, gpointer data); gtkprintoperationpreview; void gtk_print_operation_preview_end_preview (gtkprintoperationpreview *preview); gboolean gtk_print_operation_preview_is_selected (gtkprintoperationpreview *preview, gint page_nr); void gtk_print_operation_preview_render_page (gtkprintoperationpreview *preview, gint page_nr); иерархия объектовgobject +----gtkprintoperation ginterface +----gtkprintoperationpreview предварительные требованияgtkprintoperationpreview требует gobject. реализуемые интерфейсыgtkprintoperation реализует gtkprintoperationpreview. известные реализацииgtkprintoperationpreview реализован gtkprintoperation. свойства"allow-async" gboolean : read / write "current-page" gint : read / write "custom-tab-label" gchararray : read / write "default-page-setup" gtkpagesetup : read / write "export-filename" gchararray : read / write "job-name" gchararray : read / write "n-pages" gint : read / write "print-settings" gtkprintsettings : read / write "show-progress" gboolean : read / write "status" gtkprintstatus : read "status-string" gchararray : read "track-print-status" gboolean : read / write "unit" gtkunit : read / write "use-full-page" gboolean : read / write сигналы"begin-print" void user_function (gtkprintoperation *operation, gtkprintcontext *context, gpointer user_data) : run last "create-custom-widget" gobject* user_function (gtkprintoperation *operation, gpointer user_data) : run last "custom-widget-apply" void user_function (gtkprintoperation *operation, gtkwidget *widget, gpointer user_data) : run last "done" void user_function (gtkprintoperation *operation, gtkprintoperationresult result, gpointer user_data) : run last "draw-page" void user_function (gtkprintoperation *operation, gtkprintcontext *context, gint page_nr, gpointer user_data) : run last "end-print" void user_function (gtkprintoperation *operation, gtkprintcontext *context, gpointer user_data) : run last "paginate" gboolean user_function (gtkprintoperation *operation, gtkprintcontext *context, gpointer user_data) : run last "preview" gboolean user_function (gtkprintoperation *operation, gtkprintoperationpreview *preview, gtkprintcontext *context, gtkwindow *parent, gpointer user_data) : run last "request-page-setup" void user_function (gtkprintoperation *operation, gtkprintcontext *context, gint page_nr, gtkpagesetup *setup, gpointer user_data) : run last "status-changed" void user_function (gtkprintoperation *operation, gpointer user_data) : run last описаниеgtkprintoperation – это высший уровень, портируемого api печати. он выглядит немного иначе чем другие диалоги gtk+, такие как gtkfilechooser, так как некоторые платформы не представляют достаточно инфраструктуры для реализации хороших диалогов печати. на таких платформах, gtkprintoperation использует родные диалоги печати. на платформах которые не обеспечивают родные диалоги печати, gtk+ использует собственный, смотрите gtkprintunixdialog. обычный способ использования high-level
printing api это создание объекта gtkprintoperation
с помощью потом вы вызываете операцию печати
используя пример 1. the high-level printing api static gtkprintsettings *settings = null; static void do_print (void) { gtkprintoperation *print; gtkprintoperationresult res; print = gtk_print_operation_new (); if (settings != null) gtk_print_operation_set_print_settings (print, settings); g_signal_connect (print, "begin_print", g_callback (begin_print), null); g_signal_connect (print, "draw_page", g_callback (draw_page), null); res = gtk_print_operation_run (print, gtk_print_operation_action_print_dialog, gtk_window (main_window), null); if (res == gtk_print_operation_result_apply) { if (settings != null) g_object_unref (settings); settings = g_object_ref (gtk_print_operation_get_print_settings (print)); } g_object_unref (print); }
по умолчанию gtkprintoperation использует
внешние приложения для предварительного
просмотра печатаемой страницы. для
настройки предварительного просмотра
печати приложение должно подключиться
к сигналу предварительного просмотра.
функции печать поддерживается начиная с версии gtk+ 2.10. деталиgtkprintoperationtypedef struct _gtkprintoperation gtkprintoperation; enum gtkprintstatustypedef enum {
gtk_print_status_initial,
gtk_print_status_preparing,
gtk_print_status_generating_data,
gtk_print_status_sending_data,
gtk_print_status_pending,
gtk_print_status_pending_issue,
gtk_print_status_printing,
gtk_print_status_finished,
gtk_print_status_finished_aborted
} gtkprintstatus; выдаёт состояние приблизительно указывая выполнение запущенной операции печати.
enum gtkprintoperationactiontypedef enum {
gtk_print_operation_action_print_dialog,
gtk_print_operation_action_print,
gtk_print_operation_action_preview,
gtk_print_operation_action_export
} gtkprintoperationaction;
параметр
enum gtkprintoperationresulttypedef enum {
gtk_print_operation_result_error,
gtk_print_operation_result_apply,
gtk_print_operation_result_cancel,
gtk_print_operation_result_in_progress
} gtkprintoperationresult;
значение этого типа возвращается из
enum gtkprinterrortypedef enum { gtk_print_error_general, gtk_print_error_internal_error, gtk_print_error_nomem } gtkprinterror; gtk_print_error#define gtk_print_error gtk_print_error_quark () gquark используется для gtkprinterror ошибок. gtk_print_operation_new ()gtkprintoperation* gtk_print_operation_new (void); создаёт новый gtkprintoperation.
начиная с версии 2.10 gtk_print_operation_set_allow_async ()void gtk_print_operation_set_allow_async (gtkprintoperation *op, gboolean allow_async);
устанавливает может ли
начиная с версии 2.10 gtk_print_operation_get_error ()void gtk_print_operation_get_error (gtkprintoperation *op, gerror **error);
эта функция вызывается когда результат
операции печати равен
начиная с версии 2.10 gtk_print_operation_set_default_page_setup ()void gtk_print_operation_set_default_page_setup (gtkprintoperation *op, gtkpagesetup *default_page_setup);
делает эта страница будет использована в
начиная с версии 2.10 gtk_print_operation_get_default_page_setup ()gtkpagesetup* gtk_print_operation_get_default_page_setup (gtkprintoperation *op);
возвращает установки страницы по
умолчанию, смотрите
начиная с версии 2.10 gtk_print_operation_set_print_settings ()void gtk_print_operation_set_print_settings (gtkprintoperation *op, gtkprintsettings *print_settings);
устанавливает настройки принтера для
начиная с версии 2.10 gtk_print_operation_get_print_settings ()gtkprintsettings* gtk_print_operation_get_print_settings (gtkprintoperation *op); возвращает текущие настройки принтера. помните что возвращаемое значение
начиная с версии 2.10 gtk_print_operation_set_job_name ()void gtk_print_operation_set_job_name (gtkprintoperation *op, const gchar *job_name); устанавливает имя задания принтера. имя используется для идентификации задания (например в приложении контроля такой как eggcups). если вы не установили имя задания, gtk+ выберет один из номеров последовательности заданий печати.
начиная с версии 2.10 gtk_print_operation_set_n_pages ()void gtk_print_operation_set_n_pages (gtkprintoperation *op, gint n_pages); устанавливает количество страниц в документе. должно устанавливаться в положительное значение перед началом представления страниц. может быть установлено обработчиком сигнала ::begin-print. запомните, количество страниц помещаемое
в ::request-page-setup и ::draw-page сигналы начинается
с 0, то есть если пользователь выберет
для печати все страницы, последний
сигнал ::draw-page будет для страницы
начиная с версии 2.10 gtk_print_operation_set_current_page ()void gtk_print_operation_set_current_page (gtkprintoperation *op, gint current_page); устанавливает текущую страницу. если она вызвана перед
отметьте сто это имеет смысл только для документов предварительно разбитых постранично.
начиная с версии 2.10 gtk_print_operation_set_use_full_page ()void gtk_print_operation_set_use_full_page (gtkprintoperation *op, gboolean full_page);
если параметр
начиная с версии 2.10 gtk_print_operation_set_unit ()void gtk_print_operation_set_unit (gtkprintoperation *op, gtkunit unit);
устанавливает преобразование полученного
gtkprintcontext в контекст
cairo, таким образом что расстояние измеряется
в единицах
начиная с версии 2.10 gtk_print_operation_set_export_filename ()void gtk_print_operation_set_export_filename (gtkprintoperation *op, const gchar *filename); устанавливает gtkprintoperation для генерации файла, вместо отображения диалога печати. эта функция используется для осуществления операции "export to pdf". в настоящее время, pdf единственный поддерживаемый формат. "print to pdf" поддерживается независимо от этого, позволяя пользователю выбрать пункт "print to pdf" из списка принтеров в диалоге печати.
начиная с версии 2.10 gtk_print_operation_set_show_progress ()void gtk_print_operation_set_show_progress (gtkprintoperation *op, gboolean show_progress);
если параметр
начиная с версии 2.10 gtk_print_operation_set_track_print_status ()void gtk_print_operation_set_track_print_status (gtkprintoperation *op, gboolean track_status);
если track_status равен эта функция часто реализуется используя некоторую форму опроса, поэтому она не должна использоваться без явной необходимости.
начиная с версии 2.10 gtk_print_operation_set_custom_tab_label ()void gtk_print_operation_set_custom_tab_label (gtkprintoperation *op, const gchar *label); устанавливает ярлык для вкладки содержащей виджеты настроек.
начиная с версии 2.10 gtk_print_operation_run ()gtkprintoperationresult gtk_print_operation_run (gtkprintoperation *op, gtkprintoperationaction action, gtkwindow *parent, gerror **error); выполняет операцию печати, сначала позволяя пользователю изменить настройки печати с помощью диалога, а затем печатает документ. обычно эта функция не возвращается
до тех пор пока не выполнит представление
всех страниц. вы можете подключить
сигнал ::status-changed к если вы вызвали if (settings != null)
gtk_print_operation_set_print_settings (print, settings);
if (page_setup != null)
gtk_print_operation_set_default_page_setup (print, page_setup);
g_signal_connect (print, "begin-print",
g_callback (begin_print), &data);
g_signal_connect (print, "draw-page",
g_callback (draw_page), &data);
res = gtk_print_operation_run (print, gtk_print_operation_action_print_dialog, parent, &error);
if (res == gtk_print_operation_result_error)
{
error_dialog = gtk_message_dialog_new (gtk_window (parent),
gtk_dialog_destroy_with_parent,
gtk_message_error,
gtk_buttons_close,
"error printing file:\n
начиная с версии 2.10 gtk_print_operation_cancel ()void gtk_print_operation_cancel (gtkprintoperation *op); прекращает запущенную операцию печати. эта функция может быть вызвана при начале печати, разбиении на страницы или при обработке сигнала draw-page для остановки текущемй выполняемой операции печати.
начиная с версии 2.10 gtk_print_operation_get_status ()gtkprintstatus gtk_print_operation_get_status (gtkprintoperation *op);
определяет статус операции печати.
смотрите также
начиная с версии 2.10 gtk_print_operation_get_status_string ()const gchar* gtk_print_operation_get_status_string (gtkprintoperation *op); возвращает строку представляющую статус операции печати. строка преобразована и удобна для отображения состояния печати например в gtkstatusbar. используйте
начиная с версии 2.10 gtk_print_operation_is_finished ()gboolean gtk_print_operation_is_finished (gtkprintoperation *op);
удобная функция для определения
закончилась ли операция печати успешно
( помните: когда вы позволяете отслеживание статуса операции печати, она может находиться в не завершённом состоянии даже после выполнения, так как статус операции отслеживает статус задания печати на принтере.
начиная с версии 2.10 gtk_print_operation_get_error ()void gtk_print_operation_get_error (gtkprintoperation *op, gerror **error);
вызывается когда результат операции
печати равен
начиная с версии 2.10 gtk_print_run_page_setup_dialog ()gtkpagesetup* gtk_print_run_page_setup_dialog (gtkwindow *parent, gtkpagesetup *page_setup, gtkprintsettings *settings);
запускает диалог параметров страницы,
позволяя пользователю изменять значения
из помните, эта функция может использовать
рекурсию основного цикла (mainloop) для
отображения диалога параметров страницы.
смотрите
начиная с версии 2.10 gtkpagesetupdonefunc ()void (*gtkpagesetupdonefunc) (gtkpagesetup *page_setup, gpointer data);
тип функции помещаемой в
gtk_print_run_page_setup_dialog_async ()void gtk_print_run_page_setup_dialog_async (gtkwindow *parent, gtkpagesetup *page_setup, gtkprintsettings *settings, gtkpagesetupdonefunc done_cb, gpointer data);
запускает диалог параметров страницы,
позволяя пользователю изменять значения
из в отличии от
начиная с версии 2.10 gtkprintoperationpreviewtypedef struct _gtkprintoperationpreview gtkprintoperationpreview; gtk_print_operation_preview_end_preview ()void gtk_print_operation_preview_end_preview (gtkprintoperationpreview *preview); завершает предварительный промотр. эта функция должна вызываться для завершения выбранного предварительного просмотра печати.
начиная с версии 2.10 gtk_print_operation_preview_is_selected ()gboolean gtk_print_operation_preview_is_selected (gtkprintoperationpreview *preview, gint page_nr); определяет включена ли данная страница в набор страниц которые выбраны для печати.
начиная с версии 2.10 gtk_print_operation_preview_render_page ()void gtk_print_operation_preview_render_page (gtkprintoperationpreview *preview, gint page_nr);
представляет страницу для предварительного
просмотра, используя контекст печати
который передаётся в обработчик
gtkprintoperation::preview вместе с помните, этой функции требуется чтобы контекст cairo был связан с контекстом печати.
начиная с версии 2.10 детали свойствсвойство "
|
|
gtkprintoperation в которой издаётся сигнал |
|
gtkprintcontext для текущемй операции |
|
пользовательские данные помещаемые при подключении обработчика сигнала. |
начиная с версии 2.10
gobject* user_function (gtkprintoperation *operation, gpointer user_data) : run last
издаётся при отображении диалога печати. если вы вернёте виджет в обработчик этого сигнала он будет добавлен во вкладку настройки диалога печати. обычно возвращается контейнер со множеством виджетов в нем.
возвращаемым виджетом владеет диалог печати, а время его существования контролирует приложение. однако, виджет гарантировано останется в течении издания сигнала custom-widget-apply в операции. тогда вы сможете прочесть вывод любой информации в которой нуждаетесь от виджетов.
|
gtkprintoperation в которой издаётся сигнал |
|
пользовательские данные помещаемые при подключении обработчика сигнала. |
возвращает : |
виджет настройки который встраивается
в диалог печати, или |
начиная с версии 2.10
void user_function (gtkprintoperation *operation, gtkwidget *widget, gpointer user_data) : run last
издаётся непосредственно перед началом печати, если вы добавили виджет настройки в обработчик create-custom-widget. когда вы получаете этот сигнал, вам нужно прочесть информацию из виджетов настройки, так как не гарантировано что она будет доступна длительное время.
|
gtkprintoperation в которой издаётся сигнал |
|
виджет настройки добавляемый в create-custom-widget |
|
пользовательские данные помещаемые при подключении обработчика сигнала. |
начиная с версии 2.10
void user_function (gtkprintoperation *operation, gtkprintoperationresult result, gpointer user_data) : run last
издаётся когда операция печати завершила
выполнять все запросы печати. result
выдаёт вам информацию о произошедшем
во время печати. если result
это gtk_print_operation_result_error
то для получения подробностей произошедшего
можно вызвать gtk_print_operation_get_error()
.
если вы включили отслеживание состояния
печати, то когда gtk_print_operation_is_finished()
может продолжить возвращать false
после издания этого сигнала.
|
gtkprintoperation в которой издаётся сигнал |
|
результат операции печати |
|
пользовательские данные помещаемые при подключении обработчика сигнала. |
начиная с версии 2.10
void user_function (gtkprintoperation *operation, gtkprintcontext *context, gint page_nr, gpointer user_data) : run last
издаётся для каждой печатаемой страницы.
обработчик сигнала должен представлять
page_nr
's страницу в контексте
cairo полученном из context
используя gtk_print_context_get_cairo_context()
.
static void draw_page (gtkprintoperation *operation, gtkprintcontext *context, gint page_nr, gpointer user_data) { cairo_t *cr; pangolayout *layout; gdouble width, text_height; gint layout_height; pangofontdescription *desc; cr = gtk_print_context_get_cairo_context (context); width = gtk_print_context_get_width (context); cairo_rectangle (cr, 0, 0, width, header_height); cairo_set_source_rgb (cr, 0.8, 0.8, 0.8); cairo_fill (cr); layout = gtk_print_context_create_pango_layout (context); desc = pango_font_description_from_string ("sans 14"); pango_layout_set_font_description (layout, desc); pango_font_description_free (desc); pango_layout_set_text (layout, "some text", -1); pango_layout_set_width (layout, width); pango_layout_set_alignment (layout, pango_align_center); pango_layout_get_size (layout, null, &layout_height); text_height = (gdouble)layout_height / pango_scale; cairo_move_to (cr, width / 2, (header_height - text_height) / 2); pango_cairo_show_layout (cr, layout); g_object_unref (layout); }
используйте gtk_print_operation_set_use_full_page()
и gtk_print_operation_set_unit()
перед началом операции печати для
преобразования в контекст cairo согласно
вашим потребностям.
|
gtkprintoperation в которой издаётся сигнал |
|
gtkprintcontext для текущемй операции |
|
номер текущемй печатаемой страницы |
|
пользовательские данные помещаемые при подключении обработчика сигнала. |
начиная с версии 2.10
void user_function (gtkprintoperation *operation, gtkprintcontext *context, gpointer user_data) : run last
издаётся после представления всех страниц (rendered). обработчик сигнала может очистить любой ресурс который был распределён в обработчике ::begin-print.
|
gtkprintoperation в которой издаётся сигнал |
|
gtkprintcontext для текущемй операции |
|
пользовательские данные помещаемые при подключении обработчика сигнала. |
начиная с версии 2.10
gboolean user_function (gtkprintoperation *operation, gtkprintcontext *context, gpointer user_data) : run last
издаётся после сигнала begin-print, но перед
фактическим началом представления
страниц (rendering). издаётся пока не вернёт
false
.
этот сигнал предназначен для
постраничного разбиения документа в
небольших частях, избегая блокировки
пользовательского интерфейса в течении
длительного времени. обработчик сигнала
должен обновлять количество страниц
используя gtk_print_operation_set_n_pages()
,
и возвращать true
если документ полностью разобран
постранично.
если вам не нужно разбиение по частям, вы можете просто сделать всё в обработчике begin-print, и оттуда же установить количество страниц.
|
gtkprintoperation в которой издаётся сигнал |
|
gtkprintcontext для текущемй операции |
|
пользовательские данные помещаемые при подключении обработчика сигнала. |
возвращает : |
|
начиная с версии 2.10
gboolean user_function (gtkprintoperation *operation, gtkprintoperationpreview *preview, gtkprintcontext *context, gtkwindow *parent, gpointer user_data) : run last
издаётся при запросе предварительного просмотра из родного диалога.
обработчик по умолчанию для этого сигнала, использует внешнее приложение для предварительного просмотра печати.
для осуществления выбора предварительного
просмотра печати, приложение должно
вернуть true
из этого обработчика сигнала. чтобы
использовать поставляемый context
для осуществления предварительного
просмотра, нужно преобразовать в
подходящий cairo контекст с помощью
gtk_print_context_set_cairo_context()
.
реализованный предварительный просмотр
может использовать
gtk_print_operation_preview_is_selected()
и gtk_print_operation_preview_render_page()
для определения страниц которые выбраны
для печати и представлять их. предварительный
просмотр должен заканчиваться вызовом
gtk_print_operation_preview_end_preview()
(обычно в ответ на нажатие пользователем
кнопки close).
|
gtkprintoperation в которой издаётся сигнал |
|
gtkprintcontext для текущемй операции |
|
gtkprintcontext который будет использоваться |
|
gtkwindow для использования
в качестве родительского окна, или
|
|
пользовательские данные помещаемые при подключении обработчика сигнала. |
возвращает : |
|
начиная с версии 2.10
void user_function (gtkprintoperation *operation, gtkprintcontext *context, gint page_nr, gtkpagesetup *setup, gpointer user_data) : run last
издаётся один раз для каждой печатаемой
страницы, давая приложению возможность
изменить параметры страницы. любые
изменения выполненные для setup
будут в силе только для печати этой
страницы.
|
gtkprintoperation в которой издаётся сигнал |
|
gtkprintcontext для текущемй операции |
|
номер текущемй печатаемой страницы |
|
|
|
пользовательские данные помещаемые при подключении обработчика сигнала. |
начиная с версии 2.10
void user_function (gtkprintoperation *operation, gpointer user_data) : run last
издаётся между различными фазами
операции печати. смотрите gtkprintstatus
описывающий различные фазы. используйте
gtk_print_operation_get_status()
для определения текущемго состояния.
|
gtkprintoperation в которой издаётся сигнал |
|
пользовательские данные помещаемые при подключении обработчика сигнала. |
начиная с версии 2.10