1
0
mirror of https://github.com/tomahawk-player/tomahawk.git synced 2025-08-01 03:40:16 +02:00

* Make PlayableCover a bit more feature complete.

This commit is contained in:
Christian Muehlhaeuser
2014-09-11 19:16:11 +02:00
parent 978bb39780
commit 7dfab0fc7f
2 changed files with 151 additions and 38 deletions

View File

@@ -39,6 +39,7 @@ PlayableCover::PlayableCover( QWidget* parent )
: QLabel( parent ) : QLabel( parent )
, m_showText( false ) , m_showText( false )
, m_showControls( true ) , m_showControls( true )
, m_type( Track )
{ {
setMouseTracking( true ); setMouseTracking( true );
@@ -136,24 +137,59 @@ PlayableCover::mouseMoveEvent( QMouseEvent* event )
const int pixHeight = TomahawkUtils::defaultFontHeight() * 3; const int pixHeight = TomahawkUtils::defaultFontHeight() * 3;
const QSize pixSize = QSize( pixHeight, pixHeight ); const QSize pixSize = QSize( pixHeight, pixHeight );
if ( m_artist ) switch ( m_type )
{ {
pixmap = m_artist->cover( pixSize, false ); case Artist:
resultStream << m_artist->name(); if ( m_artist )
mimeData->setData( "application/tomahawk.metadata.artist", resultData ); {
} pixmap = m_artist->cover( pixSize, false );
else if ( m_album ) resultStream << m_artist->name();
{ mimeData->setData( "application/tomahawk.metadata.artist", resultData );
pixmap = m_album->cover( pixSize, false ); }
resultStream << m_album->artist()->name(); else
resultStream << m_album->name(); {
mimeData->setData( "application/tomahawk.metadata.album", resultData ); delete mimeData;
} return;
else if ( m_query ) }
{ break;
pixmap = m_query->track()->cover( pixSize, false );
resultStream << QString( "application/tomahawk.query.list" ) << qlonglong( &m_query ); case Album:
mimeData->setData( "application/tomahawk.mixed", resultData ); if ( m_album && !m_album->name().isEmpty() )
{
pixmap = m_album->cover( pixSize, false );
resultStream << m_album->artist()->name();
resultStream << m_album->name();
mimeData->setData( "application/tomahawk.metadata.album", resultData );
}
else
{
if ( m_artist )
{
pixmap = m_artist->cover( pixSize, false );
resultStream << m_artist->name();
mimeData->setData( "application/tomahawk.metadata.artist", resultData );
}
else
{
delete mimeData;
return;
}
}
break;
case Track:
if ( m_query )
{
pixmap = m_query->track()->cover( pixSize, false );
resultStream << QString( "application/tomahawk.query.list" ) << qlonglong( &m_query );
mimeData->setData( "application/tomahawk.mixed", resultData );
}
else
{
delete mimeData;
return;
}
break;
} }
QDrag* drag = new QDrag( this ); QDrag* drag = new QDrag( this );
@@ -165,6 +201,31 @@ PlayableCover::mouseMoveEvent( QMouseEvent* event )
} }
void
PlayableCover::mouseDoubleClickEvent( QMouseEvent* event )
{
switch ( m_type )
{
case Artist:
if ( m_artist )
ViewManager::instance()->show( m_artist );
break;
case Album:
if ( m_album && !m_album->name().isEmpty() )
ViewManager::instance()->show( m_album );
else if ( m_artist )
ViewManager::instance()->show( m_artist );
break;
case Track:
if ( m_query )
ViewManager::instance()->show( m_query );
break;
}
}
void void
PlayableCover::mouseReleaseEvent( QMouseEvent* event ) PlayableCover::mouseReleaseEvent( QMouseEvent* event )
{ {
@@ -174,13 +235,7 @@ PlayableCover::mouseReleaseEvent( QMouseEvent* event )
{ {
if ( rect.contains( event->pos() ) ) if ( rect.contains( event->pos() ) )
{ {
if ( m_artist ) mouseDoubleClickEvent( event );
ViewManager::instance()->show( m_artist );
else if ( m_album )
ViewManager::instance()->show( m_album->artist() );
else if ( m_query )
ViewManager::instance()->show( m_query->queryTrack()->artistPtr() );
return; return;
} }
} }
@@ -192,12 +247,26 @@ PlayableCover::contextMenuEvent( QContextMenuEvent* event )
{ {
m_contextMenu->clear(); m_contextMenu->clear();
if ( m_artist ) switch ( m_type )
m_contextMenu->setArtist( m_artist ); {
else if ( m_album ) case Artist:
m_contextMenu->setAlbum( m_album ); if ( m_artist )
else m_contextMenu->setArtist( m_artist );
m_contextMenu->setQuery( m_query ); break;
case Album:
if ( m_album && !m_album->name().isEmpty() )
m_contextMenu->setAlbum( m_album );
else if ( m_artist )
m_contextMenu->setArtist( m_artist );
break;
case Track:
if ( m_query )
m_contextMenu->setQuery( m_query );
break;
}
m_contextMenu->exec( event->globalPos() ); m_contextMenu->exec( event->globalPos() );
} }
@@ -350,18 +419,32 @@ PlayableCover::paintEvent( QPaintEvent* event )
void void
PlayableCover::onClicked() PlayableCover::onClicked()
{ {
if ( m_artist ) switch ( m_type )
AudioEngine::instance()->playItem( m_artist ); {
else if ( m_album ) case Artist:
AudioEngine::instance()->playItem( m_album ); if ( m_artist )
else if ( m_query ) AudioEngine::instance()->playItem( m_artist );
AudioEngine::instance()->playItem( Tomahawk::playlistinterface_ptr(), m_query ); break;
case Album:
if ( m_album && !m_album->name().isEmpty() )
AudioEngine::instance()->playItem( m_album );
else if ( m_artist )
AudioEngine::instance()->playItem( m_artist );
break;
case Track:
if ( m_query )
AudioEngine::instance()->playItem( Tomahawk::playlistinterface_ptr(), m_query );
break;
}
} }
void void
PlayableCover::setArtist( const Tomahawk::artist_ptr& artist ) PlayableCover::setArtist( const Tomahawk::artist_ptr& artist )
{ {
m_type = Artist;
m_artist = artist; m_artist = artist;
repaint(); repaint();
} }
@@ -370,6 +453,7 @@ PlayableCover::setArtist( const Tomahawk::artist_ptr& artist )
void void
PlayableCover::setAlbum( const Tomahawk::album_ptr& album ) PlayableCover::setAlbum( const Tomahawk::album_ptr& album )
{ {
m_type = Album;
m_album = album; m_album = album;
repaint(); repaint();
} }
@@ -379,19 +463,34 @@ void
PlayableCover::setQuery( const Tomahawk::query_ptr& query ) PlayableCover::setQuery( const Tomahawk::query_ptr& query )
{ {
m_query = query; m_query = query;
if ( query )
{
m_artist = query->track()->artistPtr();
m_album = query->track()->albumPtr();
}
repaint(); repaint();
} }
void PlayableCover::setShowText( bool b ) void
PlayableCover::setShowText( bool b )
{ {
m_showText = b; m_showText = b;
repaint(); repaint();
} }
void PlayableCover::setShowControls( bool b ) void
PlayableCover::setShowControls( bool b )
{ {
m_showControls = b; m_showControls = b;
repaint(); repaint();
} }
void
PlayableCover::setType( DisplayType type )
{
m_type = type;
}

View File

@@ -43,10 +43,21 @@ class DLLEXPORT PlayableCover : public QLabel
Q_OBJECT Q_OBJECT
public: public:
enum DisplayType
{
Artist = 0,
Album = 1,
Track = 2,
};
PlayableCover( QWidget* parent = 0 ); PlayableCover( QWidget* parent = 0 );
virtual ~PlayableCover(); virtual ~PlayableCover();
bool showText() const { return m_showText; } bool showText() const { return m_showText; }
bool showControls() const { return m_showControls; }
DisplayType type() const { return m_type; }
void setType( DisplayType type );
QPixmap pixmap() const { return m_pixmap; } QPixmap pixmap() const { return m_pixmap; }
@@ -66,6 +77,7 @@ protected:
virtual void mousePressEvent( QMouseEvent* event ); virtual void mousePressEvent( QMouseEvent* event );
virtual void mouseMoveEvent( QMouseEvent* event ); virtual void mouseMoveEvent( QMouseEvent* event );
virtual void mouseReleaseEvent( QMouseEvent* event ); virtual void mouseReleaseEvent( QMouseEvent* event );
virtual void mouseDoubleClickEvent( QMouseEvent* event );
virtual void contextMenuEvent( QContextMenuEvent* event ); virtual void contextMenuEvent( QContextMenuEvent* event );
@@ -92,6 +104,8 @@ private:
bool m_showText; bool m_showText;
bool m_showControls; bool m_showControls;
DisplayType m_type;
}; };
#endif #endif