bool PLSelector::dropMimeData ( QTreeWidgetItem * parent, int index, const QMimeData * data, Qt::DropAction action ) { if( !parent ) return false; QVariant type = parent->data( 0, TYPE_ROLE ); if( type == QVariant() ) return false; int i_type = type.toInt(); if( i_type != PL_TYPE && i_type != ML_TYPE ) return false; bool to_pl = i_type == PL_TYPE; if( data->hasFormat( "vlc/qt-playlist-item" ) ) { QByteArray encodedData = data->data( "vlc/qt-playlist-item" ); QDataStream stream( &encodedData, QIODevice::ReadOnly ); playlist_Lock( THEPL ); while( !stream.atEnd() ) { PLItem *item; stream.readRawData( (char*)&item, sizeof(PLItem*) ); input_item_t *pl_input =item->inputItem(); playlist_AddExt ( THEPL, pl_input->psz_uri, pl_input->psz_name, PLAYLIST_APPEND | PLAYLIST_SPREPARSE, PLAYLIST_END, pl_input->i_duration, pl_input->i_options, pl_input->ppsz_options, pl_input->optflagc, to_pl, true ); } playlist_Unlock( THEPL ); } return true; }
QMimeData *PLModel::mimeData( const QModelIndexList &indexes ) const { PlMimeData *plMimeData = new PlMimeData(); QModelIndexList list; foreach( const QModelIndex &index, indexes ) { if( index.isValid() && index.column() == 0 ) list.append(index); } qSort(list.begin(), list.end(), modelIndexLessThen); PLItem *item = NULL; foreach( const QModelIndex &index, list ) { if( item ) { PLItem *testee = getItem( index ); while( testee->parent() ) { if( testee->parent() == item || testee->parent() == item->parent() ) break; testee = testee->parent(); } if( testee->parent() == item ) continue; item = getItem( index ); } else item = getItem( index ); plMimeData->appendItem( item->inputItem() ); } return plMimeData; }
void LocationBar::setIndex( const QModelIndex &index ) { qDeleteAll( buttons ); buttons.clear(); qDeleteAll( actions ); actions.clear(); QModelIndex i = index; bool first = true; while( true ) { PLItem *item = model->getItem( i ); QString text; char *fb_name = input_item_GetTitle( item->inputItem() ); if( EMPTY_STR( fb_name ) ) { free( fb_name ); fb_name = input_item_GetName( item->inputItem() ); } text = qfu(fb_name); free(fb_name); QAbstractButton *btn = new LocationButton( text, first, !first, this ); btn->setSizePolicy( QSizePolicy::Maximum, QSizePolicy::Fixed ); buttons.append( btn ); QAction *action = new QAction( text, this ); actions.append( action ); CONNECT( btn, clicked(), action, trigger() ); mapper->setMapping( action, item->id() ); CONNECT( action, triggered(), mapper, map() ); first = false; if( i.isValid() ) i = i.parent(); else break; } QString prefix; for( int a = actions.count() - 1; a >= 0 ; a-- ) { actions[a]->setText( prefix + actions[a]->text() ); prefix += QString(" "); } if( isVisible() ) layOut( size() ); }