GObject часть 1

GObject — Базовый тип объекта

Краткое описание


#include <glib-object.h>


                    GObject;
                    GObjectClass;
                    GObjectConstructParam;
void                (*GObjectGetPropertyFunc)           (GObject *object,
                                                         guint property_id,
                                                         GValue *value,
                                                         GParamSpec *pspec);
void                (*GObjectSetPropertyFunc)           (GObject *object,
                                                         guint property_id,
                                                         const GValue *value,
                                                         GParamSpec *pspec);
void                (*GObjectFinalizeFunc)              (GObject *object);
#define             G_TYPE_IS_OBJECT                    (type)
#define             G_OBJECT                            (object)
#define             G_IS_OBJECT                         (object)
#define             G_OBJECT_CLASS                      (class)
#define             G_IS_OBJECT_CLASS                   (class)
#define             G_OBJECT_GET_CLASS                  (object)
#define             G_OBJECT_TYPE                       (object)
#define             G_OBJECT_TYPE_NAME                  (object)
#define             G_OBJECT_CLASS_TYPE                 (class)
#define             G_OBJECT_CLASS_NAME                 (class)
void                g_object_class_install_property     (GObjectClass *oclass,
                                                         guint property_id,
                                                         GParamSpec *pspec);
GParamSpec*         g_object_class_find_property        (GObjectClass *oclass,
                                                         const gchar *property_name);
GParamSpec**        g_object_class_list_properties      (GObjectClass *oclass,
                                                         guint *n_properties);
void                g_object_class_override_property    (GObjectClass *oclass,
                                                         guint property_id,
                                                         const gchar *name);
void                g_object_interface_install_property (gpointer g_iface,
                                                         GParamSpec *pspec);
GParamSpec*         g_object_interface_find_property    (gpointer g_iface,
                                                         const gchar *property_name);
GParamSpec**        g_object_interface_list_properties  (gpointer g_iface,
                                                         guint *n_properties_p);
gpointer            g_object_new                        (GType object_type,
                                                         const gchar *first_property_name,
                                                         ...);
gpointer            g_object_newv                       (GType object_type,
                                                         guint n_parameters,
                                                         GParameter *parameters);
                    GParameter;
gpointer            g_object_ref                        (gpointer object);
void                g_object_unref                      (gpointer object);
gpointer            g_object_ref_sink                   (gpointer object);
typedef             GInitiallyUnowned;
typedef             GInitiallyUnownedClass;
#define             G_TYPE_INITIALLY_UNOWNED
gboolean            g_object_is_floating                (gpointer object);
void                g_object_force_floating             (GObject *object);
void                (*GWeakNotify)                      (gpointer data,
                                                         GObject *where_the_object_was);
void                g_object_weak_ref                   (GObject *object,
                                                         GWeakNotify notify,
                                                         gpointer data);
void                g_object_weak_unref                 (GObject *object,
                                                         GWeakNotify notify,
                                                         gpointer data);
void                g_object_add_weak_pointer           (GObject *object,
                                                         gpointer *weak_pointer_location);
void                g_object_remove_weak_pointer        (GObject *object,
                                                         gpointer *weak_pointer_location);
void                (*GToggleNotify)                    (gpointer data,
                                                         GObject *object,
                                                         gboolean is_last_ref);
void                g_object_add_toggle_ref             (GObject *object,
                                                         GToggleNotify notify,
                                                         gpointer data);
void                g_object_remove_toggle_ref          (GObject *object,
                                                         GToggleNotify notify,
                                                         gpointer data);
gpointer            g_object_connect                    (gpointer object,
                                                         const gchar *signal_spec,
                                                         ...);
void                g_object_disconnect                 (gpointer object,
                                                         const gchar *signal_spec,
                                                         ...);
void                g_object_set                        (gpointer object,
                                                         const gchar *first_property_name,
                                                         ...);
void                g_object_get                        (gpointer object,
                                                         const gchar *first_property_name,
                                                         ...);
void                g_object_notify                     (GObject *object,
                                                         const gchar *property_name);
void                g_object_freeze_notify              (GObject *object);
void                g_object_thaw_notify                (GObject *object);
gpointer            g_object_get_data                   (GObject *object,
                                                         const gchar *key);
void                g_object_set_data                   (GObject *object,
                                                         const gchar *key,
                                                         gpointer data);
void                g_object_set_data_full              (GObject *object,
                                                         const gchar *key,
                                                         gpointer data,
                                                         GDestroyNotify destroy);
gpointer            g_object_steal_data                 (GObject *object,
                                                         const gchar *key);
gpointer            g_object_get_qdata                  (GObject *object,
                                                         GQuark quark);
void                g_object_set_qdata                  (GObject *object,
                                                         GQuark quark,
                                                         gpointer data);
void                g_object_set_qdata_full             (GObject *object,
                                                         GQuark quark,
                                                         gpointer data,
                                                         GDestroyNotify destroy);
gpointer            g_object_steal_qdata                (GObject *object,
                                                         GQuark quark);
void                g_object_set_property               (GObject *object,
                                                         const gchar *property_name,
                                                         const GValue *value);
void                g_object_get_property               (GObject *object,
                                                         const gchar *property_name,
                                                         GValue *value);
GObject*            g_object_new_valist                 (GType object_type,
                                                         const gchar *first_property_name,
                                                         va_list var_args);
void                g_object_set_valist                 (GObject *object,
                                                         const gchar *first_property_name,
                                                         va_list var_args);
void                g_object_get_valist                 (GObject *object,
                                                         const gchar *first_property_name,
                                                         va_list var_args);
void                g_object_watch_closure              (GObject *object,
                                                         GClosure *closure);
void                g_object_run_dispose                (GObject *object);
#define             G_OBJECT_WARN_INVALID_PROPERTY_ID   (object, property_id, pspec)

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

Сигналы

Описание

GObject является базовым типом обеспечивающим основные атрибуты и методы для всех объектных типов в GTK+, Pango и других библиотеках основанных на GObject. Класс GObject обеспечивает методы для конструирования и уничтожения объектов, методы доступа к свойству и поддержку сигналов. Сигналы подробно описаны в Сигналы(3).

GInitiallyUnowned наследует GObject. Единственное различие между ними заключается в том что начальная ссылка GInitiallyUnowned помечается как плавающая ссылка. Это значит что ни какой частью кода ни кто не "владеет". Основная мотивация обеспечения плавающих ссылок - удобство C. В частности, это позволяет писать код как:

Пример 1.

Если container_add_child() выполнит g_object_ref_sink() для помещённого child, ссылка на вновь созданный child не будет плавающей. Без плавающей ссылки, container_add_child() может создать ссылку на новый child только с помощью g_object_ref(), поэтому реализовать этот код без плавающей ссылки нужно было бы так:

Пример 2.

Плавающие ссылки могут быть преобразованы в обычные ссылки вызовом g_object_ref_sink(). Для объектов которые уже не имеют плавающих ссылок, g_object_ref_sink()эквивалентна g_object_ref() и возвращает новую ссылку. Так как плавающие ссылки в основном полезны только для удобства C, языковые привязки которые обеспечивают автоматизированные ссылки и монопольно обслуживают память (вроде умных указателей или "сборщики мусора") поэтому не нуждаются во вставке плавающих ссылок в их API.

Некоторые реализации объекта могут нуждаться в сохранении плавающего состояния объекта в определённых частях кода (например GtkMenu), для этого может использоваться следующее:

Пример 3.

Детали

GObject

Все поля в структуре GObject являются закрытыми для реализации GObject и не должны использоваться непосредственно.

GObjectClass

Структура класса для типа GObject.

Пример 4. Реализация единицы множества используя конструктор

GTypeClass g_type_class;

родительский класс

constructor ()

функция constructor вызывается с помощью g_object_new() для завершения инициализации объекта после установки всех свойств конструирования. Первое что должна сделать функция constructor - реализовать цепочку к constructor родительского класса. Отмена constructor редко необходима, например для обработки свойств конструирования, или для реализации единицы подмножества (singletons).

set_property ()

основной установщик для всех свойств этого типа. Должен быть переназначен для каждого типа со свойствами. Реализация set_property не должна явно издавать уведомление об изменении свойства, это обрабатывается системой типов.

get_property ()

основной получатель для всех свойств этого типа. Должен быть переназначен для каждого типа со свойствами.

dispose ()

функция dispose сбрасывает все ссылки на другие объекты, но сохраняет экземпляр нетронутым, так чтобы вызванный метод клиента остался роботающим. Это может быть выполнено множество раз (due to reference loops). Перед возвратом, dispose должна привязаться к dispose методу родительского класса.

finalize ()

функция инициализации экземпляра, должна завершать финализацию экземпляра начатую в dispose и привязаться к методу finalize родительского класса.

dispatch_properties_changed ()

издаёт уведомление изменения свойства для связки свойств. Переназначение dispatch_properties_changed должно быть редко необходимо.

notify ()

классовое замыкание для уведомляющего сигнала

constructed ()

функция constructed вызывается с помощью g_object_new() как завершающий шаг процесса создания объекта. В точке вызова, все свойства конструкции уже установлены на объект. Цель этого вызова позволить учесть шаги инициализации объекта которые выполняются только после установки свойств конструкции. Реализованные constructed должны привязываться к вызову constructed их родительского класса что позволяет завершить их инициализацию.

GObjectConstructParam

Вспомогательная структура GObjectConstructParam используется для расположения GParamSpec/ GValue пар в constructor принадлежащем GObjectClass.

GParamSpec *pspec;

GParamSpec параметр конструктора

GValue *value;

Значение для параметра конструктора

GObjectGetPropertyFunc ()

Тип функции get_property в GObjectClass.

object :

property_id :

числовой id под которым было зарегистрировано свойство с помощью g_object_class_install_property().

value :

GValue возвращаемого значения свойства

pspec :

GParamSpec описание свойства

GObjectSetPropertyFunc ()

Тип функции set_property в GObjectClass.

object :

property_id :

числовой id под которым было зарегистрировано свойство с помощью g_object_class_install_property().

value :

новое значение свойства

pspec :

GParamSpec описание свойства

GObjectFinalizeFunc ()

Тип функции finalize в GObjectClass.

object :

финализируемый GObject

G_TYPE_IS_OBJECT()

Возвращает логическое значение FALSE или TRUE указывающее соответствует ли помещённый типовой id G_TYPE_OBJECT или происходит из него.

type :

Типовой id для проверки отношения к G_TYPE_OBJECT.

Возвращает :

FALSE или TRUE, указывая соответствует ли type объекту G_TYPE_OBJECT.

G_OBJECT()

Приводит GObject или полученный указатель к указателю (GObject*). В зависимости от текущего уровня отладки, эта функция может вызвать определённые динамические проверки чтобы идентифицировать недопустимые приведения типов.

object :

Объект который необходимо преобразовать.

G_IS_OBJECT()

Проверяет допустимость указателя GTypeInstance типа G_TYPE_OBJECT.

object :

Экземпляр для проверки соответствия типу G_TYPE_OBJECT.

G_OBJECT_CLASS()

Приводит полученную структуру GObjectClass к структуре GObjectClass.

class :

допустимая GObjectClass

G_IS_OBJECT_CLASS()

Проверяет является ли class "is a" допустимой структурой GObjectClass типа G_TYPE_OBJECT или производной.

G_OBJECT_GET_CLASS()

Возвращает классовую структуру связанную с экземпляром GObject.

object :

экземпляр GObject.

G_OBJECT_TYPE()

Возвращает типовой id объекта.

object :

Объект для которого возвращается типовой id.

Возвращает :

Типовой id для object.

G_OBJECT_TYPE_NAME()

Возвращает имя объектного типа.

object :

Объект для которого возвращается типовое имя.

Возвращает :

Типовое имя object. Строкой владеет система типов и её не нужно освобождать.

G_OBJECT_CLASS_TYPE()

Возвращает типовой id сструктуры класса.

class :

допустимая GObjectClass

Возвращает :

Типовой id для class.

G_OBJECT_CLASS_NAME()

Возвращает имя классовой сструктуры типа.

class :

допустимая GObjectClass

Возвращает :

Типовое имя class. Строкой владеет система типов и она не должна освобождаться.

g_object_class_install_property ()

Устанавливает новое свойство. Это обычно делается в инициализации класса.

oclass :

property_id :

id для нового свойства

pspec :

GParamSpec для нового свойства

g_object_class_find_property ()

Находит GParamSpec для свойства класса.

oclass :

property_name :

искомое имя свойства

Возвращает :

GParamSpec для свойства, или NULL если класс не имеет свойства с таким именем

g_object_class_list_properties ()

Возвращает массив GParamSpec* для всех свойств класса.

oclass :

n_properties :

расположение длины возвращаемого массива

Возвращает :

массив GParamSpec* который должен быть освобождён после использования

g_object_class_override_property ()

Регистрирует property_id как ссылку свойства с именем name в родительском классе или в интерфейсе реализуемом с помощью oclass. Это позволяет классу переназначатьсвойство реализации в родительском классе или обеспечить реализацию свойства из интерфейса.

Помните

Внутренне, переназначение реализуется созданием свойства типа GParamSpecOverride; обычно операции которые запрашивают свойства объектного класса, такие какg_object_class_find_property() или g_object_class_list_properties() вернут переназначенное свойство. Однако, в одном случае, construct_propertiesпараметр виртуальной функции constructor, помещается вместо GParamSpecOverride, так чтобы поле param_id было заполнено правильным GParamSpec. Для виртуального использования это не имеет разницы. Если вам нужно получить переназначенное свойство, вы можете вызвать g_param_spec_get_redirect_target().

oclass :

property_id :

новый ID свойства

name :

имя свойства зарегистрированное в родительском классе или в интерфейсе этого класса.

Начиная с версии 2.4

g_object_interface_install_property ()

Добавляет свойство к интерфейсу; это полезно только для интерфейсов которые добавлены в GObject-производные типы. Добавление свойства в интерфейс заставляет все объекты класса иметь совместимые свойства с этим интерфейсом. Совместимые свойства могут быть вновь созданным GParamSpec, но обычно используетсяg_object_class_override_property() так чтобы объектный класс обеспечил реализацию и унаследовал описание свойства, значение по умолчанию, связь, и так далее из своего интерфейса.

Эта функция предназначается для вызова из значения по умолчанию vtable интерфейсной функции инициализации (член class_init в GTypeInfo.) Это нельзя вызвать после того как class_init вызвана для любой реализации объектных типов этого интерфейса.

g_iface :

любой vtable для интерфейса, или значение по умолчанию vtable для интерфейса.

pspec :

GParamSpec для нового свойства

Начиная с версии 2.4

g_object_interface_find_property ()

Находит GParamSpec с полученным именем для интерфейса. В основном, интерфейсный vtable помещённый как g_iface будет значением по умолчанию vtable из g_type_default_interface_ref(), или, если известно что интерфейс уже загружен, g_type_default_interface_peek().

g_iface :

любой интерфейсный vtable для интерфейса, или значение по умолчанию vtable для интерфейса

property_name :

имя искомого свойства

Возвращает :

GParamSpec для свойства интерфейса с именем property_name, или NULL если нет такого свойства.

Начиная с версии 2.4

g_object_interface_list_properties ()

Списки свойств интерфейса. В основном, интерфейсный vtable помещаемый как g_iface будет значением по умолчанию vtable из g_type_default_interface_ref(), или, если известно что интерфейс уже загружен, g_type_default_interface_peek().

g_iface :

любой интерфейсный vtable для интерфейса, или значение по умолчанию vtable для интерфейса

n_properties_p :

расположение для хранения количества возвращённых свойств.

Возвращает :

указатель на массив указателей структур GParamSpec. Структурами владеет GLib, но массив должен быть освобождён с помощью g_free() когда он вам больше не нужен.

Начиная с версии 2.4

Last updated

Was this helpful?