Pastey Replacing TreeView data
- Posted by irv Aug 24, 2019
------------------------------------------------------------------------ --# GtkTreeStore ------------------------------------------------------------------------ include GtkEngine.e object store = create(GtkTreeStore,{gSTR,gSTR}) sequence os = {0,0} os[1] = { {"Windows","An Operating ? System", {"Bill Gates"}}, {"Linux","An Operating ! System", {"Linus Torvalds"}}, {"Mac","A Religion", {"Steve Jobs", "The Woz", {"Billy (the kid)", {"Bowser","Fido"}, "Susan (the other kid)", {"Grumpy Cat"} } } } } os[2] = { {"McD's","Burger Place", {"Ray Krok"}}, {"KFC","Fried Chicken", {"Col. Sanders"}}, {"Outback","Steakhouse", {"Employees", "Chef", {"Bill", {"Sue","Joe"}, "Charlotte", {"Mark"} } } } } integer which = 1 set(store,"data",os[which]) constant col1 = create(GtkColumn,"title=OS,type=text,markup=1,sort_column_id=1"), col2 = create(GtkColumn,"title=Notes,type=text,markup=2,sort_column_id=2") constant tv = create(GtkTreeView,{ {"model",store}, {"append columns",{col1,col2}}, {"enable tree lines",TRUE}, {"rules hint",TRUE}, {"hover expand",TRUE}, -- {"expand all"}, $}) atom selection = get(tv,"selection") -- GtkTreeSelection constant win = create(GtkWindow,"size=250x400,border=10,$destroy=Quit"), panel = create(GtkBox,"orientation=vertical,spacing=10"), btn3 = create(GtkButton,"#Change","ChangeData"), btn2 = create(GtkToggleButton,"gtk-ok#Expand","Expand"), btn1 = create(GtkButton,"gtk-quit","Quit"), box = create(GtkButtonBox) add(win,panel) pack(panel,tv,TRUE,TRUE,5) add(box,{btn1,btn2,btn3}) pack(panel,-box) show_all(win) connect(tv,"row-activated","ShowSelection") -- open on mouse click; main() ------------------------------- global function ChangeData() -- ------------------------------- if which >= 2 then which = 1 else which += 1 end if set(store,"clear") set(store,"data",os[which]) return 1 end function ---------------------------------- global function ShowSelection() -- ---------------------------------- atom iter = allocate(32), model = allocate(32), parent = allocate(32) object result if gtk_func("gtk_tree_selection_get_selected",{P,P,P},{selection,model,iter}) then result = get(store,"value",iter,1) display(result) -- if you just want to show the clicked item; while gtk_func("gtk_tree_model_iter_parent",{P,P,P},{store,parent,iter}) do result = get(store,"value",parent,1) & " -> " & result iter = gtk_func("gtk_tree_iter_copy",{P},{parent}) end while -- look up parents to get a full path; Info(,,result) -- show full path to clicked item; -- e.g: Mac -> The Woz -> Billy (the kid) -> Fido end if return 1 end function --------------------------- global function Expand() -- --------------------------- if get(btn2,"active") then set(tv,"expand all") else set(tv,"collapse all") end if return 1 end function


