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

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

Жанры

Основы программирования в 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
— представление столбца списка или дерева;

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

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

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

Локки 9. Потомок бога

Решетов Евгений Валерьевич
9. Локки
Фантастика:
фэнтези
попаданцы
героическая фантастика
боевая фантастика
5.00
рейтинг книги
Локки 9. Потомок бога

An ordinary sex life

Астердис
Любовные романы:
современные любовные романы
love action
5.00
рейтинг книги
An ordinary sex life

Шакалы

Леонов Николай Иванович
18. Гуров
Детективы:
полицейские детективы
7.36
рейтинг книги
Шакалы

На границе империй. Том 2

INDIGO
2. Фортуна дама переменчивая
Фантастика:
космическая фантастика
7.35
рейтинг книги
На границе империй. Том 2

Тринадцатый X

NikL
10. Видящий смерть
Фантастика:
попаданцы
аниме
фэнтези
6.00
рейтинг книги
Тринадцатый X

Магия камня

Назимов Константин Геннадьевич
6. Травник
Фантастика:
фэнтези
6.00
рейтинг книги
Магия камня

Газлайтер. Том 40

Володин Григорий Григорьевич
40. История Телепата
Фантастика:
альтернативная история
аниме
попаданцы
6.25
рейтинг книги
Газлайтер. Том 40

Наследник старого рода

Шелег Дмитрий Витальевич
1. Живой лёд
Фантастика:
фэнтези
8.19
рейтинг книги
Наследник старого рода

Грозовой замок

Мазуров Дмитрий
7. Громовая поступь
Фантастика:
фэнтези
героическая фантастика
рпг
5.00
рейтинг книги
Грозовой замок

Неучтенный элемент. Том 1

NikL
1. Антимаг. Вне системы
Фантастика:
городское фэнтези
фэнтези
5.00
рейтинг книги
Неучтенный элемент. Том 1

Газлайтер. Том 22

Володин Григорий Григорьевич
22. История Телепата
Фантастика:
боевая фантастика
попаданцы
фэнтези
5.25
рейтинг книги
Газлайтер. Том 22

Тигриный лог

Чеснокова Юлия Олеговна
Детективы:
прочие детективы
7.00
рейтинг книги
Тигриный лог

Путь Князя. Возрождение. Часть 2

Рокотов Алексей
7. Путь князя
Фантастика:
фэнтези
рпг
5.00
рейтинг книги
Путь Князя. Возрождение. Часть 2