1 /* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */
2 /*
3  * common.h
4  * Copyright (C) Kevin DeKorte 2006 <kdekorte@gmail.com>
5  *
6  * common.h is free software.
7  *
8  * You may redistribute it and/or modify it under the terms of the
9  * GNU General Public License, as published by the Free Software
10  * Foundation; either version 2 of the License, or (at your option)
11  * any later version.
12  *
13  * common.h 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.
16  * See the GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with common.h.  If not, write to:
20  * 	The Free Software Foundation, Inc.,
21  * 	51 Franklin Street, Fifth Floor
22  * 	Boston, MA  02110-1301, USA.
23  */
24 
25 #include <gtk/gtk.h>
26 #include <gmlib.h>
27 #ifdef LIBGDA_ENABLED
28 #include <libgda/libgda.h>
29 #endif
30 
31 
32 
33 #ifdef GIO_ENABLED
34 #include <gio/gio.h>
35 #endif
36 
37 #ifndef _COMMON_H
38 #define _COMMON_H
39 
40 #define VO					"vo"
41 #define AUDIO_DEVICE_NAME   "audio-device-name"
42 #define ALSA_MIXER			"alsa-mixer"
43 #define VOLUME				"volume"
44 #define AUDIO_CHANNELS		"audio-channels"
45 #define USE_HARDWARE_CODECS "use-hardware-codecs"
46 #define USE_CRYSTALHD_CODECS "use-crystalhd-codecs"
47 #define USE_HW_AUDIO		"use-hw-audio"
48 #define SOFTVOL				"softvol"
49 #define VOLUME_GAIN			"volume-gain"
50 #define REMEMBER_SOFTVOL	"remember-softvol"
51 #define VOLUME_SOFTVOL		"volume-softvol"
52 
53 #define CACHE_SIZE				"cache-size"
54 #define PLUGIN_AUDIO_CACHE_SIZE	"plugin-audio-cache-size"
55 #define PLUGIN_VIDEO_CACHE_SIZE	"plugin-video-cache-size"
56 #define OSDLEVEL				"osd-level"
57 #define PPLEVEL					"pp-level"
58 #define VERBOSE					"verbose"
59 #define VERTICAL				"vertical"
60 #define FORCECACHE				"force-cache"
61 #define LAST_DIR				"last-dir"
62 #define SHOWPLAYLIST			"show-playlist"
63 #define SHOWDETAILS				"show-details"
64 #define SHOW_CONTROLS			"show-controls"
65 #define RESUME_MODE				"resume-mode"
66 
67 #define AUDIO_LANG				"audio-lang"
68 #define SUBTITLE_LANG			"subtitle-lang"
69 
70 #define DISABLEASS      		"disable-ass"
71 #define DISABLEEMBEDDEDFONTS    "disable-embeddedfonts"
72 #define DISABLEDEINTERLACE		"disable-deinterlace"
73 #define DISABLEFRAMEDROP		"disable-framedrop"
74 #define DISABLEFULLSCREEN		"disable-fullscreen"
75 #define DISABLECONTEXTMENU		"disable-contextmenu"
76 #define DISABLEPAUSEONCLICK		"disable-pause-on-click"
77 #define DISABLEANIMATION		"disable-animation"
78 #define DISABLE_COVER_ART_FETCH "disable-cover-art-fetch"
79 
80 #define AUTOHIDETIMEOUT		"auto-hide-timeout"
81 #define METADATACODEPAGE	"metadata-codepage"
82 
83 #define SHOW_SUBTITLES		"show-subtitles"
84 #define SUBTITLEFONT		"subtitle-font"
85 #define SUBTITLESCALE		"subtitle-scale"
86 #define SUBTITLECODEPAGE	"subtitle-codepage"
87 #define SUBTITLECOLOR		"subtitle-color"
88 #define SUBTITLEOUTLINE		"subtitle-outline"
89 #define SUBTITLESHADOW		"subtitle-shadow"
90 #define SUBTITLE_MARGIN		"subtitle-margin"
91 #define SUBTITLE_FUZZINESS  "subtitle-fuzziness"
92 
93 #define MOUSE_WHEEL_CHANGES_VOLUME "mouse-wheel-changes-volume"
94 #define USE_MEDIAKEYS		"use-mediakeys"
95 #define USE_DEFAULTPL		"use-defaultpl"
96 #define FULLSCREEN			"fullscreen"
97 #define MPLAYER_BIN			"mplayer-bin"
98 #define EXTRAOPTS			"extraopts"
99 #define MPLAYER_DVD_DEVICE  "mplayer-dvd-device"
100 
101 #define REMEMBER_LOC		"remember-loc"
102 #define WINDOW_X			"window-x"
103 #define WINDOW_Y			"window-y"
104 #define WINDOW_HEIGHT		"window-height"
105 #define WINDOW_WIDTH		"window-width"
106 #define PANEL_POSITION	    "panel-position"
107 #define RESIZE_ON_NEW_MEDIA "resize-on-new-media"
108 #define KEEP_ON_TOP			"keep-on-top"
109 #define SINGLE_INSTANCE		"single-instance"
110 #define REPLACE_AND_PLAY	"replace-and-play"
111 #define BRING_TO_FRONT		"bring-to-front"
112 #define SHOW_NOTIFICATION   "show-notification"
113 #define SHOW_STATUS_ICON	"show-status-icon"
114 
115 #define DISABLE_QT			"disable-qt"
116 #define DISABLE_REAL		"disable-real"
117 #define DISABLE_WMP			"disable-wmp"
118 #define DISABLE_DVX			"disable-dvx"
119 #define DISABLE_MIDI		"disable-midi"
120 #define DISABLE_EMBEDDING	"disable-embedding"
121 #define DISABLE_EMBEDDED_SCALING "disable-embedded-scaling"
122 #define DEBUG_LEVEL			"debug-level"
123 
124 #define ACCELERATOR_KEYS	"accelerator-keys"
125 
126 // set this to true in gconf/dconf when using with gnome global menus
127 #define ENABLE_GLOBAL_MENU  "enable-global-menu"
128 
129 #define ENABLE_NAUTILUS_PLUGIN "enable-nautilus-plugin"
130 
131 // JavaScript Playstates
132 #define STATE_UNDEFINED     0
133 #define STATE_STOPPED       1
134 #define STATE_PAUSED        2
135 #define STATE_PLAYING       3
136 #define STATE_SCANFORWARD   4
137 #define STATE_SCANREVERSE   5
138 #define STATE_BUFFERING	    6
139 #define STATE_WAITING       7
140 #define STATE_MEDIAENDED    8
141 #define STATE_TRANSITIONING 9
142 #define STATE_READY	        10
143 #define STATE_RECONNECTING  11
144 
145 
146 typedef enum {
147     PLAYING,
148     PAUSED,
149     STOPPED,
150     QUIT
151 } PLAYSTATE;
152 
153 extern PLAYSTATE guistate;
154 extern PLAYSTATE lastguistate;
155 
156 typedef struct _IdleData {
157     gchar info[1024];
158     gchar display_name[1024];
159     gchar media_info[2048];
160     gchar media_notification[2048];
161     gchar af_export[1024];
162     gchar url[2048];
163     GMappedFile *mapped_af_export;
164     gchar *device;
165     gdouble cachepercent;
166     gint streaming;
167     gchar progress_text[1024];
168     gchar vol_tooltip[128];
169     gint width;
170     gint height;
171     gboolean videopresent;
172     gboolean fullscreen;
173     gboolean showcontrols;
174     gdouble position;
175     gdouble length;
176     gdouble start_time;
177     glong byte_pos;
178     gchar demuxer[64];
179     gchar metadata[1024];
180     gboolean fromdbus;
181     gboolean window_resized;
182     gboolean tmpfile;
183     gboolean retry_on_full_cache;
184 #ifdef GIO_ENABLED
185     GFile *src;
186     GFile *tmp;
187     GCancellable *cancel;
188     GMutex *caching;
189     GCond *caching_complete;
190 #endif
191 } IdleData;
192 
193 extern IdleData *idledata;
194 
195 enum {
196     ITEM_COLUMN,
197     DESCRIPTION_COLUMN,
198     COUNT_COLUMN,
199     PLAYLIST_COLUMN,
200     ARTIST_COLUMN,
201     ALBUM_COLUMN,
202     LENGTH_COLUMN,
203     LENGTH_VALUE_COLUMN,
204     SUBTITLE_COLUMN,
205     AUDIOFILE_COLUMN,
206     COVERART_COLUMN,
207     AUDIO_CODEC_COLUMN,
208     VIDEO_CODEC_COLUMN,
209     DEMUXER_COLUMN,
210     VIDEO_WIDTH_COLUMN,
211     VIDEO_HEIGHT_COLUMN,
212     PLAY_ORDER_COLUMN,
213     ADD_ORDER_COLUMN,
214     START_COLUMN,
215     END_COLUMN,
216     PLAYABLE_COLUMN,
217     N_COLUMNS
218 };
219 
220 typedef enum {
221     FILE_OPEN_LOCATION,
222     EDIT_SCREENSHOT,
223     EDIT_PREFERENCES,
224     VIEW_PLAYLIST,
225     VIEW_INFO,
226     VIEW_DETAILS,
227     VIEW_METER,
228     VIEW_FULLSCREEN,
229     VIEW_ASPECT,
230     VIEW_SUBTITLES,
231     VIEW_DECREASE_SIZE,
232     VIEW_INCREASE_SIZE,
233     VIEW_ANGLE,
234     VIEW_CONTROLS,
235     KEY_COUNT
236 } AcceleratorKeys;
237 
238 typedef enum {
239     RESUME_ALWAYS_ASK,
240     RESUME_BUT_NEVER_ASK,
241     DO_NOT_RESUME
242 } ResumeMode;
243 
244 #define ACCEL_PATH_OPEN_LOCATION "<GNOME MPlayer>/File/Open Location"
245 #define ACCEL_PATH_EDIT_SCREENSHOT "<GNOME MPlayer>/Edit/Screenshot"
246 #define ACCEL_PATH_EDIT_PREFERENCES "<GNOME MPlayer>/Edit/Preferences"
247 #define ACCEL_PATH_VIEW_PLAYLIST "<GNOME MPlayer>/View/Playlist"
248 #define ACCEL_PATH_VIEW_INFO "<GNOME MPlayer>/View/Info"
249 #define ACCEL_PATH_VIEW_DETAILS "<GNOME MPlayer>/View/Details"
250 #define ACCEL_PATH_VIEW_METER "<GNOME MPlayer>/View/Meter"
251 #define ACCEL_PATH_VIEW_FULLSCREEN "<GNOME MPlayer>/View/Fullscreen"
252 #define ACCEL_PATH_VIEW_ASPECT "<GNOME MPlayer>/View/Aspect"
253 #define ACCEL_PATH_VIEW_SUBTITLES "<GNOME MPlayer>/View/Subtitles"
254 #define ACCEL_PATH_VIEW_DECREASE_SIZE "<GNOME MPlayer>/View/Decrease Size"
255 #define ACCEL_PATH_VIEW_INCREASE_SIZE "<GNOME MPlayer>/View/Increase Size"
256 #define ACCEL_PATH_VIEW_ANGLE "<GNOME MPlayer>/View/Angle"
257 #define ACCEL_PATH_VIEW_CONTROLS "<GNOME MPlayer>/View/Controls"
258 #define ACCEL_PATH_VIEW_NORMAL "<GNOME MPlayer>/View/Normal"
259 #define ACCEL_PATH_VIEW_DOUBLE "<GNOME MPlayer>/View/Double"
260 
261 typedef struct _MetaData {
262     gchar *uri;
263     gchar *title;
264     gchar *artist;
265     gchar *album;
266     gchar *length;
267     gfloat length_value;
268     gchar *subtitle;
269     gchar *audio_codec;
270     gchar *video_codec;
271     gchar *demuxer;
272     gint width;
273     gint height;
274     gboolean playable;
275     gboolean resumable;
276     gfloat position;
277     gboolean valid;
278 } MetaData;
279 
280 typedef struct _ButtonDef {
281     gchar *uri;
282     gchar *hrefid;
283 } ButtonDef;
284 
285 #define METER_BARS 		40
286 extern gint buckets[METER_BARS];
287 extern gint max_buckets[METER_BARS];
288 extern gchar **accel_keys;
289 extern gchar **accel_keys_description;
290 
291 //Define MIME for DnD
292 #define DRAG_NAME_0		"text/plain"
293 #define DRAG_INFO_0		0
294 #define DRAG_NAME_1		"text/uri-list"
295 #define DRAG_INFO_1		1
296 #define DRAG_NAME_2		"STRING"
297 #define DRAG_INFO_2		2
298 
299 extern gint cache_size;
300 extern gint plugin_audio_cache_size;
301 extern gint plugin_video_cache_size;
302 extern gboolean forcecache;
303 extern gint osdlevel;
304 extern gint pplevel;
305 extern gint streaming;
306 extern gboolean showcontrols;
307 extern gboolean showsubtitles;
308 extern gint fullscreen;
309 extern gint init_fullscreen;
310 extern gboolean videopresent;
311 extern gboolean playlist;
312 extern gint embed_window;
313 extern gint window_x;
314 extern gint window_y;
315 extern gint control_id;
316 extern gboolean softvol;
317 extern gboolean remember_softvol;
318 extern gdouble volume_softvol;
319 extern gint volume_gain;
320 extern gint pref_volume;
321 extern gint verbose;
322 extern gint autostart;
323 //gint actual_x, actual_y;
324 //gint play_x, play_y;
325 extern gint last_window_width, last_window_height;
326 //gchar vm[10];
327 extern gchar *vo;
328 extern gchar *option_vo;
329 extern gboolean use_hardware_codecs;
330 extern gboolean use_crystalhd_codecs;
331 extern AudioDevice audio_device;
332 extern gchar *audio_device_name;
333 extern gint audio_channels;
334 extern gboolean use_hw_audio;
335 extern gboolean disable_deinterlace;
336 extern gboolean disable_framedrop;
337 extern gboolean disable_context_menu;
338 extern gboolean disable_fullscreen;
339 extern gboolean disable_pause_on_click;
340 extern gboolean enable_global_menu;
341 extern gboolean enable_nautilus_plugin;
342 extern gint loop;
343 extern gint start_second;
344 extern gint play_length;
345 extern gint random_order;
346 extern gboolean dontplaynext;
347 extern gboolean autopause;
348 extern gchar *path;
349 extern gint js_state;
350 extern gchar *rpconsole;
351 extern gchar *rpcontrols;
352 extern gboolean control_instance;
353 extern gchar *playlistname;
354 extern gboolean ok_to_play;
355 extern gchar *subtitle;
356 extern gchar *alang;
357 extern gchar *slang;
358 extern gchar *metadata_codepage;
359 extern gboolean use_mplayer2;
360 extern gboolean vertical_layout;
361 extern gboolean playlist_visible;
362 extern gboolean details_visible;
363 extern gboolean restore_controls;
364 extern gboolean update_control_flag;
365 //gint restore_pane;
366 extern gboolean disable_ass;
367 extern gboolean disable_embeddedfonts;
368 extern gboolean disable_animation;
369 extern gint auto_hide_timeout;
370 extern gboolean always_hide_after_timeout;
371 extern gboolean mouse_over_controls;
372 extern gchar *subtitlefont;
373 extern gdouble subtitle_scale;
374 extern gchar *subtitle_codepage;
375 extern gchar *subtitle_color;
376 extern gboolean subtitle_outline;
377 extern gboolean subtitle_shadow;
378 extern gint subtitle_margin;
379 extern gint subtitle_fuzziness;
380 extern gboolean quit_on_complete;
381 extern gchar *mplayer_bin;
382 extern gchar *mplayer_dvd_device;
383 extern gchar *option_dvd_device;
384 extern gchar *extraopts;
385 extern gboolean resize_on_new_media;
386 extern gboolean single_instance;
387 extern gboolean replace_and_play;
388 extern gboolean bring_to_front;
389 extern gboolean show_notification;
390 extern gboolean show_status_icon;
391 extern gchar *gpod_mount_point;
392 extern gboolean disable_cover_art_fetch;
393 //gboolean updating_recent;
394 extern gboolean large_buttons;
395 extern GtkIconSize button_size;
396 extern gboolean skip_fixed_allocation_on_show;
397 extern gboolean skip_fixed_allocation_on_hide;
398 extern gboolean mouse_wheel_changes_volume;
399 extern ResumeMode resume_mode;
400 
401 extern gboolean remember_loc;
402 extern gboolean use_remember_loc;
403 extern gboolean save_loc;
404 extern gint loc_window_x;
405 extern gint loc_window_y;
406 extern gint loc_window_height;
407 extern gint loc_window_width;
408 extern gint loc_panel_position;
409 extern gboolean keep_on_top;
410 
411 extern gboolean cancel_folder_load;
412 
413 extern GThreadPool *retrieve_metadata_pool;
414 extern GMutex *retrieve_mutex;
415 extern GMutex *set_mutex;
416 
417 extern gboolean use_mediakeys;
418 extern gboolean use_defaultpl;
419 
420 extern gboolean qt_disabled;
421 extern gboolean real_disabled;
422 extern gboolean wmp_disabled;
423 extern gboolean dvx_disabled;
424 extern gboolean midi_disabled;
425 extern gboolean embedding_disabled;
426 extern gboolean disable_embedded_scaling;
427 
428 extern GArray *data;
429 extern GArray *max_data;
430 extern gboolean reading_af_export;
431 
432 //gboolean sub_source_file;
433 
434 // layout variables
435 extern gint non_fs_width;
436 extern gint non_fs_height;
437 
438 // playlist stuff
439 extern GtkListStore *playliststore;
440 extern GtkTreeIter iter;
441 extern GtkTreeIter *next_iter;
442 extern GtkTreeSelection *selection;
443 extern GtkWidget *list;
444 
445 // preference store
446 extern GmPrefStore *gm_store;
447 extern GmPrefStore *gmp_store;
448 
449 // cover
450 extern gchar *cover_art_uri;
451 
452 GtkWidget *create_window(gint windowid);
453 void show_window(gint windowid);
454 void present_main_window();
455 gint get_player_window();
456 void adjust_layout();
457 gboolean hide_buttons(void *data);
458 gboolean show_copyurl(void *data);
459 
460 gboolean set_gui_state(void *data);
461 gboolean set_title_bar(void *data);
462 gboolean set_media_label(void *data);
463 gboolean set_cover_art(gpointer pixbuf);
464 gboolean set_progress_value(void *data);
465 gboolean set_progress_text(void *data);
466 gboolean set_progress_time(void *data);
467 gboolean set_volume_from_slider(gpointer data);
468 gboolean set_volume_tip(void *data);
469 gboolean resize_window(void *data);
470 gboolean set_play(void *data);
471 gboolean set_pause(void *data);
472 gboolean set_stop(void *data);
473 gboolean set_ff(void *data);
474 gboolean set_rew(void *data);
475 gboolean set_prev(void *data);
476 gboolean set_next(void *data);
477 gboolean set_quit(void *data);
478 gboolean set_kill_mplayer(void *data);
479 gboolean set_position(void *data);
480 gboolean hookup_volume(void *data);
481 gboolean set_volume(void *data);
482 gboolean set_fullscreen(void *data);
483 gboolean set_show_controls(void *data);
484 gboolean get_show_controls();
485 gboolean set_window_visible(void *data);
486 gboolean set_update_gui(void *data);
487 gboolean set_subtitle_visibility(void *data);
488 gboolean set_item_add_info(void *data);
489 gboolean set_metadata(gpointer data);
490 gboolean set_pane_position(void *data);
491 gboolean set_raise_window(void *data);
492 
493 void remove_langs(GtkWidget * item, gpointer data);
494 gboolean set_new_lang_menu(gpointer data);
495 gboolean set_new_audio_menu(gpointer data);
496 gboolean make_panel_and_mouse_invisible(gpointer data);
497 gboolean idle_make_button(gpointer data);
498 gboolean set_show_seek_buttons(gpointer data);
499 void make_button(gchar * src, gchar * href);
500 void dbus_open_by_hrefid(gchar * hrefid);
501 void dbus_open_next();
502 void dbus_cancel();
503 void dbus_reload_plugins();
504 void dbus_send_rpsignal(gchar * signal);
505 void dbus_send_rpsignal_with_int(gchar * signal, int value);
506 void dbus_send_rpsignal_with_double(gchar * signal, gdouble value);
507 void dbus_send_rpsignal_with_string(gchar * signal, gchar * value);
508 void dbus_send_event(gchar * event, gint button);
509 void dbus_unhook();
510 void dbus_enable_screensaver();
511 void dbus_disable_screensaver();
512 void menuitem_edit_random_callback(GtkMenuItem * menuitem, void *data);
513 
514 void mpris_send_signal_PlaybackStatus();
515 void mpris_send_signal_Updated_Metadata();
516 void mpris_send_signal_Seeked();
517 void mpris_send_signal_VolumeChanged();
518 void mpris_send_signal_RateChanged();
519 
520 gboolean update_audio_meter(gpointer data);
521 
522 void set_media_player_attributes(GtkWidget * widget);
523 
524 void retrieve_metadata(gpointer data, gpointer user_data);
525 
526 extern gchar *default_playlist;
527 extern gboolean safe_to_save_default_playlist;
528 
529 gboolean async_play_iter(void *data);
530 
531 #ifdef GTK2_12_ENABLED
532 extern GtkRecentManager *recent_manager;
533 void recent_manager_changed_callback(GtkRecentManager * recent_manager, gpointer data);
534 #endif
535 
536 #ifdef LIBGDA_ENABLED
537 extern GdaConnection *db_connection;
538 #endif
539 
540 #endif                          /* _COMMON_H */
541