Spec-Zone.ru › GTK 3.20

GtkActivatable

GtkActivatable — Интерфейс для активируемых виджетов

Функции

void gtk_activatable_do_set_related_action ()
GtkAction * gtk_activatable_get_related_action ()
gboolean gtk_activatable_get_use_action_appearance ()
void gtk_activatable_sync_action_properties ()
void gtk_activatable_set_related_action ()
void gtk_activatable_set_use_action_appearance ()

Свойства

GtkAction * related-action Чтение / Запись
gboolean use-action-appearance Чтение / Запись

Типы и значения

GtkActivatable
struct GtkActivatableIface

Иерархия объектов

    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

Возвращаемое значение

связанное GtkAction, если оно установлено.

[transfer none]

С: 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

связанное GtkAction или NULL.

[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 в определённые моменты.

Члены

update ()

Вызывается для обновления activatable, когда меняются свойства связанного действия. Вы должны проверять свойство “use-action-appearance”, чтобы применять свойства действия только для изменения внешнего вида.

sync_action_properties ()

Вызывается для полного обновления 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API