Commit f80154be authored by Jean-Baptiste Kempf's avatar Jean-Baptiste Kempf

Qt, playlist: Move getMeta helper functions to PLModel

parent 56a27db4
...@@ -48,7 +48,7 @@ ...@@ -48,7 +48,7 @@
#include <QDesktopServices> #include <QDesktopServices>
#include <QInputDialog> #include <QInputDialog>
#include <QSignalMapper> #include <QSignalMapper>
#include <QPixmapCache>
#define I_NEW_DIR \ #define I_NEW_DIR \
I_DIR_OR_FOLDER( N_("Create Directory"), N_( "Create Folder" ) ) I_DIR_OR_FOLDER( N_("Create Directory"), N_( "Create Folder" ) )
...@@ -597,6 +597,59 @@ bool PLModel::canEdit() const ...@@ -597,6 +597,59 @@ bool PLModel::canEdit() const
) )
); );
} }
QString PLModel::getMeta( const QModelIndex & index, int meta )
{
return index.model()->index( index.row(),
PLModel::columnFromMeta( meta ),
index.parent() )
.data().toString();
}
QPixmap PLModel::getArtPixmap( const QModelIndex & index, const QSize & size )
{
PLItem *item = static_cast<PLItem*>( index.internalPointer() );
assert( item );
QString artUrl = InputManager::decodeArtURL( item->inputItem() );
/* If empty, take one of the children art URL */
if( artUrl.isEmpty() )
{
for( int i = 0; i < item->childCount(); i++ )
{
artUrl = InputManager::decodeArtURL( item->child( i )->inputItem() );
if( !artUrl.isEmpty() )
break;
}
}
QPixmap artPix;
QString key = artUrl + QString("%1%2").arg(size.width()).arg(size.height());
/* Lookup in the QPixmapCache */
if( !QPixmapCache::find( key, artPix ))
{
if( artUrl.isEmpty() || !artPix.load( artUrl ) )
{
key = QString("noart%1%2").arg(size.width()).arg(size.height());
if( !QPixmapCache::find( key, artPix ) )
{
artPix = QPixmap( ":/noart" ).scaled( size,
Qt::KeepAspectRatio,
Qt::SmoothTransformation );
QPixmapCache::insert( key, artPix );
}
}
else
{
artPix = artPix.scaled( size, Qt::KeepAspectRatio, Qt::SmoothTransformation );
QPixmapCache::insert( key, artPix );
}
}
return artPix;
}
/************************* Updates handling *****************************/ /************************* Updates handling *****************************/
/**** Events processing ****/ /**** Events processing ****/
......
...@@ -93,6 +93,9 @@ public: ...@@ -93,6 +93,9 @@ public:
static int columnFromMeta( int meta_column ); static int columnFromMeta( int meta_column );
static int columnToMeta( int column ); static int columnToMeta( int column );
static QString getMeta( const QModelIndex & index, int meta );
static QPixmap getArtPixmap( const QModelIndex & index, const QSize & size );
/* Actions */ /* Actions */
bool popup( const QModelIndex & index, const QPoint &point, const QModelIndexList &list ); bool popup( const QModelIndex & index, const QPoint &point, const QModelIndexList &list );
void doDelete( QModelIndexList selected ); void doDelete( QModelIndexList selected );
......
...@@ -31,7 +31,6 @@ ...@@ -31,7 +31,6 @@
#include <QRect> #include <QRect>
#include <QStyleOptionViewItem> #include <QStyleOptionViewItem>
#include <QFontMetrics> #include <QFontMetrics>
#include <QPixmapCache>
#include <QDrag> #include <QDrag>
#include <QDragMoveEvent> #include <QDragMoveEvent>
...@@ -42,14 +41,6 @@ ...@@ -42,14 +41,6 @@
#define ART_RADIUS 5 #define ART_RADIUS 5
#define SPACER 5 #define SPACER 5
QString AbstractPlViewItemDelegate::getMeta( const QModelIndex & index, int meta ) const
{
return index.model()->index( index.row(),
PLModel::columnFromMeta( meta ),
index.parent() )
.data().toString();
}
void AbstractPlViewItemDelegate::paintBackground( void AbstractPlViewItemDelegate::paintBackground(
QPainter *painter, const QStyleOptionViewItem & option, const QModelIndex & index ) const QPainter *painter, const QStyleOptionViewItem & option, const QModelIndex & index ) const
{ {
...@@ -82,54 +73,10 @@ void AbstractPlViewItemDelegate::paintBackground( ...@@ -82,54 +73,10 @@ void AbstractPlViewItemDelegate::paintBackground(
painter->restore(); painter->restore();
} }
QPixmap AbstractPlViewItemDelegate::getArtPixmap( const QModelIndex & index, const QSize & size ) const
{
PLItem *item = static_cast<PLItem*>( index.internalPointer() );
assert( item );
QString artUrl = InputManager::decodeArtURL( item->inputItem() );
if( artUrl.isEmpty() )
{
for( int i = 0; i < item->childCount(); i++ )
{
artUrl = InputManager::decodeArtURL( item->child( i )->inputItem() );
if( !artUrl.isEmpty() )
break;
}
}
QPixmap artPix;
QString key = artUrl + QString("%1%2").arg(size.width()).arg(size.height());
if( !QPixmapCache::find( key, artPix ))
{
if( artUrl.isEmpty() || !artPix.load( artUrl ) )
{
key = QString("noart%1%2").arg(size.width()).arg(size.height());
if( !QPixmapCache::find( key, artPix ) )
{
artPix = QPixmap( ":/noart" ).scaled( size,
Qt::KeepAspectRatio,
Qt::SmoothTransformation );
QPixmapCache::insert( key, artPix );
}
}
else
{
artPix = artPix.scaled( size, Qt::KeepAspectRatio, Qt::SmoothTransformation );
QPixmapCache::insert( key, artPix );
}
}
return artPix;
}
void PlIconViewItemDelegate::paint( QPainter * painter, const QStyleOptionViewItem & option, const QModelIndex & index ) const void PlIconViewItemDelegate::paint( QPainter * painter, const QStyleOptionViewItem & option, const QModelIndex & index ) const
{ {
QString title = getMeta( index, COLUMN_TITLE ); QString title = PLModel::getMeta( index, COLUMN_TITLE );
QString artist = getMeta( index, COLUMN_ARTIST ); QString artist = PLModel::getMeta( index, COLUMN_ARTIST );
QFont font( index.data( Qt::FontRole ).value<QFont>() ); QFont font( index.data( Qt::FontRole ).value<QFont>() );
painter->setFont( font ); painter->setFont( font );
...@@ -139,7 +86,7 @@ void PlIconViewItemDelegate::paint( QPainter * painter, const QStyleOptionViewIt ...@@ -139,7 +86,7 @@ void PlIconViewItemDelegate::paint( QPainter * painter, const QStyleOptionViewIt
int art_width = averagewidth * ICON_SCALER; int art_width = averagewidth * ICON_SCALER;
int art_height = averagewidth * ICON_SCALER; int art_height = averagewidth * ICON_SCALER;
QPixmap artPix = getArtPixmap( index, QSize( art_width, art_height) ); QPixmap artPix = PLModel::getArtPixmap( index, QSize( art_width, art_height) );
paintBackground( painter, option, index ); paintBackground( painter, option, index );
...@@ -234,13 +181,13 @@ void PlListViewItemDelegate::paint( QPainter * painter, const QStyleOptionViewIt ...@@ -234,13 +181,13 @@ void PlListViewItemDelegate::paint( QPainter * painter, const QStyleOptionViewIt
QModelIndex parent = index.parent(); QModelIndex parent = index.parent();
QModelIndex i; QModelIndex i;
QString title = getMeta( index, COLUMN_TITLE ); QString title = PLModel::getMeta( index, COLUMN_TITLE );
QString duration = getMeta( index, COLUMN_DURATION ); QString duration = PLModel::getMeta( index, COLUMN_DURATION );
if( !duration.isEmpty() ) title += QString(" [%1]").arg( duration ); if( !duration.isEmpty() ) title += QString(" [%1]").arg( duration );
QString artist = getMeta( index, COLUMN_ARTIST ); QString artist = PLModel::getMeta( index, COLUMN_ARTIST );
QString album = getMeta( index, COLUMN_ALBUM ); QString album = PLModel::getMeta( index, COLUMN_ALBUM );
QString trackNum = getMeta( index, COLUMN_TRACK_NUMBER ); QString trackNum = PLModel::getMeta( index, COLUMN_TRACK_NUMBER );
QString artistAlbum = artist; QString artistAlbum = artist;
if( !album.isEmpty() ) if( !album.isEmpty() )
{ {
...@@ -249,7 +196,7 @@ void PlListViewItemDelegate::paint( QPainter * painter, const QStyleOptionViewIt ...@@ -249,7 +196,7 @@ void PlListViewItemDelegate::paint( QPainter * painter, const QStyleOptionViewIt
if( !trackNum.isEmpty() ) artistAlbum += QString( " [#%1]" ).arg( trackNum ); if( !trackNum.isEmpty() ) artistAlbum += QString( " [#%1]" ).arg( trackNum );
} }
QPixmap artPix = getArtPixmap( index, QSize( LISTVIEW_ART_SIZE, LISTVIEW_ART_SIZE ) ); QPixmap artPix = PLModel::getArtPixmap( index, QSize( LISTVIEW_ART_SIZE, LISTVIEW_ART_SIZE ) );
//Draw selection rectangle and current playing item indication //Draw selection rectangle and current playing item indication
paintBackground( painter, option, index ); paintBackground( painter, option, index );
......
...@@ -35,9 +35,7 @@ class AbstractPlViewItemDelegate : public QStyledItemDelegate ...@@ -35,9 +35,7 @@ class AbstractPlViewItemDelegate : public QStyledItemDelegate
{ {
public: public:
AbstractPlViewItemDelegate( QWidget * parent = 0 ) : QStyledItemDelegate(parent) {} AbstractPlViewItemDelegate( QWidget * parent = 0 ) : QStyledItemDelegate(parent) {}
QString getMeta( const QModelIndex & index, int meta ) const;
void paintBackground( QPainter *, const QStyleOptionViewItem &, const QModelIndex & ) const; void paintBackground( QPainter *, const QStyleOptionViewItem &, const QModelIndex & ) const;
QPixmap getArtPixmap( const QModelIndex & index, const QSize & size ) const;
}; };
class PlIconViewItemDelegate : public AbstractPlViewItemDelegate class PlIconViewItemDelegate : public AbstractPlViewItemDelegate
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment