1 /*
2  * * Copyright (C) 2009-2011 Ali <aliov@xfce.org>
3  * * Copyright (C) 2012-2017 Simon Steinbeiß <ochosi@xfce.org>
4  * * Copyright (C) 2012-2020 Sean Davis <bluesabre@xfce.org>
5  *
6  * Licensed under the GNU General Public License Version 2
7  *
8  * This program is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License as published by
10  * the Free Software Foundation; either version 2 of the License, or
11  * (at your option) any later version.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this program; if not, write to the Free Software
20  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
21  */
22 
23 #if !defined (__PAROLE_H_INSIDE__) && !defined (PAROLE_COMPILATION)
24 #error "Only <parole.h> can be included directly."
25 #endif
26 
27 #ifndef SRC_MISC_PAROLE_PROVIDER_PLAYER_H_
28 #define SRC_MISC_PAROLE_PROVIDER_PLAYER_H_
29 
30 #include <gtk/gtk.h>
31 
32 #include "src/misc/parole-stream.h"
33 
34 #include "src/parole-player.h"
35 
36 G_BEGIN_DECLS
37 
38 #define PAROLE_TYPE_PROVIDER_PLAYER                 (parole_provider_player_get_type ())
39 #define PAROLE_PROVIDER_PLAYER(o)                   (G_TYPE_CHECK_INSTANCE_CAST ((o), PAROLE_TYPE_PROVIDER_PLAYER, ParoleProviderPlayer))
40 #define PAROLE_IS_PROVIDER_PLAYER(o)                (G_TYPE_CHECK_INSTANCE_TYPE ((o), PAROLE_TYPE_PROVIDER_PLAYER))
41 #define PAROLE_PROVIDER_PLAYER_GET_INTERFACE(o)     (G_TYPE_INSTANCE_GET_INTERFACE((o), PAROLE_TYPE_PROVIDER_PLAYER, ParoleProviderPlayerIface))
42 
43 /**
44  * ParoleProviderPlayerIface:
45  *
46  * Interface for #ParoleProviderPlayer
47  *
48  * Since: 0.2
49  */
50 typedef struct _ParoleProviderPlayerIface ParoleProviderPlayerIface;
51 
52 /**
53  * ParoleProviderPlayer:
54  *
55  * The player interface that the plugins should use in order to, issue playback
56  * commands to the Parole GStreamer backend or to get information about the
57  * current playback status.
58  *
59  * Since: 0.2
60  */
61 typedef struct _ParoleProviderPlayer      ParoleProviderPlayer;
62 
63 /**
64  * ParolePluginContainer:
65  * @PAROLE_PLUGIN_CONTAINER_PLAYLIST: Playlist container
66  * @PAROLE_PLUGIN_CONTAINER_MAIN_VIEW: Main view container
67  *
68  * Available plugin widget containers.
69  *
70  **/
71 typedef enum {
72     PAROLE_PLUGIN_CONTAINER_PLAYLIST,
73     PAROLE_PLUGIN_CONTAINER_MAIN_VIEW
74 } ParolePluginContainer;
75 
76 
77 
78 struct _ParoleProviderPlayerIface {
79     GTypeInterface __parent__;
80 
81     /*< private >*/
82     GtkWidget   *(*get_main_window)             (ParoleProviderPlayer *player);
83 
84     void        (*pack)                         (ParoleProviderPlayer *player,
85                                                  GtkWidget *widget,
86                                                  const gchar *title,
87                                                  ParolePluginContainer container);
88 
89     ParoleState (*get_state)                    (ParoleProviderPlayer *player);
90 
91     const ParoleStream *(*get_stream)           (ParoleProviderPlayer *player);
92 
93     gboolean     (*play_uri)                    (ParoleProviderPlayer *player,
94                                                  const gchar *uri);
95 
96     gboolean     (*pause)                       (ParoleProviderPlayer *player);
97 
98     gboolean     (*resume)                      (ParoleProviderPlayer *player);
99 
100     gboolean     (*stop)                        (ParoleProviderPlayer *player);
101 
102     gboolean     (*play_previous)               (ParoleProviderPlayer *player);
103 
104     gboolean     (*play_next)                   (ParoleProviderPlayer *player);
105 
106     gboolean     (*seek)                        (ParoleProviderPlayer *player,
107                                                  gdouble pos);
108 
109     gdouble      (*get_stream_position)         (ParoleProviderPlayer *player);
110 
111     gboolean     (*get_fullscreen)              (ParoleProviderPlayer *player);
112 
113     gboolean     (*set_fullscreen)              (ParoleProviderPlayer *player,
114                                                  gboolean fullscreen);
115 
116     void         (*open_media_chooser)          (ParoleProviderPlayer *player);
117 
118     GSimpleAction*   (*get_action)              (ParoleProviderPlayer *player,
119                                                  ParolePlayerAction action);
120 
121     /*< signals >*/
122     void     (*tag_message)                     (ParoleProviderPlayer *player,
123                                                  const ParoleStream *stream);
124 
125     void     (*seeked)                          (ParoleProviderPlayer *player,
126                                                  gdouble value);
127 
128     void     (*state_changed)                   (ParoleProviderPlayer *player,
129                                                  const ParoleStream *stream,
130                                                  ParoleState state);
131 };
132 
133 GType        parole_provider_player_get_type    (void) G_GNUC_CONST;
134 
135 GtkWidget   *parole_provider_player_get_main_window
136                                                 (ParoleProviderPlayer *player);
137 
138 void         parole_provider_player_pack        (ParoleProviderPlayer *player,
139                                                  GtkWidget *widget,
140                                                  const gchar *title,
141                                                  ParolePluginContainer container);
142 
143 ParoleState parole_provider_player_get_state    (ParoleProviderPlayer *player);
144 
145 const ParoleStream *parole_provider_player_get_stream
146                                                 (ParoleProviderPlayer *player);
147 
148 gboolean    parole_provider_player_play_uri     (ParoleProviderPlayer *player,
149                                                  const gchar *uri);
150 
151 gboolean    parole_provider_player_pause        (ParoleProviderPlayer *player);
152 
153 gboolean    parole_provider_player_resume       (ParoleProviderPlayer *player);
154 
155 gboolean    parole_provider_player_stop         (ParoleProviderPlayer *player);
156 
157 gboolean    parole_provider_player_play_previous(ParoleProviderPlayer *player);
158 
159 gboolean    parole_provider_player_play_next    (ParoleProviderPlayer *player);
160 
161 gboolean    parole_provider_player_seek         (ParoleProviderPlayer *player,
162                                                  gdouble pos);
163 
164 gdouble parole_provider_player_get_stream_position(ParoleProviderPlayer *player);
165 
166 void
167 parole_provider_player_open_media_chooser       (ParoleProviderPlayer *player);
168 
169 GSimpleAction *parole_provider_player_get_action(ParoleProviderPlayer *player, ParolePlayerAction action);
170 
171 gboolean    parole_provider_player_get_fullscreen(ParoleProviderPlayer *player);
172 
173 gboolean    parole_provider_player_set_fullscreen(ParoleProviderPlayer *player,
174                                                  gboolean fullscreen);
175 
176 G_END_DECLS
177 
178 #endif /* SRC_MISC_PAROLE_PROVIDER_PLAYER_H_ */
179