LINUX.ORG.RU

gtk_tree_view


0

0

Построил список с помощью gtk_tree_view (язык си).
Какой-то он запутанный, есть у меня несколько вопросов по нему.
1) Как сделать чтобы курсор встал на позицию например 3-го элемента?
2) Как получить номер выделенного элемента списка?
3) Как изменить цвет произвольного элемента списка? Я знаю как это
сделать при заполнении листа (gtk_list_store_append, gtk_list_store_set),
но мне надо уже для заполненого списка - в процессе работы (в моей программе
нажимается кнопка, из листа выбираются определенные элементы и меняют цвет).

anonymous

1. Возможно gtk_tree_selection_select_iter??? 2. Уникальный номер ты врядли получишь, поэтому лучше хранить номер в gtk_tree/list/etc_store 3. Если ты хочешь сделать каждую вторую строчку серой, то включи rules hint, а если именно цвет менять, кури здесь: http://scentric.net/tutorial/sec-treeview-col-whole-row.html

Советую вообще почитать http://scentric.net/tutorial/

nyo ★★
()

1. Возможно gtk_tree_selection_select_iter???
2. Уникальный номер ты врядли получишь, поэтому лучше хранить номер в gtk_tree/list/etc_store
3. Если ты хочешь сделать каждую вторую строчку серой, то включи rules hint, а если именно цвет менять, кури здесь: http://scentric.net/tutorial/sec-treeview-col-whole-row.html

Советую вообще почитать http://scentric.net/tutorial/

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

>Сколько колонок в листе?

три

anonymous
()

Если учесть что английский я не очень хорошо знаю, GTK+ 2.0 Tree View Tutorial читается тяжеловато для меня.
Если кто в этом tree view'е нормально разбирается, помогите плиз.
Приведу кусок кода, который запускает диалог (void dlgMyList()). В диалоге имеется список + кнопка для изменения цвета + кнопка закрытия.
Мне надо, чтобы по нажатию кнопки для изменения цвета выделенная ячейка списка закрасилась (foreground) в красный цвет,
а если она уже закрашена в красный - то в дефолтный (черный). Казалось бы такая элементарщина, но уже который день бьюсь.
Я думаю надо что-нибудь наподобие g_object_set(cell, "foreground", "red", NULL); написать, но где и как указать нужную cell?
Выручайте, пипл, я уже готов моник клавой разбить.

enum { TXT_1, TXT_2, TXT_3, COLOR, NUM, };

GtkWidget *MyList() 
{	
	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, G_TYPE_STRING, G_TYPE_STRING, 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;
 
	gtk_list_store_append (GTK_LIST_STORE (model), &iter);
	gtk_list_store_set (GTK_LIST_STORE (model), &iter, 
			    TXT_1, "123",
			    TXT_2, "456",
			    TXT_3, "789",
			    COLOR, "red",
			    -1);

	gtk_list_store_append (GTK_LIST_STORE (model), &iter);
	gtk_list_store_set (GTK_LIST_STORE (model), &iter, 
			    TXT_1, "qwe",
			    TXT_2, "rty",
			    TXT_3, "uio",
			    -1);

	gtk_list_store_append (GTK_LIST_STORE (model), &iter);
	gtk_list_store_set (GTK_LIST_STORE (model), &iter, 
			    TXT_1, "asd",
			    TXT_2, "fgh",
			    TXT_3, "jkl",
			    COLOR, "red",
			    -1);

	cell = gtk_cell_renderer_text_new ();
	column = gtk_tree_view_column_new_with_attributes ("1", cell,
							   "text", TXT_1,
							   "foreground", 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", TXT_2, 
							   "foreground", 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 ("3", cell, 
							   "text", TXT_3, 
							   "foreground", COLOR, 
							   NULL); 
	gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), GTK_TREE_VIEW_COLUMN (column));

	return scrolled_window;
}

void changeColor() { puts("Changing color..."); }

void dlgMyList() 
{
	GtkWidget *dialog, *button;

	dialog = gtk_dialog_new_with_buttons ("MyList", GTK_WINDOW (window), GTK_DIALOG_MODAL, NULL);
	gtk_window_set_default_size (GTK_WINDOW (dialog), 300, 300); 

	button = gtk_button_new_from_stock (GTK_STOCK_CLOSE);
	gtk_dialog_add_action_widget (GTK_DIALOG(dialog), button, GTK_RESPONSE_CANCEL);

	GtkWidget *List = MyList();
	GtkWidget *b = gtk_button_new_with_label("Change color of selected entry");
	
	gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), List, TRUE, TRUE, 0);
	gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), b, FALSE, FALSE, 0);
	
	gtk_widget_show_all(dialog);
	gtk_dialog_run(GTK_DIALOG(dialog));
	gtk_widget_destroy(dialog);
}

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