mirror of
https://github.com/tomahawk-player/tomahawk.git
synced 2025-08-04 13:17:34 +02:00
* Make PlayableCover a bit more feature complete.
This commit is contained in:
@@ -39,6 +39,7 @@ PlayableCover::PlayableCover( QWidget* parent )
|
||||
: QLabel( parent )
|
||||
, m_showText( false )
|
||||
, m_showControls( true )
|
||||
, m_type( Track )
|
||||
{
|
||||
setMouseTracking( true );
|
||||
|
||||
@@ -136,25 +137,60 @@ PlayableCover::mouseMoveEvent( QMouseEvent* event )
|
||||
const int pixHeight = TomahawkUtils::defaultFontHeight() * 3;
|
||||
const QSize pixSize = QSize( pixHeight, pixHeight );
|
||||
|
||||
switch ( m_type )
|
||||
{
|
||||
case Artist:
|
||||
if ( m_artist )
|
||||
{
|
||||
pixmap = m_artist->cover( pixSize, false );
|
||||
resultStream << m_artist->name();
|
||||
mimeData->setData( "application/tomahawk.metadata.artist", resultData );
|
||||
}
|
||||
else if ( m_album )
|
||||
else
|
||||
{
|
||||
delete mimeData;
|
||||
return;
|
||||
}
|
||||
break;
|
||||
|
||||
case Album:
|
||||
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_query )
|
||||
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 );
|
||||
drag->setMimeData( mimeData );
|
||||
@@ -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
|
||||
PlayableCover::mouseReleaseEvent( QMouseEvent* event )
|
||||
{
|
||||
@@ -174,13 +235,7 @@ PlayableCover::mouseReleaseEvent( QMouseEvent* event )
|
||||
{
|
||||
if ( rect.contains( event->pos() ) )
|
||||
{
|
||||
if ( m_artist )
|
||||
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() );
|
||||
|
||||
mouseDoubleClickEvent( event );
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -192,12 +247,26 @@ PlayableCover::contextMenuEvent( QContextMenuEvent* event )
|
||||
{
|
||||
m_contextMenu->clear();
|
||||
|
||||
switch ( m_type )
|
||||
{
|
||||
case Artist:
|
||||
if ( m_artist )
|
||||
m_contextMenu->setArtist( m_artist );
|
||||
else if ( m_album )
|
||||
break;
|
||||
|
||||
case Album:
|
||||
if ( m_album && !m_album->name().isEmpty() )
|
||||
m_contextMenu->setAlbum( m_album );
|
||||
else
|
||||
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() );
|
||||
}
|
||||
@@ -350,18 +419,32 @@ PlayableCover::paintEvent( QPaintEvent* event )
|
||||
void
|
||||
PlayableCover::onClicked()
|
||||
{
|
||||
switch ( m_type )
|
||||
{
|
||||
case Artist:
|
||||
if ( m_artist )
|
||||
AudioEngine::instance()->playItem( m_artist );
|
||||
else if ( m_album )
|
||||
break;
|
||||
|
||||
case Album:
|
||||
if ( m_album && !m_album->name().isEmpty() )
|
||||
AudioEngine::instance()->playItem( m_album );
|
||||
else if ( m_query )
|
||||
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
|
||||
PlayableCover::setArtist( const Tomahawk::artist_ptr& artist )
|
||||
{
|
||||
m_type = Artist;
|
||||
m_artist = artist;
|
||||
repaint();
|
||||
}
|
||||
@@ -370,6 +453,7 @@ PlayableCover::setArtist( const Tomahawk::artist_ptr& artist )
|
||||
void
|
||||
PlayableCover::setAlbum( const Tomahawk::album_ptr& album )
|
||||
{
|
||||
m_type = Album;
|
||||
m_album = album;
|
||||
repaint();
|
||||
}
|
||||
@@ -379,19 +463,34 @@ void
|
||||
PlayableCover::setQuery( const Tomahawk::query_ptr& query )
|
||||
{
|
||||
m_query = query;
|
||||
|
||||
if ( query )
|
||||
{
|
||||
m_artist = query->track()->artistPtr();
|
||||
m_album = query->track()->albumPtr();
|
||||
}
|
||||
repaint();
|
||||
}
|
||||
|
||||
|
||||
void PlayableCover::setShowText( bool b )
|
||||
void
|
||||
PlayableCover::setShowText( bool b )
|
||||
{
|
||||
m_showText = b;
|
||||
repaint();
|
||||
}
|
||||
|
||||
|
||||
void PlayableCover::setShowControls( bool b )
|
||||
void
|
||||
PlayableCover::setShowControls( bool b )
|
||||
{
|
||||
m_showControls = b;
|
||||
repaint();
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
PlayableCover::setType( DisplayType type )
|
||||
{
|
||||
m_type = type;
|
||||
}
|
||||
|
@@ -43,10 +43,21 @@ class DLLEXPORT PlayableCover : public QLabel
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
enum DisplayType
|
||||
{
|
||||
Artist = 0,
|
||||
Album = 1,
|
||||
Track = 2,
|
||||
};
|
||||
|
||||
PlayableCover( QWidget* parent = 0 );
|
||||
virtual ~PlayableCover();
|
||||
|
||||
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; }
|
||||
|
||||
@@ -66,6 +77,7 @@ protected:
|
||||
virtual void mousePressEvent( QMouseEvent* event );
|
||||
virtual void mouseMoveEvent( QMouseEvent* event );
|
||||
virtual void mouseReleaseEvent( QMouseEvent* event );
|
||||
virtual void mouseDoubleClickEvent( QMouseEvent* event );
|
||||
|
||||
virtual void contextMenuEvent( QContextMenuEvent* event );
|
||||
|
||||
@@ -92,6 +104,8 @@ private:
|
||||
|
||||
bool m_showText;
|
||||
bool m_showControls;
|
||||
|
||||
DisplayType m_type;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
Reference in New Issue
Block a user