diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 1bb1f4a26..474457815 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -125,6 +125,7 @@ SET( tomahawkSourcesGui ${tomahawkSourcesGui} playlist/albumitem.cpp playlist/albummodel.cpp playlist/albumproxymodel.cpp + playlist/albumitemdelegate.cpp playlist/albumview.cpp sourcetree/sourcesmodel.cpp @@ -255,6 +256,7 @@ SET( tomahawkHeadersGui ${tomahawkHeadersGui} playlist/albumitem.h playlist/albummodel.h playlist/albumproxymodel.h + playlist/albumitemdelegate.h playlist/albumview.h sourcetree/sourcesmodel.h diff --git a/src/infowidgets/sourceinfowidget.ui b/src/infowidgets/sourceinfowidget.ui index 8fc4ef72d..599534a6a 100644 --- a/src/infowidgets/sourceinfowidget.ui +++ b/src/infowidgets/sourceinfowidget.ui @@ -55,13 +55,13 @@ <property name="minimumSize"> <size> <width>0</width> - <height>210</height> + <height>192</height> </size> </property> <property name="maximumSize"> <size> <width>16777215</width> - <height>210</height> + <height>192</height> </size> </property> </widget> diff --git a/src/playlist/albumitemdelegate.cpp b/src/playlist/albumitemdelegate.cpp new file mode 100644 index 000000000..5ac910c9c --- /dev/null +++ b/src/playlist/albumitemdelegate.cpp @@ -0,0 +1,65 @@ +#include "albumitemdelegate.h" + +#include <QDebug> +#include <QPainter> +#include <QAbstractItemView> + +#include "tomahawk/query.h" +#include "tomahawk/result.h" +#include "tomahawk/tomahawkapp.h" + +#include "playlist/albumitem.h" +#include "playlist/albumproxymodel.h" + + +AlbumItemDelegate::AlbumItemDelegate( QAbstractItemView* parent, AlbumProxyModel* proxy ) + : QStyledItemDelegate( (QObject*)parent ) + , m_view( parent ) + , m_model( proxy ) +{ +} + + +QSize +AlbumItemDelegate::sizeHint( const QStyleOptionViewItem& option, const QModelIndex& index ) const +{ + QSize size = QStyledItemDelegate::sizeHint( option, index ); + return size; +} + + +void +AlbumItemDelegate::paint( QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index ) const +{ + AlbumItem* item = m_model->sourceModel()->itemFromIndex( m_model->mapToSource( index ) ); + if ( !item ) + return; + + QStyleOptionViewItemV4 opt = option; + initStyleOption( &opt, QModelIndex() ); + APP->style()->drawControl( QStyle::CE_ItemViewItem, &opt, painter ); + + if ( option.state & QStyle::State_Selected ) + { + opt.palette.setColor( QPalette::Text, opt.palette.color( QPalette::HighlightedText ) ); + } + + painter->save(); + painter->setRenderHint( QPainter::Antialiasing ); + painter->setPen( opt.palette.color( QPalette::Text ) ); + + painter->drawPixmap( option.rect.adjusted( 4, 4, -4, -38 ), item->cover ); + + QTextOption to; + to.setAlignment( Qt::AlignHCenter ); + QFont font = opt.font; + QFont boldFont = opt.font; + boldFont.setBold( true ); + + painter->drawText( option.rect.adjusted( 0, option.rect.height() - 16, 0, -2 ), item->album()->artist()->name(), to ); + + painter->setFont( boldFont ); + painter->drawText( option.rect.adjusted( 0, option.rect.height() - 32, 0, -18 ), item->album()->name(), to ); + + painter->restore(); +} diff --git a/src/playlist/albumitemdelegate.h b/src/playlist/albumitemdelegate.h new file mode 100644 index 000000000..9798a9b28 --- /dev/null +++ b/src/playlist/albumitemdelegate.h @@ -0,0 +1,26 @@ +#ifndef ALBUMITEMDELEGATE_H +#define ALBUMITEMDELEGATE_H + +#include <QStyledItemDelegate> + +class AlbumProxyModel; + +class AlbumItemDelegate : public QStyledItemDelegate +{ +Q_OBJECT + +public: + AlbumItemDelegate( QAbstractItemView* parent = 0, AlbumProxyModel* proxy = 0 ); + +protected: + void paint( QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index ) const; + QSize sizeHint( const QStyleOptionViewItem& option, const QModelIndex& index ) const; + +// QWidget* createEditor( QWidget* parent, const QStyleOptionViewItem& option, const QModelIndex& index ) const; + +private: + QAbstractItemView* m_view; + AlbumProxyModel* m_model; +}; + +#endif // ALBUMITEMDELEGATE_H diff --git a/src/playlist/albummodel.cpp b/src/playlist/albummodel.cpp index 1742687bb..be03ef3c9 100644 --- a/src/playlist/albummodel.cpp +++ b/src/playlist/albummodel.cpp @@ -20,7 +20,7 @@ AlbumModel::AlbumModel( QObject* parent ) qDebug() << Q_FUNC_INFO; m_defaultCover = QPixmap( RESPATH "images/no-album-art-placeholder.png" ) - .scaled( QSize( 64, 64 ), Qt::IgnoreAspectRatio, Qt::SmoothTransformation ); + .scaled( QSize( 120, 120 ), Qt::IgnoreAspectRatio, Qt::SmoothTransformation ); } @@ -100,7 +100,7 @@ AlbumModel::data( const QModelIndex& index, int role ) const if ( role == Qt::SizeHintRole ) { - return QSize( 90, 90 ); + return QSize( 116, 150 ); } if ( role != Qt::DisplayRole ) // && role != Qt::ToolTipRole ) @@ -110,7 +110,7 @@ AlbumModel::data( const QModelIndex& index, int role ) const switch( index.column() ) { case 0: - return album->name(); + return album->name() + "<br/>Test\nTest2"; break; } @@ -251,7 +251,7 @@ AlbumModel::onAlbumsAdded( const QList<Tomahawk::album_ptr>& albums, const Tomah albumitem->cover = m_defaultCover; albumitem->index = createIndex( m_rootItem->children.count() - 1, 0, albumitem ); - QString imgurl = "http://ws.audioscrobbler.com/2.0/?method=album.imageredirect&artist=%1&album=%2&size=medium&api_key=7a90f6672a04b809ee309af169f34b8b"; + QString imgurl = "http://ws.audioscrobbler.com/2.0/?method=album.imageredirect&artist=%1&album=%2&size=large&api_key=7a90f6672a04b809ee309af169f34b8b"; QNetworkRequest req( imgurl.arg( album->artist()->name() ).arg( album->name() ) ); req.setAttribute( QNetworkRequest::User, (qlonglong)albumitem ); QNetworkReply* reply = APP->nam()->get( req ); @@ -288,7 +288,7 @@ AlbumModel::onCoverArtDownloaded() } else { - ai->setCover( pm.scaled( QSize( 64, 64 ), Qt::IgnoreAspectRatio, Qt::SmoothTransformation ) ); + ai->setCover( pm.scaled( QSize( 150, 150 ), Qt::IgnoreAspectRatio, Qt::SmoothTransformation ) ); } } } diff --git a/src/playlist/albumview.cpp b/src/playlist/albumview.cpp index 889e588c3..de60f9522 100644 --- a/src/playlist/albumview.cpp +++ b/src/playlist/albumview.cpp @@ -10,6 +10,7 @@ #include "audioengine.h" #include "tomahawksettings.h" +#include "albumitemdelegate.h" #include "albummodel.h" #include "albumproxymodel.h" #include "playlistmanager.h" @@ -27,11 +28,12 @@ AlbumView::AlbumView( QWidget* parent ) setDropIndicatorShown( false ); setDragDropOverwriteMode( false ); setUniformItemSizes( true ); - setSpacing( 8 ); + setSpacing( 20 ); + setWordWrap( true ); setResizeMode( Adjust ); setViewMode( IconMode ); - setIconSize( QSize( 64, 64 ) ); +// setIconSize( QSize( 64, 64 ) ); setProxyModel( new AlbumProxyModel( this ) ); @@ -49,8 +51,7 @@ void AlbumView::setProxyModel( AlbumProxyModel* model ) { m_proxyModel = model; -// m_delegate = new PlaylistItemDelegate( this, m_proxyModel ); -// setItemDelegate( m_delegate ); + setItemDelegate( new AlbumItemDelegate( this, m_proxyModel ) ); QListView::setModel( m_proxyModel ); } diff --git a/src/playlist/playlistview.cpp b/src/playlist/playlistview.cpp index 305e1d30e..7764f9bc5 100644 --- a/src/playlist/playlistview.cpp +++ b/src/playlist/playlistview.cpp @@ -38,12 +38,17 @@ PlaylistView::setupMenus() { m_itemMenu.clear(); + unsigned int i = 0; + foreach( const QModelIndex& idx, selectedIndexes() ) + if ( idx.column() == 0 ) + i++; + m_playItemAction = m_itemMenu.addAction( tr( "&Play" ) ); m_addItemsToQueueAction = m_itemMenu.addAction( tr( "Add to &Queue" ) ); m_itemMenu.addSeparator(); m_addItemsToPlaylistAction = m_itemMenu.addAction( tr( "&Add to Playlist" ) ); m_itemMenu.addSeparator(); - m_deleteItemsAction = m_itemMenu.addAction( tr( "&Delete Item" ) ); + m_deleteItemsAction = m_itemMenu.addAction( i > 1 ? tr( "&Delete Items" ) : tr( "&Delete Item" ) ); if ( model() ) m_deleteItemsAction->setEnabled( !model()->isReadOnly() );