i_id = _playlist_item->i_id; /* Playlist item specific id */
model = m; /* PLModel (QAbsmodel) */
i_type = -1; /* Item type - Avoid segfault */
- b_current = false; /* Is the item the current Item or not */
b_is_node = _playlist_item->i_children > -1;
p_input = _playlist_item->p_input;
vlc_gc_incref( p_input );
}
/* update the PL Item, get the good names and so on */
-void PLItem::update( playlist_item_t *p_item, bool iscurrent )
+void PLItem::update( playlist_item_t *p_item )
{
assert( p_item->p_input == p_input);
/* Useful for the model */
i_type = p_item->p_input->i_type;
- b_current = iscurrent;
b_is_node = p_item->i_children > -1;
i_showflags = parentItem ? parentItem->i_showflags : i_showflags;
i_cached_id = -1;
i_cached_input_id = -1;
i_popup_item = i_popup_parent = -1;
+ currentItem = NULL;
rootItem = NULL; /* PLItem rootItem, will be set in rebuild( ) */
this, ProcessInputItemUpdate( input_item_t *) );
CONNECT( THEMIM, inputChanged( input_thread_t * ),
this, ProcessInputItemUpdate( input_thread_t* ) );
+ PL_LOCK;
+ playlist_item_t *p_item;
+ /* Check if there's allready some item playing when playlist
+ * model is created, if so, tell model that it's currentone
+ */
+ if( (p_item = playlist_CurrentPlayingItem(p_playlist)) )
+ {
+ currentItem = FindByInput( rootItem,
+ p_item->p_input->i_id );
+ emit currentChanged( index( currentItem, 0 ) );
+ }
+ PL_UNLOCK;
}
PLModel::~PLModel()
}
else if( role == Qt::FontRole )
{
- if( item->b_current == true )
+ if( isCurrent( index ) )
{
QFont f; f.setBold( true ); return QVariant( f );
}
return QVariant();
}
-bool PLModel::isCurrent( const QModelIndex &index )
+bool PLModel::isCurrent( const QModelIndex &index ) const
{
assert( index.isValid() );
- return static_cast<PLItem*>(index.internalPointer())->b_current;
+ if( !currentItem ) return false;
+ return static_cast<PLItem*>(index.internalPointer())->p_input == currentItem->p_input;
}
int PLModel::itemId( const QModelIndex &index ) const
if( p_input && !( p_input->b_dead || !vlc_object_alive( p_input ) ) )
{
PLItem *item = FindByInput( rootItem, input_GetItem( p_input )->i_id );
+ currentItem = item;
emit currentChanged( index( item, 0 ) );
}
}
UpdateNodeChildren( rootItem );
if( (p_item = playlist_CurrentPlayingItem(p_playlist)) )
{
- PLItem *currentItem = FindByInput( rootItem,
+ currentItem = FindByInput( rootItem,
p_item->p_input->i_id );
if( currentItem )
{
if( !force && i_depth == DEPTH_SEL && p_item->p_parent &&
p_item->p_parent->i_id != rootItem->i_id )
return;
- item->update( p_item, p_item == playlist_CurrentPlayingItem( p_playlist ) );
+ item->update( p_item );
if( signal )
- emit dataChanged( index( item, 0 ) , index( item, 1 ) );
+ emit dataChanged( index( item, 0 ) , index( item, columnCount( QModelIndex() ) ) );
}
/************************* Actions ******************************/
QModelIndex index( int r, int c, const QModelIndex &parent ) const;
QModelIndex index( PLItem *, int c ) const;
int itemId( const QModelIndex &index ) const;
- bool isCurrent( const QModelIndex &index );
+ bool isCurrent( const QModelIndex &index ) const;
QModelIndex parent( const QModelIndex &index ) const;
int childrenCount( const QModelIndex &parent = QModelIndex() ) const;
int rowCount( const QModelIndex &parent = QModelIndex() ) const;
void customEvent( QEvent * );
PLItem *rootItem;
+ PLItem *currentItem;
playlist_t *p_playlist;
intf_thread_t *p_intf;