Kniga-Online.club
» » » » Денис Колисниченко - Linux: Полное руководство

Денис Колисниченко - Linux: Полное руководство

Читать бесплатно Денис Колисниченко - Linux: Полное руководство. Жанр: Программное обеспечение издательство -, год 2004. Так же читаем полные версии (весь текст) онлайн без регистрации и SMS на сайте kniga-online.club или прочесть краткое содержание, предисловие (аннотацию), описание и ознакомиться с отзывами (комментариями) о произведении.
Перейти на страницу:

 /* О координатах ячеек поговорим после этого листинга */

 gtk_table_attach_defaults(GTK_TABLE(table),

  label, 0, 1, 0, 1);

 gtk_widget_show(label);

 label = gtk_label_new("DNS #1: ");

 gtk_table_attach_defaults(GTK_TABLE(table),

  label, 0, 1, 1, 2);

 gtk_widget_show(label);

 label = gtk_label_new("DNS #2: ");

 gtk_table_attach_defaults(GTK_TABLE(table),

  label, 0, 1, 2, 3);

 gtk_widget_show (label);

 /* Заполняем наш массив полей ввода. По аналогии с Delphi,

  я назвал массив edit[]*/

 for (i=0; i<3; i++) {

  /* Новое поле */

  edit[i] = gtk_entry_new();

  /* Если забыть этот оператор, пользователь ничего не

   сможет ввести */

  gtk_entry_set_editable(GTK_ENTRY(edit[i]), 1);

  /* Определяем одну для всех реакцию на сигнал activate -

   нажатие Enter*/

  gtk_signal_connect(GTK_OBJECT(edit[i]), "activate",

   GTK_SIGNAL_FUNC(enter_callback), edit[i]);

  /* Помещаем edit[i] в таблицу */

  gtk_table_attach_defaults (GTK_TABLE(table),

   edit[i], 1, 2, i, i+1);

  /* Показываем */

  gtk_widget_show(edit[i]);

 }

 /* Создаем кнопку "OK", помещаем в таблицу,

  определяем реакцию на нажатие и показываем */

 button = gtk_button_new_with_label("OK");

 gtk_table_attach_defaults(GTK_TABLE(table),

  button, 2, 3, 0, 1);

 gtk_signal_connect(GTK_OBJECT(button), "clicked",

  GTK_SIGNAL_FUNC(writetofile), NULL);

 gtk_widget_show(button);

 /* То же самое для кнопки Quit */

 button = gtk_button_new_with_label("Quit");

 gtk_table_attach_defaults(GTK_TABLE(table),

  button, 2, 3, 2, 3);

 gtk_signal_connect(GTK_OBJECT(button),"clicked",

  GTK_SIGNAL_FUNC(delete_event), NULL);

 gtk_widget_show(button);

 gtk_widget_show(table); /* Показываем таблицу */

 gtk_widget_show(window); /* Показываем окно */

 /* Запускаем GTK-программу */

 gtk_main();

 return 0;

}

Я старался писать подробные комментарии, но все же кое-что осталось в тумане. Это координаты ячеек. Рассмотрим нашу таблицу 3×3:

table = gtk_table_new(3, 3, TRUE);

0      1    2  3

 Domain Поле OK

1

 DNS1   Поле

2

 DNS2   Поле Quit

3

Сначала указываются координаты по X, затем — по Y. Вот координаты кнопки OK: 2, 3, 0, 1. Это означает, что кнопка будет расположена в последнем столбце (между 2 и 3), но в первой строке (между 0 и 1).

gtk_table_attach_defaults(GTK_TABLE(table), button,

 2, 3, 0, 1);

Подробнее рассматривать контейнер GtkTable я не вижу смысла: основные операции, я думаю, вам понятны — это создание таблицы с указанием ее размерности и добавление в таблицу виджита функцией gtk_table_attach_defaults(). Еще раз напомню о необходимости отображения виджитов, помещенных в таблицу, и самой таблицы:

gtk_widget_show (table);

Теперь откомпилируем нашу программу:

$ gcc resolv.с -о resolv `gtk-config --cflags` `gtk-config --libs`

Программа gtk-config сообщает компилятору всю необходимую информацию о библиотеке GTK.

Обратите внимание на директиву

#include <gtk/gtk.h>

Обычно файлы заголовков GTK находятся в другом каталоге, например, gtk-1.2, но это не имеет значения — все необходимые параметры укажет программа gtk-config.

В заключение этого пункта перечислим события, характерные для кнопок (таблица 23.3).

События кнопок Таблица 23.3

Событие Описание clicked Щелчок pressed Кнопка нажата мышью (и пока не отпущена) released Кнопка отпущена enter Указатель мыши в пределах кнопки leave Указатель мыши вышел за пределы кнопки

23.4.3. Переключатели

Переключатели бывают двух типов: зависимые (radio buttons) и независимые (checkbuttons). Переключатели являются кнопками, поэтому для них характерны те же события, что и для кнопок.

Начнем с независимых переключателей, так как они проще в реализации. Создать такой переключатель можно с помощью одной из функций:

GtkWidget *gtk_check_button_new(void);

GtkWidget *gtk_check_button_new_with_label(gchar * label);

Первая создает переключатель без надписи (если вы хотите указать надпись отдельно), а вторая — с надписью, которая обычно отображается справа от переключателя. Затем нужно, как всегда, поместить виджиты в контейнер и отобразить.

Зависимые переключатели можно создать тоже с помощью двух аналогичных функций:

GtkWidget *gtk_radio_button_new(GSList *group);

GtkWidget *gtk_radio_button_new_with_label(GSList *group,

 gchar *label);

Параметр group указывает на принадлежность переключателя к группе. В пределах группы активным может быть только один переключатель. Группу можно создать функцией:

GSList *gtk_radio_button_group(

 GtkRadioButton *radio_button);

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

button2 = gtk_radio_button_new_with_label(

 gtk_radio_button_group(GTK_RADIO_BUTTON(button1)),

 "button2");

С помощью функции

void gtk_toggle_button_set_active(

 GtkToggleButton *toggle_button, gint state);

можно сделать одну из кнопок активной.

Следующий листинг демонстрирует работу с тремя зависимыми переключателями и вертикальным контейнером GtkVBox.

Листинг 23.7. Зависимые переключатели

#include <gtk/gtk.h>

#include <glib.h>

gint close_application( GtkWidget *widget,

GdkEvent * event, gpointer data) {

 gtk_main_quit();

 return(FALSE);

}

int main(int argc, char *argv[]) {

 GtkWidget *window = NULL;

 GtkWidget *box1;

 GtkWidget *box2;

 GtkWidget *button;

 GtkWidget *separator;

 GSList *group;

 gtk_init(&argc,&argv);

 window = gtk_window_new(GTK_WINDOW_TOPLEVEL);

 gtk_signal_connect(GTK_OBJECT(window), "delete_event",

 GTK_SIGNAL_FUNC(close_application), NULL);

 gtk_window_set_title(GTK_WINDOW(window),

  "Выберите дистрибутив");

 gtk_container_set_border_width(GTK_CONTAINER(window), 0);

 box1 = gtk_vbox_new(FALSE, 0);

 gtk_container_add(GTK_CONTAINER(window), box1);

 gtk_widget_show(box1);

 box2 = gtk_vbox_new(FALSE, 10);

 gtk_container_set_border_width(GTK_CONTAINER (box2), 10);

 gtk_box_pack_start(GTK_BOX(box1), box2, TRUE, TRUE, 0);

 gtk_widget_show(box2);

 button = gtk_radio_button_new_with_label(NULL, "Red Hat");

 gtk_box_pack_start(GTK_BOX(box2), button,

  TRUE, TRUE, 0);

 gtk_widget_show(button);

 group = gtk_radio_button_group(GTK_RADIO_BUTTON(button));

 button =

  gtk_radio_button_new_with_label(group, "Mandrake");

 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button),

  TRUE);

 gtk_box_pack_start(GTK_BOX(box2), button,

  TRUE, TRUE, 0);

 gtk_widget_show(button);

 button = gtk_radio_button_new_with_label(

  gtk_radio_button_group(GTK_RADIO_BUTTON(button)),

  "ALT Linux");

 gtk_box_pack_start(GTK_BOX(box2), button,

  TRUE, TRUE, 0);

 gtk_widget_show(button);

 separator = gtk_hseparator_new();

 gtk_box_pack_start(GTK_BOX(box1), separator,

  FALSE, TRUE, 0);

 gtk_widget_show(separator);

 box2 = gtk_vbox_new(FALSE, 10);

 gtk_container_set_border_width(GTK_CONTAINER(box2), 10);

 gtk_box_pack_start(GTK_BOX(box1), box2, FALSE, TRUE, 0);

 gtk_widget_show(box2);

 button = gtk_button_new_with_label("OK");

 gtk_signal_connect_object(GTK_OBJECT (button),

  "clicked", GTK_SIGNAL_FUNC(close_application),

  GTK_OBJECT(window));

 gtk_box_pack_start(GTK_BOX (box2), button,

  TRUE, TRUE, 0);

 GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT);

 gtk_widget_grab_default(button);

 gtk_widget_show(button);

 gtk_widget_show(window);

 gtk_main();

 return(0);

}

Рис. 23.4. Зависимые переключатели

23.4.4. Список

Виджит CList представляет собой список, состоящий из нескольких колонок. Ячейки такого списка могут содержать текстовые значения. Мы можем обратиться отдельно к каждой ячейке списка. Создать список можно одной из функций:

GtkWidget *gtk_clist_new(gint columns);

GtkWidget *gtk_clist_new_with_titles(gint columns,

 gchar *titles[]);

Первая функция создает список без заголовков, а вторая с заголовками. Параметр columns задает число колонок.

Добавить элемент в список позволяют функции:

gint gtk_clist_prepend(GtkCList *clist, gchar *text[]);

gint gtk_clist_append(GtkCList *clist, gchar *text[]);

Перейти на страницу:

Денис Колисниченко читать все книги автора по порядку

Денис Колисниченко - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки kniga-online.club.


Linux: Полное руководство отзывы

Отзывы читателей о книге Linux: Полное руководство, автор: Денис Колисниченко. Читайте комментарии и мнения людей о произведении.


Уважаемые читатели и просто посетители нашей библиотеки! Просим Вас придерживаться определенных правил при комментировании литературных произведений.

  • 1. Просьба отказаться от дискриминационных высказываний. Мы защищаем право наших читателей свободно выражать свою точку зрения. Вместе с тем мы не терпим агрессии. На сайте запрещено оставлять комментарий, который содержит унизительные высказывания или призывы к насилию по отношению к отдельным лицам или группам людей на основании их расы, этнического происхождения, вероисповедания, недееспособности, пола, возраста, статуса ветерана, касты или сексуальной ориентации.
  • 2. Просьба отказаться от оскорблений, угроз и запугиваний.
  • 3. Просьба отказаться от нецензурной лексики.
  • 4. Просьба вести себя максимально корректно как по отношению к авторам, так и по отношению к другим читателям и их комментариям.

Надеемся на Ваше понимание и благоразумие. С уважением, администратор kniga-online.


Прокомментировать
Подтвердите что вы не робот:*
Подтвердите что вы не робот:*