-----------------------------------------------------
-- Very Simple Text edit demo
-----------------------------------------------------
include GtkEngine.e
include std/console.e
include std/machine.e

constant win = create(GtkWindow)
 connect(win,"destroy",quit)
 set(win,"title","Simple text")
 set(win,"name","Main Window")
 set(win,"default size",500,300)
 set(win,"position",GTK_WIN_POS_CENTER)

constant panel = create(GtkVBox)
 add(win,panel)

constant statusbar = create(GtkStatusBar) 
constant context = get(statusbar,"context id","Main")

constant scroller = create(GtkScrolledWindow)
 set(scroller,"policy",GTK_POLICY_AUTOMATIC,GTK_POLICY_AUTOMATIC)
 set(scroller,"border width",2)
 add(panel,scroller)

constant textedit = create(GtkTextView)
 set(textedit,"modify base",0,"black")
 set(textedit,"modify text",0,"green")
 set(textedit,"left margin",10)
 set(textedit,"right margin",10)
 set(textedit,"wrap mode",GTK_WRAP_NONE)
 set(textedit,"cursor visible",TRUE)
 set(textedit,"modify font","Courier Bold 12")
 add(scroller,textedit)

constant buffer = get(textedit,"buffer") 
register_object(buffer,GtkTextBuffer)

object dlg = create(GtkFileChooserDialog,"Save as...")
	set(dlg,"add button","gtk-cancel",0)
	set(dlg,"add button","gtk-ok",1)
	set(dlg,"action",GTK_FILE_CHOOSER_ACTION_SAVE)
	
-------------------------------------------------	
function Save()
-------------------------------------------------
object fn, name, text

if run(dlg) then
	name = get(dlg,"filename")
	fn = open(name,"w") 
	text = get(buffer,"text")
	printf(fn,"%s",{text})
	close(fn)
end if

return 1
end function 
constant save = call_back(routine_id("Save"))

-----------------------------------------------------------
function Update() 
-----------------------------------------------------------
 set(statusbar,"push",context,sprintf("%d Lines, %d Chars",
 	{get(buffer,"line count"),get(buffer,"char count")}))
return 1
end function
constant update = call_back(routine_id("Update"))

function Clear()
	set(buffer,"text","",0)
return Update()
end function
constant clear = call_back(routine_id("Clear"))

connect(buffer,"changed",update)

constant btnbox = create(GtkHButtonBox)
 pack(panel,-btnbox)

constant btn1 = create(GtkButton,"gtk-clear")
constant btn2 = create(GtkButton,"gtk-save")
constant btn3 = create(GtkButton,"gtk-quit")

 connect(btn1,"clicked",clear)
 connect(btn2,"clicked",save)
 connect(btn3,"clicked",quit)
 add(btnbox,{btn1,btn2,btn3})

pack(panel,-statusbar)

show_all(win)
main()