Читать книгу 📗 "Основы программирования в Linux - Мэтью Нейл"
GtkWidget *vbox; gtk_init(&argc, &argv); window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_default_size(GTK_WINDOW(window), 200, 200); g_signal_connect(GTK_OBJECT(window), "destroy", GTK_SIGNAL_FUNC(closeApp), NULL); button = gtk_button_new_with_label("Ok"); togglebutton = gtk_toggle_button_new_with_label("Toggle"); checkbutton = gtk_check_button_new(); radiobutton1 = gtk_radio_button_new(NULL); radiobutton2 = gtk_radio_button_new_from_widget(GTK_RADIO_BUTTON(radiobutton1)); vbox = gtk_vbox_new(TRUE, 4); add_widget_with_label(GTK_CONTAINER(vbox), "ToggleButton:", togglebutton); add_widget_with_label(GTK_CONTAINER(vbox), "CheckButton:", checkbutton); 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, чтобы увидеть состояние разных кнопок.
Данная программа — простой пример использования кнопок
GtkButtonGtkToggleButtonGtkCheckButtonGtkRadioButtongtk_toggle_button_get_activeget_activeGtkTreeView
К этому моменту мы рассмотрели несколько простых виджетов GTK+, но не все виджеты представляют собой однострочные инструменты для ввода или отображения. Сложность виджетов ничем не ограничивается, и
GtkTreeViewGtkWidget +---- GtkContainer +---- GtkTreeViewGtkTreeViewGtkTreeViewGtkEntryСамый быстрый способ испытания
GtkTreeViewGtkTreeView
Рис. 16.11
Семейство
GtkTreeView□
GtkTreeView□
GtkTreeViewColumn□
GtkCellRenderer□
GtkTreeModelПервые три компонента формируют так называемое Представление, а последний — Модель. Концепция разделения Представления и Модели (часто называемая проектным шаблоном Модель/Представление/Действие (Model/View/Controller) или сокращенно MVC) не свойственна GTK+, но проектированию уделяется все больше и больше внимания на всех этапах программирования.
Ключевое достоинство проектного шаблона MVC заключается в возможности одновременной визуализации данных в виде разных представлений без ненужного их дублирования. Например, текстовые редакторы могут иметь две разные панели и редактировать разные фрагменты документа без хранения в памяти двух копий документа.
Шаблон MVC также очень популярен в Web-программировании, поскольку облегчает создание Web-сайтов, которые визуализируются в мобильных или WAP-обозревателях не так, как в настольных, просто за счет наличия отдельных компонентов Представление, оптимизированных для Web-обозревателя каждого типа. Вы также можете отделить логику сбора данных, например, запросов к базе данных, от логики пользовательского интерфейса.
Мы начнем с рассмотрения компонента Модель, представленного в GTK+ двумя типами. Объект типа
GtkTreeStoreGtkListStoreДля создания объекта
GtkTreeStoreGtkWidget *store = gtk_tree_store_new(3, G_TYPE_STRING, G_TYPE_INT, G_TYPE_BOOLEAN);Чтение, вставка, редактирование и удаление данных из модели выполняется с помощью структур
GtkTreeItergtk_tree_store_appendПеред тем как вставлять какие-либо данные в модель дерева, вам нужно получить итератор, указывающий на новую строку. Функция
gtk_tree_store_appendGtkTreeIterNULL