1
0
mirror of https://github.com/tomahawk-player/tomahawk.git synced 2025-04-20 16:02:07 +02:00

* New style & layout for album-page.

This commit is contained in:
Christian Muehlhaeuser 2014-08-13 08:43:55 +02:00
parent fa044b5782
commit e9c68aaa60
3 changed files with 86 additions and 425 deletions

View File

@ -1,6 +1,6 @@
/* === This file is part of Tomahawk Player - <http://tomahawk-player.org> ===
*
* Copyright 2010-2011, Christian Muehlhaeuser <muesli@tomahawk-player.org>
* Copyright 2010-2014, Christian Muehlhaeuser <muesli@tomahawk-player.org>
* Copyright 2010-2012, Jeff Mitchell <jeff@tomahawk-player.org>
* Copyright 2010-2011, Leo Franchi <lfranchi@kde.org>
*
@ -20,6 +20,7 @@
#include "AlbumInfoWidget.h"
#include "ui_AlbumInfoWidget.h"
#include "ui_HeaderWidget.h"
#include "audio/AudioEngine.h"
#include "ViewManager.h"
@ -30,6 +31,7 @@
#include "playlist/GridItemDelegate.h"
#include "Source.h"
#include "MetaPlaylistInterface.h"
#include "playlist/TrackView.h"
#include "database/DatabaseCommand_AllTracks.h"
#include "database/DatabaseCommand_AllAlbums.h"
@ -47,129 +49,70 @@ using namespace Tomahawk;
AlbumInfoWidget::AlbumInfoWidget( const Tomahawk::album_ptr& album, QWidget* parent )
: QWidget( parent )
, ui( new Ui::AlbumInfoWidget )
, uiHeader( new Ui::HeaderWidget )
{
QWidget* widget = new QWidget;
QWidget* headerWidget = new QWidget;
ui->setupUi( widget );
uiHeader->setupUi( headerWidget );
headerWidget->setFixedHeight( 160 );
m_pixmap = TomahawkUtils::defaultPixmap( TomahawkUtils::DefaultAlbumCover, TomahawkUtils::Original, QSize( 48, 48 ) );
ui->cover->setPixmap( TomahawkUtils::defaultPixmap( TomahawkUtils::DefaultAlbumCover, TomahawkUtils::Grid, ui->cover->size() ) );
ui->cover->setShowText( false );
ui->lineAbove->setStyleSheet( QString( "QFrame { border: 1px solid %1; }" ).arg( TomahawkStyle::HEADER_BACKGROUND.name() ) );
ui->lineBelow->setStyleSheet( QString( "QFrame { border: 1px solid black; }" ) );
m_tracksModel = new TreeModel();
m_tracksModel->setMode( Mixed );
// We need to set the model on the view before loading the playlist, so spinners & co are connected
ui->albumView->setPlayableModel( m_tracksModel );
ui->albumView->setCaption( tr( "Album Details" ) );
{
m_tracksModel = new TreeModel( ui->tracks );
m_tracksModel->setMode( Mixed );
QFont f = uiHeader->artistLabel->font();
f.setBold( true );
f.setPointSize( 16 );
AlbumItemDelegate* del = new AlbumItemDelegate( ui->tracks, ui->tracks->proxyModel() );
ui->tracks->setPlaylistItemDelegate( del );
ui->tracks->setEmptyTip( tr( "Sorry, we could not find any tracks for this album!" ) );
ui->tracks->proxyModel()->setStyle( PlayableProxyModel::Large );
ui->tracks->setAutoResize( true );
ui->tracks->setPlayableModel( m_tracksModel );
ui->tracks->setAlternatingRowColors( false );
QPalette p = uiHeader->artistLabel->palette();
p.setColor( QPalette::Foreground, Qt::white );
QPalette p = ui->tracks->palette();
p.setColor( QPalette::Text, TomahawkStyle::PAGE_TRACKLIST_TRACK_SOLVED );
p.setColor( QPalette::BrightText, TomahawkStyle::PAGE_TRACKLIST_TRACK_UNRESOLVED );
p.setColor( QPalette::Foreground, TomahawkStyle::PAGE_TRACKLIST_NUMBER );
p.setColor( QPalette::Highlight, TomahawkStyle::PAGE_TRACKLIST_HIGHLIGHT );
p.setColor( QPalette::HighlightedText, TomahawkStyle::PAGE_TRACKLIST_HIGHLIGHT_TEXT );
ui->tracks->setPalette( p );
TomahawkStyle::styleScrollBar( ui->tracks->horizontalScrollBar() );
TomahawkStyle::stylePageFrame( ui->tracks );
TomahawkStyle::stylePageFrame( ui->trackFrame );
uiHeader->artistLabel->setFont( f );
uiHeader->artistLabel->setPalette( p );
}
{
m_albumsModel = new PlayableModel( ui->albums );
ui->albums->setPlayableModel( m_albumsModel );
ui->albums->setEmptyTip( tr( "Sorry, we could not find any other albums for this artist!" ) );
/* ui->albums->setAutoFitItems( true );
* ui->albums->setWrapping( false );
* ui->albums->setVerticalScrollBarPolicy( Qt::ScrollBarAlwaysOff );
* ui->albums->setHorizontalScrollBarPolicy( Qt::ScrollBarAsNeeded );*/
ui->albums->delegate()->setItemSize( QSize( 170, 170 ) );
ui->albums->proxyModel()->setHideDupeItems( true );
TomahawkStyle::styleScrollBar( ui->albums->verticalScrollBar() );
TomahawkStyle::stylePageFrame( ui->albums );
TomahawkStyle::stylePageFrame( ui->albumFrame );
}
{
QFont f = ui->albumLabel->font();
f.setFamily( "Titillium Web" );
QPalette p = ui->albumLabel->palette();
p.setColor( QPalette::Foreground, TomahawkStyle::HEADER_LABEL );
ui->albumLabel->setFont( f );
ui->albumLabel->setPalette( p );
}
{
ui->artistLabel->setContentsMargins( 6, 2, 6, 2 );
ui->artistLabel->setElideMode( Qt::ElideMiddle );
ui->artistLabel->setType( QueryLabel::Artist );
connect( ui->artistLabel, SIGNAL( clickedArtist() ), SLOT( onArtistClicked() ) );
QFont f = ui->artistLabel->font();
f.setFamily( "Titillium Web" );
QPalette p = ui->artistLabel->palette();
p.setColor( QPalette::Foreground, TomahawkStyle::HEADER_TEXT );
ui->artistLabel->setFont( f );
ui->artistLabel->setPalette( p );
}
{
QFont f = ui->label->font();
f.setFamily( "Pathway Gothic One" );
QPalette p = ui->label->palette();
p.setColor( QPalette::Foreground, TomahawkStyle::PAGE_CAPTION );
ui->label->setFont( f );
ui->label_2->setFont( f );
ui->label->setPalette( p );
ui->label_2->setPalette( p );
}
ui->topHits->setStyleSheet( QString( "QListView { background-color: #f9f9f9; }" ) );
TomahawkStyle::stylePageFrame( ui->trackFrame );
ui->topHits->setVisible( false );
ui->topHitsLabel->setVisible( false );
{
QScrollArea* area = new QScrollArea();
area->setWidgetResizable( true );
area->setVerticalScrollBarPolicy( Qt::ScrollBarAlwaysOn );
area->setVerticalScrollBarPolicy( Qt::ScrollBarAlwaysOff );
area->setWidget( widget );
QPalette pal = palette();
pal.setBrush( backgroundRole(), TomahawkStyle::HEADER_BACKGROUND );
pal.setBrush( backgroundRole(), Qt::white );
area->setPalette( pal );
area->setAutoFillBackground( true );
area->setFrameShape( QFrame::NoFrame );
area->setAttribute( Qt::WA_MacShowFocusRect, 0 );
QVBoxLayout* layout = new QVBoxLayout();
layout->addWidget( headerWidget );
layout->addWidget( area );
setLayout( layout );
TomahawkUtils::unmarginLayout( layout );
}
{
/* {
QPalette pal = palette();
pal.setBrush( backgroundRole(), TomahawkStyle::PAGE_BACKGROUND );
pal.setBrush( backgroundRole(), Qt::white );
ui->widget->setPalette( pal );
ui->widget->setAutoFillBackground( true );
}
}*/
MetaPlaylistInterface* mpl = new MetaPlaylistInterface();
mpl->addChildInterface( ui->tracks->playlistInterface() );
mpl->addChildInterface( ui->albums->playlistInterface() );
mpl->addChildInterface( ui->topHits->playlistInterface() );
mpl->addChildInterface( ui->albumView->playlistInterface() );
m_playlistInterface = playlistinterface_ptr( mpl );
load( album );
@ -193,17 +136,10 @@ AlbumInfoWidget::playlistInterface() const
bool
AlbumInfoWidget::isBeingPlayed() const
{
//tDebug() << Q_FUNC_INFO << "audioengine playlistInterface = " << AudioEngine::instance()->currentTrackPlaylist()->id();
//tDebug() << Q_FUNC_INFO << "albumsView playlistInterface = " << ui->albumsView->playlistInterface()->id();
//tDebug() << Q_FUNC_INFO << "tracksView playlistInterface = " << ui->tracksView->playlistInterface()->id();
if ( ui->albums && ui->albums->isBeingPlayed() )
if ( ui->albumView && ui->albumView->isBeingPlayed() )
return true;
if ( ui->albums && ui->albums->playlistInterface() == AudioEngine::instance()->currentTrackPlaylist() )
return true;
if ( ui->tracks && ui->tracks->playlistInterface() == AudioEngine::instance()->currentTrackPlaylist() )
if ( ui->topHits && ui->topHits->playlistInterface() == AudioEngine::instance()->currentTrackPlaylist() )
return true;
return false;
@ -213,7 +149,7 @@ AlbumInfoWidget::isBeingPlayed() const
bool
AlbumInfoWidget::jumpToCurrentTrack()
{
return ui->albums && ui->albums->jumpToCurrentTrack();
return ui->albumView && ui->albumView->jumpToCurrentTrack();
}
@ -230,34 +166,15 @@ AlbumInfoWidget::load( const album_ptr& album )
connect( m_album.data(), SIGNAL( updated() ), SLOT( onAlbumImageUpdated() ) );
ui->label_2->setText( tr( "Other Albums by %1" ).arg( album->artist()->name() ) );
ui->cover->setAlbum( album );
ui->albumLabel->setText( album->name() );
ui->artistLabel->setArtist( album->artist() );
uiHeader->artistLabel->setText( album->artist()->name().toUpper() );
m_tracksModel->startLoading();
m_tracksModel->addTracks( album, QModelIndex(), true );
loadAlbums( true );
onAlbumImageUpdated();
}
void
AlbumInfoWidget::loadAlbums( bool autoRefetch )
{
Q_UNUSED( autoRefetch );
m_albumsModel->clear();
connect( m_album->artist().data(), SIGNAL( albumsAdded( QList<Tomahawk::album_ptr>, Tomahawk::ModelMode ) ),
SLOT( gotAlbums( QList<Tomahawk::album_ptr> ) ) );
if ( !m_album->artist()->albums( Mixed ).isEmpty() )
gotAlbums( m_album->artist()->albums( Mixed ) );
}
void
AlbumInfoWidget::onAlbumImageUpdated()
{
@ -267,25 +184,7 @@ AlbumInfoWidget::onAlbumImageUpdated()
m_pixmap = m_album->cover( QSize( 0, 0 ) );
emit pixmapChanged( m_pixmap );
ui->cover->setPixmap( TomahawkUtils::createRoundedImage( m_album->cover( ui->cover->sizeHint() ), QSize( 0, 0 ) ) );
}
void
AlbumInfoWidget::gotAlbums( const QList<Tomahawk::album_ptr>& albums )
{
QList<Tomahawk::album_ptr> al = albums;
if ( al.contains( m_album ) )
al.removeAll( m_album );
m_albumsModel->appendAlbums( al );
}
void
AlbumInfoWidget::onArtistClicked()
{
ViewManager::instance()->show( m_album->artist() );
uiHeader->headerWidget->setBackground( m_pixmap, true, false );
}

View File

@ -1,6 +1,6 @@
/* === This file is part of Tomahawk Player - <http://tomahawk-player.org> ===
*
* Copyright 2010-2011, Christian Muehlhaeuser <muesli@tomahawk-player.org>
* Copyright 2010-2014, Christian Muehlhaeuser <muesli@tomahawk-player.org>
* Copyright 2010-2011, Jeff Mitchell <jeff@tomahawk-player.org>
* Copyright 2010-2011, Leo Franchi <lfranchi@kde.org>
*
@ -46,6 +46,7 @@ class MetaAlbumInfoInterface;
namespace Ui
{
class AlbumInfoWidget;
class HeaderWidget;
}
class DLLEXPORT AlbumInfoWidget : public QWidget, public Tomahawk::ViewPage
@ -92,14 +93,11 @@ protected:
void changeEvent( QEvent* e );
private slots:
void loadAlbums( bool autoRefetch = false );
void gotAlbums( const QList<Tomahawk::album_ptr>& albums );
void onArtistClicked();
void onAlbumImageUpdated();
private:
Ui::AlbumInfoWidget* ui;
Ui::HeaderWidget* uiHeader;
Tomahawk::album_ptr m_album;

View File

@ -6,14 +6,14 @@
<rect>
<x>0</x>
<y>0</y>
<width>965</width>
<height>591</height>
<width>828</width>
<height>635</height>
</rect>
</property>
<property name="windowTitle">
<string notr="true" extracomment="not translatable because not shown to the user">Form</string>
<string>Form</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2" stretch="0,0,0,1">
<layout class="QVBoxLayout" name="verticalLayout_2">
<property name="spacing">
<number>0</number>
</property>
@ -21,291 +21,64 @@
<number>0</number>
</property>
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<property name="spacing">
<number>16</number>
</property>
<property name="margin">
<number>12</number>
</property>
<item>
<widget class="PlayableCover" name="cover">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>260</width>
<height>260</height>
</size>
</property>
<property name="text">
<string notr="true" extracomment="not translatable because is placeholder text">Cover</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item>
<layout class="QVBoxLayout" name="verticalLayout_3">
<property name="spacing">
<number>0</number>
</property>
<property name="margin">
<number>0</number>
</property>
<item>
<widget class="ScrollingLabel" name="albumLabel">
<property name="sizePolicy">
<sizepolicy hsizetype="Ignored" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="font">
<font>
<pointsize>26</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string notr="true" extracomment="not translatable because not shown to the user">TrackName</string>
</property>
<property name="indent">
<number>4</number>
</property>
</widget>
</item>
<item>
<widget class="QueryLabel" name="artistLabel">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="font">
<font>
<pointsize>20</pointsize>
</font>
</property>
<property name="text">
<string notr="true" extracomment="not translatable because not shown to the user">ArtistName</string>
</property>
</widget>
</item>
<item>
<spacer name="verticalSpacer_1">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
</layout>
</item>
<item>
<widget class="Line" name="lineAbove">
<property name="maximumSize">
<size>
<width>16777215</width>
<height>1</height>
</size>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
<widget class="ContextView" name="albumView" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
<item>
<widget class="Line" name="lineBelow">
<property name="maximumSize">
<size>
<width>16777215</width>
<height>1</height>
</size>
<widget class="QFrame" name="trackFrame">
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
</widget>
</item>
<item>
<widget class="QWidget" name="widget" native="true">
<layout class="QVBoxLayout" name="verticalLayout">
<layout class="QVBoxLayout" name="verticalLayout_6">
<property name="spacing">
<number>0</number>
<number>4</number>
</property>
<property name="leftMargin">
<number>0</number>
<number>32</number>
</property>
<property name="topMargin">
<number>16</number>
<number>4</number>
</property>
<property name="rightMargin">
<number>0</number>
<number>32</number>
</property>
<property name="bottomMargin">
<number>16</number>
<number>8</number>
</property>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<property name="leftMargin">
<number>12</number>
<widget class="CaptionLabel" name="topHitsLabel">
<property name="text">
<string>Top Hits</string>
</property>
<property name="topMargin">
<property name="margin">
<number>0</number>
</property>
<property name="rightMargin">
<number>12</number>
</widget>
</item>
<item>
<widget class="GridView" name="topHits">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="bottomMargin">
<number>0</number>
<property name="minimumSize">
<size>
<width>0</width>
<height>190</height>
</size>
</property>
<item>
<widget class="QFrame" name="trackFrame">
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
<layout class="QVBoxLayout" name="verticalLayout_6" stretch="0,0,1">
<property name="spacing">
<number>4</number>
</property>
<property name="leftMargin">
<number>8</number>
</property>
<property name="topMargin">
<number>4</number>
</property>
<property name="rightMargin">
<number>8</number>
</property>
<property name="bottomMargin">
<number>8</number>
</property>
<item>
<widget class="QLabel" name="label">
<property name="font">
<font>
<pointsize>20</pointsize>
<weight>50</weight>
<bold>false</bold>
</font>
</property>
<property name="text">
<string>Tracklist</string>
</property>
<property name="margin">
<number>0</number>
</property>
</widget>
</item>
<item>
<widget class="TrackView" name="tracks">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="MinimumExpanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="headerHidden">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>0</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QFrame" name="albumFrame">
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
<layout class="QVBoxLayout" name="verticalLayout_4" stretch="0,1">
<property name="spacing">
<number>4</number>
</property>
<property name="leftMargin">
<number>8</number>
</property>
<property name="topMargin">
<number>4</number>
</property>
<property name="rightMargin">
<number>8</number>
</property>
<property name="bottomMargin">
<number>4</number>
</property>
<item>
<widget class="QLabel" name="label_2">
<property name="font">
<font>
<family>Arial</family>
<pointsize>20</pointsize>
<weight>50</weight>
<bold>false</bold>
</font>
</property>
<property name="text">
<string>Other Albums</string>
</property>
<property name="margin">
<number>0</number>
</property>
</widget>
</item>
<item>
<widget class="GridView" name="albums">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="MinimumExpanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>190</height>
</size>
</property>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
@ -319,24 +92,15 @@
<header>playlist/GridView.h</header>
</customwidget>
<customwidget>
<class>PlayableCover</class>
<class>CaptionLabel</class>
<extends>QLabel</extends>
<header>widgets/PlayableCover.h</header>
<header>widgets/CaptionLabel.h</header>
</customwidget>
<customwidget>
<class>QueryLabel</class>
<extends>QLabel</extends>
<header>widgets/QueryLabel.h</header>
</customwidget>
<customwidget>
<class>ScrollingLabel</class>
<extends>QLabel</extends>
<header location="global">widgets/ScrollingLabel.h</header>
</customwidget>
<customwidget>
<class>TrackView</class>
<extends>QTreeView</extends>
<header>playlist/TrackView.h</header>
<class>ContextView</class>
<extends>QWidget</extends>
<header>playlist/ContextView.h</header>
<container>1</container>
</customwidget>
</customwidgets>
<resources/>