From b9eb9ca6d45ae2104675508c2169fc122e1c3a12 Mon Sep 17 00:00:00 2001 From: Christian Muehlhaeuser Date: Mon, 24 Jan 2011 05:13:33 +0100 Subject: [PATCH 1/5] * Fixed TrackView's delegate to deal with user-moved columns. --- .../playlist/playlistitemdelegate.cpp | 18 ++++++++++-------- .../playlist/playlistitemdelegate.h | 5 +++-- src/libtomahawk/playlist/trackheader.cpp | 7 +++++++ src/libtomahawk/playlist/trackheader.h | 2 ++ src/libtomahawk/playlist/trackmodel.cpp | 3 --- 5 files changed, 22 insertions(+), 13 deletions(-) diff --git a/src/libtomahawk/playlist/playlistitemdelegate.cpp b/src/libtomahawk/playlist/playlistitemdelegate.cpp index 4b7cf133f..ca4c44305 100644 --- a/src/libtomahawk/playlist/playlistitemdelegate.cpp +++ b/src/libtomahawk/playlist/playlistitemdelegate.cpp @@ -9,11 +9,15 @@ #include "playlist/plitem.h" #include "playlist/trackproxymodel.h" +#include "playlist/trackview.h" +#include "playlist/trackheader.h" -#include "audio/audioengine.h" +#include "utils/tomahawkutils.h" + +#define PLAYING_ICON QString( RESPATH "images/now-playing-speaker.png" ) -PlaylistItemDelegate::PlaylistItemDelegate( QAbstractItemView* parent, TrackProxyModel* proxy ) +PlaylistItemDelegate::PlaylistItemDelegate( TrackView* parent, TrackProxyModel* proxy ) : QStyledItemDelegate( (QObject*)parent ) , m_view( parent ) , m_model( proxy ) @@ -37,7 +41,7 @@ PlaylistItemDelegate::sizeHint( const QStyleOptionViewItem& option, const QModel QWidget* -PlaylistItemDelegate::createEditor ( QWidget* parent, const QStyleOptionViewItem& option, const QModelIndex& index ) const +PlaylistItemDelegate::createEditor( QWidget* parent, const QStyleOptionViewItem& option, const QModelIndex& index ) const { return 0; } @@ -48,9 +52,7 @@ PlaylistItemDelegate::paint( QPainter* painter, const QStyleOptionViewItem& opti { PlItem* item = m_model->itemFromIndex( m_model->mapToSource( index ) ); if ( !item || item->query().isNull() ) - { return; - } if ( item->query()->results().count() ) painter->setOpacity( item->query()->results().at( 0 )->score() ); @@ -64,9 +66,9 @@ PlaylistItemDelegate::paint( QPainter* painter, const QStyleOptionViewItem& opti { QRect r = option.rect.adjusted( 3, 0, 0, -3 ); - if ( index.column() == 0 ) + if ( m_view->header()->visualIndex( index.column() ) == 0 ) { - painter->drawPixmap( r.adjusted( 3, 3, 18 - r.width(), 0 ), QPixmap( index.data( Qt::DecorationRole ).toString() ) ); + painter->drawPixmap( r.adjusted( 3, 3, 18 - r.width(), 0 ), QPixmap( PLAYING_ICON ) ); r = r.adjusted( 22, 0, 0, 0 ); } @@ -74,7 +76,7 @@ PlaylistItemDelegate::paint( QPainter* painter, const QStyleOptionViewItem& opti painter->drawText( r.adjusted( 0, 2, 0, 0 ), index.data().toString() ); } - if ( index.column() == index.model()->columnCount() - 1 ) + if ( m_view->header()->visualIndex( index.column() ) == m_view->header()->visibleSectionCount() - 1 ) { QRect r = QRect( 3, option.rect.y() + 1, m_view->viewport()->width() - 6, option.rect.height() - 2 ); painter->setPen( option.palette.highlight().color() ); diff --git a/src/libtomahawk/playlist/playlistitemdelegate.h b/src/libtomahawk/playlist/playlistitemdelegate.h index 8001a48b7..6469bf899 100644 --- a/src/libtomahawk/playlist/playlistitemdelegate.h +++ b/src/libtomahawk/playlist/playlistitemdelegate.h @@ -6,13 +6,14 @@ #include "dllmacro.h" class TrackProxyModel; +class TrackView; class DLLEXPORT PlaylistItemDelegate : public QStyledItemDelegate { Q_OBJECT public: - PlaylistItemDelegate( QAbstractItemView* parent = 0, TrackProxyModel* proxy = 0 ); + PlaylistItemDelegate( TrackView* parent = 0, TrackProxyModel* proxy = 0 ); void updateRowSize( const QModelIndex& index ); @@ -27,7 +28,7 @@ protected: private: unsigned int m_removalProgress; - QAbstractItemView* m_view; + TrackView* m_view; TrackProxyModel* m_model; }; diff --git a/src/libtomahawk/playlist/trackheader.cpp b/src/libtomahawk/playlist/trackheader.cpp index 6472b24bb..bd088424c 100644 --- a/src/libtomahawk/playlist/trackheader.cpp +++ b/src/libtomahawk/playlist/trackheader.cpp @@ -39,6 +39,13 @@ TrackHeader::~TrackHeader() } +int +TrackHeader::visibleSectionCount() const +{ + return count() - hiddenSectionCount(); +} + + void TrackHeader::onSectionResized( int logicalidx, int oldSize, int newSize ) { diff --git a/src/libtomahawk/playlist/trackheader.h b/src/libtomahawk/playlist/trackheader.h index 5f36cdba8..75db27b0d 100644 --- a/src/libtomahawk/playlist/trackheader.h +++ b/src/libtomahawk/playlist/trackheader.h @@ -16,6 +16,8 @@ public: explicit TrackHeader( TrackView* parent = 0 ); ~TrackHeader(); + int visibleSectionCount() const; + public slots: void onResized(); void toggleVisibility( int index ); diff --git a/src/libtomahawk/playlist/trackmodel.cpp b/src/libtomahawk/playlist/trackmodel.cpp index 0a78a446e..7cb73631b 100644 --- a/src/libtomahawk/playlist/trackmodel.cpp +++ b/src/libtomahawk/playlist/trackmodel.cpp @@ -95,9 +95,6 @@ TrackModel::data( const QModelIndex& index, int role ) const if ( role == Qt::DecorationRole ) { - if ( index.column() == 0 && entry->isPlaying() ) - return QString( RESPATH "images/now-playing-speaker.png" ); - return QVariant(); } From fcad645e4598be3054a2bc99c9797e714950d423 Mon Sep 17 00:00:00 2001 From: Christian Muehlhaeuser Date: Mon, 24 Jan 2011 05:55:57 +0100 Subject: [PATCH 2/5] * A few more cleanups inside the playlist item delegate. --- src/libtomahawk/playlist/playlistitemdelegate.cpp | 15 +++++++++------ src/libtomahawk/playlist/playlistitemdelegate.h | 2 ++ 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/src/libtomahawk/playlist/playlistitemdelegate.cpp b/src/libtomahawk/playlist/playlistitemdelegate.cpp index ca4c44305..8aed62255 100644 --- a/src/libtomahawk/playlist/playlistitemdelegate.cpp +++ b/src/libtomahawk/playlist/playlistitemdelegate.cpp @@ -2,7 +2,6 @@ #include #include -#include #include "query.h" #include "result.h" @@ -22,6 +21,7 @@ PlaylistItemDelegate::PlaylistItemDelegate( TrackView* parent, TrackProxyModel* , m_view( parent ) , m_model( proxy ) { + m_nowPlayingIcon = QPixmap( PLAYING_ICON ); } @@ -65,18 +65,21 @@ PlaylistItemDelegate::paint( QPainter* painter, const QStyleOptionViewItem& opti painter->setRenderHint( QPainter::Antialiasing ); { - QRect r = option.rect.adjusted( 3, 0, 0, -3 ); + QRect r = option.rect.adjusted( 3, 0, 0, 0 ); if ( m_view->header()->visualIndex( index.column() ) == 0 ) { - painter->drawPixmap( r.adjusted( 3, 3, 18 - r.width(), 0 ), QPixmap( PLAYING_ICON ) ); - r = r.adjusted( 22, 0, 0, 0 ); + r.adjust( 0, 0, 0, -3 ); + painter->drawPixmap( r.adjusted( 3, 3, 18 - r.width(), 0 ), m_nowPlayingIcon ); + r.adjust( 22, 0, 0, 3 ); } + QTextOption to( Qt::AlignVCenter ); + painter->setPen( option.palette.text().color() ); - painter->drawText( r.adjusted( 0, 2, 0, 0 ), index.data().toString() ); + painter->drawText( r.adjusted( 0, 1, 0, 0 ), index.data().toString(), to ); } - if ( m_view->header()->visualIndex( index.column() ) == m_view->header()->visibleSectionCount() - 1 ) + if ( m_view->header()->visualIndex( index.column() ) == m_view->header()->visibleSectionCount() - 1 ) { QRect r = QRect( 3, option.rect.y() + 1, m_view->viewport()->width() - 6, option.rect.height() - 2 ); painter->setPen( option.palette.highlight().color() ); diff --git a/src/libtomahawk/playlist/playlistitemdelegate.h b/src/libtomahawk/playlist/playlistitemdelegate.h index 6469bf899..858c80a66 100644 --- a/src/libtomahawk/playlist/playlistitemdelegate.h +++ b/src/libtomahawk/playlist/playlistitemdelegate.h @@ -28,6 +28,8 @@ protected: private: unsigned int m_removalProgress; + QPixmap m_nowPlayingIcon; + TrackView* m_view; TrackProxyModel* m_model; }; From 232fdfc06c02fbb1e2a1d835911d79c8c4d48cf9 Mon Sep 17 00:00:00 2001 From: Christian Muehlhaeuser Date: Mon, 24 Jan 2011 05:56:40 +0100 Subject: [PATCH 3/5] * Some routers are just too slow. Increased wait timeout before killing the PortFwdThread. --- src/libtomahawk/network/portfwdthread.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/libtomahawk/network/portfwdthread.cpp b/src/libtomahawk/network/portfwdthread.cpp index 4da5c8a35..5b6a0a142 100644 --- a/src/libtomahawk/network/portfwdthread.cpp +++ b/src/libtomahawk/network/portfwdthread.cpp @@ -23,7 +23,7 @@ PortFwdThread::~PortFwdThread() { qDebug() << Q_FUNC_INFO << "waiting for event loop to finish..."; quit(); - wait( 2500 ); + wait( 10000 ); delete m_portfwd; } @@ -49,7 +49,7 @@ PortFwdThread::work() m_portfwd->remove( tryport ); } - for( int r = 0; r < 5; ++r ) + for( int r = 0; r < 3; ++r ) { qDebug() << "Trying to setup portfwd on" << tryport; if( m_portfwd->add( tryport, m_port ) ) From c75413a84c3584b89efc2ac0179acb6ae11fa49e Mon Sep 17 00:00:00 2001 From: Christian Muehlhaeuser Date: Mon, 24 Jan 2011 05:57:33 +0100 Subject: [PATCH 4/5] * Renamed cli argument: It's now --nosip instead of --nojabber. --- src/tomahawkapp.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/tomahawkapp.cpp b/src/tomahawkapp.cpp index 482616967..ed0f1e2e1 100644 --- a/src/tomahawkapp.cpp +++ b/src/tomahawkapp.cpp @@ -385,7 +385,7 @@ TomahawkApp::setupSIP() { qDebug() << Q_FUNC_INFO; - if( !arguments().contains( "--nojabber" ) ) + if( !arguments().contains( "--nosip" ) ) { m_xmppBot = new XMPPBot( this ); From 1867daae4d0080811536c116793818b65bda4810 Mon Sep 17 00:00:00 2001 From: Christian Muehlhaeuser Date: Mon, 24 Jan 2011 07:25:58 +0100 Subject: [PATCH 5/5] * Store / restore column widths uniquely to a TrackView's guid. --- src/libtomahawk/playlist/collectionview.cpp | 1 + src/libtomahawk/playlist/playlistmodel.h | 2 ++ src/libtomahawk/playlist/playlistview.cpp | 9 ++++++++- src/libtomahawk/playlist/playlistview.h | 7 ++++++- src/libtomahawk/playlist/trackheader.cpp | 10 +++++----- src/libtomahawk/playlist/trackview.cpp | 2 +- src/libtomahawk/playlist/trackview.h | 9 ++++++--- src/libtomahawk/tomahawksettings.cpp | 8 ++++---- src/libtomahawk/tomahawksettings.h | 4 ++-- 9 files changed, 35 insertions(+), 17 deletions(-) diff --git a/src/libtomahawk/playlist/collectionview.cpp b/src/libtomahawk/playlist/collectionview.cpp index 61ed017ef..0847849e8 100644 --- a/src/libtomahawk/playlist/collectionview.cpp +++ b/src/libtomahawk/playlist/collectionview.cpp @@ -13,6 +13,7 @@ using namespace Tomahawk; CollectionView::CollectionView( QWidget* parent ) : TrackView( parent ) { + setGuid( "collectionview" ); setProxyModel( new CollectionProxyModel( this ) ); setSortingEnabled( true ); diff --git a/src/libtomahawk/playlist/playlistmodel.h b/src/libtomahawk/playlist/playlistmodel.h index b07be5bb0..3c6a90162 100644 --- a/src/libtomahawk/playlist/playlistmodel.h +++ b/src/libtomahawk/playlist/playlistmodel.h @@ -31,6 +31,8 @@ public: virtual bool dropMimeData( const QMimeData* data, Qt::DropAction action, int row, int column, const QModelIndex& parent ); + Tomahawk::playlist_ptr playlist() const { return m_playlist; } + void loadPlaylist( const Tomahawk::playlist_ptr& playlist ); void loadHistory( const Tomahawk::source_ptr& source, unsigned int amount = 100 ); diff --git a/src/libtomahawk/playlist/playlistview.cpp b/src/libtomahawk/playlist/playlistview.cpp index 443db1653..b11255f2e 100644 --- a/src/libtomahawk/playlist/playlistview.cpp +++ b/src/libtomahawk/playlist/playlistview.cpp @@ -4,6 +4,7 @@ #include #include +#include "playlist/playlistmodel.h" #include "playlist/playlistproxymodel.h" #include "widgets/overlaywidget.h" @@ -13,6 +14,7 @@ using namespace Tomahawk; PlaylistView::PlaylistView( QWidget* parent ) : TrackView( parent ) { + setGuid( "playlistview" ); setProxyModel( new PlaylistProxyModel( this ) ); setContextMenuPolicy( Qt::CustomContextMenu ); @@ -27,8 +29,13 @@ PlaylistView::~PlaylistView() void -PlaylistView::setModel( TrackModel* model ) +PlaylistView::setModel( PlaylistModel* model ) { + if ( !model->playlist().isNull() ) + setGuid( QString( "playlistview/%1" ).arg( model->playlist()->guid() ) ); + + m_model = model; + TrackView::setModel( model ); setColumnHidden( 5, true ); // Hide age column per default diff --git a/src/libtomahawk/playlist/playlistview.h b/src/libtomahawk/playlist/playlistview.h index 3aafe8002..1e7c80c70 100644 --- a/src/libtomahawk/playlist/playlistview.h +++ b/src/libtomahawk/playlist/playlistview.h @@ -7,6 +7,8 @@ #include "dllmacro.h" +class PlaylistModel; + class DLLEXPORT PlaylistView : public TrackView { Q_OBJECT @@ -15,7 +17,8 @@ public: explicit PlaylistView( QWidget* parent = 0 ); ~PlaylistView(); - virtual void setModel( TrackModel* model ); + PlaylistModel* playlistModel() const { return m_model; } + virtual void setModel( PlaylistModel* model ); protected: void keyPressEvent( QKeyEvent* event ); @@ -30,6 +33,8 @@ private slots: private: void setupMenus(); + PlaylistModel* m_model; + QMenu m_itemMenu; QAction* m_playItemAction; diff --git a/src/libtomahawk/playlist/trackheader.cpp b/src/libtomahawk/playlist/trackheader.cpp index bd088424c..7df6fb8ea 100644 --- a/src/libtomahawk/playlist/trackheader.cpp +++ b/src/libtomahawk/playlist/trackheader.cpp @@ -18,15 +18,15 @@ TrackHeader::TrackHeader( TrackView* parent ) , m_hiddenPct( 0.0 ) , m_init( false ) { - setStretchLastSection( false ); + setStretchLastSection( true ); setResizeMode( QHeaderView::Interactive ); setMinimumSectionSize( 60 ); setDefaultAlignment( Qt::AlignLeft ); setMovable( true ); // setCascadingSectionResizes( true ); - m_menu->addAction( tr( "Resize columns to fit window" ), this, SLOT( onToggleResizeColumns() ) ); - m_menu->addSeparator(); +// m_menu->addAction( tr( "Resize columns to fit window" ), this, SLOT( onToggleResizeColumns() ) ); +// m_menu->addSeparator(); connect( this, SIGNAL( sectionResized( int, int, int ) ), SLOT( onSectionResized( int, int, int ) ) ); connect( m_sigmap, SIGNAL( mapped( int ) ), SLOT( toggleVisibility( int ) ) ); @@ -90,7 +90,7 @@ TrackHeader::onResized() void TrackHeader::restoreColumnsState() { - QList list = TomahawkSettings::instance()->playlistColumnSizes(); + QList list = TomahawkSettings::instance()->playlistColumnSizes( m_parent->guid() ); if ( list.count() != count() ) // FIXME: const { @@ -112,7 +112,7 @@ TrackHeader::saveColumnsState() foreach( double w, m_columnWeights ) wlist << QVariant( w ); - TomahawkSettings::instance()->setPlaylistColumnSizes( wlist ); + TomahawkSettings::instance()->setPlaylistColumnSizes( m_parent->guid(), wlist ); } diff --git a/src/libtomahawk/playlist/trackview.cpp b/src/libtomahawk/playlist/trackview.cpp index 8e9a3d522..3317bd21b 100644 --- a/src/libtomahawk/playlist/trackview.cpp +++ b/src/libtomahawk/playlist/trackview.cpp @@ -57,7 +57,7 @@ TrackView::~TrackView() { qDebug() << Q_FUNC_INFO; - delete m_overlay; + delete m_header; } diff --git a/src/libtomahawk/playlist/trackview.h b/src/libtomahawk/playlist/trackview.h index 8965aad1b..51207506a 100644 --- a/src/libtomahawk/playlist/trackview.h +++ b/src/libtomahawk/playlist/trackview.h @@ -22,16 +22,18 @@ public: explicit TrackView( QWidget* parent = 0 ); ~TrackView(); + virtual QString guid() const { return m_guid; } + virtual void setGuid( const QString& guid ) { m_guid = guid; } + + virtual void setModel( TrackModel* model ); void setProxyModel( TrackProxyModel* model ); - TrackModel* model() const { return m_model; } + virtual TrackModel* model() const { return m_model; } TrackProxyModel* proxyModel() const { return m_proxyModel; } PlaylistItemDelegate* delegate() const { return m_delegate; } TrackHeader* header() const { return m_header; } OverlayWidget* overlay() const { return m_overlay; } - virtual void setModel( TrackModel* model ); - QModelIndex contextMenuIndex() const { return m_contextMenuIndex; } void setContextMenuIndex( const QModelIndex& idx ) { m_contextMenuIndex = idx; } @@ -59,6 +61,7 @@ private slots: void onFilterChanged( const QString& filter ); private: + QString m_guid; TrackModel* m_model; TrackProxyModel* m_proxyModel; PlaylistItemDelegate* m_delegate; diff --git a/src/libtomahawk/tomahawksettings.cpp b/src/libtomahawk/tomahawksettings.cpp index 09b0181f3..8a8f81bb8 100644 --- a/src/libtomahawk/tomahawksettings.cpp +++ b/src/libtomahawk/tomahawksettings.cpp @@ -185,16 +185,16 @@ TomahawkSettings::setMainWindowState( const QByteArray& state ) QList -TomahawkSettings::playlistColumnSizes() const +TomahawkSettings::playlistColumnSizes( const QString& playlistid ) const { - return value( "ui/playlist/columnSize" ).toList(); + return value( QString( "ui/playlist/%1/columnSizes" ).arg( playlistid ) ).toList(); } void -TomahawkSettings::setPlaylistColumnSizes( const QList& cols ) +TomahawkSettings::setPlaylistColumnSizes( const QString& playlistid, const QList& cols ) { - setValue( "ui/playlist/columnSize", cols ); + setValue( QString( "ui/playlist/%1/columnSizes" ).arg( playlistid ), cols ); } diff --git a/src/libtomahawk/tomahawksettings.h b/src/libtomahawk/tomahawksettings.h index db3aabb60..b54298288 100644 --- a/src/libtomahawk/tomahawksettings.h +++ b/src/libtomahawk/tomahawksettings.h @@ -32,8 +32,8 @@ public: void setMainWindowState( const QByteArray& state ); /// Playlist stuff - QList playlistColumnSizes() const; - void setPlaylistColumnSizes( const QList& cols ); + QList playlistColumnSizes( const QString& playlistid ) const; + void setPlaylistColumnSizes( const QString& playlistid, const QList& cols ); QList recentlyPlayedPlaylists() const; void appendRecentlyPlayedPlaylist( const Tomahawk::playlist_ptr& playlist );