-----------------------------------------------------------------------
-- GtkAda - Ada95 binding for Gtk+/Gnome --
-- --
-- Copyright (C) 2010, AdaCore --
-- --
-- This library is free software; you can redistribute it and/or --
-- modify it under the terms of the GNU General Public --
-- License as published by the Free Software Foundation; either --
-- version 2 of the License, or (at your option) any later version. --
-- --
-- This library is distributed in the hope that it will be useful, --
-- but WITHOUT ANY WARRANTY; without even the implied warranty of --
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU --
-- General Public License for more details. --
-- --
-- You should have received a copy of the GNU General Public --
-- License along with this library; if not, write to the --
-- Free Software Foundation, Inc., 59 Temple Place - Suite 330, --
-- Boston, MA 02111-1307, USA. --
-- --
-- --
-- --
-- --
-- --
-- --
-- --
-----------------------------------------------------------------------
--
-- Gtk_Print_Operation is the high-level, portable printing API. It looks a
-- bit different than other GTK+ dialogs such as the Gtk_File_Chooser, since
-- some platforms don't expose enough infrastructure to implement a good print
-- dialog. On such platforms, Gtk_Print_Operation uses the native print
-- dialog. On platforms which do not provide a native print dialog, GTK+ uses
-- its own, see Gtk_Print_Unix_Dialog.
--
-- The typical way to use the high-level printing API is to create a
-- Gtk_Print_Operation object with Gtk_New when the user selects to print.
-- Then you set some properties on it, e.g. the page size, any
-- Gtk_Print_Settings from previous print operations, the number of pages,
-- the current page, etc.
--
-- Then you start the print operation by calling Run. It will then show a
-- dialog, let the user select a printer and options. When the user finished
-- the dialog various signals will be emitted on the Gtk_Print_Operation, the
-- main one being draw-page, which you are supposed to catch and render the
-- page on the provided Gtk_Print_Context using Cairo.
--
-- Note: on UNIX/Linux, Gtk+ is loading at run-time the libraries for printing
-- support. You will need to point the environment variable GTK_EXE_PREFIX
-- to the root directory of your Gtk+ install before calling Run.
--
-- 2.16.6
with Glib.Error;
with Glib.Object;
with Glib.Properties;
with Gtk.Enums;
with Gtk.Page_Setup;
with Gtk.Print_Settings;
with Gtk.Window;
package Gtk.Print_Operation is
type Gtk_Print_Operation_Record is
new Glib.Object.GObject_Record with private;
type Gtk_Print_Operation is access all Gtk_Print_Operation_Record'Class;
type Gtk_Print_Status is
(Status_Initial,
Status_Preparing,
Status_Generating_Data,
Status_Sending_Data,
Status_Pending,
Status_Pending_Issue,
Status_Printing,
Status_Finished,
Status_Finished_Aborted);
pragma Convention (C, Gtk_Print_Status);
type Gtk_Print_Operation_Result is
(Result_Error,
Result_Apply,
Result_Cancel,
Result_In_Progress);
pragma Convention (C, Gtk_Print_Operation_Result);
type Gtk_Print_Operation_Action is
(Action_Print_Dialog,
Action_Print,
Action_Preview,
Action_Export);
pragma Convention (C, Gtk_Print_Operation_Action);
type Gtk_Print_Error is
(Error_General,
Error_Internal_Error,
Error_Nomem,
Error_Invalid_File);
pragma Convention (C, Gtk_Print_Error);
procedure Gtk_New (Widget : out Gtk_Print_Operation);
procedure Initialize (Widget : access Gtk_Print_Operation_Record'Class);
-- Creates a new Gtk_Print_Operation.
function Get_Type return GType;
function Error_Quark return GQuark;
-- Registers an error quark for Gtk_Print_Operation if necessary.
function Run
(Op : access Gtk_Print_Operation_Record;
Action : Gtk_Print_Operation_Action;
Parent : access Gtk.Window.Gtk_Window_Record'Class;
Error : Glib.Error.GError := null)
return Gtk_Print_Operation_Result;
-- Runs the print operation, by first letting the user modify
-- print settings in the print dialog, and then by printing the
-- document.
--
-- Normally that this function does not return until the rendering of all
-- pages is complete. You can connect to the status-changed signal on Op
-- to obtain some information about the progress of the print operation.
-- Furthermore, it may use a recursive mainloop to show the print dialog.
--
-- If you call Set_Allow_Async or set the allow-async property the
-- operation will run asynchronously if this is supported on the platform.
-- The done signal will be emitted with the result of the operation when
-- it is done (i.e. when the dialog is canceled, or when the print succeeds
-- or fails).
--
-- begin
-- if Settings /= null then
-- Set_Print_Settings (Print, Settings);
-- end if;
--
-- if Page_Setup /= null then
-- Set_Default_Page_Setup (Print, Page_Setup);
-- end if;
--
-- Connect (Print, "begin-print", Begin_Print'Access, User_Data);
-- Connect (Print, "draw-page", Draw_Page'Access, User_Data);
--
-- Result := Run (Print, Action_Print_Dialog, Parent, Error);
--
-- case Result is
-- when Result_Error =>
-- Gtk_New
-- (Error_Dialog,
-- Parent,
-- Destroy_With_Parent,
-- Message_Error,
-- Buttons_Close,
-- "Error printing file");
-- Connect
-- (Error_Dialog, "response", Gtk_Widget_Destroy'Access);
-- Show (Error_Dialog);
-- Glib.Error.Error_Free (Error);
--
-- when Result_Apply =>
-- if Settings /= null then
-- Unref (Settings);
-- end if;
-- Settings := Get_Print_Settings (Print);
-- Ref (Settings);
--
-- when Result_Cancel => null;
-- when Result_In_Progress => null;
-- end case;
--
-- Note that Run can only be called once on a given Gtk_Print_Operation.
--
-- Return value: the result of the print operation. A return value of
-- Result_Apply indicates that the printing was completed successfully.
-- In this case, it is a good idea to obtain the used print settings with
-- Get_Print_Settings and store them for reuse with the next print
-- operation. A value of Result_In_Progress means the operation is running
-- asynchronously, and will emit the done signal when done.
procedure Cancel (Op : access Gtk_Print_Operation_Record);
-- Cancels a running print operation. This function may be called from
-- a begin-print, paginate or draw-page signal handler to stop the
-- currently running print operation.
procedure Draw_Page_Finish (Op : access Gtk_Print_Operation_Record);
-- Signal that drawing of particular page is complete.
--
-- It is called after completion of page drawing (e.g. drawing in another
-- thread). If Set_Defer_Drawing was called before, then this function has
-- to be called by application. In another case it is called by the library
-- itself.
procedure Get_Error
(Op : access Gtk_Print_Operation_Record;
Error : Glib.Error.GError);
-- Call this when the result of a print operation is
-- Result_Error, either as returned by Run, or in the done signal handler.
-- The returned GError will contain more details on what went wrong.
function Get_Print_Settings
(Op : access Gtk_Print_Operation_Record)
return Gtk.Print_Settings.Gtk_Print_Settings;
procedure Set_Print_Settings
(Op : access Gtk_Print_Operation_Record;
Print_Settings : access
Gtk.Print_Settings.Gtk_Print_Settings_Record'Class);
-- Manipulate the print settings for Op. This is typically used to
-- re-establish print settings from a previous print operation, see Run.
--
-- Note that the Get_Print_Setting's return value is null until either
-- Set_Print_Settings or Run have been called.
function Get_Status
(Op : access Gtk_Print_Operation_Record) return Gtk_Print_Status;
function Get_Status (Op : access Gtk_Print_Operation_Record) return String;
-- Returns the status of the print operation.
--
-- A Gtk_Print_Status is suitable for programmatic use.
--
-- The String returned is a translated string representation of the
-- status of the print operation. It is suitable for displaying the
-- print status in, e.g., a Gtk_Statusbar.
function Is_Finished
(Op : access Gtk_Print_Operation_Record) return Boolean;
-- A convenience function to find out whether the print operation
-- is finished, either successfully (Status_Finished) or unsuccessfully
-- (Status_Finished_Aborted).
--
-- Note: when you enable print status tracking the print operation
-- can be in a non-finished state even after done has been called, as
-- the operation status then tracks the print job status on the printer.
procedure Set_Allow_Async
(Op : access Gtk_Print_Operation_Record;
Allow_Async : Boolean);
-- Sets whether Run may return before the print operation is completed.
-- Note that some platforms may not allow asynchronous operation.
procedure Set_Current_Page
(Op : access Gtk_Print_Operation_Record;
Current_Page : Gint);
-- Sets the current page.
--
-- If this is called before Run, the user will be able to select to print
-- only the current page.
--
-- Note that this only makes sense for pre-paginated documents.
procedure Set_Custom_Tab_Label
(Op : access Gtk_Print_Operation_Record;
Label : String);
-- Sets the label for the tab holding custom widgets.
procedure Set_Defer_Drawing (Op : access Gtk_Print_Operation_Record);
-- Sets up the Gtk_Print_Operation to wait for calling of Draw_Page_Finish
-- from application. It can be used for drawing page in another thread.
--
-- This function must be called in the callback of "draw-page" signal.
procedure Set_Export_Filename
(Op : access Gtk_Print_Operation_Record;
Filename : String);
-- Sets up the Gtk_Print_Operation to generate a file instead
-- of showing the print dialog. The indended use of this function
-- is for implementing "Export to PDF" actions. Currently, PDF
-- is the only supported format.
--
-- "Print to PDF" support is independent of this and is done
-- by letting the user pick the "Print to PDF" item from the list
-- of printers in the print dialog.
procedure Set_Job_Name
(Op : access Gtk_Print_Operation_Record;
Job_Name : String);
-- Sets the name of the print job. The name is used to identify
-- the job (e.g. in monitoring applications like eggcups).
--
-- If you don't set a job name, GTK+ picks a default one by
-- numbering successive print jobs.
procedure Set_N_Pages
(Op : access Gtk_Print_Operation_Record;
N_Pages : Gint);
-- Sets the number of pages in the document.
--
-- This MUST be set to a positive number before the rendering starts.
-- It may be set in a begin-print signal hander.
--
-- Note that the page numbers passed to the request-page-setup and
-- draw-page signals are 0-based, i.e. if the user chooses to print all
-- pages, the last draw-page signal will be for page N_Pages - 1.
procedure Set_Show_Progress
(Op : access Gtk_Print_Operation_Record;
Show_Progress : Boolean);
-- If True, the print operation will show a progress dialog during the
-- print operation.
procedure Set_Track_Print_Status
(Op : access Gtk_Print_Operation_Record;
Track_Status : Boolean);
-- If True, the print operation will try to continue report on the status
-- of the print job in the printer queues and printer. This can allow your
-- application to show things like "out of paper" issues, and when the
-- print job actually reaches the printer.
--
-- This function is often implemented using some form of polling, so it
-- should not be enabled unless needed.
procedure Set_Unit
(Op : access Gtk_Print_Operation_Record;
Unit : Gtk.Enums.Gtk_Unit);
-- Sets up the transformation for the cairo context obtained from
-- Gtk_Print_Context in such a way that distances are measured in
-- units of Unit.
procedure Set_Use_Full_Page
(Op : access Gtk_Print_Operation_Record;
Full_Page : Boolean);
-- If True, the transformation for the cairo context obtained from
-- Gtk_Print_Context puts the origin at the top left corner of the page
-- (which may not be the top left corner of the sheet, depending on page
-- orientation and the number of pages per sheet). Otherwise, the origin
-- is at the top left corner of the imageable area (i.e. inside the
-- margins).
----------------
-- Page Setup --
----------------
function Get_Default_Page_Setup
(Op : access Gtk_Print_Operation_Record)
return Gtk.Page_Setup.Gtk_Page_Setup;
procedure Set_Default_Page_Setup
(Op : access Gtk_Print_Operation_Record;
Default_Page_Setup : access Gtk.Page_Setup.Gtk_Page_Setup_Record'Class);
-- Makes Default_Page_Setup the default page setup for Op.
-- Default_Page_Setup may be null.
--
-- This page setup will be used by Run, but it can be overridden on a
-- per-page basis by connecting to the request-page-setup signal.
function Run_Page_Setup_Dialog
(Parent : access Gtk.Window.Gtk_Window_Record'Class;
Page_Setup : access Gtk.Page_Setup.Gtk_Page_Setup_Record'Class;
Settings : access Gtk.Print_Settings.Gtk_Print_Settings_Record'Class)
return Gtk.Page_Setup.Gtk_Page_Setup;
-- Runs a page setup dialog, letting the user modify the values from
-- Page_Setup. If the user cancels the dialog, the returned Gtk_Page_Setup
-- is identical to the passed in Page_Setup, otherwise it contains the
-- modifications done in the dialog.
--
-- Note that this function may use a recursive mainloop to show the page
-- setup dialog.
----------------
-- Properties --
----------------
--
-- Name: Allow_Async_Property
-- Type: Boolean
-- Descr: True if print process may run asynchronous.
--
-- Name: Current_Page_Property
-- Type: Int
-- Descr: The current page in the document
--
-- Name: Custom_Tab_Label_Property
-- Type: String
-- Descr: Label for the tab containing custom widgets.
--
-- Name: Default_Page_Setup_Property
-- Type: Object
-- Descr: The Gtk_Page_Setup used by default
--
-- Name: Export_Filename_Property
-- Type: String
-- Descr: Export filename
--
-- Name: Job_Name_Property
-- Type: String
-- Descr: A string used for identifying the print job.
--
-- Name: N_Pages_Property
-- Type: Int
-- Descr: The number of pages in the document.
--
-- Name: Print_Settings_Property
-- Type: Object
-- Descr: The Gtk_Print_Settings used for initializing the dialog
--
-- Name: Show_Progress_Property
-- Type: Boolean
-- Descr: True if a progress dialog is shown while printing.
--
-- Name: Status_Property
-- Type: Enum
-- Descr: The status of the print operation
--
-- Name: Status_String_Property
-- Type: String
-- Descr: A human-readable description of the status
--
-- Name: Track_Print_Status_Property
-- Type: Boolean
-- Descr: True if the print operation will continue to report on the
-- print job status after the print data has been sent to the
-- printer or print server.
--
-- Name: Unit_Property
-- Type: Enum
-- Descr: The unit in which distances can be measured in the context
--
-- Name: Use_Full_Page_Property
-- Type: Boolean
-- Descr: True if the origin of the context should be at the corner of
-- the page and not the corner of the imageable area
--
--
Allow_Async_Property : constant Glib.Properties.Property_Boolean;
Current_Page_Property : constant Glib.Properties.Property_Int;
Custom_Tab_Label_Property : constant Glib.Properties.Property_String;
Default_Page_Setup_Property : constant Glib.Properties.Property_Object;
Export_Filename_Property : constant Glib.Properties.Property_String;
Job_Name_Property : constant Glib.Properties.Property_String;
N_Pages_Property : constant Glib.Properties.Property_Int;
Print_Settings_Property : constant Glib.Properties.Property_Object;
Show_Progress_Property : constant Glib.Properties.Property_Boolean;
Status_Property : constant Glib.Properties.Property_Enum;
Status_String_Property : constant Glib.Properties.Property_String;
Track_Print_Status_Property : constant Glib.Properties.Property_Boolean;
Unit_Property : constant Glib.Properties.Property_Enum;
Use_Full_Page_Property : constant Glib.Properties.Property_Boolean;
private
type Gtk_Print_Operation_Record is
new Glib.Object.GObject_Record with null record;
Allow_Async_Property : constant Glib.Properties.Property_Boolean :=
Glib.Properties.Build ("allow-async");
Current_Page_Property : constant Glib.Properties.Property_Int :=
Glib.Properties.Build ("current-page");
Custom_Tab_Label_Property : constant Glib.Properties.Property_String :=
Glib.Properties.Build ("custom-tab-label");
Default_Page_Setup_Property : constant Glib.Properties.Property_Object :=
Glib.Properties.Build ("default-page-setup");
Export_Filename_Property : constant Glib.Properties.Property_String :=
Glib.Properties.Build ("export-filename");
Job_Name_Property : constant Glib.Properties.Property_String :=
Glib.Properties.Build ("job-name");
N_Pages_Property : constant Glib.Properties.Property_Int :=
Glib.Properties.Build ("n-pages");
Print_Settings_Property : constant Glib.Properties.Property_Object :=
Glib.Properties.Build ("print-settings");
Show_Progress_Property : constant Glib.Properties.Property_Boolean :=
Glib.Properties.Build ("show-progress");
Status_Property : constant Glib.Properties.Property_Enum :=
Glib.Properties.Build ("status");
Status_String_Property : constant Glib.Properties.Property_String :=
Glib.Properties.Build ("status-string");
Track_Print_Status_Property : constant Glib.Properties.Property_Boolean :=
Glib.Properties.Build ("track-print-status");
Unit_Property : constant Glib.Properties.Property_Enum :=
Glib.Properties.Build ("unit");
Use_Full_Page_Property : constant Glib.Properties.Property_Boolean :=
Glib.Properties.Build ("use-full-page");
pragma Import (C, Get_Type, "gtk_print_operation_get_type");
pragma Import (C, Error_Quark, "gtk_print_error_quark");
end Gtk.Print_Operation;