ArtistInfoWidget::ArtistInfoWidget( const Tomahawk::artist_ptr& artist, QWidget* parent ) : QWidget( parent ) , TomahawkUtils::DpiScaler( this ) , ui( new Ui::ArtistInfoWidget ) , m_artist( artist ) { m_widget = new QWidget; m_headerWidget = new BasicHeader; ui->setupUi( m_widget ); { ui->relatedArtists->setAutoResize( true ); ui->relatedArtists->setAutoFitItems( true ); ui->relatedArtists->setVerticalScrollBarPolicy( Qt::ScrollBarAlwaysOff ); ui->relatedArtists->setHorizontalScrollBarPolicy( Qt::ScrollBarAlwaysOff ); ui->relatedArtists->setItemWidth( scaledX( 170 ) ); m_relatedModel = new PlayableModel( ui->relatedArtists ); ui->relatedArtists->setPlayableModel( m_relatedModel ); ui->relatedArtists->proxyModel()->sort( -1 ); ui->relatedArtists->setEmptyTip( tr( "Sorry, we could not find any related artists!" ) ); TomahawkStyle::stylePageFrame( ui->relatedArtists ); TomahawkStyle::stylePageFrame( ui->artistFrame ); TomahawkStyle::styleScrollBar( ui->relatedArtists->verticalScrollBar() ); } { ui->albums->setAutoResize( true ); ui->albums->setAutoFitItems( false ); ui->albums->setVerticalScrollBarPolicy( Qt::ScrollBarAlwaysOff ); ui->albums->setHorizontalScrollBarPolicy( Qt::ScrollBarAlwaysOff ); ui->albums->setWrapping( false ); ui->albums->setItemWidth( scaledX( 190 ) ); ui->albums->proxyModel()->setHideDupeItems( true ); ui->albums->delegate()->setWordWrapping( true ); ui->albums->setFixedHeight( ui->albums->itemSize().height() + ui->albums->spacing() * 2 ); m_albumsModel = new PlayableModel( ui->albums ); ui->albums->setPlayableModel( m_albumsModel ); ui->albums->proxyModel()->sort( -1 ); ui->albums->setEmptyTip( tr( "Sorry, we could not find any albums for this artist!" ) ); TomahawkStyle::stylePageFrame( ui->albumFrame ); TomahawkStyle::styleScrollBar( ui->albums->verticalScrollBar() ); TomahawkStyle::styleScrollBar( ui->albums->horizontalScrollBar() ); } { ui->topHits->setAutoResize( true ); ui->topHits->setAutoFitItems( false ); ui->topHits->setVerticalScrollBarPolicy( Qt::ScrollBarAlwaysOff ); ui->topHits->setHorizontalScrollBarPolicy( Qt::ScrollBarAlwaysOff ); ui->topHits->setWrapping( false ); ui->topHits->setItemWidth( scaledX( 140 ) ); ui->topHits->proxyModel()->setHideDupeItems( true ); ui->topHits->delegate()->setWordWrapping( true ); ui->topHits->delegate()->setShowBuyButtons( true ); ui->topHits->setFixedHeight( ui->topHits->itemSize().height() + ui->topHits->spacing() * 2 ); m_topHitsModel = new PlayableModel( ui->topHits ); ui->topHits->setPlayableModel( m_topHitsModel ); ui->topHits->proxyModel()->sort( -1 ); ui->topHits->setEmptyTip( tr( "Sorry, we could not find any top hits for this artist!" ) ); TomahawkStyle::stylePageFrame( ui->trackFrame ); } { ui->biography->setObjectName( "biography" ); ui->biography->setContentsMargins( 0, 0, 0, 0 ); ui->biography->page()->mainFrame()->setScrollBarPolicy( Qt::Horizontal, Qt::ScrollBarAlwaysOff ); ui->biography->page()->mainFrame()->setScrollBarPolicy( Qt::Vertical, Qt::ScrollBarAsNeeded ); ui->biography->page()->setLinkDelegationPolicy( QWebPage::DelegateAllLinks ); ui->biography->installEventFilter( this ); TomahawkStyle::stylePageWidget( ui->biography ); TomahawkStyle::stylePageFrame( ui->bioFrame ); connect( ui->biography, SIGNAL( linkClicked( QUrl ) ), SLOT( onBiographyLinkClicked( QUrl ) ) ); QFont f = ui->topHitsMoreLabel->font(); f.setWeight( QFont::Light ); f.setPointSize( TomahawkUtils::defaultFontSize() + 1 ); ui->topHitsMoreLabel->setFont( f ); ui->albumsMoreLabel->setFont( f ); connect( ui->albumsMoreLabel, SIGNAL( clicked() ), SLOT( onAlbumsMoreClicked() ) ); connect( ui->topHitsMoreLabel, SIGNAL( clicked() ), SLOT( onTopHitsMoreClicked() ) ); ui->cover->setFixedSize( scaled( QSize( 384, 384 ) ) ); } { m_headerWidget->ui->anchor1Label->setText( tr( "Music" ) ); m_headerWidget->ui->anchor2Label->setText( tr( "Biography" ) ); m_headerWidget->ui->anchor3Label->setText( tr( "Related Artists" ) ); m_headerWidget->ui->anchor1Label->show(); m_headerWidget->ui->anchor2Label->show(); m_headerWidget->ui->anchor3Label->show(); QFontMetrics fm( m_headerWidget->ui->anchor1Label->font() ); m_headerWidget->ui->anchor1Label->setFixedWidth( fm.width( m_headerWidget->ui->anchor1Label->text() ) + 16 ); m_headerWidget->ui->anchor2Label->setFixedWidth( fm.width( m_headerWidget->ui->anchor2Label->text() ) + 16 ); m_headerWidget->ui->anchor3Label->setFixedWidth( fm.width( m_headerWidget->ui->anchor3Label->text() ) + 16 ); connect( m_headerWidget->ui->anchor1Label, SIGNAL( clicked() ), SLOT( onMusicAnchorClicked() ) ); connect( m_headerWidget->ui->anchor2Label, SIGNAL( clicked() ), SLOT( onBioAnchorClicked() ) ); connect( m_headerWidget->ui->anchor3Label, SIGNAL( clicked() ), SLOT( onRelatedArtistsAnchorClicked() ) ); } m_stackedWidget = new QStackedWidget(); { m_area = new QScrollArea(); m_area->setWidgetResizable( true ); m_area->setVerticalScrollBarPolicy( Qt::ScrollBarAlwaysOn ); m_area->setHorizontalScrollBarPolicy( Qt::ScrollBarAlwaysOff ); m_area->setWidget( m_widget ); QPalette pal = palette(); pal.setBrush( backgroundRole(), TomahawkStyle::PAGE_BACKGROUND ); m_area->setPalette( pal ); m_area->setAutoFillBackground( true ); m_area->setFrameShape( QFrame::NoFrame ); m_area->setAttribute( Qt::WA_MacShowFocusRect, 0 ); m_stackedWidget->addWidget( m_area ); connect( m_area->verticalScrollBar(), SIGNAL( valueChanged(int ) ), SLOT( onSliderValueChanged( int ) ) ); } { ContextView* topHitsFullView = new ContextView( m_stackedWidget ); topHitsFullView->setCaption( tr( "Songs" ) ); topHitsFullView->setShowCloseButton( true ); topHitsFullView->trackView()->setPlayableModel( m_topHitsModel ); m_stackedWidget->addWidget( topHitsFullView ); connect( topHitsFullView, SIGNAL( closeClicked() ), SLOT( onPageClosed() ) ); } { GridView* albumsFullView = new GridView( m_stackedWidget ); albumsFullView->delegate()->setWordWrapping( true ); // albumsFullView->setCaption( tr( "Albums" ) ); // albumsFullView->setShowCloseButton( true ); albumsFullView->setPlayableModel( m_albumsModel ); albumsFullView->proxyModel()->setHideDupeItems( true ); CaptionLabel* captionLabel = new CaptionLabel( this ); captionLabel->setText( tr( "Albums" ) ); captionLabel->setShowCloseButton( true ); QWidget* vbox = new QWidget; QPalette pal = vbox->palette(); pal.setBrush( vbox->backgroundRole(), TomahawkStyle::PAGE_BACKGROUND ); vbox->setPalette( pal ); vbox->setAutoFillBackground( true ); QVBoxLayout* vboxl = new QVBoxLayout; TomahawkUtils::unmarginLayout( vboxl ); vboxl->setContentsMargins( 32, 32, 32, 32 ); vboxl->setSpacing( scaledY( 8 ) ); vbox->setLayout( vboxl ); vboxl->addWidget( captionLabel ); vboxl->addWidget( albumsFullView ); vboxl->addStretch(); vboxl->setStretchFactor( albumsFullView, 1 ); m_stackedWidget->addWidget( vbox ); connect( captionLabel, SIGNAL( clicked() ), SLOT( onPageClosed() ) ); } { QVBoxLayout* layout = new QVBoxLayout(); layout->addWidget( m_headerWidget ); layout->addWidget( m_stackedWidget ); setLayout( layout ); TomahawkUtils::unmarginLayout( layout ); } MetaPlaylistInterface* mpl = new MetaPlaylistInterface(); mpl->addChildInterface( ui->relatedArtists->playlistInterface() ); mpl->addChildInterface( ui->topHits->playlistInterface() ); mpl->addChildInterface( ui->albums->playlistInterface() ); m_plInterface = playlistinterface_ptr( mpl ); onSliderValueChanged( 0 ); TomahawkUtils::fixMargins( this ); m_pixmap = TomahawkUtils::defaultPixmap( TomahawkUtils::DefaultArtistImage, TomahawkUtils::Original, scaled( QSize( 48, 48 ) ) ); load( artist ); }
FlexibleView::FlexibleView( QWidget* parent, QWidget* extraHeader ) : QWidget( parent ) , m_header( new FilterHeader( this ) ) , m_trackView( new TrackView() ) , m_detailedView( new TrackView() ) , m_gridView( new GridView() ) , m_model( 0 ) , m_temporary( false ) { qRegisterMetaType< FlexibleViewMode >( "FlexibleViewMode" ); m_header->setBackground( ImageRegistry::instance()->pixmap( RESPATH "images/playlist_background.png", QSize( 0, 0 ) ) ); // m_trackView->setPlaylistInterface( m_playlistInterface ); m_detailedView->setPlaylistInterface( m_trackView->proxyModel()->playlistInterface() ); m_gridView->setPlaylistInterface( m_trackView->proxyModel()->playlistInterface() ); m_detailedView->setColumnHidden( PlayableModel::Age, true ); // Hide age column per default m_detailedView->setColumnHidden( PlayableModel::Filesize, true ); // Hide filesize column per default m_detailedView->setColumnHidden( PlayableModel::Composer, true ); // Hide composer column per default TrackItemDelegate* del = new TrackItemDelegate( TrackItemDelegate::LovedTracks, m_trackView, m_trackView->proxyModel() ); m_trackView->setPlaylistItemDelegate( del ); m_trackView->proxyModel()->setStyle( PlayableProxyModel::Large ); m_stack = new QStackedWidget(); setLayout( new QVBoxLayout() ); TomahawkUtils::unmarginLayout( layout() ); m_trackView->setStyleSheet( QString( "QTreeView { background-color: white; }" ) ); m_gridView->setStyleSheet( QString( "QListView { background-color: white; }" ) ); TomahawkStyle::styleScrollBar( m_trackView->verticalScrollBar() ); layout()->addWidget( m_header ); if ( extraHeader ) layout()->addWidget( extraHeader ); CaptionLabel* caption = new CaptionLabel( this ); caption->setText( tr( "Playlist Details" ) ); QWidget* vbox = new QWidget; QPalette pal = vbox->palette(); pal.setBrush( vbox->backgroundRole(), Qt::white ); vbox->setPalette( pal ); vbox->setAutoFillBackground( true ); QVBoxLayout* vboxl = new QVBoxLayout; TomahawkUtils::unmarginLayout( vboxl ); vboxl->setContentsMargins( 32, 32, 32, 32 ); vboxl->setSpacing( 32 ); vbox->setLayout( vboxl ); QWidget* hbox = new QWidget; QHBoxLayout* hboxl = new QHBoxLayout; TomahawkUtils::unmarginLayout( hboxl ); hboxl->setSpacing( 32 ); m_detailView = new TrackDetailView; m_detailView->setPlaylistInterface( playlistInterface() ); hboxl->addWidget( m_detailView ); hboxl->addWidget( m_stack ); hbox->setLayout( hboxl ); vboxl->addWidget( caption ); vboxl->addWidget( hbox ); layout()->addWidget( vbox ); m_stack->addWidget( m_trackView ); m_stack->addWidget( m_detailedView ); m_stack->addWidget( m_gridView ); setCurrentMode( Flat ); connect( m_trackView, SIGNAL( querySelected( Tomahawk::query_ptr ) ), m_detailView, SLOT( setQuery( Tomahawk::query_ptr ) ) ); connect( m_header, SIGNAL( filterTextChanged( QString ) ), SLOT( setFilter( QString ) ) ); TomahawkUtils::fixMargins( this ); }