1 /*
2  * Copyright (C) 2014 Michal Ratajsky <michal.ratajsky@gmail.com>
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Lesser General Public
6  * License as published by the Free Software Foundation; either
7  * version 2 of the licence, or (at your option) any later version.
8  *
9  * This library is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  * Lesser General Public License for more details.
13  *
14  * You should have received a copy of the GNU Lesser General Public
15  * License along with this library; if not, see <http://www.gnu.org/licenses/>.
16  */
17 
18 #ifndef MATEMIXER_BACKEND_H
19 #define MATEMIXER_BACKEND_H
20 
21 #include <glib.h>
22 #include <glib-object.h>
23 
24 #include "matemixer-enums.h"
25 #include "matemixer-types.h"
26 
27 G_BEGIN_DECLS
28 
29 #define MATE_MIXER_TYPE_BACKEND                 \
30         (mate_mixer_backend_get_type ())
31 #define MATE_MIXER_BACKEND(o)                   \
32         (G_TYPE_CHECK_INSTANCE_CAST ((o), MATE_MIXER_TYPE_BACKEND, MateMixerBackend))
33 #define MATE_MIXER_IS_BACKEND(o)                \
34         (G_TYPE_CHECK_INSTANCE_TYPE ((o), MATE_MIXER_TYPE_BACKEND))
35 #define MATE_MIXER_BACKEND_CLASS(k)             \
36         (G_TYPE_CHECK_CLASS_CAST ((k), MATE_MIXER_TYPE_BACKEND, MateMixerBackendClass))
37 #define MATE_MIXER_IS_BACKEND_CLASS(k)          \
38         (G_TYPE_CHECK_CLASS_TYPE ((k), MATE_MIXER_TYPE_BACKEND))
39 #define MATE_MIXER_BACKEND_GET_CLASS(o)         \
40         (G_TYPE_INSTANCE_GET_CLASS ((o), MATE_MIXER_TYPE_BACKEND, MateMixerBackendClass))
41 
42 typedef struct _MateMixerBackend         MateMixerBackend;
43 typedef struct _MateMixerBackendClass    MateMixerBackendClass;
44 typedef struct _MateMixerBackendPrivate  MateMixerBackendPrivate;
45 
46 struct _MateMixerBackend
47 {
48     GObject object;
49 
50     /*< private >*/
51     MateMixerBackendPrivate *priv;
52 };
53 
54 struct _MateMixerBackendClass
55 {
56     GObjectClass parent_class;
57 
58     /*< private >*/
59     void         (*set_app_info)              (MateMixerBackend *backend,
60                                                MateMixerAppInfo *info);
61     void         (*set_server_address)        (MateMixerBackend *backend,
62                                                const gchar      *address);
63 
64     gboolean     (*open)                      (MateMixerBackend *backend);
65     void         (*close)                     (MateMixerBackend *backend);
66 
67     const GList *(*list_devices)              (MateMixerBackend *backend);
68     const GList *(*list_streams)              (MateMixerBackend *backend);
69     const GList *(*list_stored_controls)      (MateMixerBackend *backend);
70 
71     gboolean     (*set_default_input_stream)  (MateMixerBackend *backend,
72                                                MateMixerStream  *stream);
73     gboolean     (*set_default_output_stream) (MateMixerBackend *backend,
74                                                MateMixerStream  *stream);
75 
76     /* Signals */
77     void         (*device_added)              (MateMixerBackend *backend,
78                                                const gchar      *name);
79     void         (*device_removed)            (MateMixerBackend *backend,
80                                                const gchar      *name);
81     void         (*stream_added)              (MateMixerBackend *backend,
82                                                const gchar      *name);
83     void         (*stream_removed)            (MateMixerBackend *backend,
84                                                const gchar      *name);
85     void         (*stored_control_added)      (MateMixerBackend *backend,
86                                                const gchar      *name);
87     void         (*stored_control_removed)    (MateMixerBackend *backend,
88                                                const gchar      *name);
89 };
90 
91 GType                   mate_mixer_backend_get_type                  (void) G_GNUC_CONST;
92 
93 void                    mate_mixer_backend_set_app_info              (MateMixerBackend *backend,
94                                                                       MateMixerAppInfo *info);
95 void                    mate_mixer_backend_set_server_address        (MateMixerBackend *backend,
96                                                                       const gchar      *address);
97 
98 gboolean                mate_mixer_backend_open                      (MateMixerBackend *backend);
99 void                    mate_mixer_backend_close                     (MateMixerBackend *backend);
100 
101 MateMixerState          mate_mixer_backend_get_state                 (MateMixerBackend *backend);
102 
103 MateMixerDevice *       mate_mixer_backend_get_device                (MateMixerBackend *backend,
104                                                                       const gchar      *name);
105 MateMixerStream *       mate_mixer_backend_get_stream                (MateMixerBackend *backend,
106                                                                       const gchar      *name);
107 MateMixerStoredControl *mate_mixer_backend_get_stored_control        (MateMixerBackend *backend,
108                                                                       const gchar      *name);
109 
110 const GList *           mate_mixer_backend_list_devices              (MateMixerBackend *backend);
111 const GList *           mate_mixer_backend_list_streams              (MateMixerBackend *backend);
112 const GList *           mate_mixer_backend_list_stored_controls      (MateMixerBackend *backend);
113 
114 MateMixerStream *       mate_mixer_backend_get_default_input_stream  (MateMixerBackend *backend);
115 gboolean                mate_mixer_backend_set_default_input_stream  (MateMixerBackend *backend,
116                                                                       MateMixerStream  *stream);
117 
118 MateMixerStream *       mate_mixer_backend_get_default_output_stream (MateMixerBackend *backend);
119 gboolean                mate_mixer_backend_set_default_output_stream (MateMixerBackend *backend,
120                                                                       MateMixerStream  *stream);
121 
122 /* Protected functions */
123 void                   _mate_mixer_backend_set_state                 (MateMixerBackend *backend,
124                                                                       MateMixerState    state);
125 
126 void                   _mate_mixer_backend_set_default_input_stream  (MateMixerBackend *backend,
127                                                                       MateMixerStream  *stream);
128 
129 void                   _mate_mixer_backend_set_default_output_stream (MateMixerBackend *backend,
130                                                                       MateMixerStream  *stream);
131 
132 G_END_DECLS
133 
134 #endif /* MATEMIXER_BACKEND_H */
135