GtkActivatable
GtkActivatable — Интерфейс для активируемых виджетов
Функции
Свойства
| GtkAction * | related-action | Чтение / Запись |
| gboolean | use-action-appearance | Чтение / Запись |
Типы и значения
Иерархия объектов
GInterface ╰── GtkActivatable
Предварительные условия
GtkActivatable требует GObject.
Известные реализации
GtkActivatable реализуется с помощью GtkButton, GtkCheckButton, GtkCheckMenuItem, GtkColorButton, GtkFontButton, GtkImageMenuItem, GtkLinkButton, GtkLockButton, GtkMenuButton, GtkMenuItem, GtkMenuToolButton, GtkModelButton, GtkRadioButton, GtkRadioMenuItem, GtkRadioToolButton, GtkRecentChooserMenu, GtkScaleButton, GtkSeparatorMenuItem, GtkSeparatorToolItem, GtkSwitch, GtkTearoffMenuItem, GtkToggleButton, GtkToggleToolButton, GtkToolButton, GtkToolItem и GtkVolumeButton.
Включаемые файлы
#include <gtk/gtk.h>
Описание
Активируемые виджеты могут быть подключены к GtkAction и отражают состояние своего действия. GtkActivatable также может предоставлять обратную связь через свое действие, так как они отвечают за активацию связанных действий.
Реализация GtkActivatable
При расширении класса, который уже является GtkActivatable; необходимо только реализовать методы GtkActivatable->sync_action_properties() и GtkActivatable->update() и передать выполнение родительской реализации, однако при введении нового класса GtkActivatable; свойства “related-action” и “use-action-appearance” должны быть обработаны реализатором. Обработка этих свойств в основном заключается в установке указателя действия и логического флага на экземпляре и вызове gtk_activatable_do_set_related_action() и gtk_activatable_sync_action_properties() в соответствующие моменты.
Фрагмент класса, реализующий GtkActivatable
enum{ ... PROP_ACTIVATABLE_RELATED_ACTION, PROP_ACTIVATABLE_USE_ACTION_APPEARANCE } struct_FooBarPrivate { ... GtkAction*action; gboolean use_action_appearance; }; ... staticvoidfoo_bar_activatable_interface_init(GtkActivatableIface*iface); staticvoidfoo_bar_activatable_update(GtkActivatable*activatable, GtkAction*action, constgchar*property_name); staticvoidfoo_bar_activatable_sync_action_properties(GtkActivatable*activatable, GtkAction*action); ... staticvoid foo_bar_class_init(FooBarClass*klass) { ... g_object_class_override_property(gobject_class, PROP_ACTIVATABLE_RELATED_ACTION,"related-action"); g_object_class_override_property(gobject_class, PROP_ACTIVATABLE_USE_ACTION_APPEARANCE,"use-action-appearance"); ... } staticvoid foo_bar_activatable_interface_init(GtkActivatableIface*iface) { iface->update = foo_bar_activatable_update; iface->sync_action_properties = foo_bar_activatable_sync_action_properties; } ... Break the reference usinggtk_activatable_do_set_related_action()... staticvoid foo_bar_dispose(GObject*object) { FooBar*bar =FOO_BAR(object); FooBarPrivate*priv =FOO_BAR_GET_PRIVATE(bar); ... if(priv->action) { gtk_activatable_do_set_related_action(GTK_ACTIVATABLE(bar), NULL); priv->action = NULL; } G_OBJECT_CLASS(foo_bar_parent_class)->dispose(object); } ... Handle the “related-action” and “use-action-appearance” properties ... staticvoid foo_bar_set_property(GObject*object, guint prop_id, constGValue*value, GParamSpec*pspec) { FooBar*bar =FOO_BAR(object); FooBarPrivate*priv =FOO_BAR_GET_PRIVATE(bar); switch(prop_id) { ... case PROP_ACTIVATABLE_RELATED_ACTION: foo_bar_set_related_action(bar,g_value_get_object(value)); break; case PROP_ACTIVATABLE_USE_ACTION_APPEARANCE: foo_bar_set_use_action_appearance(bar,g_value_get_boolean(value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } staticvoid foo_bar_get_property(GObject*object, guint prop_id, GValue*value, GParamSpec*pspec) { FooBar*bar =FOO_BAR(object); FooBarPrivate*priv =FOO_BAR_GET_PRIVATE(bar); switch(prop_id) { ... case PROP_ACTIVATABLE_RELATED_ACTION: g_value_set_object(value, priv->action); break; case PROP_ACTIVATABLE_USE_ACTION_APPEARANCE: g_value_set_boolean(value, priv->use_action_appearance); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } staticvoid foo_bar_set_use_action_appearance(FooBar*bar, gboolean use_appearance) { FooBarPrivate*priv =FOO_BAR_GET_PRIVATE(bar); if(priv->use_action_appearance != use_appearance) { priv->use_action_appearance = use_appearance; gtk_activatable_sync_action_properties(GTK_ACTIVATABLE(bar), priv->action); } } ...callgtk_activatable_do_set_related_action() and then assign the action pointer, no need to reference the action here sincegtk_activatable_do_set_related_action() already holds a reference here for you... staticvoid foo_bar_set_related_action(FooBar*bar, GtkAction*action) { FooBarPrivate*priv =FOO_BAR_GET_PRIVATE(bar); if(priv->action == action) return; gtk_activatable_do_set_related_action(GTK_ACTIVATABLE(bar), action); priv->action = action; } ... Selectively reset and update activatable depending on the use-action-appearance property ... staticvoid gtk_button_activatable_sync_action_properties(GtkActivatable*activatable, GtkAction*action) { GtkButtonPrivate*priv =GTK_BUTTON_GET_PRIVATE(activatable); if(!action) return; if(gtk_action_is_visible(action)) gtk_widget_show(GTK_WIDGET(activatable)); else gtk_widget_hide(GTK_WIDGET(activatable)); gtk_widget_set_sensitive(GTK_WIDGET(activatable),gtk_action_is_sensitive(action)); ... if(priv->use_action_appearance) { if(gtk_action_get_stock_id(action)) foo_bar_set_stock(button,gtk_action_get_stock_id(action)); elseif(gtk_action_get_label(action)) foo_bar_set_label(button,gtk_action_get_label(action)); ... } } staticvoid foo_bar_activatable_update(GtkActivatable*activatable, GtkAction*action, constgchar*property_name) { FooBarPrivate*priv =FOO_BAR_GET_PRIVATE(activatable); if(strcmp(property_name,"visible")==0) { if(gtk_action_is_visible(action)) gtk_widget_show(GTK_WIDGET(activatable)); else gtk_widget_hide(GTK_WIDGET(activatable)); } elseif(strcmp(property_name,"sensitive")==0) gtk_widget_set_sensitive(GTK_WIDGET(activatable),gtk_action_is_sensitive(action)); ... if(!priv->use_action_appearance) return; if(strcmp(property_name,"stock-id")==0) foo_bar_set_stock(button,gtk_action_get_stock_id(action)); elseif(strcmp(property_name,"label")==0) foo_bar_set_label(button,gtk_action_get_label(action)); ... }
Функции
gtk_activatable_do_set_related_action ()
void gtk_activatable_do_set_related_action (GtkActivatable *activatable,GtkAction *action);
gtk_activatable_do_set_related_action устарела начиная с версии 3.10 и не должна использоваться в новом коде.
Это вспомогательная функция для реализаторов GtkActivatable.
При реализации GtkActivatable вы должны вызвать эту функцию при обработке изменений свойства «related-action», а также использовать её для разрыва ссылок в GObject->dispose().
Эта функция добавляет ссылку на текущее установленное связанное действие, а также гарантирует, что метод GtkActivatable->update() вызывается при изменении свойств связанного GtkAction, и регистрируется в списке прокси действия.
Обратите внимание, что необходимо вызвать эту функцию до установки локальной копии свойства GtkAction, так как эта функция использует
gtk_activatable_get_related_action()для получения предыдущего действия.
Параметры
activatable | объект GtkActivatable | |
action | объект GtkAction для установки |
С: 2.16
gtk_activatable_get_related_action ()
GtkAction *
gtk_activatable_get_related_action (GtkActivatable *activatable); gtk_activatable_get_related_action устарела начиная с версии 3.10 и не должна использоваться в новом коде.
Возвращает связанное GtkAction для activatable .
Параметры
activatable | объект GtkActivatable |
С: 2.16
gtk_activatable_get_use_action_appearance ()
gboolean
gtk_activatable_get_use_action_appearance
(GtkActivatable *activatable); gtk_activatable_get_use_action_appearance устарела начиная с версии 3.10 и не должна использоваться в новом коде.
Получает, нужно ли этому объекту активируемого элемента перестраивать макет и внешний вид при установке связанного действия или при изменении внешнего вида действия.
Параметры
activatable | объект GtkActivatable |
Возвращаемое значение
использует ли activatable внешний вид своих действий.
С: 2.16
gtk_activatable_sync_action_properties ()
void gtk_activatable_sync_action_properties (GtkActivatable *activatable,GtkAction *action);
gtk_activatable_sync_action_properties устарела начиная с версии 3.10 и не должна использоваться в новом коде.
Этот метод вызывается для полной синхронизации активируемого элемента. Вызывается внутренне при установке или снятии свойства «related-action», и реализующим классом, когда изменяется свойство «use-action-appearance».
Параметры
activatable | объект GtkActivatable | |
action | [allow-none] |
С: 2.16
gtk_activatable_set_related_action ()
void gtk_activatable_set_related_action (GtkActivatable *activatable,GtkAction *action);
gtk_activatable_set_related_action устарела начиная с версии 3.10 и не должна использоваться в новом коде.
Устанавливает связанное действие для объекта activatable .
Реализаторам GtkActivatable необходимо обработать свойство «related-action» и вызвать
gtk_activatable_do_set_related_action()при его изменении.
Параметры
activatable | объект GtkActivatable | |
action | объект GtkAction для установки |
С: 2.16
gtk_activatable_set_use_action_appearance ()
void gtk_activatable_set_use_action_appearance (GtkActivatable *activatable,gboolean use_appearance);
gtk_activatable_set_use_action_appearance устарела начиная с версии 3.10 и не должна использоваться в новом коде.
Устанавливает, должен ли этот активируемый элемент перестраивать свой макет и внешний вид при установке связанного действия или при изменении внешнего вида действия
Реализаторам GtkActivatable необходимо обработать свойство «use-action-appearance» и вызвать
gtk_activatable_sync_action_properties()для обновленияactivatableпри необходимости.
Параметры
activatable | объект GtkActivatable | |
use_appearance | использовать ли внешний вид действия |
С: 2.16
Типы и значения
GtkActivatable
typedef struct _GtkActivatable GtkActivatable;
struct GtkActivatableIface
struct GtkActivatableIface {
/* virtual table */
void (* update) (GtkActivatable *activatable,
GtkAction *action,
const gchar *property_name);
void (* sync_action_properties) (GtkActivatable *activatable,
GtkAction *action);
};
GtkActivatableIface устарело с версии 3.10 и не должно использоваться в новых кодах.
Этот метод может вызываться с действием
NULLв определённые моменты.
Члены
| Вызывается для обновления activatable, когда меняются свойства связанного действия. Вы должны проверять свойство “use-action-appearance”, чтобы применять свойства действия только для изменения внешнего вида. | |
| Вызывается для полного обновления activatable, это вызывается внутренне, когда свойство “related-action” устанавливается или сбрасывается, и реализатором, когда изменяется свойство “use-action-appearance”. |
С: 2.16
Подробности свойств
Свойство “related-action”
“related-action” GtkAction *
Действие, которое будет активировать этот activatable и получать обновления для различных состояний и, возможно, внешнего вида.
Реализаторам GtkActivatable необходимо обработать это свойство и вызвать
gtk_activatable_do_set_related_action()при его изменении.
GtkActivatable:related-action устарело с версии 3.10 и не должно использоваться в новых кодах.
Флаги: Чтение / Запись
С: 2.16
Свойство “use-action-appearance”
“use-action-appearance” gboolean
Указывает, должен ли этот activatable сбрасывать свою структуру и внешний вид при установке связанного действия или при изменении внешнего вида действия.
См. документацию GtkAction, чтобы узнать, какие свойства следует игнорировать GtkActivatable, когда это свойство равно FALSE.
Реализаторам GtkActivatable необходимо обработать это свойство и вызвать
gtk_activatable_sync_action_properties()на виджете activatable, когда оно изменяется.
GtkActivatable:use-action-appearance устарело с версии 3.10 и не должно использоваться в новых кодах.
Флаги: Чтение / Запись
Значение по умолчанию: TRUE
С: 2.16
© 2005–2020 The GNOME Project
Licensed under the GNU Lesser General Public License version 2.1 or later.
https://developer.gnome.org/gtk3/3.20/GtkActivatable.html