95 lines
2.6 KiB
Elixir
95 lines
2.6 KiB
Elixir
|
|
||
|
--------------------------------------------------------------------------------
|
||
|
--# GtkComboBoxEntry
|
||
|
--
|
||
|
-- Allows user to type or paste data into the box,
|
||
|
-- in order to choose something that isn't in the supplied set.
|
||
|
--
|
||
|
-- It does not automatically add the item to the list for future use.
|
||
|
-- To do that, you need to add it yourself. See function ShowChoice below.
|
||
|
--
|
||
|
-- Note also that the Combo entry normally 'traps' the enter key
|
||
|
-- when the cursor is in the input box.
|
||
|
-- Usually, you would like that to actually do something.
|
||
|
-- So we obtain the entry and connect the 'activate' signal
|
||
|
-- to do something useful - see NOTE [1] below.
|
||
|
--------------------------------------------------------------------------------
|
||
|
|
||
|
include GtkEngine.e
|
||
|
include std/sort.e
|
||
|
|
||
|
constant docs = `<u><b>ComboBoxEntry</b></u>
|
||
|
allows user to type in
|
||
|
an item not on the list.
|
||
|
`
|
||
|
sequence fruit = sort({"Apple","Banana","cherry","Grape","Peach","pear","Orange"})
|
||
|
|
||
|
constant csort = routine_id("CSort") -- sort ignoring case;
|
||
|
|
||
|
constant win = create(GtkWindow,
|
||
|
"title=`Combo Box Entry`,size=250x80,border=10,position=1,$destroy=Quit")
|
||
|
|
||
|
constant panel = create(GtkBox,VERTICAL)
|
||
|
add(win,panel)
|
||
|
|
||
|
constant lbl = create(GtkLabel)
|
||
|
set(lbl,"markup",docs)
|
||
|
add(panel,lbl)
|
||
|
|
||
|
constant combo = create(GtkComboBoxEntry,"margin_bottom=10")
|
||
|
add(panel,combo)
|
||
|
add(combo,custom_sort(csort,fruit))
|
||
|
set(combo,"active",1)
|
||
|
|
||
|
--NOTE [1]
|
||
|
constant cb_entry = get(combo,"entry") -- get the combo's GtkEntry
|
||
|
connect(cb_entry,"activate",_("ShowChoice")) -- display results on enter key
|
||
|
|
||
|
constant btnbox = create(GtkButtonBox),
|
||
|
btn1 = create(GtkButton,"gtk-quit","Quit"),
|
||
|
btn2 = create(GtkButton,"gtk-ok",_("ShowChoice"))
|
||
|
|
||
|
set(btn2,"can default",TRUE)
|
||
|
set(win,"default",btn2)
|
||
|
|
||
|
pack(panel,-btnbox)
|
||
|
add(btnbox,{btn1,btn2})
|
||
|
|
||
|
show_all(win)
|
||
|
main()
|
||
|
|
||
|
-----------------------------------
|
||
|
function CSort(object a, object b) -- sort ignores case;
|
||
|
-----------------------------------
|
||
|
return compare(lower(a),lower(b))
|
||
|
end function
|
||
|
|
||
|
------------------------------------------
|
||
|
function ShowChoice(atom ctl, atom data)
|
||
|
------------------------------------------
|
||
|
object favorite = get(combo,"active text")
|
||
|
|
||
|
if length(favorite) > 0 then
|
||
|
|
||
|
if find(lower(favorite),lower(fruit)) > 0 then
|
||
|
return Info(win,,proper(favorite),"is your favorite fruit")
|
||
|
end if
|
||
|
|
||
|
if Question(win,,
|
||
|
text:format("Your favorite is []",{proper(favorite)}),
|
||
|
"\nWould you like to add this\nto the list of fruits?")
|
||
|
|
||
|
= MB_YES then -- add it to the list and refresh the combo's list
|
||
|
fruit = append(fruit,favorite)
|
||
|
set(combo,"remove all")
|
||
|
add(combo,custom_sort(csort,fruit))
|
||
|
end if
|
||
|
|
||
|
end if
|
||
|
|
||
|
return 1
|
||
|
end function
|
||
|
|
||
|
|
||
|
|