LINUX.ORG.RU

TreeView in GTK2


0

0

Народ а кто знает как список мутануть в гтк2 ? а то в документации нет пока, типо андокументед виджет, а из доков по api я не врубился чето... Похоже там есть TreeView который надо использовать вместе с GListStore.. а еще CellRenderer какието ... можт кто объяснит, а то я новичок в гтк пока...

anonymous

GtkTreeView может быть и деревом и просто списком и их комбинацией.
Это зависит от модели, которую ты выберешь.

Столбцы (Column) в модели и во View совершенно разные вещи. В модели они 
говорят данные какого типа она хранит, а во view (GtkTreeViewColumn) они
говорят как эти данные рисовать и редактировать. GtkCellRenderer это и 
есть та штука которая собственно рисует содержимое модели на экране. 
В Gtk+ есть три типа CellRenderer: Text (показывает содержимое модели
в виде строки текста в ячейке) Toggle (это checkbox) и Pixbuf (картинка
соответственно). Ничто не запрещает сделать свой CellRenderer.

GtkListStore это модель которая превращает TreeView в список.

Процесс создания выглядит так:
создаешь модель 
list = gtk_list_store_new (2, G_TYPE_INT, G_TYPE_STRING);
теперь (или позже) можно добавить в нее данные:
gtk_list_store_append (list, &iter);
gtk_list_store_set (list, &iter, COLUMN_INT, i, COLUMN_STRING, "hidden column", -1);

теперь нужно создать колонки view:
col = gtk_tree_view_column_new ();
теперь создаешь view:
view = gtk_tree_view_new_with_model (list);
теперь добавим видимую колонку:
gtk_tree_view_append_column (view, col);

т.е. главные действующие лица здесь: model, которая содержит твои
данные, view, который при помощи CellRendererов рисует все это.
все это достаточно гибко. Например, если ты хочешь другой внешний вид
для числового столбца, просто используешь другой CellRenderer.

Проблем тоже полно. Писать модель с нуля необычайно сложно, поэтому 
приходится использовать Tree или List store и гонять данные между 
ними и своими структурами. Нет интерфейса с помощью которого можно 
было бы использовать любой виджет в CellRendererе. Поэтому частенько 
приходится делать это самому. Для начинающего этот интерфейс довольно
сложен. В туториале вся эта конструкция не документирована, приходится
обходиться обрывками информации из API reference и списка рассылки.

навскидку похоже все.

fuxx
()

ясно, а тогда как попроще список можно сделать ? CList вроде еще како то есть ??

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