Sources PureBasicConsultez toutes les sources

Nombre d'auteurs : 41, nombre de sources : 88, dernière mise à jour : 13 août 2011 

 
OuvrirSommaireLinux
 
Sélectionnez

;http://www.purebasic.fr/english/viewtopic.php?t=29904
; ---------------------------------------------------------------------------------------
; using the GTK print dialog
; 2007 walker
; not fully functional yet but shows how to use this dialog
; BUT with a working preview ;-)
; ---------------------------------------------------------------------------------------
;---------------- Preparations ---------------------------------------------------
;import needed functions
ImportC "/usr/lib/libgtk-x11-2.0.so"
  gtk_print_operation_new()
  gtk_print_operation_run(*op, action, *parent, *error);the print dialog
  gtk_print_settings_new()
  gtk_print_operation_set_print_settings(*print,*settings)
  gtk_print_context_create_pango_layout(*context)
  pango_layout_set_text(layout,txt.p-utf8,length)
  pango_font_description_from_string(font.p-utf8)
  pango_font_description_free(desc)
  pango_layout_set_font_description(layout,desc)
  cairo_move_to(cr,x,y)
  pango_cairo_show_layout(cr,layout)
  gtk_print_context_get_cairo_context(context)
  gtk_print_operation_set_n_pages(*op,n_pages)
  gtk_print_operation_set_unit(*op,unit)
  gtk_print_operation_get_status_string (*op); a (translated) string
  gtk_print_operation_get_status (*op);the numer enumerated below
  gtk_print_operation_is_finished (*op);returns true or false
EndImport

;print actions
Enumeration
  #GTK_PRINT_OPERATION_ACTION_PRINT_DIALOG
  #GTK_PRINT_OPERATION_ACTION_PRINT
  #GTK_PRINT_OPERATION_ACTION_PREVIEW
    #GTK_PRINT_OPERATION_ACTION_EXPORT
EndEnumeration
;return values from printdialog
Enumeration
  #GTK_PRINT_OPERATION_RESULT_ERROR
  #GTK_PRINT_OPERATION_RESULT_APPLY
  #GTK_PRINT_OPERATION_RESULT_CANCEL
  #GTK_PRINT_OPERATION_RESULT_IN_PROGRESS
EndEnumeration
;status of printing
Enumeration
  #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
EndEnumeration 
;layout units
Enumeration
  #GTK_UNIT_PIXEL
  #GTK_UNIT_POINTS
  #GTK_UNIT_INCH
  #GTK_UNIT_MM
EndEnumeration

ProcedureCDLL begin_print(*op,context, user_data)
;this procedure is called before rendering the pages...

;set number of pages.. ESSENTIAL!!!! never forget this! (or you'll wait forever)
gtk_print_operation_set_n_pages(*op,1);

EndProcedure

ProcedureCDLL  draw_page(*op,context,page_nr,user_data)
;this Procedure is called for each page to print.... so a fixed text like this example isn't a good idea
gtk_print_operation_set_unit (*op, #GTK_UNIT_MM);
cr= gtk_print_context_get_cairo_context(context)
layout = gtk_print_context_create_pango_layout (context);
pango_layout_set_text (layout, "Hello World!", -1);
desc = pango_font_description_from_string ("sans 28");
pango_layout_set_font_description (layout, desc);
pango_font_description_free (desc);
pango_cairo_show_layout (cr, layout)
g_object_unref_(layout)

EndProcedure

ProcedureCDLL  print_preview(*op,*preview, *context, *parent, user_data)
;for your own preview routine...

EndProcedure

ProcedureCDLL end_print(*op, *context, user_data)
;if printig is finished, you can add code here for some cleanups etc...

EndProcedure                                                       

;-------------------- DEMO -------------------------
OpenWindow(0,0,0,400,400,"printtest",#PB_Window_SystemMenu)
CreateGadgetList(WindowID(0))
ButtonGadget(0,10,50,100,30,"Print")
CloseGadgetList()

Repeat 
event=WaitWindowEvent()

    If event=#PB_Event_Gadget
        If EventGadget()=0
            ;print button
            ;create a new printoperation
            print=gtk_print_operation_new()
            ;connect teh actions to a procedure
            g_signal_connect_(print, "begin-print", @begin_print(), user_data);
            g_signal_connect_(print, "draw-page", @draw_page(), user_data);
            ;If you activate the following line, the built in preview is DISABLED
            ; g_signal_connect_(print, "preview", @print_preview(), d);
            g_signal_connect_(print, "end-print", @end_print(), user_data);
            ;finally calling the GTK+ printrequester
            res=gtk_print_operation_run(print,#GTK_PRINT_OPERATION_ACTION_PRINT_DIALOG,WindowID(0),*error)
            ;If res returns  #GTK_PRINT_OPERATION_RESULT_CANCEL the user had clicked on cancel - else one of the callbacks is called
        EndIf   
    EndIf   

Until event=#PB_Event_CloseWindow
Créé le 20 février 2008  par Walker
  

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2008 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.