The OpenNET Project
 
Поиск (ключи):    ПРОГРАММЫ СТАТЬИ СОВЕТЫ ФОРУМ
  WIKI НОВОСТИ (+) MAN'ы ДОКУМЕНТАЦИЯ

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

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




АКЦИЯ! ПОДПИШИСЬ на журнал Linux Format до 31 января 2012 года и выиграй СУПЕРПРИЗ!

Журнал "Linux Format" (Линукс Формат)- Единственный в России и странах СНГ журнал на русском языке, посвящённый Linux и свободному ПО. Журнал для IT-директоров, IT-менеджеров, программистов, системных администраторов, учителей школ и преподавателей ВУЗов и всех пользователей ПК. В каждом выпуске: Новости индустрии OpenSource, обзоры новинок свободного ПО, обучающие и методические статьи.

Каждый, кто оформит подписку, получает бонус- объёмные наклейки на системный блок и подарки: с одним из первых выпусков журнала в 2012 году- диск с архивом номеров за 2005-2011 г.г. и ежемесячно электронную версию журнала в pdf-формате.

Подробнее о проведении акции вы можете прочитать на странице сайта.


  Закладки на сайте
  Проследить за страницей
Created 1996-2012 by Maxim Chirkov  
ДобавитьРекламаВебмастеруГИД  
RUNNet TopList