GTK+ 2.0 Tutorial

<<< Previous

Range Widgets

Next >>>


Основные функции диапазона

Внутренне виджеты диапазона справедливо усложнены, также как и все виджеты базового класса ("base class"), но все эти сложности достаточно интересны для изучения, если вы хотите по-настоящему разобраться в этом. Кроме того, все функции и сигналы которые здесь определены, действительно реально используются при создании виджетов.  Есть, однако, несколько полезных функций, которые определены в <gtk/gtkrange.h> и будут работать со всеми виджетами диапазона.

Установки "политики обновления"

"Политика обновления" ("update policy") для виджетов диапазона определяет на сколько изменять значение в результате регулировок пользователя и создаёт "value_changed" сигнал для этого регулятора."Политика обновления", определена в  <gtk/gtkenums.h> как тип enum GtkUpdateType:

GTK_UPDATE_CONTINUOUS
По умолчанию сигнал "value_changed" производится непрерывно, то есть всякий раз когда изменяется положение ползунка.
GTK_UPDATE_DISCONTINUOUS
Сигнал "value_changed" производится, как только ползунок остановился и пользователь отпустил кнопку мыши.
GTK_UPDATE_DELAYED
Сигнал "value_changed" производится, когда пользователь отпускает кнопку мыши, или если ползунок прекращает перемещаться на короткий промежуток времени.

"Политика обновления" может быть определена подстановкой макроса GTK_RANGE(widget) в функцию:

void gtk_range_set_update_policy( GtkRange      *range,
                                  GtkUpdateType  policy);

Получение и Установка значений Регуляторов

Получение и установка значений регуляторов для виджетов диапазона налету ("on the fly") делается так:

GtkAdjustment* gtk_range_get_adjustment( GtkRange *range );
void gtk_range_set_adjustment( GtkRange      *range,
                               GtkAdjustment *adjustment );

gtk_range_get_adjustment() возвращает указатель на регулятор с которым связан range.

gtk_range_set_adjustment () не делает абсолютно ничего, если вы передаете регулятор, уже используемый диапазоном(range), независимо от того, изменили ли вы какое -либо из его полей или нет. Если вы передаете новый регулятор, он отсоединяент старый если таковой существовал (возможно уничтожив его), соединит соответствующие сигналы с новым и вызовет закрытую функцию gtk_range_adjustment_changed(), которая будет (или по крайней мере должна), повторно вычислять размер и/или положение ползунка и изменять в случае необходимости. Как упоминалось в секции о регуляторах, если вы хотите использовать тот же регулятор при непосредственном изменении значений, вы должны создать сигнал "changed":

g_signal_emit_by_name (G_OBJECT (adjustment), "changed");

<<< Previous

Home

Next >>>

Scale Widgets

Up

Key and Mouse bindings