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;
};
...
static void foo_bar_activatable_interface_init (GtkActivatableIface *iface);
static void foo_bar_activatable_update (GtkActivatable *activatable,
GtkAction *action,
const gchar *property_name);
static void foo_bar_activatable_sync_action_properties (GtkActivatable *activatable,
GtkAction *action);
...
static void
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");
...
}
static void
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 using gtk_activatable_do_set_related_action()...
static void
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 ...
static void
foo_bar_set_property (GObject *object,
guint prop_id,
const GValue *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;
}
}
static void
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;
}
}
static void
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);
}
}
... call gtk_activatable_do_set_related_action() and then assign the action pointer,
no need to reference the action here since gtk_activatable_do_set_related_action() already
holds a reference here for you...
static void
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 ...
static void
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));
else if (gtk_action_get_label (action))
foo_bar_set_label (button, gtk_action_get_label (action));
...
}
}
static void
foo_bar_activatable_update (GtkActivatable *activatable,
GtkAction *action,
const gchar *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));
}
else if (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));
else if (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 | ||
action | the GtkAction to set |
Since: 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 |
Since: 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 |
Возвращает
использует ли activatable внешний вид своих действий.
Since: 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 | ||
action | the related GtkAction или | [allow-none] |
Since: 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 | ||
action | the GtkAction to set |
Since: 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 | ||
use_appearance | использовать ли внешний вид действия |
Since: 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в определенные моменты времени.
Члены
| Вызывается для обновления активируемого элемента при изменении свойств связанного действия. Вы должны проверять свойство «use-action-appearance» и применять только те свойства действия, которые предназначены для изменения внешнего вида. | |
| Вызывается для полного обновления активируемого элемента, это вызывается внутренне при установке или снятии свойства «related-action» и реализатором при изменении свойства «use-action-appearance». |
Since: 2.16
Подробное описание свойств
Свойство “related-action”
“related-action” GtkAction *
Действие, которое будет активироваться этим элементом, и от которого будут получать обновления для различных состояний и, возможно, внешнего вида.
Реализаторы GtkActivatable должны обрабатывать это свойство и вызывать
gtk_activatable_do_set_related_action()при его изменении.
GtkActivatable:related-action устарело начиная с версии 3.10 и не должно использоваться в новом коде.
Владелец: GtkActivatable
Флаги: Чтение / Запись
С версии: 2.16
Свойство “use-action-appearance”
“use-action-appearance” gboolean
Следует ли этому активируемому элементу сбрасывать макет и внешний вид при установке связанного действия или при изменении внешнего вида действия.
Обратитесь к документации GtkAction напрямую, чтобы узнать, какие свойства должны игнорироваться GtkActivatable, когда это свойство FALSE.
Реализаторы GtkActivatable должны обрабатывать это свойство и вызывать
gtk_activatable_sync_action_properties()для виджета activatable при его изменении.
GtkActivatable:use-action-appearance устарело начиная с версии 3.10 и не должно использоваться в новом коде.
Владелец: GtkActivatable
Флаги: Чтение / Запись
Значение по умолчанию: 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.24/GtkActivatable.html