Potrzebuję, aby pewne dane w kontrolce GtkTreeView były wyświetlane inaczej niż inne dane. Tzn. Chodzi o to, że jeśli wartość wyświetlana będzie miała wartość mniejszą od zera to w komórce ta wartość ma zostać wyświetlona w kolorze czerwonym. Gdyby się dało to także niech zostanie pogrubiona.
Wie ktoś jak to zrobić ?
0
0
Musisz "podpiąć" funkcją gtk_tree_view_column_set_cell_data_func funkcje, która będzie przetwarzała zawartość komórki i odpowiednio wyświetlała.
void przetworz_wyswietl( GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * model, GtkTreeIter * iter, gpointer user_data )
{
gint wartosc;
gchar buf[10];
gtk_tree_model_get( model, iter, 1 /*nr kolumny w, której chcesz sprawdzać dane*/ , &wartosc, - 1 );
if ( wartosc < 0 )
{
/* Ustawia kolor czerwony tekstu i pogrubia go */
g_object_set( renderer, "foreground", "Red", "foreground-set", TRUE, "weight", 700, NULL );
}
else
{
/* Ustwia wyświetlanie na domyślne wartości */
g_object_set( renderer, "foreground-set", FALSE, "weight", 400, NULL );
}
g_snprintf( buf, sizeof( buf ), "%d", wartosc );
g_object_set( renderer, "text", buf, NULL );
}
main ()
{
[...]
gtk_tree_view_column_set_cell_data_func( kolumna, komorka, przetworz_wyswietl, NULL, NULL );
[...]
}
W przypadku kiedy wartości mniejsze od zera nie będzą w jednej kolumnie to pozostaje Ci dodać do modelu (GtkTreeModel) dodatkowe dane informujące o kolorze i pogrubieniu, wtedy zmian byś dokonywał w nim.
Więcej na ten temat znajdziesz na http://cpp0x.pl/kursy/Kurs-GTK+-C++/GtkTreeView/447