1
0
mirror of https://github.com/tomahawk-player/tomahawk.git synced 2025-08-14 01:54:07 +02:00

Show rated resolver star in yellow, so it's clear what you have rated and can no longer change

This commit is contained in:
Leo Franchi
2011-11-03 21:43:16 -04:00
parent 844eb3868a
commit db5313129e
4 changed files with 19 additions and 11 deletions

View File

@@ -191,8 +191,10 @@ GetNewStuffDelegate::paint( QPainter* painter, const QStyleOptionViewItem& optio
if ( i == 1 ) if ( i == 1 )
m_cachedStarRects[ QPair<int, int>(index.row(), index.column()) ] = r; m_cachedStarRects[ QPair<int, int>(index.row(), index.column()) ] = r;
QPixmap pm; const bool userHasRated = index.data( GetNewStuffModel::UserHasRatedRole ).toBool();
if ( m_hoveringOver > -1 && ( m_hoveringItem.first == index.row() && m_hoveringItem.second == index.column() ) ) if ( !userHasRated && // Show on-hover animation if the user hasn't rated it yet, and is hovering over it
m_hoveringOver > -1 &&
m_hoveringItem == index )
{ {
if ( i <= m_hoveringOver ) // positive star if ( i <= m_hoveringOver ) // positive star
painter->drawPixmap( r, m_onHoverStar ); painter->drawPixmap( r, m_onHoverStar );
@@ -201,8 +203,13 @@ GetNewStuffDelegate::paint( QPainter* painter, const QStyleOptionViewItem& optio
} }
else else
{ {
if ( i <= rating ) // positive star if ( i <= rating ) // positive or rated star
painter->drawPixmap( r, m_ratingStarPositive ); {
if ( userHasRated )
painter->drawPixmap( r, m_onHoverStar );
else
painter->drawPixmap( r, m_ratingStarPositive );
}
else else
painter->drawPixmap( r, m_ratingStarNegative ); painter->drawPixmap( r, m_ratingStarNegative );
} }
@@ -299,8 +306,7 @@ GetNewStuffDelegate::editorEvent( QEvent* event, QAbstractItemModel* model, cons
{ {
// 0-indexed // 0-indexed
m_hoveringOver = whichStar; m_hoveringOver = whichStar;
m_hoveringItem.first = index.row(); m_hoveringItem = index;
m_hoveringItem.second = index.column();
} }
return true; return true;
@@ -309,10 +315,9 @@ GetNewStuffDelegate::editorEvent( QEvent* event, QAbstractItemModel* model, cons
if ( m_hoveringOver > -1 ) if ( m_hoveringOver > -1 )
{ {
QModelIndex idx = model->index( m_hoveringItem.first, m_hoveringItem.second ); emit update( m_hoveringItem );
emit update( idx );
m_hoveringOver = -1; m_hoveringOver = -1;
m_hoveringItem = QPair<int, int>(); m_hoveringItem = QPersistentModelIndex();
} }
return false; return false;
} }

View File

@@ -42,7 +42,7 @@ private:
int m_widestTextWidth; int m_widestTextWidth;
int m_hoveringOver; int m_hoveringOver;
QPair<int, int> m_hoveringItem; QPersistentModelIndex m_hoveringItem;
mutable QHash< QPair<int, int>, QRect > m_cachedButtonRects; mutable QHash< QPair<int, int>, QRect > m_cachedButtonRects;
mutable QHash< QPair<int, int>, QRect > m_cachedStarRects; mutable QHash< QPair<int, int>, QRect > m_cachedStarRects;
}; };

View File

@@ -94,6 +94,8 @@ GetNewStuffModel::data( const QModelIndex& index, int role ) const
return resolver.author(); return resolver.author();
case StateRole: case StateRole:
return (int)AtticaManager::instance()->resolverState( resolver ); return (int)AtticaManager::instance()->resolverState( resolver );
case UserHasRatedRole:
return AtticaManager::instance()->userHasRated( resolver );
} }
return QVariant(); return QVariant();
} }

View File

@@ -38,7 +38,8 @@ public:
DescriptionRole = Qt::UserRole + 5, DescriptionRole = Qt::UserRole + 5,
TypeRole = Qt::UserRole + 6, // Category in attica-speak. What sort of item this is (resolver, etc). TypeRole = Qt::UserRole + 6, // Category in attica-speak. What sort of item this is (resolver, etc).
AuthorRole = Qt::UserRole + 7, AuthorRole = Qt::UserRole + 7,
StateRole = Qt::UserRole + 8 StateRole = Qt::UserRole + 8,
UserHasRatedRole = Qt::UserRole + 9
}; };
enum Types { enum Types {