GtkWidget* window;
GtkWidget *spinbutton;
GtkObject *adjustment;
gtk_init(&argc, &argv);
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_default_size(GTK_WINDOW(window), 300, 200);
g_signal_connect(GTK_OBJECT(window), "destroy",
GTK_SIGNAL_FUNC(closeApp), NULL);
adjustment = gtk_adjustment_new(100.0, 50.0, 150.0, 0.5, 0.05, 0.05);
spinbutton = gtk_spin_button_new(GTK_ADJUSTMENT(adjustment), 0.01, 2);
gtk_container_add(GTK_CONTAINER(window), spinbutton);
gtk_widget_show_all(window);
gtk_main();
return 0;
}
Когда вы выполните программу, то получите кнопку-счетчик, ограниченную диапазоном значений 50–150 (рис. 16.9).
Рис. 16.9
Вы уже видели виджет кнопки GtkButton
в действии, но существует несколько виджетов, потомков GtkButton
, с чуть большими функциональными возможностями, заслуживающими упоминания.
GtkButton
+----GtkToggleButton
+----GtkCheckButton
+----GtkRadioButton
Как видно из иерархии виджетов, кнопка-переключатель типа GtkToggleButton
— прямой потомок кнопки GtkButton
, кнопка-флажок GtkCheckButton
— кнопки-выключателя GtkToggleButton
и то же самое для переключателя GtkRadioButton
, причем каждый дочерний виджет предназначен для определенных задач.
Виджет GtkToggleButton
идентичен виджету GtkButton
за исключением одной важной детали: GtkToggleButton
обладаетGtkToggleButton
, последний стандартным способом порождает сигнал clicked
и изменяет (или "переключает") свое состояние.
API у виджета GtkToggleButton
очень простой:
GtkWidget* gtk_toggle_button_new(void);
GtkWidget* gtk_toggle_button_new_with_label(const gchar* label);
gboolean gtk_toggle_button_get_active(GtkToggleButton *toggle_button);
void gtk_toggle_button_set_active(GtkToggleButton *toggle_button,
gboolean is_active);
Наиболее интересные функции — gtk_toggle_button_get_active
и gtk_toggle_button_set_active
, которые вы вызываете для чтения и установки состояния кнопки-выключателя. Если характеристика функционирования равна TRUE
, это означает, что кнопка-выключатель GtkToggleButton
включена.
Кнопка-флажок GtkCheckButton
— это замаскированная кнопка-выключатель GtkToggleButton
. Вместо скучного прямоугольного отображения GtkToggleButton
кнопка GtkCheckButton
выводится как привлекательный флажок с расположенным рядом текстом. Функциональных различий между ними нет.
GtkWidget* gtk_check_button_new(void);
GtkWidget* gtk_check_button_new_with_label(const gchar *label);
Эта кнопка немного отличается от предыдущих, т.к. может группироваться с другими кнопками того же типа. Переключатель (или радиокнопка) GtkRadioButton
— одна из тех кнопок, которые позволяют выбирать только один вариант из группы предложенных. Имя заимствовано у старых радиоприемников с механическими кнопками, которые выскакивали с треском, возвращаясь в прежнее состояние, при нажатии другой кнопки.
GtkWidget* gtk_radio_button_new(GSList *group);
GtkWidget* gtk_radio_button_new_from_widget(GtkRadioButton *group);
GtkWidget* gtk_radio_button_new_with_label(GSList *group, const gchar *label);
void gtk_radio_button_set_group(GtkRadioButton *radio_button, GSList *group);
GSList* gtk_radio_button_get_group(GtkRadioButton *radio_button);