--------------------------------------------------------------------------------------- --# We can add more than one cell renderer to a ListView cell, -- perhaps not normally a great idea, but it works here, -- allowing us to use a single colunm to display either an -- image, a text caption, or both. --------------------------------------------------------------------------------------- include GtkEngine.e include std/io.e include std/map.e include std/filesys.e include std/console.e include std/convert.e constant docs = `ListView This one packs both a pixbuf and text into a single cell. Not always very useful, but just to prove it can be done... ` -- create an array of filenames; sequence animals = {"dragon","fish","fox","mouse"} object path = pathname(canonical_path(locate_file("~/demos/thumbnails/fox.png"))) path &= "/%s.png" enum NAME, IMG for i = 1 to length(animals) do animals[i] = { proper(animals[i]), create(GdkPixbuf,sprintf(path,{animals[i]}),30,30,1) } end for constant win = create(GtkWindow,{ {"border width",10}, {"default size",100,300}, {"position",GTK_WIN_POS_CENTER}}) connect(win,"destroy","Quit") constant panel = create(GtkBox,VERTICAL) add(win,panel) constant lbl = create(GtkLabel,{{"markup",docs}}) add(panel,lbl) constant scroller = create(GtkScrolledWindow) pack(panel,scroller,TRUE,TRUE) constant store = create(GtkListStore,{gSTR,gPIX}) atom iter = create(GtkTreeIter) set(store,"data",animals) constant rend1a = create(GtkCellRendererText) constant rend1b = create(GtkCellRendererPixbuf) constant col1 = create(GtkTreeViewColumn) set(col1,"pack start",rend1a) set(col1,"pack end",rend1b) set(col1,{ {"title","Animal"}, {"add attribute",rend1a,"text",1}, {"add attribute",rend1b,"pixbuf",2}, {"sort column id",1}}) constant tv = create(GtkTreeView,{ {"model",store}, {"reorderable",TRUE}, {"headers clickable",TRUE}, {"rules hint",TRUE}, {"grid lines",GTK_TREE_VIEW_GRID_LINES_BOTH}, {"margin bottom",10}, {"append columns",{col1}}}) connect(tv,"row-activated",call_back(routine_id("ShowAnimal"))) add(scroller,tv) constant selection = gtk:get(tv,"selection") set(selection,"mode",GTK_SELECTION_SINGLE) show_all(win) main() ----------------------------- function ShowAnimal() ----------------------------- object row = gtk:get(selection,"selected row") object rowdata = gtk:get(store,"row data",row) set(win,"icon",rowdata[IMG]) Info(win,,rowdata[NAME],,,rowdata[IMG],rowdata[IMG]) return 1 end function