Hi,
I need a treeview expert to set a background color of a particular
cell of a liststore,
here the code i extracted from my project.
The goal is to set only the cell corresponding to severity "high" to
background color red, as the data are dynamically added to the
liststore using the append method which is using the same cell
renderer all the column is set to red ;(
Any idea ?
thanks,
david
#######################################################################################
#!/usr/bin/ruby
require 'gtk2'
require 'gnomecanvas2'
Gtk.init
w = Gtk::Window.new
ls = Gtk::ListStore.new(Integer, String, Integer, String, String)
treeview = Gtk::TreeView.new(ls)
w.add treeview
column1 = Gtk::TreeViewColumn.new("Selected",
Gtk::CellRendererToggle.new, {:active => 0})
column2 = Gtk::TreeViewColumn.new("Protocol",
Gtk::CellRendererText.new, {:text => 1})
column3 = Gtk::TreeViewColumn.new("Port", Gtk::CellRendererText.new,
{:text => 2})
column4 = Gtk::TreeViewColumn.new("Service",
Gtk::CellRendererText.new, {:text => 3})
column5 = Gtk::TreeViewColumn.new("Severity",
Gtk::CellRendererText.new, {:text => 4})
treeview.append_column(column1)
treeview.append_column(column2)
treeview.append_column(column3)
treeview.append_column(column4)
treeview.append_column(column5)
treeview.show
array = [[1, "tcp",80,"http","high"], [1, "udp",53,"dns","medium"]]
array.each {|cb, proto, port, service, sev|
iter = treeview.model.append
iter[0] = cb
iter[1] = proto
iter[2] = port
iter[3] = service
iter[4] = sev
if sev == "high"
sev_column = treeview.get_column(4)
cells = sev_column.cell_renderers
puts cells
if cells.size > 0
sev_column.cell_renderers[0].set_cell_background_gdk(Gdk::Color.new(64515,
0, 0))
end
end
}
w.show_all
Gtk.main
on 2012-11-24 20:09
on 2012-11-25 00:39
Hi: The method you need to use is: Gtk::TreeViewColumn#set_cell_data_func http://ruby-gnome2.sourceforge.jp/hiki.cgi?Gtk%3A%... However, there's a much easier way to accomplish this using visualruby. Using visualruby's listview object, you can load any type of object into a listview, then define a method called "visual_attributes" to define how you want the object to appear: class Server def initialize(cb, proto, port) @cb = cb @proto = proto @port = port end def visual_attributes hash = { :text => @cb.to_s } hash[:background] = (@port < 0) ? "red" : "white" return hash end end Later you create a listview like this: @list_view = VR::Listview.new(:cb => String, :serv => Server) The Server objects will all appear with the text set to @cb, and the background will be red for any port that's less than zero. For more look at the Listview Tutorials on visualruby.net. Yours, Eric C
on 2012-11-25 01:05
On Sun, Nov 25, 2012 at 12:39 AM, Eric C. <ruby-forum-incoming@andreas-s.net> wrote: > Using visualruby's listview object, you can load any type of object into > def visual_attributes > The Server objects will all appear with the text set to @cb, > and the background will be red for any port that's less than zero. > > For more look at the Listview Tutorials on visualruby.net. Thx Eric, i will have a look and try. regards, david
on 2012-11-25 03:14
Hi David: Look at the example program, "active_record2" it has cells with different colors in the same column.
on 2012-11-25 12:58
On Sun, Nov 25, 2012 at 3:14 AM, Eric C. <ruby-forum-incoming@andreas-s.net> wrote: > Hi David: > > Look at the example program, "active_record2" it has cells with > different colors in the same column. Thx Eric, i made it works. regards, david
Please log in before posting. Registration is free and takes only a minute.
Existing account
(Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
Log in with Google account | Log in with Yahoo account
No account? Register here.