-----------------------------------------------------------------------------
--# GtkSearchBar -- type a word which appears in the text;
-----------------------------------------------------------------------------
include GtkEngine.e
include GtkEvents.e
requires("3.10","GtkSearchBar")
integer vis = TRUE
constant hdr = "GtkSearchBar\n"
constant txt = 
"""
 A container made to have a search entry 
 (possibly with additional widgets, 
 such as drop-down menus, or buttons) 
 built-in. 
 
 The search bar would appear when a search 
 is started through typing on the keyboard, 
 or the application's search mode is toggled on.
For keyboard presses to start a search, 
events will need to be forwarded from the 
top-level window that contains the search bar. 
See gtk_search_bar_handle_event() for example code. 
Common shortcuts such as Ctrl+F should be handled 
as an application action, or through the menu items.
Type a word which appears in the text above, or hit the esc key
to clear.
"""
constant win = create(GtkWindow,
	"border=10,size=500x100,position=1,$key-press-event=onClick,$destroy=Quit")
constant panel = create(GtkBox,VERTICAL)
	add(win,panel)
constant sb = create(GtkSearchBar)
	set(sb,"show close button",TRUE)
	add(panel,sb)
constant srch = create(GtkSearchEntry)
	set(sb,"connect entry",srch)
	connect(srch,"search-changed",_("ShowText"))
	add(sb,srch)
	
constant cap = create(GtkLabel)
	set(cap,"markup",hdr)
	add(panel,cap)
	
constant lbl = create(GtkLabel)
	set(lbl,"markup",txt)
	add(panel,lbl)
constant box = pack_end(panel,create(GtkButtonBox,HORIZONTAL))
constant btn1 =	create(GtkButton,"gtk-quit","Quit")
	add(box,btn1)
	
show_all(win)
main()
---------------------------------------
global function onClick(atom ctl, atom event) -- detect keypresses in window;
---------------------------------------
return get(sb,"handle event",event)
end function
---------------------------
function ShowText(atom ctl) -- simple way to highlight found text;
---------------------------
object st = get(ctl,"text") -- search term;
object t = get(lbl,"text") -- current text;
if length(st) > 1 then
    t = split(t,st)
    set(lbl,"markup",flatten(t,sprintf("%s",{st}))) -- bold it;
else
    set(lbl,"markup",txt) -- restore original;
end if
return 1
end function