Читать книгу 📗 "Основы программирования в Linux - Мэтью Нейл"
GtkTreeIter iter;gtk_tree_store_append(store, &iter, NULL);Получив итератор, вы можете заполнять строку с помощью функции
gtk_tree_store_setgtk_tree_store_set(store, &iter, 0, "Def Leppard", 1, 1987, 2, TRUE, -1);Номер столбца и данные передаются парами, которые завершаются -1. Позже вы примените тип enum для того, чтобы сделать номера столбцов более информативными.
Для того чтобы добавить ветвь к данной строке (дочернюю строку), вам нужен только итератор для дочерней строки, который вы получаете, вызвав снова функцию
gtk_tree_store_appendGtkTreeIter child;gtk_tree_store_append(store, &child, &iter);Дополнительную информацию об объектах
GtkTreeStoreGtkListStoreGtkTreeViewСоздание объекта
GtkTreeViewGtkTreeStoreGtkListStoreGtkWidget* view = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store));Сейчас самое время настроить виджет для отображения данных именно так, как вы хотите. Для каждого столбца следует определить
GtkCellRendererGtkCellRenderer□
GtkCellRendererText□
GtkCellRendererPixBuf□
GtkCellRendererToggleВ вашем Представлении будет применено текстовое представление ячеек,
GtkCellRendererTextGtkCellRenderer* renderer = gtk_cell_renderer_text_new();gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view), "This is the column title", renderer, "text", 0, NULL);Вы создаете представление ячейки и передаете его в функцию вставки столбца. Эта функция позволяет сразу задать свойства
GtkCellRendererTextNULLGtkCellRendererTextВ упражнении 16.7, выполнив необходимые шаги, вы увидите, как это работает на практике.
GtkTreeViewВведите следующий программный код и назовите файл tree.с.
1. Примените тип
enumN_COLUMNS#include <gtk/gtk.h>enum { COLUMN_TITLE, COLUMN_ARTIST, COLUMN_CATALOGUE, N_COLUMNS};void closeApp(GtkWidget *window, gpointer data) { gtk_main_quit();}int main(int argc, char *argv[]) { GtkWidget *window; GtkTreeStore *store; GtkWidget *view; GtkTreeIter parent_iter, child_iter; GtkCellRenderer *renderer; gtk_init(&argc, &argv); window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_default_size(GTK_WINDOW(window), 300, 200); g_signal_connect(GTK_OBJECT(window), "destroy", GTK_SIGNAL_FUNC(сloseApp), NULL);2. Далее вы создаете модель дерева, передавая количество столбцов и тип каждого из них:
store = gtk_tree_store_new(N_COLUMNS, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING);3. Следующий этап — вставка родительской и дочерней строк в дерево:
gtk_tree_store_append(store, &parent_iter, NULL); gtk_tree_store_set(store, &parent_iter, COLUMN_TITLE, "Dark Side of the Moon", COLUMN_ARTIST, "Pink Floyd", COLUMN_CATALOGUE, "B000024D4P", -1); gtk_tree_store_append(store, &child_iter, &parent_iter); gtk_tree_store_set (store, &child_iter, COLUMN_TITLE, "Speak to Me", -1); view = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store));4. Наконец, добавьте столбцы в представление, задавая источники данных для них и заголовки:
renderer = gtk_cell_renderer_text_new(); gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view), COLUMN_TITLE, "Title", renderer, "text", COLUMN_TITLE, NULL); gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view), COLUMN_ARTIST, "Artist", renderer, "text", COLUMN_ARTIST, NULL);