⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mediabrowser.cpp

📁 Amarok是一款在LINUX或其他类UNIX操作系统中运行的音频播放器软件。 经过两年开发后
💻 CPP
📖 第 1 页 / 共 5 页
字号:
                if( ( it->isLeafItem() && (!(flags & OnlyPlayed) || it->played()>0) )                        || it->type() == MediaItem::DIRECTORY )                    list->append( it );            }        }    }    return numFiles;}boolMediaView::acceptDrag( QDropEvent *e ) const{    if( e->source() == MediaBrowser::queue()->viewport() )        return false;    QString data;    QCString subtype;    QTextDrag::decode( e, data, subtype );    return e->source() == viewport()        || subtype == "amarok-sql"        || KURLDrag::canDecode( e );}voidMediaView::contentsDropEvent( QDropEvent *e ){    cleanDropVisualizer();    cleanItemHighlighter();    if(e->source() == viewport())    {        const QPoint p = contentsToViewport( e->pos() );        MediaItem *item = dynamic_cast<MediaItem *>(itemAt( p ));        if( !item && MediaBrowser::instance()->currentDevice()->m_type != "generic-mediadevice" )            return;        QPtrList<MediaItem> items;        if( !item || item->type() == MediaItem::DIRECTORY ||                    item->type() == MediaItem::TRACK )        {            QPtrList<MediaItem> items;            getSelectedLeaves( 0, &items );            m_device->addToDirectory( item, items );        }        else if( item->type() == MediaItem::PLAYLIST )        {            MediaItem *list = item;            MediaItem *after = 0;            for(MediaItem *it = dynamic_cast<MediaItem *>(item->firstChild());                    it;                    it = dynamic_cast<MediaItem *>(it->nextSibling()))                after = it;            getSelectedLeaves( 0, &items );            m_device->addToPlaylist( list, after, items );        }        else if( item->type() == MediaItem::PLAYLISTITEM )        {            MediaItem *list = dynamic_cast<MediaItem *>(item->parent());            MediaItem *after = 0;            for(MediaItem *it = dynamic_cast<MediaItem*>(item->parent()->firstChild());                    it;                    it = dynamic_cast<MediaItem *>(it->nextSibling()))            {                if(it == item)                    break;                after = it;            }            getSelectedLeaves( 0, &items );            m_device->addToPlaylist( list, after, items );        }        else if( item->type() == MediaItem::PLAYLISTSROOT )        {            QPtrList<MediaItem> items;            getSelectedLeaves( 0, &items );            QString base( i18n("New Playlist") );            QString name = base;            int i=1;            while( item->findItem(name) )            {                QString num;                num.setNum(i);                name = base + ' ' + num;                i++;            }            MediaItem *pl = m_device->newPlaylist(name, item, items);            ensureItemVisible(pl);            rename(pl, 0);        }    }    else    {        QString data;        QCString subtype;        QTextDrag::decode( e, data, subtype );        KURL::List list;        if( subtype == "amarok-sql" )        {            QString playlist = data.section( "\n", 0, 0 );            QString query = data.section( "\n", 1 );            QStringList values = CollectionDB::instance()->query( query );            list = CollectionDB::instance()->URLsFromSqlDrag( values );            MediaBrowser::queue()->addURLs( list, playlist );        }        else if ( KURLDrag::decode( e, list ) )        {            MediaBrowser::queue()->addURLs( list );        }    }}voidMediaView::viewportPaintEvent( QPaintEvent *e ){    KListView::viewportPaintEvent( e );    // Superimpose bubble help:    if ( !MediaBrowser::instance()->currentDevice() || !MediaBrowser::instance()->currentDevice()->isConnected() )    {        QPainter p( viewport() );        QSimpleRichText t( i18n(                "<div align=center>"                  "<h3>Media Device Browser</h3>"                  "Configure your media device and then "                  "click the Connect button to access your media device. "                  "Drag and drop files to enqueue them for transfer."                "</div>" ), QApplication::font() );        t.setWidth( width() - 50 );        const uint w = t.width() + 20;        const uint h = t.height() + 20;        p.setBrush( colorGroup().background() );        p.drawRoundRect( 15, 15, w, h, (8*200)/w, (8*200)/h );        t.draw( &p, 20, 20, QRect(), colorGroup() );    }    MediaBrowser::instance()->updateButtons();}voidMediaView::rmbPressed( QListViewItem *item, const QPoint &p, int i ){    if( m_device->isConnected() )        m_device->rmbPressed( item, p, i );}MediaItem *MediaView::newDirectory( MediaItem *parent ){    bool ok;    const QString name = KInputDialog::getText(i18n("Add Directory"), i18n("Directory Name:"), QString::null, &ok, this);    if( ok && !name.isEmpty() )    {        m_device->newDirectory( name, parent );    }    return 0;}voidMediaBrowser::mediumAdded( const Medium *medium, QString /*name*/, bool /*constructing*/ ){    debug() << "mediumAdded: " << (medium? medium->properties():"null") << endl;    if( medium )    {        QString handler = Amarok::config( "MediaBrowser" )->readEntry( medium->id() );        if( handler.isEmpty() )        {            //Some people complained about the dialog, boohoo            //Just disable it for now I guess            /*if( !constructing && medium->isAutodetected() )            {                MediumPluginManagerDialog *mpm = new MediumPluginManagerDialog();                mpm->exec();            }*/        }        //debug() << "id=" << medium->id() << ", handler=" << handler << endl;        MediaDevice *device = loadDevicePlugin( handler );        if( device )        {            device->m_medium = *medium;            addDevice( device );            if( m_currentDevice == m_devices.begin() || m_currentDevice == m_devices.end() )                activateDevice( m_devices.count()-1, false );        }    }}voidMediaBrowser::pluginSelected( const Medium *medium, const QString plugin ){    DEBUG_BLOCK    if( !plugin.isEmpty() )    {        debug() << "Medium id is " << medium->id() << " and plugin selected is: " << plugin << endl;        Amarok::config( "MediaBrowser" )->writeEntry( medium->id(), plugin );        bool success = true;        for( QValueList<MediaDevice *>::iterator it = m_devices.begin();                it != m_devices.end();                it++ )        {            if( (*it)->uniqueId() == medium->id() )            {                debug() << "removing " << medium->deviceNode() << endl;                if( (*it)->isConnected() )                {                    if( (*it)->disconnectDevice( false ) )                        removeDevice( *it );                    else                        success = false;                }                else                    removeDevice( *it );                break;            }        }        if( success )        {            mediumAdded( medium, "doesntmatter", false );        }        else        {            debug() << "Cannot change plugin while operation is in progress" << endl;            Amarok::StatusBar::instance()->longMessage(                    i18n( "Cannot change plugin while operation is in progress" ),                    KDE::StatusBar::Warning );        }    }    else        debug() << "Medium id is " << medium->id() << " and you opted not to use a plugin" << endl;}voidMediaBrowser::showPluginManager(){    MediumPluginManagerDialog* mpm = new MediumPluginManagerDialog();    mpm->exec();    delete mpm;}voidMediaBrowser::mediumChanged( const Medium *medium, QString /*name*/ ){    if( medium )    {        for( QValueList<MediaDevice *>::iterator it = m_devices.begin();                it != m_devices.end();                it++ )        {            if( (*it)->uniqueId() == medium->id() )            {                (*it)->m_medium = const_cast<Medium *>(medium);                if( !(*it)->isConnected() && medium->isMounted() )                    (*it)->connectDevice();#if 0                else if( (*it)->isConnected() && !medium->isMounted() )                {                    Amarok::StatusBar::instance()->longMessage(                            i18n( "The device %1 was unmounted before it was synchronized. "                                "In order to avoid data loss, press the \"Disconnect\" button "                                "before unmounting the device." ).arg( name ),                            KDE::StatusBar::Warning );                    //(*it)->disconnectDevice();                }#endif                break;            }        }    }}voidMediaBrowser::mediumRemoved( const Medium *medium, QString name ){    if( medium )    {        for( QValueList<MediaDevice *>::iterator it = m_devices.begin();                it != m_devices.end();                it++ )        {            if( (*it)->uniqueId() == medium->id() )            {                if( (*it)->isConnected() )                {                    if( (*it)->disconnectDevice() )                        removeDevice( *it );                    Amarok::StatusBar::instance()->longMessage(                            i18n( "The device %1 was removed before it was disconnected. "                                "In order to avoid possible data loss, press the \"Disconnect\" "                                "button before disconnecting the device." ).arg( name ),                            KDE::StatusBar::Warning );                }                else                    removeDevice( *it );                break;            }        }    }}MediaDevice *MediaBrowser::loadDevicePlugin( const QString &deviceType ){    DEBUG_BLOCK    if( deviceType == "ignore" )        return 0;    QString query = "[X-KDE-Amarok-plugintype] == 'mediadevice' and [X-KDE-Amarok-name] == '%1'";    Amarok::Plugin *plugin = PluginManager::createFromQuery( query.arg( deviceType ) );    if( plugin )    {        debug() << "Returning plugin!" << endl;        MediaDevice *device = static_cast<MediaDevice *>( plugin );        device->init( this );        device->m_type = deviceType;        return device;    }    debug() << "no plugin for " << deviceType << endl;    return 0;}voidMediaBrowser::unloadDevicePlugin( MediaDevice *device ){    DEBUG_BLOCK    if( !device )        return;    disconnect( device ); // disconnect all signals    if( dynamic_cast<DummyMediaDevice *>(device) )    {        delete device;    }    else    {        PluginManager::unload( device );    }}boolMediaBrowser::config(){    if( m_deviceCombo->currentText() == "No Device Selected" )    {        showPluginManager();        return true;    }    DeviceConfigureDialog* dcd = new DeviceConfigureDialog( currentDevice()->m_medium );    dcd->exec();    bool successful = dcd->successful();    delete dcd;    return successful;}voidMediaBrowser::configSelectPlugin( int index ){    Q_UNUSED( index );    if( m_currentDevice == m_devices.begin() )    {        AmarokConfig::setDeviceType( m_pluginName[m_configPluginCombo->currentText()] );    }    else if( currentDevice() )    {        KConfig *config = Amarok::config( "MediaBrowser" );        config->writeEntry( currentDevice()->uniqueId(), m_pluginName[m_configPluginCombo->currentText()] );    }    if( !currentDevice() )        activateDevice( 0, false );    if( !currentDevice() )        return;    if( m_pluginName[m_configPluginCombo->currentText()] != currentDevice()->deviceType() )    {        MediaDevice *dev = currentDevice();        dev->removeConfigElements( m_configBox );        if( dev->isConnected() )        {            dev->disconnectDevice( false );        }        unloadDevicePlugin( dev );        *m_currentDevice = loadDevicePlugin( AmarokConfig::deviceType() );        if( !*m_currentDevice )        {            *m_currentDevice = new DummyMediaDevice();            if( AmarokConfig::deviceType() != "dummy-mediadevice" )            {                QString msg = i18n( "The requested media device could not be loaded" );                Amarok::StatusBar::instance()->shortMessage( msg );            }        }        dev = currentDevice();        dev->init( this );        dev->loadConfig();        m_configBox->hide();        dev->addConfigElements( m_configBox );        m_configBox->show();        dev->view()->show();        if( dev->autoConnect() )        {            dev->connectDevice( true );            updateButtons();        }        updateDevices();    }}voidMediaBrowser::updateButtons(){    if( !m_toolbar->getButton(CONNECT) ||            !m_toolbar->getButton(DISCONNECT) ||            !m_toolbar->getButton(TRANSFER) ) //TODO add CUSTOM        return;    if( currentDevice() )    {        if( currentDevice()->m_transfer )            m_toolbar->showItem( TRANSFER );        else            m_toolbar->hideItem( TRANSFER );        if( currentDevice()->m_customButton )            m_toolbar->showItem( CUSTOM );        else            m_toolbar->hideItem( CUSTOM );        if( currentDevice()->m_configure )

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -