void updateOpacity() { QPoint pos = q->parentWidget()->mapFromGlobal(QCursor::pos()); QRect opaqueRect = q->geometry(); bool opaqueCollapser = opaqueRect.contains(pos); int frame = mOpacityTimeLine->currentFrame(); if (opaqueCollapser && frame == mOpacityTimeLine->startFrame()) { mOpacityTimeLine->setDirection(QTimeLine::Forward); startTimeLine(); } else if (!opaqueCollapser && frame == mOpacityTimeLine->endFrame()) { mOpacityTimeLine->setDirection(QTimeLine::Backward); startTimeLine(); } }
bool GridItemDelegate::editorEvent( QEvent* event, QAbstractItemModel* model, const QStyleOptionViewItem& option, const QModelIndex& index ) { Q_UNUSED( model ); Q_UNUSED( option ); if ( event->type() != QEvent::MouseButtonRelease && event->type() != QEvent::MouseMove && event->type() != QEvent::MouseButtonPress && event->type() != QEvent::Leave ) return false; const QMouseEvent* ev = static_cast< QMouseEvent* >( event ); bool hoveringArtist = false; bool hoveringAlbum = false; bool hoveringBuyButton = false; if ( m_artistNameRects.contains( index ) ) { const QRect artistNameRect = m_artistNameRects[ index ]; hoveringArtist = artistNameRect.contains( ev->pos() ); } if ( m_albumNameRects.contains( index ) ) { const QRect albumNameRect = m_albumNameRects[ index ]; hoveringAlbum = albumNameRect.contains( ev->pos() ); } if ( m_buyButtonRects.contains( index ) ) { const QRect buyButtonRect = m_buyButtonRects[ index ]; hoveringBuyButton = buyButtonRect.contains( ev->pos() ); } QRect coverRect = m_view->visualRect( index ); coverRect.setHeight( coverRect.width() ); const bool hoveringCover = coverRect.contains( ev->pos() ); if ( event->type() == QEvent::MouseMove ) { if ( hoveringArtist || hoveringAlbum || hoveringBuyButton ) m_view->setCursor( Qt::PointingHandCursor ); else m_view->setCursor( Qt::ArrowCursor ); foreach ( const QModelIndex& idx, m_hoverControls.keys() ) { if ( index != idx ) m_hoverControls.take( idx )->deleteLater(); } if ( hoveringCover && !m_hoverControls.contains( index ) && !m_spinner.contains( index ) ) { foreach ( HoverControls* control, m_hoverControls ) control->deleteLater(); m_hoverControls.clear(); QRect cRect = option.rect; cRect.setHeight( cRect.width() ); HoverControls* controls = new HoverControls( m_view ); controls->setFixedSize( m_margin * 2, m_margin + m_margin / 4 ); controls->move( cRect.center() - QPoint( controls->width() / 2 -1, controls->height() / 2 -1 ) ); controls->setContentsMargins( 0, 0, 0, 0 ); controls->setFocusPolicy( Qt::NoFocus ); controls->installEventFilter( this ); controls->show(); NewClosure( controls, SIGNAL( play() ), const_cast<GridItemDelegate*>(this), SLOT( onPlayClicked( QPersistentModelIndex ) ), QPersistentModelIndex( index ) ); m_hoverControls[ index ] = controls; } if ( m_hoveringOverArtist != index || ( !hoveringArtist && m_hoveringOverArtist.isValid() ) ) { emit updateIndex( m_hoveringOverArtist ); if ( hoveringArtist ) m_hoveringOverArtist = index; else m_hoveringOverArtist = QPersistentModelIndex(); emit updateIndex( index ); } if ( m_hoveringOverAlbum != index || ( !hoveringAlbum && m_hoveringOverAlbum.isValid() ) ) { emit updateIndex( m_hoveringOverAlbum ); if ( hoveringAlbum ) m_hoveringOverAlbum = index; else m_hoveringOverAlbum = QPersistentModelIndex(); emit updateIndex( index ); } if ( m_hoveringOverBuyButton != index || ( !hoveringBuyButton && m_hoveringOverBuyButton.isValid() ) ) { emit updateIndex( m_hoveringOverBuyButton ); if ( hoveringBuyButton ) m_hoveringOverBuyButton = index; else m_hoveringOverBuyButton = QPersistentModelIndex(); emit updateIndex( index ); } if ( m_hoverIndex != index || !hoveringCover ) { if ( m_hoverIndex.isValid() ) { int startFrame = 100; if ( m_hoverFaders.contains( m_hoverIndex ) ) { QTimeLine* oldFader = m_hoverFaders.take( m_hoverIndex ); startFrame = oldFader->currentFrame(); oldFader->deleteLater(); } QTimeLine* fadeOut = createTimeline( QTimeLine::Backward, startFrame ); _detail::Closure* c = NewClosure( fadeOut, SIGNAL( frameChanged( int ) ), this, SLOT( fadingFrameChanged( QPersistentModelIndex ) ), QPersistentModelIndex( m_hoverIndex ) ); c->setAutoDelete( false ); c = NewClosure( fadeOut, SIGNAL( finished() ), this, SLOT( fadingFrameFinished( QPersistentModelIndex ) ), QPersistentModelIndex( m_hoverIndex ) ); c->setAutoDelete( false ); m_hoverFaders[ m_hoverIndex ] = fadeOut; fadeOut->start(); } emit updateIndex( m_hoverIndex ); foreach ( HoverControls* controls, m_hoverControls ) controls->deleteLater(); m_hoverControls.clear(); m_hoverIndex = QPersistentModelIndex(); } if ( hoveringCover && m_hoverIndex != index ) { m_hoverIndex = index; int startFrame = 0; if ( m_hoverFaders.contains( index ) ) { QTimeLine* oldFader = m_hoverFaders.take( index ); startFrame = oldFader->currentFrame(); oldFader->deleteLater(); } QTimeLine* fadeIn = createTimeline( QTimeLine::Forward, startFrame ); _detail::Closure* c = NewClosure( fadeIn, SIGNAL( frameChanged( int ) ), this, SLOT( fadingFrameChanged( QPersistentModelIndex ) ), QPersistentModelIndex( index ) ); c->setAutoDelete( false ); c = NewClosure( fadeIn, SIGNAL( finished() ), this, SLOT( fadingFrameFinished( QPersistentModelIndex ) ), QPersistentModelIndex( index ) ); c->setAutoDelete( false ); m_hoverFaders[ index ] = fadeIn; fadeIn->start(); emit updateIndex( index ); }