основные функции
диапазона
внутренне виджеты диапазона справедливо
усложнены, также как и все виджеты
базового класса ("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");
|
|