GtkTreeView C изменить отдельный цвет текста для указанной строки или ячейки c, а не для всего столбца - PullRequest
0 голосов
/ 28 февраля 2020

Я пытаюсь понять, как изменить цвет текста в ячейке GtkTreeView без изменения цвета всего столбца. Я хочу динамически менять цвет по умолчанию на зеленый или красный в зависимости от условий. Например, пройти или не пройти тест, а цвет текста отдельной ячейки становится красным или зеленым, например, при программировании C.

if(strstr(string,"PASS"))
{
    g_object_set(renderer_pass_fail,"foreground", "Green","foreground-set", TRUE,NULL);
}
else
{
    g_object_set(renderer_pass_fail,"foreground", "Red","foreground-set", TRUE,NULL);
}

Ответы [ 2 ]

1 голос
/ 28 февраля 2020

Да, нужно добавить еще одну колонку к вашей модели и сохранить там цвет.


enum
{
    TEXT_COL,
    COLOR_COL,
    N_COLUMNS
};

/* TreeModel */
store = gtk_list_store_new (N_COLUMNS,
                            G_TYPE_STRING,
                            GDK_TYPE_RGBA);

/* Column */                            
renderer = gtk_cell_renderer_text_new ();
column = gtk_tree_view_column_new_with_attributes (_("Name"),
                                                   renderer,
                                                   "text",
                                                   TEXT_COL,
                                                   "foreground-rgba",
                                                   COLOR_COL,
                                                   NULL);

/* Adding an element */
gtk_list_store_append (store, &ls_iter);
gtk_list_store_set (store, &ls_iter,
                    TEXT_COL, "hello",
                    COLOR_COL, gdk_rgba_copy (color),
                    -1);
0 голосов
/ 03 марта 2020

С помощью еще нескольких гуглов и справки из первого ответа выше и с помощью ключевого слова glade я нашел ответ в следующей ссылке, как выполнить sh выше, используя Glade.

Найден ответ, пока используя поляну XML UI App

if(strstr(string,"PASS"))
{
    gdk_color_parse ("green", &color);
    gtk_list_store_set (get_gtk_list_store(), &iterr,COL, "PASS",COL_COLOR, &color,-1);
}
else if(strstr(string,"FAIL"))
{
    gdk_color_parse ("red", &color);
    gtk_list_store_set (get_gtk_list_store(), &iterr,COL, "FAIL",COL_COLOR, &color,-1);
}
else if(strstr(string,"ABORT"))
{
    gdk_color_parse ("red", &color);
    gtk_list_store_set (get_gtk_list_store(), &iterr,COL, "FAIL",COL_COLOR, &color,-1);
}
else
{
    gdk_color_parse ("yellow", &color);
    gtk_list_store_set (get_gtk_list_store(), &iterr,COL, "N / A",COL_COLOR, &color,-1);
}
...