* Copyright (C) 2000-2005 the VideoLAN team
* $Id$
*
- * Authors: Olivier Teulière <ipkiss@via.ecp.fr>
- * Clément Stenac <zorglub@videolan.org>
+ * Authors: Olivier Teulière <ipkiss@via.ecp.fr>
+ * Clément Stenac <zorglub@videolan.org>
* Gildas Bazin <gbazin@videolan.org>
*
* This program is free software; you can redistribute it and/OR MODIFy
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA.
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
*****************************************************************************/
/*****************************************************************************
#include <wx/dynarray.h>
#include <wx/imaglist.h>
+#include "vlc_meta.h"
namespace wxvlc {
/* Callback prototype */
class PlaylistItem : public wxTreeItemData
{
public:
- PlaylistItem( playlist_item_t *p_item ) : i_id(p_item->input.i_id) {}
+ PlaylistItem( playlist_item_t *p_item ) : wxTreeItemData()
+ {
+ i_id = p_item->i_id;
+ i_input_id = p_item->p_input->i_id;
+ }
+protected:
+ int i_input_id;
int i_id;
+friend class PlaylistManager;
};
/*****************************************************************************
{
/* Initializations */
p_intf = _p_intf;
- b_need_update = VLC_FALSE;
+ b_need_update = false;
i_items_to_append = 0;
i_cached_item_id = -1;
i_update_counter = 0;
- p_playlist = (playlist_t *)
- vlc_object_find( p_intf, VLC_OBJECT_PLAYLIST, FIND_ANYWHERE );
+ p_playlist = pl_Yield( p_intf );
if( p_playlist == NULL ) return;
var_Create( p_intf, "random", VLC_VAR_BOOL | VLC_VAR_DOINHERIT );
sizer = new wxBoxSizer( wxHORIZONTAL );
SetSizer( sizer );
sizer->Add( treectrl, 1, wxEXPAND );
- treectrl->SetSizeHints( 500, 150 );
sizer->Layout();
sizer->Fit( this );
#if wxUSE_DRAG_AND_DROP
/* Associate drop targets with the playlist */
- SetDropTarget( new DragAndDrop( p_intf, VLC_TRUE ) );
+ SetDropTarget( new DragAndDrop( p_intf, true ) );
#endif
/* Update the playlist */
- Rebuild( VLC_TRUE );
+ Rebuild( true );
/*
* We want to be notified of playlist changes
vlc_value_t oval, vlc_value_t nval, void *param )
{
PlaylistManager *p_playlist = (PlaylistManager *)param;
- p_playlist->b_need_update = VLC_TRUE;
+ p_playlist->b_need_update = true;
return VLC_SUCCESS;
}
void PlaylistManager::CreateNode( playlist_item_t *p_node, wxTreeItemId parent)
{
wxTreeItemId node =
- treectrl->AppendItem( parent, wxL2U( p_node->input.psz_name ), -1, -1,
+ treectrl->AppendItem( parent, wxL2U( p_node->p_input->psz_name ), -1, -1,
new PlaylistItem( p_node ) );
- treectrl->SetItemImage( node, p_node->input.i_type );
+ treectrl->SetItemImage( node, p_node->p_input->i_type );
UpdateNodeChildren( p_node, node );
}
}
}
- treectrl->SetItemImage( node, p_node->input.i_type );
+ treectrl->SetItemImage( node, p_node->p_input->i_type );
}
{
wxTreeItemId item =
treectrl->AppendItem( node,
- wxL2U( p_node->pp_children[i]->input.psz_name ), -1,-1,
+ wxL2U( p_node->pp_children[i]->p_input->psz_name ), -1,-1,
new PlaylistItem( p_node->pp_children[i]) );
UpdateTreeItem( item );
LockPlaylist( p_intf->p_sys, p_playlist );
playlist_item_t *p_item =
- playlist_ItemGetById( p_playlist, ((PlaylistItem *)p_data)->i_id );
+ playlist_ItemGetById( p_playlist, ((PlaylistItem *)p_data)->i_id,
+ true );
if( !p_item )
{
UnlockPlaylist( p_intf->p_sys, p_playlist );
wxString msg;
wxString duration = wxU( "" );
- char *psz_author =
- vlc_input_item_GetInfo( &p_item->input,
- _("Meta-information"), _("Artist"));
- if( !psz_author )
- {
- UnlockPlaylist( p_intf->p_sys, p_playlist );
- return;
- }
+
+ char *psz_artist = input_item_GetArtist( p_item->p_input );
+ if( !psz_artist )
+ psz_artist = strdup( "" );
+
+ char *psz_name = input_item_GetName( p_item->p_input );
+ if( !psz_name )
+ psz_name = strdup( "" );
char psz_duration[MSTRTIME_MAX_SIZE];
- mtime_t dur = p_item->input.i_duration;
+ mtime_t dur = input_item_GetDuration( p_item->p_input );
if( dur != -1 )
{
wxU( " )" ) );
}
- if( !strcmp( psz_author, "" ) || p_item->input.b_fixed_name == VLC_TRUE )
+ if( !strcmp( psz_artist, "" ) || p_item->p_input->b_fixed_name == true )
{
- msg = wxString( wxU( p_item->input.psz_name ) ) + duration;
+ msg = wxString( wxU( psz_name ) ) + duration;
}
else
{
- msg = wxString(wxU( psz_author )) + wxT(" - ") +
- wxString(wxU(p_item->input.psz_name)) + duration;
+ msg = wxString(wxU( psz_artist )) + wxT(" - ") +
+ wxString(wxU(psz_name)) + duration;
}
- free( psz_author );
+ free( psz_artist );
+ free( psz_name );
treectrl->SetItemText( item , msg );
- treectrl->SetItemImage( item, p_item->input.i_type );
+ treectrl->SetItemImage( item, p_item->p_input->i_type );
if( p_playlist->status.p_item == p_item )
{
node = FindItem( treectrl->GetRootItem(), p_add->i_node );
if( !node.IsOk() ) goto update;
- p_item = playlist_ItemGetById( p_playlist, p_add->i_item );
+ p_item = playlist_ItemGetById( p_playlist, p_add->i_item, false );
if( !p_item ) goto update;
item = FindItem( treectrl->GetRootItem(), p_add->i_item );
if( item.IsOk() ) goto update;
- item = treectrl->AppendItem( node, wxL2U( p_item->input.psz_name ), -1,-1,
+ item = treectrl->AppendItem( node, wxL2U( p_item->p_input->psz_name ), -1,-1,
new PlaylistItem( p_item ) );
- treectrl->SetItemImage( item, p_item->input.i_type );
+ treectrl->SetItemImage( item, p_item->p_input->i_type );
if( item.IsOk() && p_item->i_children == -1 ) UpdateTreeItem( item );
if( this->b_need_update )
{
- this->b_need_update = VLC_FALSE;
- Rebuild( VLC_TRUE );
+ this->b_need_update = false;
+ Rebuild( true );
}
/* Updating the playing status every 0.5s is enough */
/**********************************************************************
* Rebuild the playlist
**********************************************************************/
-void PlaylistManager::Rebuild( vlc_bool_t b_root )
+void PlaylistManager::Rebuild( bool b_root )
{
- playlist_view_t *p_view;
-
i_items_to_append = 0;
i_cached_item_id = -1;
- p_view = playlist_ViewFind( p_playlist, VIEW_CATEGORY );
-
treectrl->DeleteAllItems();
treectrl->AddRoot( wxU(_("root" )), -1, -1,
- new PlaylistItem( p_view->p_root ) );
+ new PlaylistItem( p_playlist->p_root_category ) );
wxTreeItemId root = treectrl->GetRootItem();
- UpdateNode( p_view->p_root, root );
+ UpdateNode( p_playlist->p_root_category, root );
}
/**********************************************************************
if( !p_wxparent ) return;
LockPlaylist( p_intf->p_sys, p_playlist );
- p_item = playlist_ItemGetById( p_playlist, p_wxitem->i_id );
- p_node = playlist_ItemGetById( p_playlist, p_wxparent->i_id );
+ p_item = playlist_ItemGetById( p_playlist, p_wxitem->i_id, true );
+ p_node = playlist_ItemGetById( p_playlist, p_wxparent->i_id, true );
if( !p_item || p_item->i_children >= 0 )
{
p_node = p_item;
p_item = NULL;
}
-
- playlist_Control( p_playlist, PLAYLIST_VIEWPLAY, VIEW_CATEGORY,
- p_node, p_item );
+ playlist_Control( p_playlist, PLAYLIST_VIEWPLAY, true, p_node, p_item );
UnlockPlaylist( p_intf->p_sys, p_playlist );
}
playlist_add_t *p_add = (playlist_add_t *)malloc(sizeof( playlist_add_t));
memcpy( p_add, nval.p_address, sizeof( playlist_add_t ) );
- if( p_playlist->i_items_to_append++ > 50 )
+ if( ++p_playlist->i_items_to_append >= 50 )
{
/* Too many items waiting to be added, it will be quicker to rebuild
* the whole playlist */
- p_playlist->b_need_update = VLC_TRUE;
+ p_playlist->b_need_update = true;
return VLC_SUCCESS;
}