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 () не делает абсолютно ничего, если вы передаете регулятор, диапазон которого уже используется, независимо от того, изменили ли вы любую из его областей или нет. Если вы передаете новый регулятор, он может уничтожить старый если таковой существовал (possibly destroying it), соединит соответствующие сигналы с новым и вызовет отдельно функцию gtk_range_adjustment_changed(),  которая будет (или по крайней мере должна), повторно вычислять размер и/или положение ползунка и изменять в случае необходимости. Как упоминалось в секции о регуляторах, если вы хотите использовать тот же регулятор при непосредственном изменении значений, вы должны создать сигнал "changed":

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

<<< Previous

Home

Next >>>

Scale Widgets

Up

Key and Mouse bindings