'Rich Text' Editor



include GtkEngine.e
include std/filesys.e
include std/machine.e

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

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

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

constant scroller = create(GtkScrolledWindow)
 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_WORD)
 set(textedit,"cursor visible",TRUE)
 set(textedit,"modify font","Courier 12")
 add(scroller,textedit)

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

constant 
	bold = get(buffer,"create tag","bold","weight","bold"),
 	blue = get(buffer,"create tag","blue_bg","background", "blue"),
	black = get(buffer,"create tag","black_fg","foreground","black"),
	white = get(buffer,"create tag","white_fg","foreground","white"),
	red = get(buffer,"create tag","red_fg","foreground","red"),
	green = get(buffer,"create tag","grn_bg","background","#005000"),
	fnt = get(buffer,"create tag","script","font","URW Chancery L 24"),
	small = get(buffer,"create tag","small","font","Courier Bold 8")

atom iter 
	iter = get(buffer,"iter at offset",0)  ? buffer
	set(buffer,"insert with tags",iter,"Hello World! ",bold) 
	set(buffer,"insert",iter,"More Stuff Here -> ")
	set(buffer,"insert with tags",iter," Hi there! \n",blue,white,bold)
	set(buffer,"insert with tags",iter,"Fancy Fonts\n",white,fnt)
	set(buffer,"insert",iter,"Try editing lines, also right-click and select different languages!\n")
	set(buffer,"insert with tags",iter,"You can even copy/paste images...\ntry the penguin!\n",small,red)

object img = create(GtkImage,"~/demos/thumbnails/BabyTux.png")
	img = get(img,"pixbuf") 
	set(buffer,"insert pixbuf",iter,img)
	set(buffer,"insert with tags",iter,"\tTry copying and pasting from other programs!\n\n",fnt,small,red)
	set(buffer,"insert with tags",iter,"LGPL\n",bold,white)
	set(buffer,"insert with tags",iter,LGPL,small)
	
constant btnbox = create(GtkHButtonBox)
 pack(panel,-btnbox)

constant btn1 = create(GtkButton,"gtk-quit")
 connect(btn1,"clicked",quit)
 add(btnbox,btn1)

pack(panel,-statusbar)

function UpdateStats()
 set(statusbar,"push",context,sprintf("%d Lines, %d Chars",
 	{get(buffer,"line count"),get(buffer,"char count")}))
return 1
end function
connect(buffer,"changed",call_back(routine_id("UpdateStats")))

show_all(win)
UpdateStats()
main()

------------------------------------------------------------------------
-- Copyright 2010 by Irv Mullins all code released under the LGPL
------------------------------------------------------------------------