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

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 284 285 286 287 288 289 290 291 292 ... 324

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;

1 ... 284 285 286 287 288 289 290 291 292 ... 324
На этом сайте Вы можете читать книги онлайн бесплатно русская версия Основы программирования в Linux - Мэтью Нейл.

Оставить комментарий