Date: Mon, 7 Feb 2005 14:17:23 +0300 From: Anastasia Gornostaeva To: lablgtk at math.nagoya-u.ac.jp Subject: GTreeView Message-ID: <20050207111723.GA37538 at ermine.home> Mime-Version: 1.0 Content-Type: text/plain; charset=koi8-r Content-Disposition: inline Hello. I'm newbie and attemting to build a TreeView that displays rows with variable rows: Sorry for big text here. In programm below I'm attemting to keep first column to ve width=0 for toplevel rows but it fails and after its expanding the first column becomes large. lablgtk 2.4, gtk 2.4 thanks -- open GMain open Gobject.Data let cols = new GTree.column_list let is_group = cols#add boolean let element = cols#add string let create_model () = let treestore = GTree.tree_store cols in let row = treestore#append () in let () = treestore#set ~row ~column:is_group true; treestore#set ~row ~column:element "Moderators"; let row1 = treestore#append ~parent:row () in let () = treestore#set ~row:row1 ~column:is_group false; treestore#set ~row:row1 ~column:element "ermine" in let row1 = treestore#append ~parent:row () in let () = treestore#set ~row:row1 ~column:is_group false; treestore#set ~row:row1 ~column:element "mblsha" in let row1 = treestore#append ~parent:row () in let () = treestore#set ~row:row1 ~column:is_group false; treestore#set ~row:row1 ~column:element "aleksey" in () in let row = treestore#append () in treestore#set ~row ~column:is_group true; treestore#set ~row ~column:element "Participants"; let row1 = treestore#append ~parent:row () in let () = treestore#set ~row:row1 ~column:is_group false; treestore#set ~row:row1 ~column:element "sulci" in let row1 = treestore#append ~parent:row () in let () = treestore#set ~row:row1 ~column:is_group false; treestore#set ~row:row1 ~column:element "john" in treestore let icon = GdkPixbuf.from_file "available.gif" let status_cell_data_func renderer (model:GTree.model) iter = let is_g = model#get ~row:iter ~column:is_group in if is_g then renderer#set_properties [`VISIBLE false] else renderer#set_properties [`VISIBLE true; `PIXBUF icon] let element_cell_data_func renderer (model:GTree.model) iter = let is_g = model#get ~row:iter ~column:is_group in let el = model#get ~row:iter ~column:element in if is_g then (* really draw differently - made here to be simpliest *) renderer#set_properties [`TEXT el] else renderer#set_properties [`TEXT el;] let create_view ~packing () = let model = create_model () in let view = GTree.view ~model ~headers_visible:false ~packing () in let col = GTree.view_column () in let renderer = GTree.cell_renderer_pixbuf [`XPAD 0; `YPAD 1] in let _ = col#pack ~from:`START ~expand:true renderer; col#set_cell_data_func renderer (status_cell_data_func renderer); view#append_column col in let col = GTree.view_column () in let renderer = GTree.cell_renderer_text [] in renderer#set_properties [`FOREGROUND "green"; `XPAD 4; `YPAD 1]; col#pack renderer ~expand:true; col#set_cell_data_func renderer (element_cell_data_func renderer); view#append_column col; view let create_some ~packing = let vpaned = GPack.paned `VERTICAL ~packing () in let wscroll_users = GBin.scrolled_window ~hpolicy:`AUTOMATIC ~vpolicy:`AUTOMATIC ~placement:`TOP_LEFT ~packing:vpaned#add2 () in create_view ~packing:wscroll_users#add () let main () = let window = GWindow.window ~title:"jabber.ru" ~width:500 ~height:300 () in create_some window#add; ignore (window#connect#destroy ~callback:GMain.Main.quit); window#show (); GMain.Main.main () let _ = main ()