
------------------------------------------------------------------------------------
--# Using GtkPrinter.e, print from in-line or generated text;
------------------------------------------------------------------------------------

include GtkEngine.e
include GtkPrinter.e
include std/primes.e

constant docs = `Demos how to print from generated or in-line text.
<small>
We are using some <u>markup</u> to change the <big>size</big>
and <i>style</i> of this <b>paragraph</b>.

You can print in <span color='red'>color</span> using this feature,
as well as different <span font='Purisa, Georgia bold italic 12'>font styles.</span>
</small>
`
sequence list = prime_list(100) 
for i = 1 to length(list) do
	list[i] = sprintf("%2d = <b>%d</b>\n",{i,list[i]})
end for
list = flatten(list)

ifdef WINDOWS then 
    printer:font = "16"
end ifdef

constant win = create(GtkWindow,{
    {"border width",10},
    {"default size",300,100},
    {"position",GTK_WIN_POS_CENTER},
    {"icon","printer"},
    {"signal","destroy","Quit"}})

constant panel = create(GtkBox,VERTICAL)
    add(win,panel)

constant img = create(GtkImage,"thumbnails/document-print.png")
    add(panel,img)
    
constant lbl = create(GtkLabel)
    set(lbl,"markup",docs)
    add(panel,lbl)

printer:confirm = TRUE
printer:use_line_numbers = FALSE
printer:sourcecode = FALSE -- allow using markup
printer:settings_file = "MyPrintSettings"
printer:setup_file = "MyPrintSetup"

constant
    btn1 = create(GtkButton,"gtk-quit","Quit"),
    btn2 = create(GtkButton,"Print _1","PrintPrimes"),
    btn3 = create(GtkButton,"Print _2",printer:print_text,docs & list),
    btn4 = create(GtkButton,"Print _3",printer:print_text,docs & LGPL),
    btn5 = create(GtkButton,"gnome-mime-application-pdf# _PDF","Print2PDF")
    
    set(btn1,"tooltip markup","<span color='red'>Alt+Q\n</span>Click to quit")
    
    set(btn2,"tooltip markup",
    "<span color='red'>Alt+1\n</span>Print 25 prime numbers via a <b><i>function</i></b> call")
    
    set(btn3,"tooltip markup",
    "<span color='red'>Alt+2\n</span>Print from text stored in a <b><i>sequence</i></b>")
    
    set(btn4,"tooltip markup",
    "<span color='red'>Alt+3\n</span>Print from text stored in a <b><i>variable</i></b>")
    
    set(btn5,"tooltip markup",
    "<span color='red'>Alt+P\n</span>Print to a <b><i>PDF</i></b> file in your home directory")

constant
    btnbox = create(GtkButtonBox)
    set(btnbox,"spacing",5)
    pack(panel,-btnbox)
    add(btnbox,{btn1,btn2,btn3,btn4,btn5})

constant box2 = create(GtkButtonBox),
    btn6 = create(GtkCheckButton,"_Confirm Print Status/preview pdf","ToggleCkStatus")
    set(btn6,"active",TRUE)
    pack(panel,-box2)
    add(box2,btn6)
    
show_all(win)
main()

------------------------------------------------------------------------
global function PrintPrimes()
------------------------------------------------------------------------
    PrintText("First 25 primes",docs & list)
return 1
end function

------------------------------------------------------------------------
global function Print2PDF() 
------------------------------------------------------------------------
    printer:action = GTK_PRINT_OPERATION_ACTION_EXPORT
    printer:export_file = canonical_path("~/First 25 Primes.pdf") 
    PrintText("First 25 Prime Numbers",docs & list) 
return 1
end function

------------------------------------------------------------------------
global function ToggleCkStatus(atom ctl)
------------------------------------------------------------------------
printer:confirm = get(ctl,"active")
return 1
end function
