I'd like to change color of each cell according to cell name.
Here is what I've done so far.
import gtk.Main;
import gtk.MainWindow;
import gtk.Box;
import gtk.TreeView;
import gtk.TreeViewColumn;
import gtk.CellRendererText;
import gtk.ListStore;
import gtk.TreeModel;
import gtk.TreeIter;
import gtk.CellRenderer;
import std.stdio;
struct Color
{
string name;
string description;
}
class MyWindow: MainWindow
{
this()
{
super("TreeView example");
setSizeRequest(500, 200);
Color[] colors;
colors ~= Color("Green", "This should be green");
colors ~= Color("Red", "This should be red");
colors ~= Color("Blue", "This should be blue");
auto tree = new TreeView();
auto dataModel = new ListStore([GType.STRING, GType.STRING]);
auto nameColumn = new TreeViewColumn();
nameColumn.setTitle("Color");
auto colorNameCell = new CellRendererText();
nameColumn.packStart(colorNameCell, true);
tree.appendColumn(nameColumn);
auto descriptionColumn = new TreeViewColumn();
descriptionColumn.setTitle("Description");
auto colorDescriptionCell = new CellRendererText();
descriptionColumn.packStart(colorDescriptionCell, true);
tree.appendColumn(descriptionColumn);
auto iter = dataModel.createIter();
foreach (color; colors)
{
dataModel.setValue(iter, 0, color.name);
dataModel.setValue(iter, 1, color.description);
dataModel.append(iter);
}
nameColumn.setCellDataFunc(colorNameCell, cast (GtkTreeCellDataFunc) &renderColor, null, null);
tree.setModel(dataModel);
add(tree);
showAll();
}
static extern(C) void renderColor(GtkTreeViewColumn * treeColumn, GtkCellRenderer * cell,
GtkTreeModel * gtkModel, GtkTreeIter * iter, void * data)
{
auto model = new TreeModel(gtkModel, false);
auto iterator = new TreeIter(iter, false);
auto cellRenderer = new CellRenderer(cell, false);
string colorName = model.getValue(iterator, 0).dupString();
writeln(colorName);
// cellRenderer.foreground = "red";
}
}
void main(string[] args)
{
Main.init(args);
auto mywindow = new MyWindow();
Main.run();
}
For example if colorName starts with "r" I'd like to change this cell color to red. If it starts with "g" I'd like to change cell color to green.
I was expecting to find a method similiar to this but
there isn't.
cellRenderer.foreground = "red";