LINUX.ORG.RU

Сообщения sm

 

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

Форум — Development

/*
Есть список (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;
}

sm
()

GTK+ / маленький вопрос

Форум — Development

/*
Ниже представлена функция, при запуске которой открывается окно,
в котором отображается текстовый файл, имя которого должно быть
задано в качестве параметра функции.

Все работает, но есть небольшая неприятность - при попытке открыть
текст с кириллицей (в utf8), в консоль выбрасываются сообщения типа
(myprogram:3513): Gtk-CRITICAL **: file gtktextbuffer.c: line 543 (gtk_text_buffer_emit_insert): assertion `g_utf8_validate (text, len, NULL)' failed

Быть может кто-нибудь знает, как это лечится?

ps локаль - utf8
*/

void FViewer(char *file_path){
GtkWidget *wnd, *scrolled_window;

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

wnd = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_default_size (GTK_WINDOW (wnd), 800, 600);
gtk_window_set_position(GTK_WINDOW (wnd), GTK_WIN_POS_CENTER);

gtk_window_set_title (GTK_WINDOW (wnd), "File viewer");

int workfile = -1;
GtkTextBuffer *buffer;
GtkWidget *text_view = gtk_text_view_new ();
gtk_text_view_set_editable(GTK_TEXT_VIEW(text_view), FALSE); //нельзя редактировать
gtk_text_view_set_cursor_visible(GTK_TEXT_VIEW(text_view), FALSE); //нет курсора

buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text_view)); //вытаскием буфер

int rval;
void *cbuffer = calloc(512,sizeof(char));
GtkTextIter iter; // Итератор текстового буфера

/* Открываем файл. */
workfile = open (file_path, O_RDONLY);
if(workfile == -1){
g_print ("Error open %s\n", file_path);
}else{
gtk_text_buffer_get_start_iter (buffer, &iter); //Устанавливаем итератор на начало текста
while ((rval = read(workfile, cbuffer, 512)) != 0){ // Читаем из файла пишем в буфер
gtk_text_buffer_insert (buffer, &iter, cbuffer, -1);
}
free (cbuffer);
gtk_container_add (GTK_CONTAINER (scrolled_window), text_view);
gtk_container_add (GTK_CONTAINER (wnd), scrolled_window);
gtk_widget_show_all (wnd);
}
}

sm
()

RSS подписка на новые темы