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