Prev

Up

Home

GTK+ Reference Manual

Next

Top  |  Description  |  Object Hierarchy  |  Implemented Interfaces  |   |  Known Implementations  |  Properties  |  Signals

GtkPrintOperation

GtkPrintOperation Высший уровень Printing API

Краткое описание

#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 с помощью gtk_print_operation_new() когда пользователь выбирает печать. Затем вы устанавливаете некоторые свойства, например размер страницы, любые GtkPrintSettings из предварительных операций печати, количество страниц, текущую страницу, и т.д..

Потом вы вызываете операцию печати используя gtk_print_operation_run(). Она покажет пользователю диалог, позволяя выбрать принтер и опции. Когда пользователь закончит, диалог издаст различные сигналы GtkPrintOperation, основным из которых является ::draw-page, вы должны перехватить его и создать страницу обеспечивая GtkPrintContext используя Cairo.

Пример 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_print_operation_print_preview_render_page(), gtk_print_operation_preview_end_preview() и gtk_print_operation_preview_is_selected() полезны при реализации предварительного просмотра.

Печать поддерживается начиная с версии GTK+ 2.10.

Детали

GtkPrintOperation

typedef struct _GtkPrintOperation GtkPrintOperation;

enum GtkPrintStatus

typedef 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;

Выдаёт состояние приблизительно указывая выполнение запущенной операции печати.

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

Печать прервана.


enum GtkPrintOperationAction

typedef enum { GTK_PRINT_OPERATION_ACTION_PRINT_DIALOG, GTK_PRINT_OPERATION_ACTION_PRINT, GTK_PRINT_OPERATION_ACTION_PREVIEW, GTK_PRINT_OPERATION_ACTION_EXPORT } GtkPrintOperationAction;

Параметр action в gtk_print_operation_run() определяет какое действие операции печати должно быть выполнено.

GTK_PRINT_OPERATION_ACTION_PRINT_DIALOG

Показать диалог печати.

GTK_PRINT_OPERATION_ACTION_PRINT

Начать печать без отображения диалога печати, полагаясь на текущие установки печати.

GTK_PRINT_OPERATION_ACTION_PREVIEW

Показать предварительный просмотр печати.

GTK_PRINT_OPERATION_ACTION_EXPORT

Экспорт в файл. Это требует установки свойства имени файла для экспорта.


enum GtkPrintOperationResult

typedef enum { GTK_PRINT_OPERATION_RESULT_ERROR, GTK_PRINT_OPERATION_RESULT_APPLY, GTK_PRINT_OPERATION_RESULT_CANCEL, GTK_PRINT_OPERATION_RESULT_IN_PROGRESS } GtkPrintOperationResult;

Значение этого типа возвращается из gtk_print_operation_run().

GTK_PRINT_OPERATION_RESULT_ERROR

Произошла ошибка.

GTK_PRINT_OPERATION_RESULT_APPLY

Настройки печати должны быть сохранены.

GTK_PRINT_OPERATION_RESULT_CANCEL

Операция печати завершена, установки печати не должны сохраняться.

GTK_PRINT_OPERATION_RESULT_IN_PROGRESS

Операция печати уже полностью выполнена. Это значение возвращается только при асинхронном выполнении.


enum GtkPrintError

typedef 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.

Возвращает :

новый GtkPrintOperation

Начиная с версии 2.10


gtk_print_operation_set_allow_async ()

void gtk_print_operation_set_allow_async (GtkPrintOperation *op, gboolean allow_async);

Устанавливает может ли gtk_print_operation_run() вернуть результат перед выполнением операции печати. Помните, некоторые платформы не позволяют асинхронные операции.

op :

GtkPrintOperation

allow_async :

TRUE позволяет асинхронные операции

Начиная с версии 2.10


gtk_print_operation_get_error ()

void gtk_print_operation_get_error (GtkPrintOperation *op, GError **error);

Эта функция вызывается когда результат операции печати равен GTK_PRINT_OPERATION_RESULT_ERROR, любой возвращаемой gtk_print_operation_run(), или в обработчике сигнала ::done. Возвращаемый GError должен содержать подробности произошедшего.

op :

GtkPrintOperation

error :

Возвращаемая ошибка

Начиная с версии 2.10


gtk_print_operation_set_default_page_setup ()

void gtk_print_operation_set_default_page_setup (GtkPrintOperation *op, GtkPageSetup *default_page_setup);

Делает default_page_setup параметрами страницы по умолчанию для op.

Эта страница будет использована в gtk_print_operation_run(), но она может быть переписана на основании предварительной страницы подключением сигнала ::request-page-setup.

op :

GtkPrintOperation

default_page_setup :

GtkPageSetup, или NULL

Начиная с версии 2.10


gtk_print_operation_get_default_page_setup ()

GtkPageSetup* gtk_print_operation_get_default_page_setup (GtkPrintOperation *op);

Возвращает установки страницы по умолчанию, смотрите gtk_print_operation_set_default_page_setup().

op :

GtkPrintOperation

Возвращает :

Установки страницы по умолчанию

Начиная с версии 2.10


gtk_print_operation_set_print_settings ()

void gtk_print_operation_set_print_settings (GtkPrintOperation *op, GtkPrintSettings *print_settings);

Устанавливает настройки принтера для op. Это обычно используется для пере-установки настроек принтера из предыдущей операции, смотрите gtk_print_operation_run().

op :

GtkPrintOperation

print_settings :

GtkPrintSettings, или NULL

Начиная с версии 2.10


gtk_print_operation_get_print_settings ()

GtkPrintSettings* gtk_print_operation_get_print_settings (GtkPrintOperation *op);

Возвращает текущие настройки принтера.

Помните что возвращаемое значение NULL до тех пор пока не вызвана gtk_print_operation_set_print_settings() или gtk_print_operation_run().

op :

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+ выберет один из номеров последовательности заданий печати.

op :

GtkPrintOperation

job_name :

Строка идентифицирующая задание печати

Начиная с версии 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 будет для страницы n_pages - 1.

op :

GtkPrintOperation

n_pages :

Количество страниц

Начиная с версии 2.10


gtk_print_operation_set_current_page ()

void gtk_print_operation_set_current_page (GtkPrintOperation *op, gint current_page);

Устанавливает текущую страницу.

Если она вызвана перед gtk_print_operation_run(), пользователь сможет выбрать печать только текущемй страницы.

Отметьте сто это имеет смысл только для документов предварительно разбитых постранично.

op :

GtkPrintOperation

current_page :

Текущая страница, начиная с 0

Начиная с версии 2.10


gtk_print_operation_set_use_full_page ()

void gtk_print_operation_set_use_full_page (GtkPrintOperation *op, gboolean full_page);

Если параметр full_page равен TRUE, преобразует контекст GtkPrintContext в контекст cairo, помещая начало в верхний левый угол страницы (который может не быть верхним левым углом листа, зависит от ориентации страницы и номера страницы относительно листа). Иначе, начало в левом верхнем углу изображаемой области (то есть в пределах границ).

op :

GtkPrintOperation

full_page :

TRUE для установки GtkPrintContext заполняющего страницу

Начиная с версии 2.10


gtk_print_operation_set_unit ()

void gtk_print_operation_set_unit (GtkPrintOperation *op, GtkUnit unit);

Устанавливает преобразование полученного GtkPrintContext в контекст cairo, таким образом что расстояние измеряется в единицах unit.

op :

GtkPrintOperation

unit :

Используемые единицы

Начиная с версии 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" из списка принтеров в диалоге печати.

op :

GtkPrintOperation

filename :

Имя файла для экспорта

Начиная с версии 2.10


gtk_print_operation_set_show_progress ()

void gtk_print_operation_set_show_progress (GtkPrintOperation *op, gboolean show_progress);

Если параметр show_progress равен TRUE, операция печати будет отображать диалог шкалы выполнения в процессе печати.

op :

GtkPrintOperation

show_progress :

TRUE для отображения диалога процесса выполнения

Начиная с версии 2.10


gtk_print_operation_set_track_print_status ()

void gtk_print_operation_set_track_print_status (GtkPrintOperation *op, gboolean track_status);

Если track_status равен TRUE, операция печати будет пытаться сообщать статус задания печати в очереди печати и принтера. Это позволит вашему приложению отображать такие сообщения как "закончилась бумага" или задание печати отправлено на принтер.

Эта функция часто реализуется используя некоторую форму опроса, поэтому она не должна использоваться без явной необходимости.

op :

GtkPrintOperation

track_status :

TRUE для отслеживания состояния после печати

Начиная с версии 2.10


gtk_print_operation_set_custom_tab_label ()

void gtk_print_operation_set_custom_tab_label (GtkPrintOperation *op, const gchar *label);

Устанавливает ярлык для вкладки содержащей виджеты настроек.

op :

GtkPrintOperation

label :

Используемый ярлык, или NULL для использования ярлыка по умолчанию

Начиная с версии 2.10


gtk_print_operation_run ()

GtkPrintOperationResult gtk_print_operation_run (GtkPrintOperation *op, GtkPrintOperationAction action, GtkWindow *parent, GError **error);

Выполняет операцию печати, сначала позволяя пользователю изменить настройки печати с помощью диалога, а затем печатает документ.

Обычно эта функция не возвращается до тех пор пока не выполнит представление всех страниц. Вы можете подключить сигнал ::status-changed к op для определения некоторой информации о процессе выполнения печати. Кроме того, можно использовать рекурсию основного цикла (mainloop) для отображения диалога печати.

Если вы вызвали gtk_print_operation_set_allow_async() или установили свойство позволяющее асинхронные операции (allow-async) то эта операция будет выполняться асинхронно, если позволяет платформа. Сигнал ::done издаётся когда операция выполнена (то есть когда диалог прекращён, или когда печать прерывается ошибкой).

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:\ns", error->message); g_signal_connect (error_dialog, "response", G_CALLBACK (gtk_widget_destroy), NULL); gtk_widget_show (error_dialog); g_error_free (error); } else 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)); }

op :

GtkPrintOperation

action :

Начинающее действие

parent :

Переходный родитель диалога, или NULL

error :

Ошибки, или NULL

Возвращает :

Результат операции печати. Возвращённое значение GTK_PRINT_OPERATION_RESULT_APPLY указывает что печать полностью выполнена. В этом случае, это хороший способ получить используемые настройки принтера с помощью gtk_print_operation_get_print_settings() и сохранить их для повторного использования операциями печати. Значение GTK_PRINT_OPERATION_RESULT_IN_PROGRESS означает асинхронно запущенную операцию и издаст сигнал ::done после выполнения.

Начиная с версии 2.10


gtk_print_operation_cancel ()

void        gtk_print_operation_cancel      (GtkPrintOperation *op);

Прекращает запущенную операцию печати. Эта функция может быть вызвана при начале печати, разбиении на страницы или при обработке сигнала draw-page для остановки текущемй выполняемой операции печати.

op :

GtkPrintOperation

Начиная с версии 2.10


gtk_print_operation_get_status ()

GtkPrintStatus gtk_print_operation_get_status (GtkPrintOperation *op);

Определяет статус операции печати. Смотрите также gtk_print_operation_get_status_string().

op :

GtkPrintOperation

Возвращает :

Статус операции печати

Начиная с версии 2.10


gtk_print_operation_get_status_string ()

const gchar* gtk_print_operation_get_status_string (GtkPrintOperation *op);

Возвращает строку представляющую статус операции печати. Строка преобразована и удобна для отображения состояния печати например в GtkStatusbar.

Используйте gtk_print_operation_get_status() для определения значения статуса подходящего для программного использования.

op :

GtkPrintOperation

Возвращает :

Строка представляющая статус операции печати

Начиная с версии 2.10


gtk_print_operation_is_finished ()

gboolean    gtk_print_operation_is_finished (GtkPrintOperation *op);

Удобная функция для определения закончилась ли операция печати успешно (GTK_PRINT_STATUS_FINISHED) или нет (GTK_PRINT_STATUS_FINISHED_ABORTED).

Помните: когда вы позволяете отслеживание статуса операции печати, она может находиться в не завершённом состоянии даже после выполнения, так как статус операции отслеживает статус задания печати на принтере.

op :

GtkPrintOperation

Возвращает :

TRUE, если операция печати завершена.

Начиная с версии 2.10


gtk_print_operation_get_error ()

void gtk_print_operation_get_error (GtkPrintOperation *op, GError **error);

Вызывается когда результат операции печати равен GTK_PRINT_OPERATION_RESULT_ERROR, любой возвращенный из gtk_print_operation_run(), или в обработчике сигнала ::done. Возвращаемый GError будет содержать подробности произошедшего.

op :

GtkPrintOperation

error :

ошибка

Начиная с версии 2.10


gtk_print_run_page_setup_dialog ()

GtkPageSetup* gtk_print_run_page_setup_dialog (GtkWindow *parent, GtkPageSetup *page_setup, GtkPrintSettings *settings);

Запускает диалог параметров страницы, позволяя пользователю изменять значения из page_setup. Если пользователь отменил диалог, возвращаемый GtkPageSetup идентичен переданному в page_setup, иначе он содержит изменения сделанные с помощью диалога.

Помните, эта функция может использовать рекурсию основного цикла (mainloop) для отображения диалога параметров страницы. Смотрите gtk_print_run_page_setup_dialog_async() если это проблема.

parent :

Переходный родитель, или NULL

page_setup :

Существующий GtkPageSetup, или NULL

settings :

GtkPrintSettings

Возвращает :

Новый GtkPageSetup

Начиная с версии 2.10


GtkPageSetupDoneFunc ()

void (*GtkPageSetupDoneFunc) (GtkPageSetup *page_setup, gpointer data);

Тип функции помещаемой в gtk_print_run_page_setup_dialog_async(). Эта функция вызывается когда диалог параметров страницы отключен, а так же служит как уведомление завершения для data.

page_setup :

GtkPageSetup

data :

Пользовательские данные помещаемые в gtk_print_run_page_setup_dialog_async().


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);

Запускает диалог параметров страницы, позволяя пользователю изменять значения из page_setup.

В отличии от gtk_print_run_page_setup_dialog(), эта функция возвращается после отображения диалога параметров страницы на платформах которые это поддерживают, и вызывает done_cb из обработчика сигнала ::response диалога.

parent :

Переходный родитель, или NULL

page_setup :

Существующий GtkPageSetup, или NULL

settings :

GtkPrintSettings

done_cb :

Функция вызываемая когда пользователь сохраняет изменённые параметры страницы

data :

Пользовательские данные помещаемые в done_cb

Начиная с версии 2.10


GtkPrintOperationPreview

typedef struct _GtkPrintOperationPreview GtkPrintOperationPreview;

gtk_print_operation_preview_end_preview ()

void gtk_print_operation_preview_end_preview (GtkPrintOperationPreview *preview);

Завершает предварительный промотр.

Эта функция должна вызываться для завершения выбранного предварительного просмотра печати.

preview :

GtkPrintOperationPreview

Начиная с версии 2.10


gtk_print_operation_preview_is_selected ()

gboolean gtk_print_operation_preview_is_selected (GtkPrintOperationPreview *preview, gint page_nr);

Определяет включена ли данная страница в набор страниц которые выбраны для печати.

preview :

GtkPrintOperationPreview

page_nr :

Номер страницы

Возвращает :

TRUE если страница выбрана для печати

Начиная с версии 2.10


gtk_print_operation_preview_render_page ()

void gtk_print_operation_preview_render_page (GtkPrintOperationPreview *preview, gint page_nr);

Представляет страницу для предварительного просмотра, используя контекст печати который передаётся в обработчик GtkPrintOperation::preview вместе с preview.

Помните, этой функции требуется чтобы контекст cairo был связан с контекстом печати.

preview :

GtkPrintOperationPreview

page_nr :

Представляемая страница

Начиная с версии 2.10

Детали свойств

Свойство "allow-async"

  "allow-async"          gboolean              : Read / Write

Определяет может ли операция печати выполняться в асинхронном режиме.

Некоторые системы не поддерживают асинхронную печать, но те которые это делают, возвращают GTK_PRINT_OPERATION_RESULT_IN_PROGRESS как статус, и издают сигнал выполнено когда операция фактически выполнится.

Windows порт не поддерживает асинхронные операции вообще (это вряд ли изменится). На других платформах, все действия за исключением GTK_PRINT_OPERATION_ACTION_EXPORT поддерживают асинхронные операции.

Значение по умолчанию: FALSE

Начиная с версии 2.10


Свойство "current-page"

  "current-page"         gint                  : Read / Write

Текущая страница в документе.

Если установлена перед gtk_print_operation_run(), пользователь сможет выбрать только текущую страницу для печати.

Помните, это имеет смысл только для документов предварительно разбитых на страницы.

Допустимые значения: >= -1

Значение по умолчанию: -1

Начиная с версии 2.10


Свойство "custom-tab-label"

  "custom-tab-label"     gchararray            : Read / Write

Используется как ярлык вкладки содержащей виджеты настройки. Это свойство может игнорироваться на некоторых платформах.

Если оно равно NULL, GTK+ использует ярлык по умолчанию.

Значение по умолчанию: NULL

Начиная с версии 2.10


Свойство "default-page-setup"

  "default-page-setup"   GtkPageSetup          : Read / Write

GtkPageSetup используемый по умолчанию.

Эти настройки страницы используются в gtk_print_operation_run(), но они могут быть переписаны на основании предварительно установленной странице, подключив сигнал ::request-page-setup.

Начиная с версии 2.10


Свойство "export-filename"

  "export-filename"      gchararray            : Read / Write

Имя файла для генерации вместо отображения диалога печати. В данный момент, поддерживается только формат PDF.

Преднамеренное использование этого свойства реализуется действием "Export to PDF".

"Print to PDF" поддерживается, независимо от того установлено это свойство или нет, с помощью пункта меню "Print to PDF" из списка принтеров в диалоге печати.

Значение по умолчанию: NULL

Начиная с версии 2.10


Свойство "job-name"

  "job-name"             gchararray            : Read / Write

Строка используемая для идентификации задания (например в приложениях контроля таких как eggcups).

Если вы не установили имя задания, GTK+ выберет по умолчанию один из номеров последовательности заданий.

Значение по умолчанию: ""

Начиная с версии 2.10


Свойство "n-pages"

  "n-pages"              gint                  : Read / Write

Количество страниц в документе.

Устанавливается в положительное число перед началом представления страниц. Может быть установлено обработчиком сигнала ::begin-print.

Помните, количество помещаемых сигналов ::request-page-setup и ::draw-page начинается с 0, то есть если пользователь выбрал печать всех страниц, последний сигнал ::draw-page будет для n_pages - 1.

Допустимые значения: >= -1

Значение по умолчанию: -1

Начиная с версии 2.10


Свойство "print-settings"

  "print-settings"       GtkPrintSettings      : Read / Write

GtkPrintSettings используемый для инициализации диалога.

Установка этого свойства обычно используется для пере-установки параметров печати из предыдущей операции печати, смотрите gtk_print_operation_run().

Начиная с версии 2.10


Свойство "show-progress"

  "show-progress"        gboolean              : Read / Write

Определяет показывается ли диалог выполнения в течении операции печати.

Значение по умолчанию: FALSE

Начиная с версии 2.10


Свойство "status"

  "status"               GtkPrintStatus        : Read

Статус операции печати.

Значение по умолчанию: GTK_PRINT_STATUS_INITIAL

Начиная с версии 2.10


Свойство "status-string"

  "status-string"        gchararray            : Read

Строка представляющая статус операции. Строка преобразуется для удобного отображения статуса печати, например в GtkStatusbar.

Смотрите свойство ::status которое удобно для программного использования.

Значение по умолчанию: ""

Начиная с версии 2.10


Свойство "track-print-status"

  "track-print-status"   gboolean              : Read / Write

Если TRUE, операция печати попытается сообщать статус задания печати в очереди принтера и печати. Это позволяет вашему приложению отображать такие случаи как "закончилась бумага", и когда задание печати фактически отправлено на принтер. Однако, это часто реализуется используя опрос и не должно задействоваться без особой необходимости.

Значение по умолчанию: FALSE

Начиная с версии 2.10


Свойство "unit"

  "unit"                 GtkUnit               : Read / Write

Преобразование в контекст cairo полученного из GtkPrintContext установленного таким образом что расстояния измеряются в единицах unit.

Значение по умолчанию: GTK_UNIT_PIXEL

Начиная с версии 2.10


Свойство "use-full-page"

  "use-full-page"        gboolean              : Read / Write

Если TRUE, преобразование в контекст cairo полученного из GtkPrintContext помещает начало в верхний левый угол страницы (который может не быть верхним левым углом листа, в зависимости от ориентации страницы и количества страниц в листе). Иначе, начало это верхний левый угол области изображения (то есть в пределах границ).

Значение по умолчанию: FALSE

Начиная с версии 2.10

Детали сигналов

Сигнал "begin-print"

void user_function (GtkPrintOperation *operation, GtkPrintContext *context, gpointer user_data) : Run last

Издаётся после завершения настроек печати пользователем с помощью диалога, пред фактическим началом представления страниц.

Обычное использование этого сигнала это установка параметров из GtkPrintContext и разбиение на страницы соответственно, а затем установка количества страниц с помощью gtk_print_operation_set_n_pages().

operation :

GtkPrintOperation в которой издаётся сигнал

context :

GtkPrintContext для текущемй операции

user_data :

Пользовательские данные помещаемые при подключении обработчика сигнала.

Начиная с версии 2.10


Сигнал "create-custom-widget"

GObject* user_function (GtkPrintOperation *operation, gpointer user_data) : Run last

Издаётся при отображении диалога печати. Если вы вернёте виджет в обработчик этого сигнала он будет добавлен во вкладку настройки диалога печати. Обычно возвращается контейнер со множеством виджетов в нем.

Возвращаемым виджетом владеет диалог печати, а время его существования контролирует приложение. Однако, виджет гарантировано останется в течении издания сигнала custom-widget-apply в операции. Тогда вы сможете прочесть вывод любой информации в которой нуждаетесь от виджетов.

operation :

GtkPrintOperation в которой издаётся сигнал

user_data :

Пользовательские данные помещаемые при подключении обработчика сигнала.

Возвращает :

Виджет настройки который встраивается в диалог печати, или NULL

Начиная с версии 2.10


Сигнал "custom-widget-apply"

void user_function (GtkPrintOperation *operation, GtkWidget *widget, gpointer user_data) : Run last

Издаётся непосредственно перед началом печати, если вы добавили виджет настройки в обработчик create-custom-widget. Когда вы получаете этот сигнал, вам нужно прочесть информацию из виджетов настройки, так как не гарантировано что она будет доступна длительное время.

operation :

GtkPrintOperation в которой издаётся сигнал

widget :

Виджет настройки добавляемый в create-custom-widget

user_data :

Пользовательские данные помещаемые при подключении обработчика сигнала.

Начиная с версии 2.10


Сигнал "done"

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 после издания этого сигнала.

operation :

GtkPrintOperation в которой издаётся сигнал

result :

Результат операции печати

user_data :

Пользовательские данные помещаемые при подключении обработчика сигнала.

Начиная с версии 2.10


Сигнал "draw-page"

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 согласно вашим потребностям.

operation :

GtkPrintOperation в которой издаётся сигнал

context :

GtkPrintContext для текущемй операции

page_nr :

Номер текущемй печатаемой страницы

user_data :

Пользовательские данные помещаемые при подключении обработчика сигнала.

Начиная с версии 2.10


Сигнал "end-print"

void user_function (GtkPrintOperation *operation, GtkPrintContext *context, gpointer user_data) : Run last

Издаётся после представления всех страниц (rendered). Обработчик сигнала может очистить любой ресурс который был распределён в обработчике ::begin-print.

operation :

GtkPrintOperation в которой издаётся сигнал

context :

GtkPrintContext для текущемй операции

user_data :

Пользовательские данные помещаемые при подключении обработчика сигнала.

Начиная с версии 2.10


Сигнал "paginate"

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, и оттуда же установить количество страниц.

operation :

GtkPrintOperation в которой издаётся сигнал

context :

GtkPrintContext для текущемй операции

user_data :

Пользовательские данные помещаемые при подключении обработчика сигнала.

Возвращает :

TRUE если постраничный разбор выполнен

Начиная с версии 2.10


Сигнал "preview"

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).

operation :

GtkPrintOperation в которой издаётся сигнал

preview :

GtkPrintContext для текущемй операции

context :

GtkPrintContext который будет использоваться

parent :

GtkWindow для использования в качестве родительского окна, или NULL

user_data :

Пользовательские данные помещаемые при подключении обработчика сигнала.

Возвращает :

TRUE если слушающий хочет принять управление контролем предварительного просмотра

Начиная с версии 2.10


Сигнал "request-page-setup"

void user_function (GtkPrintOperation *operation, GtkPrintContext *context, gint page_nr, GtkPageSetup *setup, gpointer user_data) : Run last

Издаётся один раз для каждой печатаемой страницы, давая приложению возможность изменить параметры страницы. Любые изменения выполненные для setup будут в силе только для печати этой страницы.

operation :

GtkPrintOperation в которой издаётся сигнал

context :

GtkPrintContext для текущемй операции

page_nr :

Номер текущемй печатаемой страницы

setup :

GtkPageSetup

user_data :

Пользовательские данные помещаемые при подключении обработчика сигнала.

Начиная с версии 2.10


Сигнал "status-changed"

void user_function (GtkPrintOperation *operation, gpointer user_data) : Run last

Издаётся между различными фазами операции печати. Смотрите GtkPrintStatus описывающий различные фазы. Используйте gtk_print_operation_get_status() для определения текущемго состояния.

operation :

GtkPrintOperation в которой издаётся сигнал

user_data :

Пользовательские данные помещаемые при подключении обработчика сигнала.

Начиная с версии 2.10

Смотрите также

GtkPrintContext, GtkPrintUnixDialog