+ reset();
+
+ if( p_root ) emit rootChanged();
+}
+
+void PLModel::takeItem( PLItem *item )
+{
+ assert( item );
+ PLItem *parent = item->parentItem;
+ assert( parent );
+ int i_index = parent->children.indexOf( item );
+
+ beginRemoveRows( index( parent, 0 ), i_index, i_index );
+ parent->takeChildAt( i_index );
+ endRemoveRows();
+}
+
+void PLModel::insertChildren( PLItem *node, QList<PLItem*>& items, int i_pos )
+{
+ assert( node );
+ int count = items.size();
+ if( !count ) return;
+ beginInsertRows( index( node, 0 ), i_pos, i_pos + count - 1 );
+ for( int i = 0; i < count; i++ )
+ {
+ node->children.insert( i_pos + i, items[i] );
+ items[i]->parentItem = node;
+ }
+ endInsertRows();
+}
+
+void PLModel::removeItem( PLItem *item )
+{
+ if( !item ) return;
+
+ i_cached_id = -1;
+ i_cached_input_id = -1;
+
+ if( item->parentItem ) {
+ int i = item->parentItem->children.indexOf( item );
+ beginRemoveRows( index( item->parentItem, 0), i, i );
+ item->parentItem->children.removeAt(i);
+ delete item;
+ endRemoveRows();
+ }
+ else delete item;
+
+ if(item == rootItem)
+ {
+ rootItem = NULL;
+ rebuild( p_playlist->p_playing );
+ }