краткое описание#include <gtk/gtk.h> gtkcontainer; #define gtk_is_resize_container (widget) #define gtk_container_warn_invalid_child_property_id(object, property_id, pspec) #define gtk_container_border_width void gtk_container_add (gtkcontainer *container, gtkwidget *widget); void gtk_container_remove (gtkcontainer *container, gtkwidget *widget); void gtk_container_add_with_properties (gtkcontainer *container, gtkwidget *widget, const gchar *first_prop_name, ...); gtkresizemode gtk_container_get_resize_mode (gtkcontainer *container); void gtk_container_set_resize_mode (gtkcontainer *container, gtkresizemode resize_mode); void gtk_container_check_resize (gtkcontainer *container); void gtk_container_foreach (gtkcontainer *container, gtkcallback callback, gpointer callback_data); void gtk_container_foreach_full (gtkcontainer *container, gtkcallback callback, gtkcallbackmarshal marshal, gpointer callback_data, gtkdestroynotify notify); #define gtk_container_children glist* gtk_container_get_children (gtkcontainer *container); void gtk_container_set_reallocate_redraws (gtkcontainer *container, gboolean needs_redraws); void gtk_container_set_focus_child (gtkcontainer *container, gtkwidget *child); gtkadjustment* gtk_container_get_focus_vadjustment (gtkcontainer *container); void gtk_container_set_focus_vadjustment (gtkcontainer *container, gtkadjustment *adjustment); gtkadjustment* gtk_container_get_focus_hadjustment (gtkcontainer *container); void gtk_container_set_focus_hadjustment (gtkcontainer *container, gtkadjustment *adjustment); void gtk_container_resize_children (gtkcontainer *container); gtype gtk_container_child_type (gtkcontainer *container); void gtk_container_child_get (gtkcontainer *container, gtkwidget *child, const gchar *first_prop_name, ...); void gtk_container_child_set (gtkcontainer *container, gtkwidget *child, const gchar *first_prop_name, ...); void gtk_container_child_get_property (gtkcontainer *container, gtkwidget *child, const gchar *property_name, gvalue *value); void gtk_container_child_set_property (gtkcontainer *container, gtkwidget *child, const gchar *property_name, const gvalue *value); void gtk_container_child_get_valist (gtkcontainer *container, gtkwidget *child, const gchar *first_property_name, va_list var_args); void gtk_container_child_set_valist (gtkcontainer *container, gtkwidget *child, const gchar *first_property_name, va_list var_args); void gtk_container_forall (gtkcontainer *container, gtkcallback callback, gpointer callback_data); guint gtk_container_get_border_width (gtkcontainer *container); void gtk_container_set_border_width (gtkcontainer *container, guint border_width); void gtk_container_propagate_expose (gtkcontainer *container, gtkwidget *child, gdkeventexpose *event); gboolean gtk_container_get_focus_chain (gtkcontainer *container, glist **focusable_widgets); void gtk_container_set_focus_chain (gtkcontainer *container, glist *focusable_widgets); void gtk_container_unset_focus_chain (gtkcontainer *container); gparamspec* gtk_container_class_find_child_property (gobjectclass *cclass, const gchar *property_name); void gtk_container_class_install_child_property (gtkcontainerclass *cclass, guint property_id, gparamspec *pspec); gparamspec** gtk_container_class_list_child_properties (gobjectclass *cclass, guint *n_properties); иерархия объектовgobject +----ginitiallyunowned +----gtkobject +----gtkwidget +----gtkcontainer +----gtkbin +----gtkbox +----gtkclist +----gtkfixed +----gtkpaned +----gtkiconview +----gtklayout +----gtklist +----gtkmenushell +----gtknotebook +----gtksocket +----gtktable +----gtktextview +----gtktoolbar +----gtktree +----gtktreeview реализуемые интерфейсыgtkcontainer реализует atkimplementoriface. свойства"border-width" guint : read / write "child" gtkwidget : write "resize-mode" gtkresizemode : read / write сигналы"add" void user_function (gtkcontainer *container, gtkwidget *widget, gpointer user_data) : run first "check-resize" void user_function (gtkcontainer *container, gpointer user_data) : run last "remove" void user_function (gtkcontainer *container, gtkwidget *widget, gpointer user_data) : run first "set-focus-child" void user_function (gtkcontainer *container, gtkwidget *widget, gpointer user_data) : run first описаниепользовательский интерфейс gtk+ конструируется методом вложения одних виджетов в другие. контейнерные виджеты являются внутренними узлами в получающемся дереве виджетов: они содержат другие виджеты. таким образом, например, вы можете иметь gtkwindow содержащий gtkframe который в свою очередь содержит gtklabel. если вам нужно изображение внутри текстового ярлыка находящегося в рамке, вы можете переразместить виджет gtklabel с виджетом gtkimage. есть два основных вида контейнерных виджетов в gtk+. оба являются подклассами абстрактного базового класса gtkcontainer. первый тип контейнерного виджета имеет единственный дочерний виджет и происходит от gtkbin. эти контейнеры являются декораторами, которые добавляют некоторый вид функциональности к дочерним виджетам. например, gtkbutton создаёт свой дочерний виджет внутри нажимаемой кнопки; gtkframe отображает рамку вокруг своего дочернего виджета, а gtkwindow размещает свой дочерний виджет внутри окна верхнего уровня. второй тип контейнеров может иметь больше одного дочернего виджета; его цель заключается в управлении размещением. это означает что эти контейнеры определяют размер и позицию своих дочерних виджетов. например, gtkhbox выравнивает свои дочерние виджеты в горизонтальную строку, а gtktable распределяет своё содержимое в двух мерной сетке. для выполнения своей задачи, контейнер размещения должен согласовать запрашиваемый размер со своим родителем и дочерними виджетами. это согласование выполняется в две фазы, запрос размера (size requisition) и распределение размера (size allocation). запрос размеразапрос размера виджета это желаемая высота и ширина. это представляется объектом gtkrequisition. желаемый размер виджета как правило зависит от его дочерних виджетов. gtklabel, например, запрашивает пространство достаточное для отображения всего текста который он представляет. фаза запроса размера виджета размещения
выполняется по нисходящей. она начинается
в виджете верхнего уровня, обычно это
gtkwindow. виджет верхнего
уровня запрашивает свои дочерние виджеты
о желаемом размере с помощью
распределение размеракогда виджет верхнего уровня определил
сколько пространства нужно для дочерних
виджетов, начинается вторая фаза
согласования – распределение размера.
в зависимости от конфигурации (смотрите
распределение дочерних размеров представляется объектом gtkallocation. эта структура содержит не только ширину и высоту, но также позицию (то есть x и y координаты), поэтому контейнер может сообщить своим дочерним виджетам не только какое пространство они должны занимать, но и где расположиться внутри контейнера. виджеты должны соблюдать распределённое для них пространство; запрос размера это только пожелание, виджеты должны уметь использовать любой размер. дочерние свойстваgtkcontainer представляет дочерние свойства – это свойства объекта которые определены не для контейнера и его дочерних виджетов, а скорее для их связки. типичный пример дочерних свойств – позиция или тип упаковки виджета который находится в gtkbox. используйте
для установки значения дочернего
свойства, используйте
деталиgtkcontainertypedef struct _gtkcontainer gtkcontainer; gtk_is_resize_container()#define gtk_is_resize_container(widget) (gtk_is_container (widget) && ((gtkcontainer*) (widget))->resize_mode != gtk_resize_parent)
gtk_container_warn_invalid_child_property_id()#define gtk_container_warn_invalid_child_property_id(object, property_id, pspec)
gtk_container_border_width#define gtk_container_border_width gtk_container_set_border_width внимание
тоже самое что gtk_container_add ()void gtk_container_add (gtkcontainer *container, gtkwidget *widget);
добавляет
gtk_container_remove ()void gtk_container_remove (gtkcontainer *container, gtkwidget *widget);
удаляет виджет
gtk_container_add_with_properties ()void gtk_container_add_with_properties (gtkcontainer *container, gtkwidget *widget, const gchar *first_prop_name, ...);
добавляет
gtk_container_get_resize_mode ()gtkresizemode gtk_container_get_resize_mode (gtkcontainer *container);
определяет режим изменения размера
контейнера. смотрите
gtk_container_set_resize_mode ()void gtk_container_set_resize_mode (gtkcontainer *container, gtkresizemode resize_mode); устанавливает режим изменения размера. режим изменения размера контейнера определяет, будет ли помещённый в родитель контейнера запрос на изменение размера поставлен в очередь, для более позднего выполнения, или выполнен немедленно.
gtk_container_check_resize ()void gtk_container_check_resize (gtkcontainer *container);
gtk_container_foreach ()void gtk_container_foreach (gtkcontainer *container, gtkcallback callback, gpointer callback_data);
вызывает
gtk_container_foreach_full ()void gtk_container_foreach_full (gtkcontainer *container, gtkcallback callback, gtkcallbackmarshal marshal, gpointer callback_data, gtkdestroynotify notify); внимание
gtk_container_children#define gtk_container_children gtk_container_get_children внимание
тоже самое что gtk_container_get_children ()glist* gtk_container_get_children (gtkcontainer *container);
определяет не внутренние дочерние
виджеты контейнера. смотрите
gtk_container_set_reallocate_redraws ()void gtk_container_set_reallocate_redraws (gtkcontainer *container, gboolean needs_redraws);
устанавливает контейнеры запрашивают перерисовку распределения автоматически, если любой дочерний виджет изменил положение.
gtk_container_set_focus_child ()void gtk_container_set_focus_child (gtkcontainer *container, gtkwidget *child);
gtk_container_get_focus_vadjustment ()gtkadjustment* gtk_container_get_focus_vadjustment (gtkcontainer *container);
определяет вертикальную регулировку
фокуса для контейнера. смотрите
gtk_container_set_focus_vadjustment ()void gtk_container_set_focus_vadjustment (gtkcontainer *container, gtkadjustment *adjustment);
устанавливает регулятор для обработки
фокуса в контейнере, таким образом когда
дочерний виджет контейнера находится
в фокусе, регулятор прокручивается для
отображения этого виджета. эта функция
устанавливает вертикальное выравнивание.
смотрите регулировки должны быть в пикселах и в той же самой координатной системе в которой распределены непосредственно дочерние виджеты контейнера.
gtk_container_get_focus_hadjustment ()gtkadjustment* gtk_container_get_focus_hadjustment (gtkcontainer *container);
определяет горизонтальную регулировку
для контейнера. смотрите
gtk_container_set_focus_hadjustment ()void gtk_container_set_focus_hadjustment (gtkcontainer *container, gtkadjustment *adjustment);
устанавливает регулятор для обработки
фокуса в контейнере, таким образом когда
дочерний виджет контейнера находится
в фокусе, регулятор прокручивается для
отображения этого виджета. эта функция
устанавливает вертикальное выравнивание.
смотрите регулировки должны быть в пикселах и в той же самой координатной системе в которой распределены непосредственно дочерние виджеты контейнера.
gtk_container_resize_children ()void gtk_container_resize_children (gtkcontainer *container);
gtk_container_child_type ()gtype gtk_container_child_type (gtkcontainer *container); возвращает тип дочерних виджетов поддерживаемых контейнером. помните, она может вернуть
gtk_container_child_get ()void gtk_container_child_get (gtkcontainer *container, gtkwidget *child, const gchar *first_prop_name, ...);
определяет значение одного или более
дочерних свойств для
gtk_container_child_set ()void gtk_container_child_set (gtkcontainer *container, gtkwidget *child, const gchar *first_prop_name, ...);
устанавливает одно или больше дочерних
свойств для
gtk_container_child_get_property ()void gtk_container_child_get_property (gtkcontainer *container, gtkwidget *child, const gchar *property_name, gvalue *value);
определяет значение дочернего свойства
для
gtk_container_child_set_property ()void gtk_container_child_set_property (gtkcontainer *container, gtkwidget *child, const gchar *property_name, const gvalue *value);
устанавливает дочернее свойство для
gtk_container_child_get_valist ()void gtk_container_child_get_valist (gtkcontainer *container, gtkwidget *child, const gchar *first_property_name, va_list var_args);
определяет значения одного или более
дочерних свойств для
gtk_container_child_set_valist ()void gtk_container_child_set_valist (gtkcontainer *container, gtkwidget *child, const gchar *first_property_name, va_list var_args);
устанавливает одно или более дочерние
свойства для
gtk_container_forall ()void gtk_container_forall (gtkcontainer *container, gtkcallback callback, gpointer callback_data);
вызывает
gtk_container_get_border_width ()guint gtk_container_get_border_width (gtkcontainer *container);
определяет ширину окантовки контейнера.
смотрите
gtk_container_set_border_width ()void gtk_container_set_border_width (gtkcontainer *container, guint border_width); устанавливает ширину окантовки контейнера. ширина окантовки это количество
пространства находящегося снаружи
контейнера. единственное исключение –
это gtkwindow; потому что
окно верхнего уровня не может иметь
внешнего пространства, оно предоставляет
внутреннее пространство. окантовка
добавляется со всех сторон контейнера.
для добавления только с одной стороны,
один из способов состоит в том чтобы
создать виджет gtkalignment,
вызвав
gtk_container_propagate_expose ()void gtk_container_propagate_expose (gtkcontainer *container, gtkwidget *child, gdkeventexpose *event);
когда контейнер получает событие
экспозиции, он должен послать искусственное
событие экспозиции для всех дочерних
виджетов не имеющих собственного
gdkwindows. эта функция обеспечивает удобный
способ выполнения этой задачи. контейнер
получивший экспонирующее событие,
вызывает
в большинстве случаев, контейнер может просто унаследовать реализацию ::expose из gtkcontainer, или, выполнить некоторое отображение, а затем реализовать цепочку ::expose из gtkcontainer.
gtk_container_get_focus_chain ()gboolean gtk_container_get_focus_chain (gtkcontainer *container, glist **focusable_widgets);
определяет сфокусированную цепочку
контейнера, если была установлена явно.
если нет явно установленной, сфокусированной
цепочки, gtk+ рассчитает сфокусированную
цепочку основываясь на позиции дочерних
виджетов. в этом случае, gtk+ сохраняет
gtk_container_set_focus_chain ()void gtk_container_set_focus_chain (gtkcontainer *container, glist *focusable_widgets); устанавливает сфокусированную цепочку, переписывая рассчитанную автоматически gtk+. в принципе каждый виджет в цепочке должен быть потомком контейнера, но не вынуждается этим методом, так как позволяет установить сфокусированную цепочку перед упаковкой виджетов, или имеет виджеты в цепочке которая не всегда упакована. необходимая проверка выполняется при фактическом пересечении сфокусированной цепочки.
gtk_container_unset_focus_chain ()void gtk_container_unset_focus_chain (gtkcontainer *container);
удаляет сфокусированную цепочку явно
установленную с помощью
gtk_container_class_find_child_property ()gparamspec* gtk_container_class_find_child_property (gobjectclass *cclass, const gchar *property_name); находит дочернее свойство контейнерного класса по имени.
gtk_container_class_install_child_property ()void gtk_container_class_install_child_property (gtkcontainerclass *cclass, guint property_id, gparamspec *pspec); устанавливает дочернее свойство в контейнерный класс.
gtk_container_class_list_child_properties ()gparamspec** gtk_container_class_list_child_properties (gobjectclass *cclass, guint *n_properties); определяет все дочерние свойства контейнерного класса.
детали свойствсвойство "
|
|
объект получающий сигнал. |
|
|
|
данные устанавливаемые при подключении обработчика сигнала. |
void user_function (gtkcontainer *container, gpointer user_data) : run last
|
объект получающий сигнал. |
|
данные устанавливаемые при подключении обработчика сигнала. |
void user_function (gtkcontainer *container, gtkwidget *widget, gpointer user_data) : run first
|
объект получающий сигнал. |
|
|
|
данные устанавливаемые при подключении обработчика сигнала. |
void user_function (gtkcontainer *container, gtkwidget *widget, gpointer user_data) : run first
|
объект получающий сигнал. |
|
|
|
данные устанавливаемые при подключении обработчика сигнала. |