add_widget_with_label(GTK_CONTAINER(vbox), "Radio 1:", radiobutton1);
add_widget_with_label(GTK_CONTAINER(vbox), "Radio 2:", radiobutton2);
add_widget_with_label(GTK_CONTAINER(vbox), "Button:", button);
g_signal_connect(GTK_OBJECT(button), "clicked",
GTK_SIGNAL_FUNC(button_clicked), NULL);
gtk_container_add(GTK_CONTAINER(window), vbox);
gtk_widget_show_all(window);
gtk_main();
return 0;
}
На рис. 16.10 показана программа buttons.c в действии с виджетами GtkButton
четырех часто применяемых типов.
Рис. 16.10
Щелкните мышью кнопку OK, чтобы увидеть состояние разных кнопок.
Данная программа — простой пример использования кнопок GtkButton
четырех типов — показывает, как можно считать состояние кнопки типа GtkToggleButton
, GtkCheckButton
и GtkRadioButton
с помощью единственной функции gtk_toggle_button_get_active
. Это одно из огромных преимуществ объектно-ориентированного подхода — поскольку вам не нужны отдельные функции get_active
для каждого типа кнопки, вы можете сократить требующийся программный код.
К этому моменту мы рассмотрели несколько простых виджетов GTK+, но не все виджеты представляют собой однострочные инструменты для ввода или отображения. Сложность виджетов ничем не ограничивается, и GtkTreeView
— яркий пример виджета, инкапсулирующего огромный объем функциональных возможностей.
GtkWidget
+---- GtkContainer
+---- GtkTreeView
GtkTreeView
— член семейства виджетов, новых для комплекта GTK+ 2, создающий представление данных в виде дерева или списка наподобие тех, которые вы можете встретить в электронной таблице или файловом менеджере. С помощью виджета GtkTreeView
можно создать сложные представления данных, смешивая текст, растровую графику и даже данные, вводимые с помощью виджетов GtkEntry
, и т.д.
Самый быстрый способ испытания GtkTreeView
— запуск приложения gtk-demo, которое поставляется вместе с GTK+. Демонстрационное приложение показывает возможности всех виджетов GTK+, включая GtkTreeView
(рис. 16.11).
Рис. 16.11
Семейство GtkTreeView
составляется из четырех компонентов:
□ GtkTreeView
— отображение дерева или списка;
□ GtkTreeViewColumn
— представление столбца списка или дерева;
□ GtkCellRenderer
— управление отображаемыми ячейками;
□ GtkTreeModel
— представление данных дерева и списка.
Первые три компонента формируют так называемое
Ключевое достоинство проектного шаблона MVC заключается в возможности одновременной визуализации данных в виде разных представлений без ненужного их дублирования. Например, текстовые редакторы могут иметь две разные панели и редактировать разные фрагменты документа без хранения в памяти двух копий документа.
Шаблон MVC также очень популярен в Web-программировании, поскольку облегчает создание Web-сайтов, которые визуализируются в мобильных или WAP-обозревателях не так, как в настольных, просто за счет наличия отдельных компонентов
Мы начнем с рассмотрения компонентаGtkTreeStore
содержит многоуровневые данные, например иерархию каталогов, а объект GtkListStore
предназначен для простых данных.
Для создания объекта GtkTreeStore
в функцию передается количество столбцов, за которым следуют типы всех столбцов:
GtkWidget *store = gtk_tree_store_new(3, G_TYPE_STRING, G_TYPE_INT,
G_TYPE_BOOLEAN);