The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Каталог документации / Раздел "Программирование, языки" / Оглавление документа

GTK+ 2.0 Tutorial

<<< Previous

Adjustments

Next >>>


Внутреннее устройство регуляторов

Хорошо поняв вышесказанное, возникает вопрос: как можно создать собственный обработчик сигнала для перехвата сигналов регулирования, при использовании регуляторов пользователем, и как устанавливать значение диапазона регулировок в таких обработчиках?

Чтобы ответить на этот вопрос и последующие, для начала рассмотрим структуру struct _GtkAdjustment:

struct _GtkAdjustment
{
  GtkObject parent_instance;
  
  gdouble lower;
  gdouble upper;
  gdouble value;
  gdouble step_increment;
  gdouble page_increment;
  gdouble page_size;
};

(real C programmer), вы можете использовать другой способ доступа к изменению значений регулирования:

gdouble gtk_adjustment_get_value( GtkAdjustment *adjustment);

Когда вы установите значения регулировок, вы захотите чтобы все виджеты использовали эти значения как основные, GTK позволяет  сделать это с помощью функции, например:

void gtk_adjustment_set_value( GtkAdjustment *adjustment,
                               gdouble       value );

Как упоминалось ранее, Регуляторы это подкласс объектов как и все виджеты, поэтому они могут производить сигналы. Обновления случаются автоматически, когда вы совместно используете объект настройки между scrollbar и другим регулировочным виджетом; все регулировочные виджеты подключают обработчики сигнала с сигналом value_changed для их настройки. Вот - определение этого сигнала в struct _GtkAdjustmentClass:

  void (* value_changed) (GtkAdjustment *adjustment);

Различные виджеты использующие объекты регулирования, создают этот сигнал каждый раз, когда происходит изменение значения регулятора. Это происходит и тогда, когда пользователь изменяет положение регулятора, и когда программа явно изменяет значение используя gtk_adjustment_set_value(). Так например при использовании регулятора масштаба изображения, нужно чтобы вид изображения менялся всякий раз когда меняется значение регулятора, для этого создаётся обратный вызов:

void cb_rotate_picture (GtkAdjustment *adj, GtkWidget *picture)
{
  set_picture_rotation (picture, gtk_adjustment_get_value (adj));
...

и подключается регулятор масштаба:

g_signal_connect (G_OBJECT (adj), "value_changed",
                  G_CALLBACK (cb_rotate_picture), (gpointer) picture);

А что если пользователь добавит информацию в виджет, тем самым расширит область регулировки? В этом случае производится изменённый сигнал:

  void (* changed) (GtkAdjustment *adjustment);

Обычно виджеты регулировки диапазона подключают к этому сигналу обработчик, который изменяет их внешний вид - например размер ползунка в полосе прокрутки уменьшается пропорционально увеличению области прокручивания.

Вам наверное никогда не понадобится к этому сигналу подключать обработчик, за исключением случаев создания новых типов виджетов диапазона. Однако, если вы непосредственно изменяете значения регулировок, вам потребуется создавать этот сигнал для перенастройки любого виджета примерно так:

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

<<< Previous

Home

Next >>>

Using Adjustments the Easy Way

Up

Range Widgets






Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру