From d894116e8e5df218e40403c75ef85d02cbbdb154 Mon Sep 17 00:00:00 2001 From: Michael Zanetti Date: Sun, 1 Jul 2012 23:48:46 +0200 Subject: [PATCH] take that, QWidget! --- src/CMakeLists.txt | 1 - src/libtomahawk/CMakeLists.txt | 2 + src/libtomahawk/playlist/PlayableModel.cpp | 5 + .../infowidgets/AlbumArtImageProvider.cpp | 18 ++ .../infowidgets/AlbumArtImageProvider.h | 12 + .../widgets/infowidgets/ArtistInfoScene.qml | 61 ++++++ .../widgets/infowidgets/ArtistInfoWidget.cpp | 206 ++++++++++-------- .../widgets/infowidgets/ArtistInfoWidget.h | 2 +- 8 files changed, 209 insertions(+), 98 deletions(-) create mode 100644 src/libtomahawk/widgets/infowidgets/AlbumArtImageProvider.cpp create mode 100644 src/libtomahawk/widgets/infowidgets/AlbumArtImageProvider.h create mode 100644 src/libtomahawk/widgets/infowidgets/ArtistInfoScene.qml diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 25a16b78d..863aa797f 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -204,7 +204,6 @@ TARGET_LINK_LIBRARIES( tomahawk ${QXTWEB_LIBRARIES} ${QJSON_LIBRARIES} ${TAGLIB_LIBRARIES} - ${QT_QTDECLARATIVE_LIBRARY} ) IF( APPLE ) diff --git a/src/libtomahawk/CMakeLists.txt b/src/libtomahawk/CMakeLists.txt index 62e6ce9b2..6f4741457 100644 --- a/src/libtomahawk/CMakeLists.txt +++ b/src/libtomahawk/CMakeLists.txt @@ -145,6 +145,7 @@ set( libGuiSources widgets/infowidgets/ArtistInfoWidget.cpp widgets/infowidgets/AlbumInfoWidget.cpp widgets/infowidgets/TrackInfoWidget.cpp + widgets/infowidgets/AlbumArtImageProvider.cpp widgets/Breadcrumb.cpp widgets/BreadcrumbButton.cpp ) @@ -450,6 +451,7 @@ TARGET_LINK_LIBRARIES( tomahawklib ${QT_QTNETWORK_LIBRARY} ${QT_QTXML_LIBRARY} ${QT_QTCORE_LIBRARY} + ${QT_QTDECLARATIVE_LIBRARY} ${OS_SPECIFIC_LINK_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT} ${LINK_LIBRARIES} diff --git a/src/libtomahawk/playlist/PlayableModel.cpp b/src/libtomahawk/playlist/PlayableModel.cpp index c108a49d9..502c90b8c 100644 --- a/src/libtomahawk/playlist/PlayableModel.cpp +++ b/src/libtomahawk/playlist/PlayableModel.cpp @@ -44,6 +44,11 @@ PlayableModel::PlayableModel( QObject* parent, bool loading ) , m_style( Detailed ) , m_loading( loading ) { + + QHash roleNames; + roleNames.insert(Qt::DisplayRole, "label"); + setRoleNames(roleNames); + connect( AudioEngine::instance(), SIGNAL( started( Tomahawk::result_ptr ) ), SLOT( onPlaybackStarted( Tomahawk::result_ptr ) ), Qt::DirectConnection ); connect( AudioEngine::instance(), SIGNAL( stopped() ), SLOT( onPlaybackStopped() ), Qt::DirectConnection ); diff --git a/src/libtomahawk/widgets/infowidgets/AlbumArtImageProvider.cpp b/src/libtomahawk/widgets/infowidgets/AlbumArtImageProvider.cpp new file mode 100644 index 000000000..59405fbc8 --- /dev/null +++ b/src/libtomahawk/widgets/infowidgets/AlbumArtImageProvider.cpp @@ -0,0 +1,18 @@ +#include "AlbumArtImageProvider.h" + +#include + +QPixmap AlbumArtImageProvider::requestPixmap(const QString &id, QSize *size, const QSize &requestedSize) +{ + qDebug() << "*!*!*!*!*!*!*!*!*!* image requested"; + int width = 100; + int height = 50; + + if (size) + *size = QSize(width, height); + QPixmap pixmap(requestedSize.width() > 0 ? requestedSize.width() : width, + requestedSize.height() > 0 ? requestedSize.height() : height); + pixmap.fill(QColor(id).rgba()); + + return pixmap; +} diff --git a/src/libtomahawk/widgets/infowidgets/AlbumArtImageProvider.h b/src/libtomahawk/widgets/infowidgets/AlbumArtImageProvider.h new file mode 100644 index 000000000..2524f63ff --- /dev/null +++ b/src/libtomahawk/widgets/infowidgets/AlbumArtImageProvider.h @@ -0,0 +1,12 @@ +#include + +class AlbumArtImageProvider : public QDeclarativeImageProvider +{ +public: + AlbumArtImageProvider() + : QDeclarativeImageProvider(QDeclarativeImageProvider::Pixmap) + { + } + + QPixmap requestPixmap(const QString &id, QSize *size, const QSize &requestedSize); +}; diff --git a/src/libtomahawk/widgets/infowidgets/ArtistInfoScene.qml b/src/libtomahawk/widgets/infowidgets/ArtistInfoScene.qml new file mode 100644 index 000000000..644578ba2 --- /dev/null +++ b/src/libtomahawk/widgets/infowidgets/ArtistInfoScene.qml @@ -0,0 +1,61 @@ +import QtQuick 1.1 + +Rectangle { + color: "darkgray" + anchors.fill: parent +// height: 200 +// width: 200 + + + Component { + id: appDelegate + Item { + width: 100; height: 100 + scale: PathView.iconScale + + // Use Image provider here +// Image { +// id: myIcon +// y: 20; anchors.horizontalCenter: parent.horizontalCenter +// source: icon +// smooth: true +// } + Rectangle { + width: 100 + height: 100 + color: "blue" + } + + Text { + anchors { top: myIcon.bottom; horizontalCenter: parent.horizontalCenter } + text: label + smooth: true + } + + MouseArea { + anchors.fill: parent + onClicked: view.currentIndex = index + } + } + } + + PathView { + id: view + anchors.fill: parent + preferredHighlightBegin: 0.5 + preferredHighlightEnd: 0.5 + focus: true + model: albumsModel + delegate: appDelegate + pathItemCount: 8 + path: Path { + startX: 10 + startY: 50 + PathAttribute { name: "iconScale"; value: 0.5 } + PathQuad { x: view.width/2; y: 150; controlX: 50; controlY: 200 } + PathAttribute { name: "iconScale"; value: 1.0 } + PathQuad { x: view.width; y: 50; controlX: view.width; controlY: 200 } + PathAttribute { name: "iconScale"; value: 0.5 } + } + } +} diff --git a/src/libtomahawk/widgets/infowidgets/ArtistInfoWidget.cpp b/src/libtomahawk/widgets/infowidgets/ArtistInfoWidget.cpp index bde354cd6..bf83d8257 100644 --- a/src/libtomahawk/widgets/infowidgets/ArtistInfoWidget.cpp +++ b/src/libtomahawk/widgets/infowidgets/ArtistInfoWidget.cpp @@ -23,6 +23,9 @@ #include #include +#include +#include +#include "AlbumArtImageProvider.h" #include "audio/AudioEngine.h" #include "playlist/PlayableModel.h" @@ -47,110 +50,121 @@ ArtistInfoWidget::ArtistInfoWidget( const Tomahawk::artist_ptr& artist, QWidget* , ui( new Ui::ArtistInfoWidget ) , m_artist( artist ) { - QWidget* widget = new QWidget; - ui->setupUi( widget ); + qDebug() << "*********************************************************************"; - QPalette pal = palette(); - pal.setColor( QPalette::Window, QColor( "#454e59" ) ); + setResizeMode(QDeclarativeView::SizeRootObjectToView); - widget->setPalette( pal ); - widget->setAutoFillBackground( true ); - m_plInterface = Tomahawk::playlistinterface_ptr( new MetaPlaylistInterface( this ) ); + m_albumsModel = new PlayableModel( this ); + rootContext()->setContextProperty("albumsModel", m_albumsModel); + engine()->addImageProvider(QLatin1String("albums"), new AlbumArtImageProvider); -/* TomahawkUtils::unmarginLayout( ui->layoutWidget->layout() ); - TomahawkUtils::unmarginLayout( ui->layoutWidget1->layout() ); - TomahawkUtils::unmarginLayout( ui->layoutWidget2->layout() ); - TomahawkUtils::unmarginLayout( ui->albumHeader->layout() );*/ + setSource(QUrl::fromLocalFile("/home/micha/Develop/tomahawk/src/libtomahawk/widgets/infowidgets/ArtistInfoScene.qml")); - m_albumsModel = new PlayableModel( ui->albums ); - ui->albums->setPlayableModel( m_albumsModel ); - ui->topHits->setEmptyTip( tr( "Sorry, we could not find any albums for this artist!" ) ); +// QWidget* widget = new QWidget; +// ui->setupUi( widget ); - m_relatedModel = new PlayableModel( ui->relatedArtists ); - ui->relatedArtists->setPlayableModel( m_relatedModel ); - ui->relatedArtists->proxyModel()->sort( -1 ); - ui->topHits->setEmptyTip( tr( "Sorry, we could not find any related artists!" ) ); +// QPalette pal = palette(); +// pal.setColor( QPalette::Window, QColor( "#454e59" ) ); - m_topHitsModel = new PlaylistModel( ui->topHits ); - m_topHitsModel->setStyle( PlayableModel::Short ); - ui->topHits->setPlayableModel( m_topHitsModel ); - ui->topHits->setSortingEnabled( false ); - ui->topHits->setEmptyTip( tr( "Sorry, we could not find any top hits for this artist!" ) ); +// widget->setPalette( pal ); +// widget->setAutoFillBackground( true ); - ui->relatedArtists->setAutoFitItems( false ); - ui->relatedArtists->setWrapping( false ); - ui->relatedArtists->setVerticalScrollBarPolicy( Qt::ScrollBarAlwaysOff ); - ui->relatedArtists->setHorizontalScrollBarPolicy( Qt::ScrollBarAsNeeded ); - m_relatedModel->setItemSize( QSize( 170, 170 ) ); +// m_plInterface = Tomahawk::playlistinterface_ptr( new MetaPlaylistInterface( this ) ); - ui->albums->setAutoFitItems( false ); - ui->albums->setWrapping( false ); - ui->albums->setVerticalScrollBarPolicy( Qt::ScrollBarAlwaysOff ); - ui->albums->setHorizontalScrollBarPolicy( Qt::ScrollBarAsNeeded ); - m_albumsModel->setItemSize( QSize( 170, 170 ) ); - ui->albums->proxyModel()->setHideDupeItems( true ); +///* TomahawkUtils::unmarginLayout( ui->layoutWidget->layout() ); +// TomahawkUtils::unmarginLayout( ui->layoutWidget1->layout() ); +// TomahawkUtils::unmarginLayout( ui->layoutWidget2->layout() ); +// TomahawkUtils::unmarginLayout( ui->albumHeader->layout() );*/ - ui->topHits->setFrameShape( QFrame::StyledPanel ); - ui->topHits->setAttribute( Qt::WA_MacShowFocusRect, 0 ); +// m_albumsModel = new PlayableModel( ui->albums ); +// ui->albums->setPlayableModel( m_albumsModel ); +// ui->topHits->setEmptyTip( tr( "Sorry, we could not find any albums for this artist!" ) ); - m_pixmap = TomahawkUtils::defaultPixmap( TomahawkUtils::DefaultArtistImage, TomahawkUtils::ScaledCover, QSize( 48, 48 ) ); - ui->cover->setPixmap( TomahawkUtils::defaultPixmap( TomahawkUtils::DefaultArtistImage, TomahawkUtils::ScaledCover, QSize( ui->cover->sizeHint() ) ) ); +// m_relatedModel = new PlayableModel( ui->relatedArtists ); +// ui->relatedArtists->setPlayableModel( m_relatedModel ); +// ui->relatedArtists->proxyModel()->sort( -1 ); +// ui->topHits->setEmptyTip( tr( "Sorry, we could not find any related artists!" ) ); - ui->biography->setFrameShape( QFrame::NoFrame ); - ui->biography->setAttribute( Qt::WA_MacShowFocusRect, 0 ); - TomahawkUtils::styleScrollBar( ui->biography->verticalScrollBar() ); +// m_topHitsModel = new PlaylistModel( ui->topHits ); +// m_topHitsModel->setStyle( PlayableModel::Short ); +// ui->topHits->setPlayableModel( m_topHitsModel ); +// ui->topHits->setSortingEnabled( false ); +// ui->topHits->setEmptyTip( tr( "Sorry, we could not find any top hits for this artist!" ) ); - QFont f = font(); - f.setBold( true ); - f.setPixelSize( 18 ); - ui->artistLabel->setFont( f ); +// ui->relatedArtists->setAutoFitItems( false ); +// ui->relatedArtists->setWrapping( false ); +// ui->relatedArtists->setVerticalScrollBarPolicy( Qt::ScrollBarAlwaysOff ); +// ui->relatedArtists->setHorizontalScrollBarPolicy( Qt::ScrollBarAsNeeded ); +// m_relatedModel->setItemSize( QSize( 170, 170 ) ); - QPalette p = ui->biography->palette(); - p.setColor( QPalette::Foreground, Qt::white ); - p.setColor( QPalette::Text, Qt::white ); +// ui->albums->setAutoFitItems( false ); +// ui->albums->setWrapping( false ); +// ui->albums->setVerticalScrollBarPolicy( Qt::ScrollBarAlwaysOff ); +// ui->albums->setHorizontalScrollBarPolicy( Qt::ScrollBarAsNeeded ); +// m_albumsModel->setItemSize( QSize( 170, 170 ) ); +// ui->albums->proxyModel()->setHideDupeItems( true ); - ui->artistLabel->setPalette( p ); - ui->biography->setPalette( p ); - ui->label->setPalette( p ); - ui->label_2->setPalette( p ); - ui->label_3->setPalette( p ); +// ui->topHits->setFrameShape( QFrame::StyledPanel ); +// ui->topHits->setAttribute( Qt::WA_MacShowFocusRect, 0 ); - QScrollArea* area = new QScrollArea(); - area->setWidgetResizable( true ); - area->setWidget( widget ); +// m_pixmap = TomahawkUtils::defaultPixmap( TomahawkUtils::DefaultArtistImage, TomahawkUtils::ScaledCover, QSize( 48, 48 ) ); +// ui->cover->setPixmap( TomahawkUtils::defaultPixmap( TomahawkUtils::DefaultArtistImage, TomahawkUtils::ScaledCover, QSize( ui->cover->sizeHint() ) ) ); - area->setStyleSheet( "QScrollArea { background-color: #454e59; }" ); - area->setFrameShape( QFrame::NoFrame ); - area->setAttribute( Qt::WA_MacShowFocusRect, 0 ); +// ui->biography->setFrameShape( QFrame::NoFrame ); +// ui->biography->setAttribute( Qt::WA_MacShowFocusRect, 0 ); +// TomahawkUtils::styleScrollBar( ui->biography->verticalScrollBar() ); - QVBoxLayout* layout = new QVBoxLayout(); - layout->addWidget( area ); - setLayout( layout ); - TomahawkUtils::unmarginLayout( layout ); +// QFont f = font(); +// f.setBold( true ); +// f.setPixelSize( 18 ); +// ui->artistLabel->setFont( f ); - TomahawkUtils::styleScrollBar( ui->albums->horizontalScrollBar() ); - TomahawkUtils::styleScrollBar( ui->relatedArtists->horizontalScrollBar() ); +// QPalette p = ui->biography->palette(); +// p.setColor( QPalette::Foreground, Qt::white ); +// p.setColor( QPalette::Text, Qt::white ); - ui->biography->setStyleSheet( "QTextBrowser#biography { background-color: transparent; }" ); +// ui->artistLabel->setPalette( p ); +// ui->biography->setPalette( p ); +// ui->label->setPalette( p ); +// ui->label_2->setPalette( p ); +// ui->label_3->setPalette( p ); - ui->albums->setStyleSheet( "QListView { background-color: transparent; }" ); - ui->albumFrame->setStyleSheet( "QFrame#albumFrame { background-color: transparent; }" - "QFrame#albumFrame { " - "border-image: url(" RESPATH "images/scrollbar-vertical-handle.png) 3 3 3 3 stretch stretch;" - "border-top: 3px transparent; border-bottom: 3px transparent; border-right: 3px transparent; border-left: 3px transparent; }" ); +// QScrollArea* area = new QScrollArea(); +// area->setWidgetResizable( true ); +// area->setWidget( widget ); - ui->relatedArtists->setStyleSheet( "QListView { background-color: transparent; }" ); - ui->artistFrame->setStyleSheet( "QFrame#artistFrame { background-color: transparent; }" - "QFrame#artistFrame { " - "border-image: url(" RESPATH "images/scrollbar-vertical-handle.png) 3 3 3 3 stretch stretch;" - "border-top: 3px transparent; border-bottom: 3px transparent; border-right: 3px transparent; border-left: 3px transparent; }" ); +// area->setStyleSheet( "QScrollArea { background-color: #454e59; }" ); +// area->setFrameShape( QFrame::NoFrame ); +// area->setAttribute( Qt::WA_MacShowFocusRect, 0 ); -// ui->topHits->setStyleSheet( "QTreeView#topHits { background-color: transparent; }" ); - ui->trackFrame->setStyleSheet( "QFrame#trackFrame { background-color: transparent; }" - "QFrame#trackFrame { " - "border-image: url(" RESPATH "images/scrollbar-vertical-handle.png) 3 3 3 3 stretch stretch;" - "border-top: 3px transparent; border-bottom: 3px transparent; border-right: 3px transparent; border-left: 3px transparent; }" ); +// QVBoxLayout* layout = new QVBoxLayout(); +// layout->addWidget( area ); +// setLayout( layout ); +// TomahawkUtils::unmarginLayout( layout ); + +// TomahawkUtils::styleScrollBar( ui->albums->horizontalScrollBar() ); +// TomahawkUtils::styleScrollBar( ui->relatedArtists->horizontalScrollBar() ); + +// ui->biography->setStyleSheet( "QTextBrowser#biography { background-color: transparent; }" ); + +// ui->albums->setStyleSheet( "QListView { background-color: transparent; }" ); +// ui->albumFrame->setStyleSheet( "QFrame#albumFrame { background-color: transparent; }" +// "QFrame#albumFrame { " +// "border-image: url(" RESPATH "images/scrollbar-vertical-handle.png) 3 3 3 3 stretch stretch;" +// "border-top: 3px transparent; border-bottom: 3px transparent; border-right: 3px transparent; border-left: 3px transparent; }" ); + +// ui->relatedArtists->setStyleSheet( "QListView { background-color: transparent; }" ); +// ui->artistFrame->setStyleSheet( "QFrame#artistFrame { background-color: transparent; }" +// "QFrame#artistFrame { " +// "border-image: url(" RESPATH "images/scrollbar-vertical-handle.png) 3 3 3 3 stretch stretch;" +// "border-top: 3px transparent; border-bottom: 3px transparent; border-right: 3px transparent; border-left: 3px transparent; }" ); + +//// ui->topHits->setStyleSheet( "QTreeView#topHits { background-color: transparent; }" ); +// ui->trackFrame->setStyleSheet( "QFrame#trackFrame { background-color: transparent; }" +// "QFrame#trackFrame { " +// "border-image: url(" RESPATH "images/scrollbar-vertical-handle.png) 3 3 3 3 stretch stretch;" +// "border-top: 3px transparent; border-bottom: 3px transparent; border-right: 3px transparent; border-left: 3px transparent; }" ); load( artist ); } @@ -158,7 +172,7 @@ ArtistInfoWidget::ArtistInfoWidget( const Tomahawk::artist_ptr& artist, QWidget* ArtistInfoWidget::~ArtistInfoWidget() { - delete ui; +// delete ui; } @@ -226,9 +240,9 @@ ArtistInfoWidget::load( const artist_ptr& artist ) connect( m_artist.data(), SIGNAL( tracksAdded( QList, Tomahawk::ModelMode, Tomahawk::collection_ptr ) ), SLOT( onTracksFound( QList, Tomahawk::ModelMode ) ) ); - ui->artistLabel->setText( artist->name() ); +// ui->artistLabel->setText( artist->name() ); - m_topHitsModel->startLoading(); +// m_topHitsModel->startLoading(); if ( !m_artist->albums( Mixed ).isEmpty() ) onAlbumsFound( m_artist->albums( Mixed ), Mixed ); @@ -260,38 +274,38 @@ ArtistInfoWidget::onTracksFound( const QList& queries, Mode { Q_UNUSED( mode ); - m_topHitsModel->finishLoading(); - m_topHitsModel->appendQueries( queries ); +// m_topHitsModel->finishLoading(); +// m_topHitsModel->appendQueries( queries ); } void ArtistInfoWidget::onSimilarArtistsLoaded() { - m_relatedModel->appendArtists( m_artist->similarArtists() ); +// m_relatedModel->appendArtists( m_artist->similarArtists() ); } void ArtistInfoWidget::onBiographyLoaded() { - m_longDescription = m_artist->biography(); - emit longDescriptionChanged( m_longDescription ); +// m_longDescription = m_artist->biography(); +// emit longDescriptionChanged( m_longDescription ); - ui->biography->setHtml( m_artist->biography() ); +// ui->biography->setHtml( m_artist->biography() ); } void ArtistInfoWidget::onArtistImageUpdated() { - if ( m_artist->cover( QSize( 0, 0 ) ).isNull() ) - return; +// if ( m_artist->cover( QSize( 0, 0 ) ).isNull() ) +// return; - m_pixmap = m_artist->cover( QSize( 0, 0 ) ); - emit pixmapChanged( m_pixmap ); +// m_pixmap = m_artist->cover( QSize( 0, 0 ) ); +// emit pixmapChanged( m_pixmap ); - ui->cover->setPixmap( m_artist->cover( ui->cover->sizeHint() ) ); +// ui->cover->setPixmap( m_artist->cover( ui->cover->sizeHint() ) ); } @@ -302,7 +316,7 @@ ArtistInfoWidget::changeEvent( QEvent* e ) switch ( e->type() ) { case QEvent::LanguageChange: - ui->retranslateUi( this ); +// ui->retranslateUi( this ); break; default: diff --git a/src/libtomahawk/widgets/infowidgets/ArtistInfoWidget.h b/src/libtomahawk/widgets/infowidgets/ArtistInfoWidget.h index 89d772dd0..c874e60c0 100644 --- a/src/libtomahawk/widgets/infowidgets/ArtistInfoWidget.h +++ b/src/libtomahawk/widgets/infowidgets/ArtistInfoWidget.h @@ -31,12 +31,12 @@ #define ARTISTINFOWIDGET_H #include +#include #include "Typedefs.h" #include "PlaylistInterface.h" #include "ViewPage.h" -#include "QDeclarativeView" #include "DllMacro.h"