From fa4ef44e4af7abee4435dabe2261fe7e3331e2cb Mon Sep 17 00:00:00 2001 From: Christian Muehlhaeuser Date: Tue, 12 Jun 2012 07:45:14 +0200 Subject: [PATCH] * QueryLabel now supports displaying a jump-label and handles cursor states itself. --- src/libtomahawk/widgets/QueryLabel.cpp | 34 ++++++++++++++++++++++++++ src/libtomahawk/widgets/QueryLabel.h | 5 ++++ 2 files changed, 39 insertions(+) diff --git a/src/libtomahawk/widgets/QueryLabel.cpp b/src/libtomahawk/widgets/QueryLabel.cpp index 82b40d084..017e9b3f2 100644 --- a/src/libtomahawk/widgets/QueryLabel.cpp +++ b/src/libtomahawk/widgets/QueryLabel.cpp @@ -30,6 +30,7 @@ #include "ContextMenu.h" #include "utils/TomahawkUtilsGui.h" #include "utils/Logger.h" +#include "ViewManager.h" #include "Source.h" #define BOXMARGIN 2 @@ -91,6 +92,9 @@ QueryLabel::init() m_useCustomFont = false; m_align = Qt::AlignLeft | Qt::AlignVCenter; m_mode = Qt::ElideMiddle; + + m_jumpLinkVisible = false; + m_jumpPixmap = QPixmap( RESPATH "images/jump-link.png" ).scaled( QSize( fontMetrics().height(), fontMetrics().height() ), Qt::KeepAspectRatio, Qt::SmoothTransformation ); } @@ -240,6 +244,14 @@ QueryLabel::setQuery( const Tomahawk::query_ptr& query ) } +void +QueryLabel::setJumpLinkVisible( bool visible ) +{ + m_jumpLinkVisible = visible; + repaint(); +} + + Qt::Alignment QueryLabel::alignment() const { @@ -466,6 +478,13 @@ QueryLabel::paintEvent( QPaintEvent* event ) p.drawText( r, m_align, track() ); r.adjust( trackX, 0, 0, 0 ); } + + if ( m_jumpLinkVisible ) + { + r.adjust( 6, 0, 0, 0 ); + r.setSize( m_jumpPixmap.size() ); + p.drawPixmap( r, m_jumpPixmap ); + } } p.restore(); @@ -527,6 +546,10 @@ QueryLabel::mouseReleaseEvent( QMouseEvent* event ) case Track: emit clickedTrack(); break; + + case Complete: + ViewManager::instance()->showCurrentTrack(); + break; default: emit clicked(); @@ -583,6 +606,7 @@ QueryLabel::mouseMoveEvent( QMouseEvent* event ) QRect hoverArea; m_hoverType = None; + if ( m_type & Artist && x < artistX ) { m_hoverType = Artist; @@ -603,12 +627,22 @@ QueryLabel::mouseMoveEvent( QMouseEvent* event ) hoverArea.setLeft( albumX + spacing ); hoverArea.setRight( trackX + contentsMargins().left() - 1 ); } + else if ( m_jumpLinkVisible && x < trackX + 6 + m_jumpPixmap.width() && x > trackX + 6 ) + { + m_hoverType = Complete; + } if ( hoverArea.width() ) { hoverArea.setY( 1 ); hoverArea.setHeight( height() - 2 ); } + + if ( m_hoverType != None ) + setCursor( Qt::PointingHandCursor ); + else + setCursor( Qt::ArrowCursor ); + if ( hoverArea != m_hoverArea ) { m_hoverArea = hoverArea; diff --git a/src/libtomahawk/widgets/QueryLabel.h b/src/libtomahawk/widgets/QueryLabel.h index f9d655dd4..3667a2c9e 100644 --- a/src/libtomahawk/widgets/QueryLabel.h +++ b/src/libtomahawk/widgets/QueryLabel.h @@ -22,6 +22,7 @@ #include #include #include +#include #include "Result.h" #include "Query.h" @@ -80,6 +81,7 @@ public: QFont font() const; void setExtraContentsMargins( int left, int top, int right, int bottom ); + void setJumpLinkVisible( bool visible ); virtual QSize sizeHint() const; virtual QSize minimumSizeHint() const; @@ -137,6 +139,9 @@ private: QRect m_hoverArea; QPoint m_dragPos; QMargins m_textMargins; + + bool m_jumpLinkVisible; + QPixmap m_jumpPixmap; }; #endif // QUERYLABEL_H