magnatunebrowser.cpp

来自「Amarok是一款在LINUX或其他类UNIX操作系统中运行的音频播放器软件。 」· C++ 代码 · 共 521 行 · 第 1/2 页

CPP
521
字号
/*Copyright (c) 2006  Nikolaj Hald Nielsen <nhnFreespirit@gmail.com>This library is free software; you can redistribute it and/ormodify it under the terms of the GNU Library General PublicLicense as published by the Free Software Foundation; eitherversion 2 of the License, or (at your option) any later version.This library is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; without even the implied warranty ofMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNULibrary General Public License for more details.You should have received a copy of the GNU Library General Public Licensealong with this library; see the file COPYING.LIB.  If not, write tothe Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,Boston, MA 02110-1301, USA.*/#include "amarok.h"#include "magnatunebrowser.h"#include "playlist.h"#include "magnatunedatabasehandler.h"#include "debug.h"#include <kstandarddirs.h> //locate()#include <kurl.h>#include <kiconloader.h>   //multiTabBar icons#include <qsplitter.h>#include <qdragobject.h>#include <qlabel.h>MagnatuneBrowser *MagnatuneBrowser::s_instance = 0;MagnatuneBrowser::MagnatuneBrowser( const char *name )        : QVBox( 0, name ){    DEBUG_BLOCK    initTopPanel( );    QSplitter *spliter = new QSplitter( Qt::Vertical, this );    debug() << "Magnatune browser starting..." << endl;    m_listView = new MagnatuneListView( spliter );    m_popupMenu = new QPopupMenu( spliter, "MagnatuneMenu" );    m_artistInfobox = new MagnatuneArtistInfoBox( spliter, "ArtistInfoBox" );    initBottomPanel();    //connect (m_listView, SIGNAL(executed(KListViewItem *)), this, SLOT(itemExecuted(KListViewItem *)));    connect( m_listView, SIGNAL( doubleClicked( QListViewItem * ) ),             this, SLOT( itemExecuted( QListViewItem * ) ) );    connect( m_listView, SIGNAL( selectionChanged( QListViewItem * ) ),             this, SLOT( selectionChanged( QListViewItem * ) ) );    connect( m_listView, SIGNAL( rightButtonClicked ( QListViewItem *, const QPoint &, int ) ),             this, SLOT( showPopupMenu( QListViewItem *, const QPoint &, int ) ) );    connect( m_popupMenu, SIGNAL( aboutToShow() ),             this, SLOT( menuAboutToShow() ) );    m_currentInfoUrl = "";    m_purchaseHandler = 0;    m_redownloadHandler = 0;    m_purchaseInProgress = false;    m_polished = false; }void MagnatuneBrowser::itemExecuted( QListViewItem * item ){    DEBUG_BLOCK;    switch ( item->depth() )    {    case 2:        addTrackToPlaylist( dynamic_cast<MagnatuneListViewTrackItem *>( item ) );        break;    case 1:        addAlbumToPlaylist( dynamic_cast<MagnatuneListViewAlbumItem *>( item ) );        break;    case 0:        addArtistToPlaylist( dynamic_cast<MagnatuneListViewArtistItem *>( item ) );        break;    default:        break;    }}void MagnatuneBrowser::addTrackToPlaylist( MagnatuneTrack *item ){    if ( !item ) return ; // sanity check    debug() << "Magnatune browser: adding single track" << endl;    QString url = item->getHifiURL();    Playlist * playlist = Playlist::instance();    playlist->insertMedia( KURL( url ) );}void MagnatuneBrowser::addAlbumToPlaylist( MagnatuneAlbum * item ){    if ( !item ) return ; // sanity check    debug() << "Magnatune browser: adding album" << endl;    MagnatuneTrackList tracks = MagnatuneDatabaseHandler::instance() ->getTracksByAlbumId( item->getId() );    MagnatuneTrackList::iterator it;    for ( it = tracks.begin(); it != tracks.end(); ++it )        addTrackToPlaylist( &( *it ) );}void MagnatuneBrowser::addArtistToPlaylist( MagnatuneArtist *item ){    if ( !item ) return ; // sanity check    debug() << "Magnatune browser: adding artist" << endl;    MagnatuneAlbumList albums = MagnatuneDatabaseHandler::instance() ->getAlbumsByArtistId( item->getId(), "" );    MagnatuneAlbumList::iterator it;    for ( it = albums.begin(); it != albums.end(); ++it )        addAlbumToPlaylist( &( *it ) );}void MagnatuneBrowser::selectionChanged( QListViewItem *item ){    if ( !item ) return ; // sanity check    debug() << "Selection changed..." << endl;    if ( item->depth() == 0 )        m_purchaseAlbumButton->setEnabled( false );    else        if ( ! m_purchaseInProgress )            m_purchaseAlbumButton->setEnabled( true );    if ( !m_isInfoShown )        return ;    switch ( item->depth() )    {    case 0:        {            MagnatuneListViewArtistItem * artistItem = dynamic_cast<MagnatuneListViewArtistItem *>( item );            if ( artistItem && m_currentInfoUrl != artistItem->getHomeURL() )            {                m_currentInfoUrl = artistItem->getHomeURL();                m_artistInfobox->displayArtistInfo( KURL( m_currentInfoUrl ) );            }        }        break;    case 1:        {            MagnatuneListViewAlbumItem *albumItem = dynamic_cast<MagnatuneListViewAlbumItem *>( item );            if ( albumItem && m_currentInfoUrl != albumItem->getCoverURL() )            {                m_currentInfoUrl = albumItem->getCoverURL();                m_artistInfobox->displayAlbumInfo( albumItem );            }        }        break;    case 2:        {            // a track is selected, show the corrosponding album info!            MagnatuneListViewTrackItem *trackItem = dynamic_cast<MagnatuneListViewTrackItem*>( item );	    if (!trackItem) {		debug() << "dynamic_cast to trackItem failed!" << endl;		return;	    }            int albumId = trackItem->getAlbumId();            MagnatuneAlbum album = MagnatuneDatabaseHandler::instance() ->getAlbumById( albumId );            m_artistInfobox->displayAlbumInfo( &album );        }        break;    default:        break;    }}void MagnatuneBrowser::showPopupMenu( QListViewItem * item, const QPoint & pos, int /*column*/ ){    if ( !item ) return ;    m_popupMenu->exec( pos );}void MagnatuneBrowser::addSelectionToPlaylist( ){    QListViewItem * selectedItem = m_listView->selectedItem();    switch ( selectedItem->depth() )    {    case 0:        addArtistToPlaylist( dynamic_cast<MagnatuneListViewArtistItem *>( selectedItem ) );        break;    case 1:        addAlbumToPlaylist( dynamic_cast<MagnatuneListViewAlbumItem *>( selectedItem ) );        break;    case 2:        addTrackToPlaylist( dynamic_cast<MagnatuneListViewTrackItem *>( selectedItem ) );    }}void MagnatuneBrowser::menuAboutToShow( ){    m_popupMenu->clear();    QListViewItem *selectedItem = m_listView->selectedItem();    if ( !selectedItem ) return ;    switch ( selectedItem->depth() )    {    case 0:        m_popupMenu->insertItem( i18n( "Add artist to playlist" ), this, SLOT( addSelectionToPlaylist() ) );        break;    case 1:        m_popupMenu->insertItem( i18n( "Add album to playlist" ), this, SLOT( addSelectionToPlaylist() ) );        m_popupMenu->insertItem( i18n( "Purchase album" ), this, SLOT( purchaseSelectedAlbum() ) );        break;    case 2:        m_popupMenu->insertItem( i18n( "Add track to playlist" ), this, SLOT( addSelectionToPlaylist() ) );        m_popupMenu->insertItem( i18n( "Purchase album" ), this, SLOT( purchaseAlbumContainingSelectedTrack() ) );    }}void MagnatuneBrowser::purchaseButtonClicked( ){    if ( !m_purchaseInProgress )    {        m_purchaseInProgress = true;        m_purchaseAlbumButton->setEnabled( false );        if ( m_listView->selectedItem() ->depth() == 1 )            purchaseSelectedAlbum( );        else if ( m_listView->selectedItem() ->depth() == 2 )            purchaseAlbumContainingSelectedTrack( );    }}void MagnatuneBrowser::purchaseSelectedAlbum( ){    if ( !m_purchaseHandler )    {        m_purchaseHandler = new MagnatunePurchaseHandler();        m_purchaseHandler->setParent( this );        connect( m_purchaseHandler, SIGNAL( purchaseCompleted( bool ) ), this, SLOT( purchaseCompleted( bool ) ) );    }

⌨️ 快捷键说明

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