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:
@@ -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;
|
||||||
|
}
|
||||||
|
@@ -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
|
||||||
|
Reference in New Issue
Block a user