LINUX.ORG.RU

GTK+ / как изменить атрибуты текстовых элементов GtkListStore?


0

0

/*
Есть список (GtkListStore), заполненный тремя элементами.
Никак не могу понять, как менять атрибуты (цвет, background, шрифт) текстовых элементов (именно ячеек, не столбцов).
Понимаю что надо определенным образом задать параметры в gtk_list_store_new, gtk_list_store_set,
возможно в gtk_tree_view_column_new_with_attributes, но как?
Если можно, измените приведенный пример так, чтобы первый элемент (123 qwe) имел цвет текста - красный,
второй (456 asd) - background синим,
третий (789 zxc) - шрифт в стиле underline + bold.
*/
enum {
COLUMN_KEY,
COLUMN_ACTION,
NUM_COLUMS
};
//виджет-окно, содержащее список
GtkWidget *scrolled_wnd_with_list_store() {
GtkWidget *scrolled_window = gtk_scrolled_window_new (NULL, NULL);
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);

GtkCellRenderer *cell;
GtkTreeViewColumn *column;

GtkWidget *tree_view = gtk_tree_view_new ();
gtk_container_add (GTK_CONTAINER (scrolled_window), tree_view);

GtkListStore *model = gtk_list_store_new (NUM_COLUMS, G_TYPE_STRING, G_TYPE_STRING);
gtk_tree_view_set_model (GTK_TREE_VIEW (tree_view), GTK_TREE_MODEL (model));
gtk_widget_show (tree_view);

GtkTreeIter iter;

//добавляем элементы в ListStore
gtk_list_store_append (GTK_LIST_STORE (model), &iter);
gtk_list_store_set (GTK_LIST_STORE (model), &iter, COLUMN_KEY, "123", COLUMN_ACTION, "qwe", -1);

gtk_list_store_append (GTK_LIST_STORE (model), &iter);
gtk_list_store_set (GTK_LIST_STORE (model), &iter, COLUMN_KEY, "456", COLUMN_ACTION, "asd", -1);

gtk_list_store_append (GTK_LIST_STORE (model), &iter);
gtk_list_store_set (GTK_LIST_STORE (model), &iter, COLUMN_KEY, "789", COLUMN_ACTION, "zxc", -1);

cell = gtk_cell_renderer_text_new ();
column = gtk_tree_view_column_new_with_attributes ("1", cell, "text", COLUMN_KEY, NULL);
gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), GTK_TREE_VIEW_COLUMN (column));

cell = gtk_cell_renderer_text_new ();
column = gtk_tree_view_column_new_with_attributes ("2", cell, "text", COLUMN_ACTION, NULL);
gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), GTK_TREE_VIEW_COLUMN (column));

gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (tree_view), TRUE);

return scrolled_window;
}


Делаем 

enum {
COLUMN_KEY,
COLUMN_ACTION,
COLUMN_WEIGHT,
NUM_COLUMS
};

model = gtk_list_store_new (NUM_COLUMNS, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT)

потом 
 gtk_list_store_set (GTK_LIST_STORE (model), &iter, COLUMN_KEY, "123", COLUMN_ACTION, "qwe", COLUMN_WEIGHT, PANGO_WEIGHT_BOLD, -1);

потом 
 column = gtk_tree_view_column_new_with_attributes ("2", cell, "text", COLUMN_ACTION, "weight", COLUMN_WEIGHT, NULL); 

anonymous
()
Ответ на: комментарий от anonymous

Спасибо.
Если кому-нибудь интересно, как построить список так, как я хотел, вот код:

enum {
COLUMN_KEY,
COLUMN_ACTION,
COLUMN_WEIGHT,
COLUMN_UNDERLINE,
COLUMN_F_COLOR,
COLUMN_B_COLOR,
NUM_COLUMS
};
GtkWidget *scrolled_wnd_with_sh_list_store_new() {

GtkWidget *scrolled_window = gtk_scrolled_window_new (NULL, NULL);
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);

GtkCellRenderer *cell;
GtkTreeViewColumn *column;

GtkWidget *tree_view = gtk_tree_view_new ();
gtk_container_add (GTK_CONTAINER (scrolled_window), tree_view);

GtkListStore *model = gtk_list_store_new (NUM_COLUMS, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT, G_TYPE_INT, G_TYPE_STRING, G_TYPE_STRING);
gtk_tree_view_set_model (GTK_TREE_VIEW (tree_view), GTK_TREE_MODEL (model));
gtk_widget_show (tree_view);

GtkTreeIter iter;

//добавляем все элементы массива в ListStore
gtk_list_store_append (GTK_LIST_STORE (model), &iter);
gtk_list_store_set (GTK_LIST_STORE (model), &iter, COLUMN_KEY, "123",COLUMN_ACTION, "qwe",COLUMN_F_COLOR, "red",-1);

gtk_list_store_append (GTK_LIST_STORE (model), &iter);
gtk_list_store_set (GTK_LIST_STORE (model), &iter, COLUMN_KEY, "456",COLUMN_ACTION, "456", COLUMN_B_COLOR, "blue", -1);

gtk_list_store_append (GTK_LIST_STORE (model), &iter);
gtk_list_store_set (GTK_LIST_STORE (model), &iter, COLUMN_KEY, "789",COLUMN_ACTION, "789",COLUMN_UNDERLINE,PANGO_UNDERLINE_SINGLE,COLUMN_WEIGHT, PANGO_WEIGHT_BOLD,-1);

cell = gtk_cell_renderer_text_new ();
column = gtk_tree_view_column_new_with_attributes ("1", cell,"text", COLUMN_KEY,"weight", COLUMN_WEIGHT,"underline", COLUMN_UNDERLINE,"foreground", COLUMN_F_COLOR,"background", COLUMN_B_COLOR, NULL);
gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), GTK_TREE_VIEW_COLUMN (column));

cell = gtk_cell_renderer_text_new ();
column = gtk_tree_view_column_new_with_attributes ("2", cell,"text", COLUMN_ACTION,"weight", COLUMN_WEIGHT,"underline", COLUMN_UNDERLINE,"foreground", COLUMN_F_COLOR,"background", COLUMN_B_COLOR,NULL);

gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), GTK_TREE_VIEW_COLUMN (column));

gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (tree_view), TRUE);

return scrolled_window;
}

sm
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.