BEAST/BSE - Better Audio System and Sound Engine  0.9.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
bseobject.hh
Go to the documentation of this file.
1  // Licensed GNU LGPL v2.1 or later: http://www.gnu.org/licenses/lgpl.html
2 #ifndef __BSE_OBJECT_H__
3 #define __BSE_OBJECT_H__
4 
5 #include <bse/bseparam.hh>
6 
7 G_BEGIN_DECLS
8 
9 /* --- BSE type macros --- */
10 #define BSE_TYPE_OBJECT (BSE_TYPE_ID (BseObject))
11 #define BSE_OBJECT(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), BSE_TYPE_OBJECT, BseObject))
12 #define BSE_OBJECT_CLASS(class) (G_TYPE_CHECK_CLASS_CAST ((class), BSE_TYPE_OBJECT, BseObjectClass))
13 #define BSE_IS_OBJECT(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), BSE_TYPE_OBJECT))
14 #define BSE_IS_OBJECT_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), BSE_TYPE_OBJECT))
15 #define BSE_OBJECT_GET_CLASS(object) (G_TYPE_INSTANCE_GET_CLASS ((object), BSE_TYPE_OBJECT, BseObjectClass))
16 
17 /* --- object member/convenience macros --- */
18 #define BSE_OBJECT_TYPE(object) (G_TYPE_FROM_INSTANCE (object))
19 #define BSE_OBJECT_TYPE_NAME(object) (g_type_name (BSE_OBJECT_TYPE (object)))
20 #define BSE_OBJECT_UNAME(object) ((gchar*) g_datalist_id_get_data (&((GObject*) (object))->qdata, bse_quark_uname))
21 #define BSE_OBJECT_FLAGS(object) (((BseObject*) (object))->flags)
22 #define BSE_OBJECT_SET_FLAGS(object, f) (BSE_OBJECT_FLAGS (object) |= (f))
23 #define BSE_OBJECT_UNSET_FLAGS(object, f) (BSE_OBJECT_FLAGS (object) &= ~(f))
24 #define BSE_OBJECT_IS_LOCKED(object) (((BseObject*) (object))->lock_count > 0)
25 #define BSE_OBJECT_DISPOSING(object) ((BSE_OBJECT_FLAGS (object) & BSE_OBJECT_FLAG_DISPOSING) > 0)
26 #define BSE_OBJECT_IN_RESTORE(object) ((BSE_OBJECT_FLAGS (object) & BSE_OBJECT_FLAG_IN_RESTORE) > 0)
27 #define BSE_OBJECT_ID(object) (((BseObject*) (object))->unique_id)
28 
29 /* --- object flags --- */
30 typedef enum /*< skip >*/
31 {
32  BSE_OBJECT_FLAG_FIXED_UNAME = 1 << 0,
33  BSE_OBJECT_FLAG_DISPOSING = 1 << 1,
34  BSE_OBJECT_FLAG_IN_RESTORE = 1 << 2
35 } BseObjectFlags;
36 #define BSE_OBJECT_FLAGS_USHIFT (3)
37 #define BSE_OBJECT_FLAGS_MAX_SHIFT (16)
38 /* --- typedefs & structures --- */
39 struct BseObject : GObject {
40  guint16 flags;
41  guint16 lock_count;
42  guint unique_id;
43 };
44 struct BseObjectClass : GObjectClass {
45  gboolean (*editable_property) (BseObject *object, /* for set_property/get_property implementations */
46  guint param_id,
47  GParamSpec *pspec);
48  /* custom methods for specific object needs, most of them require chaining */
49  gboolean (*check_pspec_editable) (BseObject *object, /* for containers */
50  GParamSpec *pspec);
51  void (*set_uname) (BseObject *object,
52  const gchar *uname);
53  void (*store_private) (BseObject *object,
54  BseStorage *storage);
55  void (*restore_start) (BseObject *object,
56  BseStorage *storage);
57  GTokenType (*restore_private) (BseObject *object,
58  BseStorage *storage,
59  GScanner *scanner);
60  void (*restore_finish) (BseObject *object,
61  guint vmajor,
62  guint vminor,
63  guint vmicro);
64  void (*unlocked) (BseObject *object);
65  BseIcon* (*get_icon) (BseObject *object);
66 };
67 
68 /* --- object class API ---*/
69 void bse_object_class_add_property (BseObjectClass *oclass,
70  const gchar *property_group,
71  guint property_id,
72  GParamSpec *pspec);
73 void bse_object_class_add_grouped_property (BseObjectClass *oclass,
74  guint property_id,
75  GParamSpec *pspec);
76 #define bse_object_class_add_param bse_object_class_add_property
77 guint bse_object_class_add_signal (BseObjectClass *oclass,
78  const gchar *signal_name,
79  GType return_type,
80  guint n_params,
81  ...);
82 guint bse_object_class_add_asignal (BseObjectClass *oclass,
83  const gchar *signal_name,
84  GType return_type,
85  guint n_params,
86  ...);
87 guint bse_object_class_add_dsignal (BseObjectClass *oclass,
88  const gchar *signal_name,
89  GType return_type,
90  guint n_params,
91  ...);
92 
93 
94 /* --- object API --- */
95 void bse_object_lock (gpointer object);
96 void bse_object_unlock (gpointer object);
97 gboolean bse_object_editable_property (gpointer object,
98  const gchar *property);
99 BseIcon* bse_object_get_icon (BseObject *object);
100 void bse_object_notify_icon_changed (BseObject *object);
101 gpointer bse_object_from_id (guint unique_id);
102 GList* bse_objects_list (GType type);
103 GList* bse_objects_list_by_uname (GType type,
104  const gchar *uname);
105 void bse_object_debug_leaks (void);
106 const gchar* bse_object_debug_name (gpointer object);
107 gchar* bse_object_strdup_debug_handle (gpointer object);
108 void bse_object_restore_start (BseObject *object,
109  BseStorage *storage);
110 void bse_object_restore_finish (BseObject *object,
111  guint vmajor,
112  guint vminor,
113  guint vmicro);
114 void bse_object_reemit_signal (gpointer src_object,
115  const gchar *src_signal,
116  gpointer dest_obejct,
117  const gchar *dest_signal);
118 void bse_object_remove_reemit (gpointer src_object,
119  const gchar *src_signal,
120  gpointer dest_object,
121  const gchar *dest_signal);
122 static inline void
123 bse_object_proxy_notifies (gpointer src_object,
124  gpointer dest_object,
125  const gchar *dest_signal)
126 {
127  bse_object_reemit_signal (src_object, "notify::uname", dest_object, dest_signal);
128  bse_object_reemit_signal (src_object, "icon-changed", dest_object, dest_signal);
129 }
130 static inline void
131 bse_object_unproxy_notifies (gpointer src_object,
132  gpointer dest_object,
133  const gchar *dest_signal)
134 {
135  bse_object_remove_reemit (src_object, "notify::uname", dest_object, dest_signal);
136  bse_object_remove_reemit (src_object, "icon-changed", dest_object, dest_signal);
137 }
138 
139 
140 /* --- implementation details --- */
141 extern GQuark bse_quark_uname;
142 void bse_object_marshal_signal (GClosure *closure,
143  GValue /*out*/ *return_value,
144  guint n_param_values,
145  const GValue *param_values,
146  gpointer invocation_hint,
147  gpointer marshal_data);
148 
149 G_END_DECLS
150 
151 #endif /* __BSE_OBJECT_H__ */
gchar * bse_object_strdup_debug_handle(gpointer object)
Definition: bseobject.cc:78
Definition: bseobject.hh:39
Definition: bseobject.hh:44
Definition: bsestorage.hh:49
uname