void Playtree::onUpdateItem( int id ) { Iterator it = findById( id ); if( it != m_children.end() ) { // Update the item playlist_Lock( m_pPlaylist ); playlist_item_t *pNode = playlist_ItemGetById( m_pPlaylist, it->getId() ); if( !pNode ) { playlist_Unlock( m_pPlaylist ); return; } UString *pName = new UString( getIntf(), pNode->p_input->psz_name ); playlist_Unlock( m_pPlaylist ); if( *pName != *(it->getString()) ) { it->setString( UStringPtr( pName ) ); tree_update descr( tree_update::ItemUpdated, IteratorVisible( it, this ) ); notify( &descr ); } } else { msg_Warn( getIntf(), "cannot find node with id %d", id ); } }
void Playtree::onAppend( playlist_add_t *p_add ) { Iterator it_node = findById( p_add->i_node ); if( it_node != m_children.end() ) { playlist_Lock( m_pPlaylist ); playlist_item_t *pItem = playlist_ItemGetById( m_pPlaylist, p_add->i_item ); if( !pItem ) { playlist_Unlock( m_pPlaylist ); return; } int pos; for( pos = 0; pos < pItem->p_parent->i_children; pos++ ) if( pItem->p_parent->pp_children[pos] == pItem ) break; UString *pName = getTitle( pItem->p_input ); playlist_item_t* current = playlist_CurrentPlayingItem( m_pPlaylist ); Iterator it = it_node->add( p_add->i_item, UStringPtr( pName ), false, pItem == current, false, pItem->i_flags & PLAYLIST_RO_FLAG, pos ); m_allItems[pItem->i_id] = &*it; playlist_Unlock( m_pPlaylist ); tree_update descr( tree_update::ItemInserted, IteratorVisible( it, this ) ); notify( &descr ); } }
VarTree::IteratorVisible VarTree::getItem( int index ) { Iterator it = m_flat ? getLeaf( index + 1 ) : getVisibleItem( index + 1 ); return IteratorVisible( it, this ); }
IteratorVisible getParent() { IteratorVisible& it = *this; if( it->parent() && it->parent() != m_pRootTree ) { return IteratorVisible( it->parent()->getSelf(), m_pRootTree ); } return end(); }
void Playtree::onUpdateCurrent( bool b_active ) { if( b_active ) { playlist_Lock( m_pPlaylist ); playlist_item_t* current = playlist_CurrentPlayingItem( m_pPlaylist ); if( !current ) { playlist_Unlock( m_pPlaylist ); return; } Iterator it = findById( current->i_id ); if( it != m_children.end() ) { it->setPlaying( true ); tree_update descr( tree_update::ItemUpdated, IteratorVisible( it, this ) ); notify( &descr ); } playlist_Unlock( m_pPlaylist ); } else { for( Iterator it = m_children.begin(); it != m_children.end(); it = getNextItem( it ) ) { if( it->isPlaying() ) { it->setPlaying( false ); tree_update descr( tree_update::ItemUpdated, IteratorVisible( it, this ) ); notify( &descr ); break; } } } }
void Playtree::onDelete( int i_id ) { Iterator it = findById( i_id ) ; if( it != m_children.end() ) { VarTree* parent = it->parent(); if( parent ) { tree_update descr( tree_update::DeletingItem, IteratorVisible( it, this ) ); notify( &descr ); parent->removeChild( it ); m_allItems.erase( i_id ); tree_update descr2( tree_update::ItemDeleted, end() ); notify( &descr2 ); } } }
/// End of children's list IteratorVisible end() { return IteratorVisible( m_children.end(), this ); }
/// Beginning of the children's list IteratorVisible begin() { return IteratorVisible( m_flat ? firstLeaf() : m_children.begin(), this ); }