Читать интересную книгу Основы программирования в Linux - Мэтью Нейл

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 286 287 288 289 290 291 292 293 294 ... 324

GtkTreeIter iter;

gtk_tree_store_append(store, &iter, NULL);

Получив итератор, вы можете заполнять строку с помощью функции gtk_tree_store_set:

gtk_tree_store_set(store, &iter,

 0, "Def Leppard",

 1, 1987,

 2, TRUE, -1);

Номер столбца и данные передаются парами, которые завершаются -1. Позже вы примените тип enum для того, чтобы сделать номера столбцов более информативными.

Для того чтобы добавить ветвь к данной строке (дочернюю строку), вам нужен только итератор для дочерней строки, который вы получаете, вызвав снова функцию gtk_tree_store_append и указав на этот раз в качестве параметра строку верхнего уровня:

GtkTreeIter child;

gtk_tree_store_append(store, &child, &iter);

Дополнительную информацию об объектах GtkTreeStore и функциях объекта GtkListStore см. в документации API, а мы пойдем дальше и рассмотрим компонент Представление типа GtkTreeView.

Создание объекта GtkTreeView — сама простота: только передайте в конструктор в качестве параметра модель типа GtkTreeStore или GtkListStore:

GtkWidget* view = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store));

Сейчас самое время настроить виджет для отображения данных именно так, как вы хотите. Для каждого столбца следует определить GtkCellRenderer и источник данных. Можно выбрать, например, визуализацию только определенных столбцов данных или изменить порядок вывода столбцов.

GtkCellRenderer — это объект, отвечающий за прорисовку каждой ячейки на экране, и существует три подкласса, имеющие дело с текстовыми ячейками, ячейками пиксельной графики и ячейками кнопок-выключателей:

□ GtkCellRendererText;

□ GtkCellRendererPixBuf;

□ GtkCellRendererToggle.

В вашем Представлении будет применено текстовое представление ячеек, GtkCellRendererText.

GtkCellRenderer* 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);

Вы создаете представление ячейки и передаете его в функцию вставки столбца. Эта функция позволяет сразу задать свойства GtkCellRendererText, передавая заканчивающиеся значением NULL пары "ключ/значение". В качестве параметров указаны представление дерева, номер столбца, заголовок столбца, представление ячейки и его свойства. В приведенном примере вы задаете атрибут "text", передав номер столбца источника данных. Для объекта GtkCellRendererText определено несколько других атрибутов, включая подчеркивание, шрифт, размер и т.д.

В упражнении 16.7, выполнив необходимые шаги, вы увидите, как это работает на практике.

Упражнение 16.7. Использование виджета GtkTreeView

Введите следующий программный код и назовите файл tree.с.

1. Примените тип enum для обозначения столбцов, чтобы можно было ссылаться на них по именам. Общее количество столбцов удобно обозначить как N_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);

1 ... 286 287 288 289 290 291 292 293 294 ... 324
На этом сайте Вы можете читать книги онлайн бесплатно русская версия Основы программирования в Linux - Мэтью Нейл.

Оставить комментарий