Kniga-Online.club
» » » » Основы программирования в Linux - Мэтью Нейл

Основы программирования в Linux - Мэтью Нейл

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

API у виджета GtkToggleButton очень простой:

<b>GtkWidget* gtk_toggle_button_new(void);</b>

<b>GtkWidget* gtk_toggle_button_new_with_label(const gchar* label);</b>

<b>gboolean gtk_toggle_button_get_active(GtkToggleButton *toggle_button);</b>

<b>void gtk_toggle_button_set_active(GtkToggleButton *toggle_button,</b>

<b> gboolean is_active);</b>

Наиболее интересные функции — gtk_toggle_button_get_active и gtk_toggle_button_set_active, которые вы вызываете для чтения и установки состояния кнопки-выключателя. Если характеристика функционирования равна TRUE, это означает, что кнопка-выключатель GtkToggleButton включена.

GtkCheckButton

Кнопка-флажок GtkCheckButton — это замаскированная кнопка-выключатель GtkToggleButton. Вместо скучного прямоугольного отображения GtkToggleButton кнопка GtkCheckButton выводится как привлекательный флажок с расположенным рядом текстом. Функциональных различий между ними нет.

<b>GtkWidget* gtk_check_button_new(void);</b>

<b>GtkWidget* gtk_check_button_new_with_label(const gchar *label);</b>

GtkRadioButton

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

<b>GtkWidget* gtk_radio_button_new(GSList *group);</b>

<b>GtkWidget* gtk_radio_button_new_from_widget(GtkRadioButton *group);</b>

<b>GtkWidget* gtk_radio_button_new_with_label(GSList *group, const gchar *label);</b>

<b>void gtk_radio_button_set_group(GtkRadioButton *radio_button, GSList *group);</b>

<b>GSList* gtk_radio_button_get_group(GtkRadioButton *radio_button);</b>

Группа переключателей представлена в объекте-списке библиотеки GLib, названном GSList. Для того чтобы объединить переключатели в группу, вы можете создать объект GSList и затем передать ему каждую кнопку с помощью функций gtk_radio_button_new и gtk_radio_button_get_group, есть и более легкий способ в виде функции gtk_radio_button_new_with_widget, которая включает в GSList существующую кнопку. Вы увидите ее в действии в упражнении 16.6, которое позволит вам опробовать разные кнопки GtkButton.

Упражнение 16.6. GtkCheckButton, GtkToggleButton и GtkRadioButton

Введите следующий текст в файл с именем buttons.с.

1. Сначала объявите указатели на кнопки как глобальные переменные:

#include &lt;gtk/gtk.h&gt;

#include &lt;stdio.h&gt;

GtkWidget *togglebutton;

GtkWidget *checkbutton;

GtkWidget *radiobutton1, *radiobutton2;

void closeApp(GtkWidget *window, gpointer data) {

 gtk_main_quit();

}

2. Далее определите вспомогательную функцию, которая упаковывает GtkWidget и GtkLabel в контейнер GtkHbox и затем вставляет этот GtkHbox в заданный виджет- контейнер. Это поможет вам сократить повторяющийся программный код:

void add_widget_with_label(GtkContainer * box, gchar * caption,

 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(&quot;%s is %sn&quot;, button_name, active?&quot;active&quot;:&quot;not active&quot;);

}

void button_clicked(GtkWidget *button, gpointer data) {

 print_active(&quot;Checkbutton&quot;, GTK_TOGGLE_BUTTON(checkbutton));

 print_active(&quot;Togglebutton&quot;, GTK_TOGGLE_BUTTON(togglebutton));

 print_active(&quot;Radiobutton1&quot;, GTK_TOGGLE_BUTTON(radiobutton1));

 print_active(&quot;Radiobutton2&quot;, GTK_TOGGLE_BUTTON(radiobutton2));

 printf(&quot;n&quot;);

}

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

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

 GtkWidget* window;

 GtkWidget *button;

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

Мэтью Нейл читать все книги автора по порядку

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


Основы программирования в Linux отзывы

Отзывы читателей о книге Основы программирования в Linux, автор: Мэтью Нейл. Читайте комментарии и мнения людей о произведении.


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

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

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


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