1
0
mirror of https://github.com/tomahawk-player/tomahawk.git synced 2025-08-05 13:47:26 +02:00

Added tooltips to avatars in delegate boxes

This commit is contained in:
Teo Mrnjavac
2013-09-30 13:00:11 +02:00
parent d0d285fcbd
commit a471c5c6e6
3 changed files with 70 additions and 22 deletions

View File

@@ -25,6 +25,7 @@
#include <QDateTime> #include <QDateTime>
#include <QMouseEvent> #include <QMouseEvent>
#include <QPainter> #include <QPainter>
#include <QToolTip>
#include <boost/concept_check.hpp> #include <boost/concept_check.hpp>
@@ -357,7 +358,7 @@ PlaylistItemDelegate::drawLoveBox( QPainter* painter, const QRect& rect, Playabl
QRect avatarsRect = innerRect.adjusted( 4, 4, -4, -4 ); QRect avatarsRect = innerRect.adjusted( 4, 4, -4, -4 );
drawAvatarsForBox( painter, avatarsRect, avatarSize, avatarMargin, count, sources ); drawAvatarsForBox( painter, avatarsRect, avatarSize, avatarMargin, count, sources, index );
TomahawkUtils::ImageType type = item->query()->queryTrack()->loved() ? TomahawkUtils::Loved : TomahawkUtils::NotLoved; TomahawkUtils::ImageType type = item->query()->queryTrack()->loved() ? TomahawkUtils::Loved : TomahawkUtils::NotLoved;
QRect r = innerRect.adjusted( innerRect.width() - rect.height() + 4, 4, -4, -4 ); QRect r = innerRect.adjusted( innerRect.width() - rect.height() + 4, 4, -4, -4 );
@@ -369,9 +370,11 @@ PlaylistItemDelegate::drawLoveBox( QPainter* painter, const QRect& rect, Playabl
QRect QRect
PlaylistItemDelegate::drawGenericBox( QPainter* painter, const QStyleOptionViewItem& option, PlaylistItemDelegate::drawGenericBox( QPainter* painter,
const QStyleOptionViewItem& option,
const QRect& rect, const QString& text, const QRect& rect, const QString& text,
const QList< Tomahawk::source_ptr >& sources ) const const QList< Tomahawk::source_ptr >& sources,
const QModelIndex& index ) const
{ {
const int avatarSize = rect.height() - 4 * 2; const int avatarSize = rect.height() - 4 * 2;
const int avatarMargin = 2; const int avatarMargin = 2;
@@ -397,7 +400,7 @@ PlaylistItemDelegate::drawGenericBox( QPainter* painter, const QStyleOptionViewI
drawRectForBox( painter, innerRect ); drawRectForBox( painter, innerRect );
QRect avatarsRect = innerRect.adjusted( textDoc.idealWidth() + 3*4, 4, -4, -4 ); QRect avatarsRect = innerRect.adjusted( textDoc.idealWidth() + 3*4, 4, -4, -4 );
drawAvatarsForBox( painter, avatarsRect, avatarSize, avatarMargin, count, sources ); drawAvatarsForBox( painter, avatarsRect, avatarSize, avatarMargin, count, sources, index );
return rect; return rect;
} }
@@ -421,20 +424,20 @@ PlaylistItemDelegate::drawRectForBox( QPainter* painter, const QRect& rect ) con
void void
PlaylistItemDelegate::drawAvatarsForBox( QPainter* painter, const QRect& avatarsRect, PlaylistItemDelegate::drawAvatarsForBox( QPainter* painter,
int avatarSize, int avatarMargin, int count, const QRect& avatarsRect,
const QList< Tomahawk::source_ptr >& sources ) const int avatarSize,
int avatarMargin,
int count,
const QList< Tomahawk::source_ptr >& sources,
const QModelIndex& index ) const
{ {
QList< QPixmap > pixmaps;
foreach ( const Tomahawk::source_ptr& s, sources )
{
pixmaps << s->avatar( TomahawkUtils::Original, QSize( avatarSize, avatarSize ) );
}
painter->save(); painter->save();
QHash< Tomahawk::source_ptr, QRect > rectsToSave;
unsigned int i = 0; unsigned int i = 0;
foreach ( QPixmap pixmap, pixmaps ) foreach ( const Tomahawk::source_ptr& s, sources )
{ {
if ( i >= count ) if ( i >= count )
break; break;
@@ -442,13 +445,20 @@ PlaylistItemDelegate::drawAvatarsForBox( QPainter* painter, const QRect& avatars
QRect r = avatarsRect.adjusted( ( avatarSize + avatarMargin ) * i, 0, 0, 0 ); QRect r = avatarsRect.adjusted( ( avatarSize + avatarMargin ) * i, 0, 0, 0 );
r.setWidth( avatarSize + avatarMargin ); r.setWidth( avatarSize + avatarMargin );
QPixmap pixmap = s->avatar( TomahawkUtils::Original, QSize( avatarSize, avatarSize ) );
if ( pixmap.isNull() ) if ( pixmap.isNull() )
pixmap = TomahawkUtils::defaultPixmap( TomahawkUtils::DefaultSourceAvatar, TomahawkUtils::Original, QSize( r.height(), r.height() ) ); pixmap = TomahawkUtils::defaultPixmap( TomahawkUtils::DefaultSourceAvatar, TomahawkUtils::Original, QSize( r.height(), r.height() ) );
painter->drawPixmap( r.adjusted( avatarMargin/2, 0, -(avatarMargin/2), 0 ), pixmap ); painter->drawPixmap( r.adjusted( avatarMargin/2, 0, -(avatarMargin/2), 0 ), pixmap );
rectsToSave.insert( s, r );
i++; i++;
} }
if ( !rectsToSave.isEmpty() )
m_avatarBoxRects.insert( index, rectsToSave );
painter->restore(); painter->restore();
} }
@@ -511,6 +521,8 @@ PlaylistItemDelegate::editorEvent( QEvent* event, QAbstractItemModel* model, con
bool hoveringInfo = false; bool hoveringInfo = false;
bool hoveringLove = false; bool hoveringLove = false;
Tomahawk::source_ptr hoveredAvatar;
QRect hoveredAvatarRect;
if ( m_infoButtonRects.contains( index ) ) if ( m_infoButtonRects.contains( index ) )
{ {
const QRect infoRect = m_infoButtonRects[ index ]; const QRect infoRect = m_infoButtonRects[ index ];
@@ -523,6 +535,20 @@ PlaylistItemDelegate::editorEvent( QEvent* event, QAbstractItemModel* model, con
const QMouseEvent* ev = static_cast< QMouseEvent* >( event ); const QMouseEvent* ev = static_cast< QMouseEvent* >( event );
hoveringLove = loveRect.contains( ev->pos() ); hoveringLove = loveRect.contains( ev->pos() );
} }
if ( m_avatarBoxRects.contains( index ) )
{
const QMouseEvent* ev = static_cast< QMouseEvent* >( event );
for ( QHash< Tomahawk::source_ptr, QRect >::const_iterator it = m_avatarBoxRects[ index ].constBegin();
it != m_avatarBoxRects[ index ].constEnd(); ++it )
{
if ( it.value().contains( ev->pos() ) )
{
hoveredAvatar = it.key();
hoveredAvatarRect = it.value();
break;
}
}
}
if ( event->type() == QEvent::MouseMove ) if ( event->type() == QEvent::MouseMove )
{ {
@@ -531,6 +557,15 @@ PlaylistItemDelegate::editorEvent( QEvent* event, QAbstractItemModel* model, con
else else
m_view->setCursor( Qt::ArrowCursor ); m_view->setCursor( Qt::ArrowCursor );
if ( !hoveredAvatar.isNull() )
{
const QMouseEvent* ev = static_cast< QMouseEvent* >( event );
QToolTip::showText( m_view->mapToGlobal( hoveredAvatarRect.bottomLeft() ),
hoveredAvatar->friendlyName(),
m_view,
hoveredAvatarRect );
}
if ( m_hoveringOver != index ) if ( m_hoveringOver != index )
{ {
QPersistentModelIndex ti = m_hoveringOver; QPersistentModelIndex ti = m_hoveringOver;

View File

@@ -67,12 +67,24 @@ protected:
QRect drawInfoButton( QPainter* painter, const QRect& rect, const QModelIndex& index, float height ) const; QRect drawInfoButton( QPainter* painter, const QRect& rect, const QModelIndex& index, float height ) const;
QRect drawSourceIcon( QPainter* painter, const QRect& rect, PlayableItem* item, float height ) const; QRect drawSourceIcon( QPainter* painter, const QRect& rect, PlayableItem* item, float height ) const;
QRect drawCover( QPainter* painter, const QRect& rect, PlayableItem* item, const QModelIndex& index ) const; QRect drawCover( QPainter* painter, const QRect& rect, PlayableItem* item, const QModelIndex& index ) const;
QRect drawLoveBox( QPainter* painter, const QRect& rect, PlayableItem* item, const QModelIndex& index ) const; QRect drawLoveBox( QPainter* painter,
QRect drawGenericBox( QPainter* painter, const QStyleOptionViewItem& option, const QRect& rect, const QRect& rect,
const QString& text, const QList< Tomahawk::source_ptr >& sources ) const; PlayableItem* item,
const QModelIndex& index ) const;
QRect drawGenericBox( QPainter* painter,
const QStyleOptionViewItem& option,
const QRect& rect,
const QString& text,
const QList< Tomahawk::source_ptr >& sources,
const QModelIndex& index ) const;
void drawRectForBox( QPainter* painter, const QRect& rect ) const; void drawRectForBox( QPainter* painter, const QRect& rect ) const;
void drawAvatarsForBox( QPainter* painter, const QRect& avatarsRect, int avatarSize, int avatarMargin, void drawAvatarsForBox( QPainter* painter,
int count, const QList< Tomahawk::source_ptr >& sources ) const; const QRect& avatarsRect,
int avatarSize,
int avatarMargin,
int count,
const QList< Tomahawk::source_ptr >& sources,
const QModelIndex& index ) const;
void drawRichText( QPainter* painter, const QStyleOptionViewItem& option, const QRect& rect, int flags, QTextDocument& text ) const; void drawRichText( QPainter* painter, const QStyleOptionViewItem& option, const QRect& rect, int flags, QTextDocument& text ) const;
void paintDetailed( QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index ) const; void paintDetailed( QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index ) const;
@@ -98,6 +110,7 @@ private:
mutable QHash< QPersistentModelIndex, QSharedPointer< Tomahawk::PixmapDelegateFader > > m_pixmaps; mutable QHash< QPersistentModelIndex, QSharedPointer< Tomahawk::PixmapDelegateFader > > m_pixmaps;
mutable QHash< QPersistentModelIndex, QRect > m_infoButtonRects; mutable QHash< QPersistentModelIndex, QRect > m_infoButtonRects;
mutable QHash< QPersistentModelIndex, QRect > m_loveButtonRects; mutable QHash< QPersistentModelIndex, QRect > m_loveButtonRects;
mutable QHash< QPersistentModelIndex, QHash< Tomahawk::source_ptr, QRect > > m_avatarBoxRects;
QPersistentModelIndex m_hoveringOver; QPersistentModelIndex m_hoveringOver;
TrackView* m_view; TrackView* m_view;

View File

@@ -222,7 +222,7 @@ PlaylistLargeItemDelegate::paint( QPainter* painter, const QStyleOptionViewItem&
QString timeString = TomahawkUtils::ageToString( earliestTimestamp, true ); QString timeString = TomahawkUtils::ageToString( earliestTimestamp, true );
drawGenericBox( painter, opt, leftRect, timeString, sources ); drawGenericBox( painter, opt, leftRect, timeString, sources, index );
} }
else if ( m_mode == RecentlyPlayed ) else if ( m_mode == RecentlyPlayed )
{ {
@@ -233,7 +233,7 @@ PlaylistLargeItemDelegate::paint( QPainter* painter, const QStyleOptionViewItem&
QString playtime = TomahawkUtils::ageToString( QDateTime::fromTime_t( item->playbackLog().timestamp ), true ); QString playtime = TomahawkUtils::ageToString( QDateTime::fromTime_t( item->playbackLog().timestamp ), true );
drawGenericBox( painter, opt, leftRect, playtime, sources ); drawGenericBox( painter, opt, leftRect, playtime, sources, index );
} }
} }
else if ( m_mode == LatestAdditions ) else if ( m_mode == LatestAdditions )
@@ -244,7 +244,7 @@ PlaylistLargeItemDelegate::paint( QPainter* painter, const QStyleOptionViewItem&
QString modtime = TomahawkUtils::ageToString( QDateTime::fromTime_t( item->query()->results().first()->modificationTime() ), true ); QString modtime = TomahawkUtils::ageToString( QDateTime::fromTime_t( item->query()->results().first()->modificationTime() ), true );
drawGenericBox( painter, opt, leftRect, modtime, sources ); drawGenericBox( painter, opt, leftRect, modtime, sources, index );
} }
} }
else else