diff --git a/src/libtomahawk/playlist/FlexibleTreeView.cpp b/src/libtomahawk/playlist/FlexibleTreeView.cpp index 501acd011..74db192a2 100644 --- a/src/libtomahawk/playlist/FlexibleTreeView.cpp +++ b/src/libtomahawk/playlist/FlexibleTreeView.cpp @@ -22,14 +22,18 @@ #include #include -#include "playlist/FlexibleHeader.h" +#include "widgets/FilterHeader.h" #include "playlist/TreeModel.h" #include "playlist/ColumnView.h" #include "playlist/TrackView.h" +#include "playlist/TreeView.h" #include "playlist/GridView.h" +#include "playlist/ModeHeader.h" #include "playlist/PlaylistLargeItemDelegate.h" #include "PlayableProxyModelPlaylistInterface.h" +#include "utils/TomahawkStyle.h" #include "utils/TomahawkUtilsGui.h" +#include "utils/Closure.h" #include "utils/Logger.h" using namespace Tomahawk; @@ -37,15 +41,18 @@ using namespace Tomahawk; FlexibleTreeView::FlexibleTreeView( QWidget* parent, QWidget* extraHeader ) : QWidget( parent ) - , m_header( new FlexibleHeader( 0 ) ) + , m_header( new FilterHeader( 0 ) ) + , m_modeHeader( new ModeHeader( this ) ) , m_columnView( new ColumnView() ) -// , m_gridView( new GridView() ) -// , m_trackView( new TrackView() ) + , m_treeView( new TreeView() ) + , m_trackView( 0 ) , m_model( 0 ) , m_temporary( false ) { qRegisterMetaType< FlexibleTreeViewMode >( "FlexibleTreeViewMode" ); + m_treeView->proxyModel()->setStyle( PlayableProxyModel::Collection ); + // m_trackView->setPlaylistInterface( m_playlistInterface ); // m_columnView->setPlaylistInterface( m_trackView->proxyModel()->playlistInterface() ); // m_gridView->setPlaylistInterface( m_trackView->proxyModel()->playlistInterface() ); @@ -62,18 +69,45 @@ FlexibleTreeView::FlexibleTreeView( QWidget* parent, QWidget* extraHeader ) setLayout( new QVBoxLayout() ); TomahawkUtils::unmarginLayout( layout() ); + QFrame* lineAbove = new QFrame( this ); + lineAbove->setStyleSheet( QString( "QFrame { border: 1px solid %1; }" ).arg( TomahawkStyle::HEADER_UPPER.name() ) ); + lineAbove->setFrameShape( QFrame::HLine ); + lineAbove->setMaximumHeight( 1 ); + QFrame* lineAbove2 = new QFrame( this ); + lineAbove2->setStyleSheet( QString( "QFrame { border: 1px solid black; }" ) ); + lineAbove2->setFrameShape( QFrame::HLine ); + lineAbove2->setMaximumHeight( 1 ); + QFrame* lineBelow = new QFrame( this ); + lineBelow->setStyleSheet( QString( "QFrame { border: 1px solid %1; }" ).arg( TomahawkStyle::HEADER_UPPER.name() ) ); + lineBelow->setFrameShape( QFrame::HLine ); + lineBelow->setMaximumHeight( 1 ); + QFrame* lineBelow2 = new QFrame( this ); + lineBelow2->setStyleSheet( QString( "QFrame { border: 1px solid black; }" ) ); + lineBelow2->setFrameShape( QFrame::HLine ); + lineBelow2->setMaximumHeight( 1 ); + layout()->addWidget( m_header ); + layout()->addWidget( lineAbove ); + layout()->addWidget( lineAbove2 ); + layout()->addWidget( m_modeHeader ); if ( extraHeader ) layout()->addWidget( extraHeader ); + layout()->addWidget( lineBelow ); + layout()->addWidget( lineBelow2 ); layout()->addWidget( m_stack ); m_stack->addWidget( m_columnView ); -/* m_stack->addWidget( m_gridView ); + m_stack->addWidget( m_treeView ); + /* m_stack->addWidget( m_gridView ); m_stack->addWidget( m_trackView );*/ setCurrentMode( Columns ); connect( m_header, SIGNAL( filterTextChanged( QString ) ), SLOT( setFilter( QString ) ) ); + + NewClosure( m_modeHeader, SIGNAL( flatClicked() ), const_cast< FlexibleTreeView* >( this ), SLOT( setCurrentMode( FlexibleTreeViewMode ) ), FlexibleTreeView::Columns )->setAutoDelete( false ); + NewClosure( m_modeHeader, SIGNAL( detailedClicked() ), const_cast< FlexibleTreeView* >( this ), SLOT( setCurrentMode( FlexibleTreeViewMode ) ), FlexibleTreeView::Flat )->setAutoDelete( false ); + NewClosure( m_modeHeader, SIGNAL( gridClicked() ), const_cast< FlexibleTreeView* >( this ), SLOT( setCurrentMode( FlexibleTreeViewMode ) ), FlexibleTreeView::Albums )->setAutoDelete( false ); } @@ -86,7 +120,7 @@ FlexibleTreeView::~FlexibleTreeView() void FlexibleTreeView::setGuid( const QString& guid ) { -// m_trackView->setGuid( guid ); + m_treeView->setGuid( guid ); m_columnView->setGuid( guid ); } @@ -126,17 +160,17 @@ FlexibleTreeView::setColumnView( ColumnView* view ) void -FlexibleTreeView::setGridView( GridView* view ) +FlexibleTreeView::setTreeView( TreeView* view ) { - if ( m_gridView ) + if ( m_treeView ) { - m_stack->removeWidget( m_gridView ); - delete m_gridView; + m_stack->removeWidget( m_treeView ); + delete m_treeView; } - view->setPlaylistInterface( m_trackView->proxyModel()->playlistInterface() ); +// view->setPlaylistInterface( m_columnView->proxyModel()->playlistInterface() ); - m_gridView = view; + m_treeView = view; m_stack->addWidget( view ); } @@ -154,7 +188,8 @@ FlexibleTreeView::setTreeModel( TreeModel* model ) // m_trackView->setPlayableModel( model ); m_columnView->setTreeModel( model ); -// m_gridView->setPlayableModel( model ); + m_treeView->setTreeModel( model ); + // m_gridView->setPlayableModel( model ); /* m_trackView->setSortingEnabled( false ); m_trackView->sortByColumn( -1 ); @@ -176,8 +211,7 @@ FlexibleTreeView::setCurrentMode( FlexibleTreeViewMode mode ) { case Flat: { - tDebug() << "m_trackView:" << m_trackView << m_stack->indexOf( m_trackView ); - m_stack->setCurrentWidget( m_trackView ); + m_stack->setCurrentWidget( m_treeView ); break; } @@ -189,7 +223,7 @@ FlexibleTreeView::setCurrentMode( FlexibleTreeViewMode mode ) case Albums: { - m_stack->setCurrentWidget( m_gridView ); +// m_stack->setCurrentWidget( m_gridView ); break; } } @@ -201,8 +235,7 @@ FlexibleTreeView::setCurrentMode( FlexibleTreeViewMode mode ) Tomahawk::playlistinterface_ptr FlexibleTreeView::playlistInterface() const { - return Tomahawk::playlistinterface_ptr(); - return m_trackView->proxyModel()->playlistInterface(); + return m_columnView->proxyModel()->playlistInterface(); } @@ -235,9 +268,9 @@ FlexibleTreeView::jumpToCurrentTrack() bool b = false; // note: the order of comparison is important here, if we'd write "b || foo" then foo will not be executed if b is already true! - b = m_trackView->jumpToCurrentTrack() || b; b = m_columnView->jumpToCurrentTrack() || b; - b = m_gridView->jumpToCurrentTrack() || b; +// b = m_trackView->jumpToCurrentTrack() || b; + b = m_treeView->jumpToCurrentTrack() || b; return b; } @@ -249,7 +282,8 @@ FlexibleTreeView::setFilter( const QString& pattern ) ViewPage::setFilter( pattern ); m_columnView->setFilter( pattern ); -/* m_gridView->setFilter( pattern ); + m_treeView->proxyModel()->setFilter( pattern ); + /* m_gridView->setFilter( pattern ); m_trackView->setFilter( pattern );*/ return true; @@ -260,7 +294,8 @@ void FlexibleTreeView::setEmptyTip( const QString& tip ) { m_columnView->setEmptyTip( tip ); -/* m_gridView->setEmptyTip( tip ); + m_treeView->setEmptyTip( tip ); + /* m_gridView->setEmptyTip( tip ); m_trackView->setEmptyTip( tip );*/ } diff --git a/src/libtomahawk/playlist/FlexibleTreeView.h b/src/libtomahawk/playlist/FlexibleTreeView.h index a88a53047..1e1ec9471 100644 --- a/src/libtomahawk/playlist/FlexibleTreeView.h +++ b/src/libtomahawk/playlist/FlexibleTreeView.h @@ -27,10 +27,12 @@ class QStackedWidget; class GridView; class TrackView; +class TreeView; class ColumnView; class TreeModel; +class ModeHeader; class PlaylistModel; -class FlexibleHeader; +class FilterHeader; class DLLEXPORT FlexibleTreeView : public QWidget, public Tomahawk::ViewPage { @@ -56,13 +58,13 @@ public: void setTemporaryPage( bool b ); ColumnView* columnView() const { return m_columnView; } - GridView* gridView() const { return m_gridView; } + TreeView* treeView() const { return m_treeView; } TrackView* trackView() const { return m_trackView; } void setGuid( const QString& guid ); void setColumnView( ColumnView* view ); - void setGridView( GridView* view ); + void setTreeView( TreeView* view ); void setTrackView( TrackView* view ); void setTreeModel( TreeModel* model ); @@ -83,11 +85,12 @@ private slots: void onWidgetDestroyed( QWidget* widget ); private: - FlexibleHeader* m_header; + FilterHeader* m_header; + ModeHeader* m_modeHeader; QPixmap m_pixmap; ColumnView* m_columnView; - GridView* m_gridView; + TreeView* m_treeView; TrackView* m_trackView; TreeModel* m_model;