diff --git a/src/sourcetree/SourcesModel.cpp b/src/sourcetree/SourcesModel.cpp index 2c383ef40..1b532e3b8 100644 --- a/src/sourcetree/SourcesModel.cpp +++ b/src/sourcetree/SourcesModel.cpp @@ -101,41 +101,48 @@ SourcesModel::data( const QModelIndex& index, int role ) const if ( !index.isValid() ) return QVariant(); + SourceTreeItem* item = itemFromIndex( index ); + if ( !item ) + return QVariant(); + switch ( role ) { case Qt::SizeHintRole: return QSize( 0, 18 ); case SourceTreeItemRole: - return QVariant::fromValue< SourceTreeItem* >( itemFromIndex( index ) ); + return QVariant::fromValue< SourceTreeItem* >( item ); case SourceTreeItemTypeRole: - return itemFromIndex( index )->type(); + return item->type(); case Qt::DisplayRole: case Qt::EditRole: - return itemFromIndex( index )->text(); + return item->text(); case Qt::DecorationRole: - return itemFromIndex( index )->icon(); + return item->icon(); case SourcesModel::SortRole: - return itemFromIndex( index )->peerSortValue(); + return item->peerSortValue(); case SourcesModel::IDRole: - return itemFromIndex( index )->IDValue(); + return item->IDValue(); case SourcesModel::LatchedOnRole: { - if ( itemFromIndex( index )->type() == Collection ) + if ( item->type() == Collection ) { - SourceItem* cItem = qobject_cast< SourceItem* >( itemFromIndex( index ) ); + SourceItem* cItem = qobject_cast< SourceItem* >( item ); return cItem->localLatchedOn(); } return false; } case SourcesModel::LatchedRealtimeRole: { - if ( itemFromIndex( index )->type() == Collection ) + if ( item->type() == Collection ) { - SourceItem* cItem = qobject_cast< SourceItem* >( itemFromIndex( index ) ); + SourceItem* cItem = qobject_cast< SourceItem* >( item ); return cItem->localLatchMode() == Tomahawk::PlaylistModes::RealTime; } return false; } + case Qt::ToolTipRole: + if ( !item->tooltip().isEmpty() ) + return item->tooltip(); } return QVariant(); } diff --git a/src/sourcetree/items/SourceItem.cpp b/src/sourcetree/items/SourceItem.cpp index 03f7be0db..4847d8512 100644 --- a/src/sourcetree/items/SourceItem.cpp +++ b/src/sourcetree/items/SourceItem.cpp @@ -145,6 +145,16 @@ SourceItem::text() const } +QString +SourceItem::tooltip() const +{ + if ( !m_source.isNull() && !m_source->currentTrack().isNull() ) + return m_source->textStatus(); + + return QString(); +} + + int SourceItem::IDValue() const { diff --git a/src/sourcetree/items/SourceItem.h b/src/sourcetree/items/SourceItem.h index 7f4a87ed8..cd6711735 100644 --- a/src/sourcetree/items/SourceItem.h +++ b/src/sourcetree/items/SourceItem.h @@ -38,6 +38,7 @@ public: SourceItem( SourcesModel* model, SourceTreeItem* parent, const Tomahawk::source_ptr& source ); virtual QString text() const; + virtual QString tooltip() const; virtual QIcon icon() const; virtual int peerSortValue() const; virtual int IDValue() const; diff --git a/src/sourcetree/items/SourceTreeItem.h b/src/sourcetree/items/SourceTreeItem.h index b2a527a05..410542e9e 100644 --- a/src/sourcetree/items/SourceTreeItem.h +++ b/src/sourcetree/items/SourceTreeItem.h @@ -58,6 +58,7 @@ public: // varies depending on the type of the item virtual QString text() const { return QString(); } + virtual QString tooltip() const { return QString(); } virtual Qt::ItemFlags flags() const { return Qt::ItemIsSelectable | Qt::ItemIsEnabled; } virtual QIcon icon() const { return QIcon(); } virtual bool willAcceptDrag( const QMimeData* ) const { return false; }