From 3721ef2975691191375cd846dc0d556c12a98683 Mon Sep 17 00:00:00 2001 From: Christian Muehlhaeuser <muesli@gmail.com> Date: Mon, 3 Dec 2012 17:15:11 +0100 Subject: [PATCH] * Mark-up tracks in the sidebar when hovered. --- src/sourcetree/SourceDelegate.cpp | 28 +++++++++++++++++++++++++--- src/sourcetree/SourceDelegate.h | 5 +++-- 2 files changed, 28 insertions(+), 5 deletions(-) diff --git a/src/sourcetree/SourceDelegate.cpp b/src/sourcetree/SourceDelegate.cpp index 3d8420a78..f30c09be6 100644 --- a/src/sourcetree/SourceDelegate.cpp +++ b/src/sourcetree/SourceDelegate.cpp @@ -263,6 +263,12 @@ SourceDelegate::paintCollection( QPainter* painter, const QStyleOptionViewItem& m_lockRects.remove( index ); } + if ( m_trackHovered == index ) + { + QFont font = painter->font(); + font.setUnderline( true ); + painter->setFont( font ); + } textRect.adjust( 0, 0, 0, 2 ); text = painter->fontMetrics().elidedText( desc, Qt::ElideRight, textRect.width() - 8 ); QTextOption to( Qt::AlignVCenter ); @@ -626,6 +632,22 @@ SourceDelegate::editorEvent( QEvent* event, QAbstractItemModel* model, const QSt const QRect trackRect = m_trackRects[ index ]; const QMouseEvent* ev = static_cast< QMouseEvent* >( event ); hoveringTrack = trackRect.contains( ev->pos() ); + + if ( hoveringTrack ) + { + if ( m_trackHovered != index ) + { + m_trackHovered = index; + QMetaObject::invokeMethod( m_parent, "update", Qt::QueuedConnection, Q_ARG( QModelIndex, index ) ); + } + } + } + if ( !hoveringTrack ) + { + if ( m_trackHovered.isValid() ) + QMetaObject::invokeMethod( m_parent, "update", Qt::QueuedConnection, Q_ARG( QModelIndex, m_trackHovered ) ); + + m_trackHovered = QPersistentModelIndex(); } bool lockRectContainsClick = false, headphonesRectContainsClick = false; @@ -806,7 +828,7 @@ SourceDelegate::hovered( const QModelIndex& index, const QMimeData* mimeData ) { if ( !index.isValid() ) { - foreach ( AnimationHelper *helper, m_expandedMap ) + foreach ( AnimationHelper* helper, m_expandedMap ) { helper->collapse(); } @@ -815,14 +837,14 @@ SourceDelegate::hovered( const QModelIndex& index, const QMimeData* mimeData ) if ( !m_expandedMap.contains( index ) ) { - foreach ( AnimationHelper *helper, m_expandedMap ) + foreach ( AnimationHelper* helper, m_expandedMap ) { helper->collapse(); } m_newDropHoverIndex = index; m_dropMimeData->clear(); - foreach ( const QString &mimeDataFormat, mimeData->formats() ) + foreach ( const QString& mimeDataFormat, mimeData->formats() ) { m_dropMimeData->setData( mimeDataFormat, mimeData->data( mimeDataFormat ) ); } diff --git a/src/sourcetree/SourceDelegate.h b/src/sourcetree/SourceDelegate.h index 9fe2d4bb4..62881e520 100644 --- a/src/sourcetree/SourceDelegate.h +++ b/src/sourcetree/SourceDelegate.h @@ -37,7 +37,7 @@ public: SourceDelegate( QAbstractItemView* parent = 0 ); ~SourceDelegate(); - void hovered( const QModelIndex &index, const QMimeData *mimeData ); + void hovered( const QModelIndex& index, const QMimeData* mimeData ); void dragLeaveEvent(); SourceTreeItem::DropType hoveredDropType() const; @@ -69,7 +69,7 @@ private: mutable int m_iconHeight; QModelIndex m_dropHoverIndex; QModelIndex m_newDropHoverIndex; - QMimeData *m_dropMimeData; + QMimeData* m_dropMimeData; mutable SourceTreeItem::DropType m_hoveredDropType; // Hack to keep easily track of the current highlighted DropType in paint() QMap< QModelIndex, AnimationHelper* > m_expandedMap; QPixmap m_headphonesOn, m_headphonesOff, m_realtimeLocked, m_realtimeUnlocked, m_nowPlayingSpeaker, m_nowPlayingSpeakerDark, m_collaborativeOn; @@ -78,6 +78,7 @@ private: QMap< int, QString > m_dropTypeTextMap; QMap< int, QPixmap > m_dropTypeImageMap; + mutable QPersistentModelIndex m_trackHovered; mutable QHash< QPersistentModelIndex, QRect > m_trackRects; mutable QHash< QPersistentModelIndex, QRect > m_headphoneRects; mutable QHash< QPersistentModelIndex, QRect > m_lockRects;