XMMS2
xmms_object.h
Go to the documentation of this file.
1 /* XMMS2 - X Music Multiplexer System
2  * Copyright (C) 2003-2011 XMMS2 Team
3  *
4  * PLUGINS ARE NOT CONSIDERED TO BE DERIVED WORK !!!
5  *
6  * This library is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 2.1 of the License, or (at your option) any later version.
10  *
11  * This library is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14  * Lesser General Public License for more details.
15  */
16 
17 
18 
19 
20 #ifndef __XMMS_OBJECT_H__
21 #define __XMMS_OBJECT_H__
22 
23 #include <glib.h>
24 #include "xmms/xmms_error.h"
25 #include "xmmsc/xmmsc_idnumbers.h"
26 #include "xmmsc/xmmsv.h"
27 #include "xmmsc/xmmsv_coll.h"
28 
29 #define XMMS_OBJECT_MID 0x00455574
30 
31 G_BEGIN_DECLS
32 
33 struct xmms_object_St;
35 
36 typedef void (*xmms_object_destroy_func_t) (xmms_object_t *object);
37 
38 /** @addtogroup Object
39  * @{
40  */
42  guint32 id;
43  GMutex *mutex;
44 
45  GTree *signals;
46  GTree *cmds;
47 
48  gint ref;
50 };
51 
52 
53 /* Convenience wrapper to create #xmmsv_t from GLib types. */
54 xmmsv_t *xmms_convert_and_kill_list (GList *list);
55 xmmsv_t *xmms_convert_and_kill_dict (GTree *dict);
57 xmmsv_t *xmms_convert_and_kill_bin (GString *gs);
58 
59 int xmms_bin_to_gstring (xmmsv_t *value, GString **gs);
60 int dummy_identity (xmmsv_t *value, xmmsv_t **arg);
61 gboolean check_string_list (xmmsv_t *list);
62 
63 
64 /** @} */
65 
66 typedef void (*xmms_object_handler_t) (xmms_object_t *object, xmmsv_t *data, gpointer userdata);
67 
68 #define XMMS_OBJECT_CMD_MAX_ARGS 6
69 typedef struct {
70  xmmsv_t *args; /* list */
74 
76 
77 #define XMMS_OBJECT(p) ((xmms_object_t *)p)
78 #define XMMS_IS_OBJECT(p) (XMMS_OBJECT (p)->id == XMMS_OBJECT_MID)
79 
80 void xmms_object_cleanup (xmms_object_t *object);
81 
82 void xmms_object_connect (xmms_object_t *object, guint32 signalid,
83  xmms_object_handler_t handler, gpointer userdata);
84 
85 void xmms_object_disconnect (xmms_object_t *object, guint32 signalid,
86  xmms_object_handler_t handler, gpointer userdata);
87 
88 void xmms_object_emit (xmms_object_t *object, guint32 signalid, xmmsv_t *data);
89 
90 void xmms_object_emit_f (xmms_object_t *object, guint32 signalid,
91  xmmsv_type_t type, ...);
92 
94 
95 void xmms_object_cmd_add (xmms_object_t *object, guint cmdid, const xmms_object_cmd_func_t desc);
96 
97 void xmms_object_cmd_call (xmms_object_t *object, guint cmdid, xmms_object_cmd_arg_t *arg);
98 
99 
102 
103 #define xmms_object_ref(obj) do { \
104  if (obj && XMMS_IS_OBJECT (obj)) { \
105  g_atomic_int_inc (&(XMMS_OBJECT (obj)->ref)); \
106  } \
107 } while (0)
108 
109 #define xmms_object_unref(obj) do { \
110  if (obj && XMMS_IS_OBJECT (obj)) { \
111  __int_xmms_object_unref (XMMS_OBJECT (obj)); \
112  } \
113 } while (0)
114 
115 #define xmms_object_new(objtype,destroyfunc) (objtype *) __int_xmms_object_new (sizeof (objtype), destroyfunc)
116 
117 G_END_DECLS
118 
119 #endif /* __XMMS_OBJECT_H__ */
void __int_xmms_object_unref(xmms_object_t *object)
Definition: object.c:488
xmmsv_t * xmms_convert_and_kill_bin(GString *gs)
struct xmmsv_St xmmsv_t
Definition: xmmsv_general.h:48
GTree * signals
Definition: xmms_object.h:45
gboolean check_string_list(xmmsv_t *list)
Checks that the list only contains string values.
Definition: object.c:469
int xmms_bin_to_gstring(xmmsv_t *value, GString **gs)
Definition: object.c:447
GTree * cmds
Definition: xmms_object.h:46
void xmms_object_cleanup(xmms_object_t *object)
Cleanup all the resources for the object.
Definition: object.c:62
void xmms_object_emit(xmms_object_t *object, guint32 signalid, xmmsv_t *data)
Emit a signal and thus call all the handlers that are connected.
Definition: object.c:195
void xmms_object_cmd_arg_init(xmms_object_cmd_arg_t *arg)
Initialize a command argument.
Definition: object.c:236
void xmms_object_emit_f(xmms_object_t *object, guint32 signalid, xmmsv_type_t type,...)
Emits a signal on the current object.
Definition: object.c:256
GMutex * mutex
Definition: xmms_object.h:43
void xmms_object_cmd_call(xmms_object_t *object, guint cmdid, xmms_object_cmd_arg_t *arg)
Call a command with argument.
Definition: object.c:338
void xmms_object_cmd_add(xmms_object_t *object, guint cmdid, const xmms_object_cmd_func_t desc)
Add a command that could be called from the client API to a object.
Definition: object.c:320
int dummy_identity(xmmsv_t *value, xmmsv_t **arg)
Definition: object.c:459
void(* xmms_object_cmd_func_t)(xmms_object_t *object, xmms_object_cmd_arg_t *arg)
Definition: xmms_object.h:75
xmmsv_type_t
Definition: xmmsv_general.h:35
xmmsv_t * xmms_convert_and_kill_list(GList *list)
Definition: object.c:367
xmmsv_t * xmms_convert_and_kill_string(gchar *str)
Definition: object.c:408
xmmsv_t * xmms_convert_and_kill_dict(GTree *dict)
Definition: object.c:394
void xmms_object_connect(xmms_object_t *object, guint32 signalid, xmms_object_handler_t handler, gpointer userdata)
Connect to a signal that is emitted by this object.
Definition: object.c:115
void xmms_object_disconnect(xmms_object_t *object, guint32 signalid, xmms_object_handler_t handler, gpointer userdata)
Disconnect from a signal.
Definition: object.c:146
G_BEGIN_DECLS struct xmms_error_St xmms_error_t
void(* xmms_object_destroy_func_t)(xmms_object_t *object)
Definition: xmms_object.h:36
xmms_error_t error
Definition: xmms_object.h:72
xmms_object_t * __int_xmms_object_new(gint size, xmms_object_destroy_func_t destfunc)
Definition: object.c:500
void(* xmms_object_handler_t)(xmms_object_t *object, xmmsv_t *data, gpointer userdata)
Definition: xmms_object.h:66
xmms_object_destroy_func_t destroy_func
Definition: xmms_object.h:49