Чтение онлайн

на главную - закладки

Жанры

Основы программирования в Linux
Шрифт:

 GtkWidget * widget) {

 GtkWidget *label = gtk_label_new(caption);

 GtkWidget *hbox = gtk_hbox_new(TRUE, 4);

 gtk_container_add(GTK_CONTAINER(hbox), label);

 gtk_container_add(GTK_CONTAINER(hbox), widget);

 gtk_container_add(box, hbox);

}

3. 

print_active
— еще одна вспомогательная функция, которая выводит текущее состояние заданной кнопки-выключателя
GtkToggleButton
со строкой описания. Он вызывается из функции
button_clicked
, функции обратного вызова, связанной с сигналом
clicked
кнопки OK. При каждом щелчке мышью этой кнопки вы получаете на экране отчет о состоянии кнопок:

void print_active(char * button_name, GtkToggleButton* button) {

 gboolean active = gtk_toggle_button_get_active(button);

 printf("%s is %s\n", button_name, active?"active":"not active");

}

void button_clicked(GtkWidget *button, gpointer data) {

 print_active("Checkbutton", GTK_TOGGLE_BUTTON(checkbutton));

 print_active("Togglebutton", GTK_TOGGLE_BUTTON(togglebutton));

 print_active("Radiobutton1", GTK_TOGGLE_BUTTON(radiobutton1));

 print_active("Radiobutton2", GTK_TOGGLE_BUTTON(radiobutton2));

 printf("\n");

}

4. В функции

main
вы создаете виджеты кнопок, поочередно помещаете их в контейнер
GtkVBox
, добавив пояснительные метки, и связываете сигнал обратного вызова с кнопкой OK:

gint main(gint argc, gchar *argv[]) {

 GtkWidget* window;

 GtkWidget *button;

 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, чтобы увидеть состояние разных кнопок.

Данная программа — простой пример использования кнопок

GtkButton
четырех типов — показывает, как можно считать состояние кнопки типа
GtkToggleButton
,
GtkCheckButton
и
GtkRadioButton
с помощью единственной функции
gtk_toggle_button_get_active
. Это одно из огромных преимуществ объектно-ориентированного подхода — поскольку вам не нужны отдельные функции
get_active
для каждого типа кнопки, вы можете сократить требующийся программный код.

GtkTreeView

К этому моменту мы рассмотрели несколько простых виджетов GTK+, но не все виджеты представляют собой однострочные инструменты для ввода или отображения. Сложность виджетов ничем не ограничивается, и

GtkTreeView
— яркий пример виджета, инкапсулирующего огромный объем функциональных возможностей.

GtkWidget

 +---- GtkContainer

+---- GtkTreeView

GtkTreeView
член семейства виджетов, новых для комплекта GTK+ 2, создающий представление данных в виде дерева или списка наподобие тех, которые вы можете встретить в электронной таблице или файловом менеджере. С помощью виджета
GtkTreeView
можно создать сложные представления данных, смешивая текст, растровую графику и даже данные, вводимые с помощью виджетов
GtkEntry
, и т.д.

Самый быстрый способ испытания

GtkTreeView
— запуск приложения gtk-demo, которое поставляется вместе с GTK+. Демонстрационное приложение показывает возможности всех виджетов GTK+, включая
GtkTreeView
(рис. 16.11).

Рис. 16.11

Семейство

GtkTreeView
составляется из четырех компонентов:

 

GtkTreeView
— отображение дерева или списка;

 

GtkTreeViewColumn
— представление столбца списка или дерева;

Поделиться:
Популярные книги

Вечный. Книга V

Рокотов Алексей
5. Вечный
Фантастика:
боевая фантастика
попаданцы
рпг
5.00
рейтинг книги
Вечный. Книга V

Ермак. Регент

Валериев Игорь
10. Ермак
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Ермак. Регент

Инквизитор Тьмы

Шмаков Алексей Семенович
1. Инквизитор Тьмы
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Инквизитор Тьмы

Черный Маг Императора 19

Герда Александр
19. Черный маг императора
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Черный Маг Императора 19

Дважды одаренный. Том V

Тарс Элиан
5. Дважды одаренный
Фантастика:
аниме
альтернативная история
городское фэнтези
5.00
рейтинг книги
Дважды одаренный. Том V

Печать мастера

Лисина Александра
6. Гибрид
Фантастика:
попаданцы
технофэнтези
аниме
фэнтези
6.00
рейтинг книги
Печать мастера

Бояръ-Аниме. Газлайтер. Том 34

Володин Григорий Григорьевич
34. История Телепата
Фантастика:
фэнтези
боевая фантастика
аниме
5.00
рейтинг книги
Бояръ-Аниме. Газлайтер. Том 34

Позывной "Князь" 3

Котляров Лев
3. Князь Эгерман
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Позывной Князь 3

Последний Паладин. Том 10

Саваровский Роман
10. Путь Паладина
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Последний Паладин. Том 10

Мастер 4

Чащин Валерий
4. Мастер
Фантастика:
героическая фантастика
боевая фантастика
попаданцы
5.00
рейтинг книги
Мастер 4

Телохранитель Генсека. Том 1

Алмазный Петр
1. Медведев
Фантастика:
попаданцы
альтернативная история
7.00
рейтинг книги
Телохранитель Генсека. Том 1

Жена со скидкой, или Случайный брак

Ардова Алиса
Любовные романы:
любовно-фантастические романы
8.15
рейтинг книги
Жена со скидкой, или Случайный брак

Гранит науки. Том 3

Зот Бакалавр
3. Героями не становятся, ими умирают
Фантастика:
фэнтези
боевая фантастика
5.00
рейтинг книги
Гранит науки. Том 3

Меченный смертью. Том 1

Юрич Валерий
1. Меченный смертью
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Меченный смертью. Том 1