+/*****************************************************************************
+ * VlcPlugin playlist replacement methods
+ *****************************************************************************/
+void VlcPlugin::set_player_window()
+{
+#ifdef XP_UNIX
+ libvlc_media_player_set_xwindow(libvlc_media_player,
+ (uint32_t)getVideoWindow());
+#endif
+#ifdef XP_MACOSX
+ // XXX FIXME insert appropriate call here
+#endif
+#ifdef XP_WIN
+ libvlc_media_player_set_hwnd(libvlc_media_player,
+ getWindow().window);
+#endif
+}
+
+int VlcPlugin::playlist_add( const char *mrl )
+{
+ int item = -1;
+ libvlc_media_t *p_m = libvlc_media_new_location(libvlc_instance,mrl);
+ if( !p_m )
+ return -1;
+ assert( libvlc_media_list );
+ libvlc_media_list_lock(libvlc_media_list);
+ if( !libvlc_media_list_add_media(libvlc_media_list,p_m) )
+ item = libvlc_media_list_count(libvlc_media_list)-1;
+ libvlc_media_list_unlock(libvlc_media_list);
+
+ libvlc_media_release(p_m);
+
+ return item;
+}
+
+int VlcPlugin::playlist_add_extended_untrusted( const char *mrl, const char *name,
+ int optc, const char **optv )
+{
+ libvlc_media_t *p_m;
+ int item = -1;
+
+ assert( libvlc_media_list );
+
+ p_m = libvlc_media_new_location(libvlc_instance, mrl);
+ if( !p_m )
+ return -1;
+
+ for( int i = 0; i < optc; ++i )
+ libvlc_media_add_option_flag(p_m, optv[i], libvlc_media_option_unique);
+
+ libvlc_media_list_lock(libvlc_media_list);
+ if( !libvlc_media_list_add_media(libvlc_media_list,p_m) )
+ item = libvlc_media_list_count(libvlc_media_list)-1;
+ libvlc_media_list_unlock(libvlc_media_list);
+ libvlc_media_release(p_m);
+
+ return item;
+}
+
+bool VlcPlugin::playlist_select( int idx )
+{
+ libvlc_media_t *p_m = NULL;
+
+ assert( libvlc_media_list );
+
+ libvlc_media_list_lock(libvlc_media_list);
+
+ int count = libvlc_media_list_count(libvlc_media_list);
+ if( idx<0||idx>=count )
+ goto bad_unlock;
+
+ playlist_index = idx;
+
+ p_m = libvlc_media_list_item_at_index(libvlc_media_list,playlist_index);
+ libvlc_media_list_unlock(libvlc_media_list);
+
+ if( !p_m )
+ return false;
+
+ if( libvlc_media_player )
+ {
+ if( playlist_isplaying() )
+ playlist_stop();
+ events.unhook_manager();
+ libvlc_media_player_release( libvlc_media_player );
+ libvlc_media_player = NULL;
+ }
+
+ libvlc_media_player = libvlc_media_player_new_from_media(p_m);
+ if( libvlc_media_player )
+ {
+ set_player_window();
+ events.hook_manager(
+ libvlc_media_player_event_manager(libvlc_media_player),
+ event_callback, this);
+ }
+
+ libvlc_media_release( p_m );
+ return true;
+
+bad_unlock:
+ libvlc_media_list_unlock(libvlc_media_list);
+ return false;
+}
+
+int VlcPlugin::playlist_delete_item( int idx )
+{
+ if( !libvlc_media_list )
+ return -1;
+ libvlc_media_list_lock(libvlc_media_list);
+ int ret = libvlc_media_list_remove_index(libvlc_media_list,idx);
+ libvlc_media_list_unlock(libvlc_media_list);
+ return ret;
+}
+
+void VlcPlugin::playlist_clear()
+{
+ if( libvlc_media_list )
+ libvlc_media_list_release(libvlc_media_list);
+ libvlc_media_list = libvlc_media_list_new(getVLC());
+}
+
+int VlcPlugin::playlist_count()
+{
+ int items_count = 0;
+ if( !libvlc_media_list )
+ return items_count;
+ libvlc_media_list_lock(libvlc_media_list);
+ items_count = libvlc_media_list_count(libvlc_media_list);
+ libvlc_media_list_unlock(libvlc_media_list);
+ return items_count;
+}
+
+void VlcPlugin::toggle_fullscreen()
+{
+ if( playlist_isplaying() )
+ libvlc_toggle_fullscreen(libvlc_media_player);
+}
+
+void VlcPlugin::set_fullscreen( int yes )
+{
+ if( playlist_isplaying() )
+ libvlc_set_fullscreen(libvlc_media_player,yes);
+}
+
+int VlcPlugin::get_fullscreen()
+{
+ int r = 0;
+ if( playlist_isplaying() )
+ r = libvlc_get_fullscreen(libvlc_media_player);
+ return r;
+}
+
+bool VlcPlugin::player_has_vout()
+{
+ bool r = false;
+ if( playlist_isplaying() )
+ r = libvlc_media_player_has_vout(libvlc_media_player);
+ return r;
+}
+