Изменение цвета шрифта для столбца в TreeView GTK
У меня есть древовидная структура, и я хочу изменить цвет текста в одном столбце.
Как я мог это сделать??
Спасибо
2 ответа
(Ссылаясь на стандартные методы C, с Vala пока что мало что сделали)
Есть несколько способов добиться этого. Вы можете изменить настройки текстового cellrenderer (GtkCellRendererText), например:
g_object_set (your_text_cell_renderer, "foreground",
"red", "foreground-set", TRUE);
Другой способ - использовать разметку:
highlighted_txt = g_strconcat ("<span background='yellow' foreground='black'>",
my_text, "</span>", NULL);
g_object_set (your_text_cell_renderer, "markup", highlighted_txt, NULL);
Чтобы изменить цвет шрифта каждого столбца индивидуально при определенных условиях, используются gtk_tree_view_insert_column_with_data_func или gtk_tree_view_column_set_cell_data_func, они описаны в онлайн-документации для GtkTreeView. Вы можете использовать различные средства визуализации текстовых ячеек для каждого столбца, чтобы сохранить настройки отдельно.
Это можно сделать так:
for (columns_cnt = 0; columns_cnt < NUMBER_OF_COLUMNS; columns_cnt++) {
text_renderer = gtk_cell_renderer_text_new ();
columns[columns_cnt] = gtk_tree_view_column_new_with_attributes
(column_header_txt[columns_cnt], text_renderer,
"text", columns_cnt, NULL);
gtk_tree_view_column_set_cell_data_func (columns[columns_cnt], text_renderer,
(GtkTreeCellDataFunc)
set_column_attributes, NULL, NULL);
}
...
static void set_column_attributes (GtkTreeViewColumn *cell_column,
GtkCellRenderer *txt_renderer,
GtkTreeModel *cell_model,
GtkTreeIter *cell_iter,
gpointer pointer)
{
// Use g_object_set or something else here.
}
Во-первых, вы должны настроить столбец в вашей модели, описывающий цвет для каждой строки. Затем вы используете gtk_tree_view_insert_column_with_attributes, чтобы установить foreground
приписать положение цветового столбца.