Программа создает два виджета типа GtkEntry
, username_entry
и password_entry
, а также задает видимость password_entry
, равной FALSE
, чтобы скрыть введенный пароль. Затем она формирует кнопку GtkButton
, с помощью которой вы связываете сигнал clicked
с функцией обратного вызова button_clicked
.
Как только в функции обратного вызова программа извлечет введенный пароль и сравнит его с секретным паролем, на экран выводится соответствующее сообщение.
Обратите внимание на то, что для вставки виджетов в свои контейнеры вы много раз повторили операторы gtk_box_pack_start
. Для сокращения этого повторяющегося программного кода в последующих примерах будет определена вспомогательная функция.
Порой вам нужно, чтобы пользователь ввел числовое значение, например, максимальную скорость или размер инструмента, и в такой ситуации виджет GtkSpinButton
(кнопка-счетчик) идеален. Он ограничивает ввод пользователя только цифровыми символами и можно задать диапазон допустимых значений от нижней до верхней границы. Виджет также содержит стрелки, направленные вверх и вниз, так что пользователь может "накручивать" значение, для удобства пользуясь только мышью.
GtkWidget
+---- GtkEntry
+---- GtkSpinButton
И снова API понятен, и мы перечислим наиболее часто применяемые вызовы:
GtkWidget* gtk_spin_button_new(GtkAdjustment *adjustment,
gdouble climb_rate, guint digits);
GtkWidget* gtk_spin_button_new_with_range(gdouble min, gdouble max,
gdouble step);
void gtk_spin_button_set_digits(GtkSpinButton *spin_button, guint digits);
void gtk_spin_button_set_increments(GtkSpinButton *spin_button,
gdouble step, gdouble page);
void gtk_spin_button_set_range(GtkSpinButton *spin_button, gdouble min,
gdouble max);
gdouble gtk_spin_button_get_value(GtkSpinButton *spin_button);
gint gtk_spin_button_get_value_as_int(GtkSpinButton *spin_button);
void gtk_spin_button_set_value(GtkSpinButton *spin button, gdouble value);
Для создания виджета GtkSpinButton
с помощью функции gtk_spin_button_new
вы сначала должны создать объект GtkAdjustment
. Виджет GtkAdjustment
— это абстрактный объект, содержащий логику, касающуюся управления значениями с ограничениями. Он также применяется и в других виджетах, таких как GtkHScale
и GtkVScale
.
Для создания объекта типа GtkAdjustment
передайте в функцию нижнюю и верхнюю границы и размер приращения.
GtkObject* gtk_adjustment_new(gdouble value, gdouble lower,
gdouble upper, gdouble step_increment,
gdouble page_increment, gdouble page_size);
Значения параметров step_increment
и page_increment
задают величину минимального и максимального приращений, В случае кнопки-счетчика GtkSpinButton
параметр step_increment
определяет, насколько изменится значение при щелчке мышью стрелки виджета. Параметры page_increment
и page_size
в виджетах GtkSpinButton
не важны.
Второй параметр, climb_rate
, функции gtk_spin_button_new
управляет скоростью прокрутки значений при нажатии и удерживании кнопки со стрелкой. И наконец, параметр digits
задает точность представления числового значения, виджета, если, например, digits
равен 3, кнопка-счетчик отобразит 0.00.
Функция gtk_spin_button_new_with_range
— удобный способ создания объекта GtkAdjustment
. Просто задайте нижнюю и верхнюю границы и величину приращения.
Прочесть текущее значение очень легко благодаря функции gtk_spin_button_getvalue
, а если вам нужно целое число, можно применить функцию gtk_spin_button_get_value_as_int
.
Выполните упражнение 16.5.
GtkSpinButton
Сейчас мы посмотрим в коротком примере, как действует кнопка-счетчик GtkSpinButton. Назовите файл spin.с.
#include
void closeApp(GtkWidget *window, gpointer data) {
gtk_main_quit();
}
int main(int argc, char *argv[]) {