From a36ee207e93df3bd2edd8c7d105280bfdf3d5040 Mon Sep 17 00:00:00 2001 From: Christian Muehlhaeuser <muesli@gmail.com> Date: Mon, 21 May 2012 06:12:34 +0200 Subject: [PATCH] * Pass on QWheelEvents to AlbumView when hovering a spinner / play / pause button on top of it. --- .../playlist/AlbumItemDelegate.cpp | 65 +++++++++---------- src/libtomahawk/playlist/AlbumItemDelegate.h | 1 + 2 files changed, 31 insertions(+), 35 deletions(-) diff --git a/src/libtomahawk/playlist/AlbumItemDelegate.cpp b/src/libtomahawk/playlist/AlbumItemDelegate.cpp index 50411b3ff..800a4e9fc 100644 --- a/src/libtomahawk/playlist/AlbumItemDelegate.cpp +++ b/src/libtomahawk/playlist/AlbumItemDelegate.cpp @@ -31,7 +31,6 @@ #include "audio/AudioEngine.h" #include "utils/TomahawkUtils.h" -#include "utils/Logger.h" #include "utils/PixmapDelegateFader.h" #include <utils/Closure.h> @@ -41,6 +40,7 @@ #include "ViewManager.h" #include "utils/AnimatedSpinner.h" #include "widgets/ImageButton.h" +#include "utils/Logger.h" AlbumItemDelegate::AlbumItemDelegate( QAbstractItemView* parent, AlbumProxyModel* proxy ) @@ -77,32 +77,7 @@ AlbumItemDelegate::paint( QPainter* painter, const QStyleOptionViewItem& option, painter->save(); painter->setRenderHint( QPainter::Antialiasing ); -/* if ( !( option.state & QStyle::State_Selected ) ) - { - QRect shadowRect = option.rect.adjusted( 5, 4, -5, -40 ); - painter->setPen( QColor( 90, 90, 90 ) ); - painter->drawRoundedRect( shadowRect, 0.5, 0.5 ); - - QPen shadowPen( QColor( 30, 30, 30 ) ); - shadowPen.setWidth( 0.4 ); - painter->drawLine( shadowRect.bottomLeft() + QPoint( -1, 2 ), shadowRect.bottomRight() + QPoint( 1, 2 ) ); - - shadowPen.setColor( QColor( 160, 160, 160 ) ); - painter->setPen( shadowPen ); - painter->drawLine( shadowRect.topLeft() + QPoint( -1, 2 ), shadowRect.bottomLeft() + QPoint( -1, 2 ) ); - painter->drawLine( shadowRect.topRight() + QPoint( 2, 2 ), shadowRect.bottomRight() + QPoint( 2, 2 ) ); - painter->drawLine( shadowRect.bottomLeft() + QPoint( 0, 3 ), shadowRect.bottomRight() + QPoint( 0, 3 ) ); - - shadowPen.setColor( QColor( 180, 180, 180 ) ); - painter->setPen( shadowPen ); - painter->drawLine( shadowRect.topLeft() + QPoint( -2, 3 ), shadowRect.bottomLeft() + QPoint( -2, 1 ) ); - painter->drawLine( shadowRect.topRight() + QPoint( 3, 3 ), shadowRect.bottomRight() + QPoint( 3, 1 ) ); - painter->drawLine( shadowRect.bottomLeft() + QPoint( 0, 4 ), shadowRect.bottomRight() + QPoint( 0, 4 ) ); - }*/ - -// QRect r = option.rect.adjusted( 6, 5, -6, -41 ); QRect r = option.rect; - QString top, bottom; if ( !item->album().isNull() ) { @@ -232,15 +207,6 @@ AlbumItemDelegate::paint( QPainter* painter, const QStyleOptionViewItem& option, TomahawkUtils::drawQueryBackground( painter, opt.palette, r, 1.1 ); painter->setPen( opt.palette.color( QPalette::HighlightedText ) ); } - else - { -/* if ( !( option.state & QStyle::State_Selected ) ) -#ifdef Q_WS_MAC - painter->setPen( opt.palette.color( QPalette::Dark ).darker( 200 ) ); -#else - painter->setPen( opt.palette.color( QPalette::Dark ) ); -#endif*/ - } to.setAlignment( Qt::AlignHCenter | Qt::AlignBottom ); text = painter->fontMetrics().elidedText( bottom, Qt::ElideRight, textRect.width() - 10 ); @@ -266,6 +232,8 @@ AlbumItemDelegate::onPlayClicked( const QPersistentModelIndex& index ) spinner->setAutoCenter( false ); spinner->fadeIn(); spinner->move( pos ); + spinner->setFocusPolicy( Qt::NoFocus ); + spinner->installEventFilter( this ); m_spinner[ index ] = spinner; @@ -333,6 +301,8 @@ AlbumItemDelegate::editorEvent( QEvent* event, QAbstractItemModel* model, const button->setFixedSize( 48, 48 ); button->move( option.rect.center() - QPoint( 23, 23 ) ); button->setContentsMargins( 0, 0, 0, 0 ); + button->setFocusPolicy( Qt::NoFocus ); + button->installEventFilter( this ); button->show(); NewClosure( button, SIGNAL( clicked( bool ) ), @@ -505,9 +475,34 @@ AlbumItemDelegate::onPlaybackStarted( const QPersistentModelIndex& index ) button->setFixedSize( 48, 48 ); button->move( pos ); button->setContentsMargins( 0, 0, 0, 0 ); + button->setFocusPolicy( Qt::NoFocus ); + button->installEventFilter( this ); button->show(); connect( button, SIGNAL( clicked( bool ) ), AudioEngine::instance(), SLOT( playPause() ) ); m_pauseButton[ index ] = button; } + + +bool +AlbumItemDelegate::eventFilter( QObject* obj, QEvent* event ) +{ + if ( event->type() == QEvent::Wheel ) + { + QWheelEvent* we = static_cast<QWheelEvent*>( event ); + QWheelEvent* wheelEvent = new QWheelEvent( + we->pos(), + we->globalPos(), + we->delta(), + we->buttons(), + we->modifiers(), + we->orientation() ); + + qApp->postEvent( m_view->viewport(), wheelEvent ); + event->accept(); + return true; + } + else + return QObject::eventFilter( obj, event ); +} diff --git a/src/libtomahawk/playlist/AlbumItemDelegate.h b/src/libtomahawk/playlist/AlbumItemDelegate.h index 244483a59..0715e781d 100644 --- a/src/libtomahawk/playlist/AlbumItemDelegate.h +++ b/src/libtomahawk/playlist/AlbumItemDelegate.h @@ -44,6 +44,7 @@ protected: QSize sizeHint( const QStyleOptionViewItem& option, const QModelIndex& index ) const; bool editorEvent( QEvent* event, QAbstractItemModel* model, const QStyleOptionViewItem& option, const QModelIndex& index ); + bool eventFilter( QObject* obj, QEvent* event ); signals: void updateIndex( const QModelIndex& idx );