diff --git a/src/libtomahawk/widgets/whatshotwidget.cpp b/src/libtomahawk/widgets/whatshotwidget.cpp index aed53cc2f..60b72039a 100644 --- a/src/libtomahawk/widgets/whatshotwidget.cpp +++ b/src/libtomahawk/widgets/whatshotwidget.cpp @@ -53,10 +53,10 @@ WhatsHotWidget::WhatsHotWidget( QWidget* parent ) ui->setupUi( this ); TomahawkUtils::unmarginLayout( layout() ); - TomahawkUtils::unmarginLayout( ui->verticalLayout->layout() ); - TomahawkUtils::unmarginLayout( ui->verticalLayout_2->layout() ); + TomahawkUtils::unmarginLayout( ui->stackLeft->layout() ); + TomahawkUtils::unmarginLayout( ui->horizontalLayout->layout() ); + TomahawkUtils::unmarginLayout( ui->horizontalLayout_2->layout() ); TomahawkUtils::unmarginLayout( ui->breadCrumbLeft->layout() ); - TomahawkUtils::unmarginLayout( ui->breadCrumbRight->layout() ); //set crumb widgets @@ -70,41 +70,42 @@ WhatsHotWidget::WhatsHotWidget( QWidget* parent ) //ui->breadCrumbLeft->setSelectionModel(selectionModelLeft); ui->breadCrumbLeft->setUseAnimation(true); - ui->breadCrumbRight->setButtonFactory(crumbFactory); + connect(ui->breadCrumbLeft, SIGNAL(currentIndexChanged(QModelIndex)), SLOT(leftCrumbIndexChanged(QModelIndex))); + + /*ui->breadCrumbRight->setButtonFactory(crumbFactory); ui->breadCrumbRight->setRootIcon(QIcon( RESPATH "images/charts.png" )); ui->breadCrumbRight->setModel(m_crumbModelLeft); - ui->breadCrumbRight->setUseAnimation(true); + ui->breadCrumbRight->setUseAnimation(true);*/ - m_tracksModel = new PlaylistModel( ui->tracksView ); + m_tracksModel = new PlaylistModel( ui->tracksViewLeft ); m_tracksModel->setStyle( TrackModel::Short ); - ui->tracksView->setFrameShape( QFrame::NoFrame ); - ui->tracksView->setAttribute( Qt::WA_MacShowFocusRect, 0 ); - ui->tracksView->overlay()->setEnabled( false ); - ui->tracksView->setTrackModel( m_tracksModel ); - ui->tracksView->setHeaderHidden( true ); - ui->tracksView->setHorizontalScrollBarPolicy( Qt::ScrollBarAlwaysOff ); + ui->tracksViewLeft->setFrameShape( QFrame::NoFrame ); + ui->tracksViewLeft->setAttribute( Qt::WA_MacShowFocusRect, 0 ); + ui->tracksViewLeft->overlay()->setEnabled( false ); + ui->tracksViewLeft->setTrackModel( m_tracksModel ); + ui->tracksViewLeft->setHeaderHidden( true ); + ui->tracksViewLeft->setHorizontalScrollBarPolicy( Qt::ScrollBarAlwaysOff ); - - m_artistsModel = new TreeModel( ui->artistsView ); + m_artistsModel = new TreeModel( this ); m_artistsModel->setColumnStyle( TreeModel::TrackOnly ); - m_artistsProxy = new TreeProxyModel( ui->artistsView ); + + m_artistsProxy = new TreeProxyModel( ui->artistsViewLeft ); m_artistsProxy->setFilterCaseSensitivity( Qt::CaseInsensitive ); m_artistsProxy->setDynamicSortFilter( true ); - ui->artistsView->setProxyModel( m_artistsProxy ); - ui->artistsView->setTreeModel( m_artistsModel ); - ui->artistsView->setFrameShape( QFrame::NoFrame ); - ui->artistsView->setAttribute( Qt::WA_MacShowFocusRect, 0 ); + ui->artistsViewLeft->setProxyModel( m_artistsProxy ); + ui->artistsViewLeft->setTreeModel( m_artistsModel ); + ui->artistsViewLeft->setFrameShape( QFrame::NoFrame ); + ui->artistsViewLeft->setAttribute( Qt::WA_MacShowFocusRect, 0 ); - m_artistsProxy->sort( -1 ); // disable sorting, must be called after artistsView->setTreeModel - - ui->artistsView->setHorizontalScrollBarPolicy( Qt::ScrollBarAlwaysOff ); - ui->artistsView->header()->setVisible( false ); + m_artistsProxy->sort( -1 ); // disable sorting, must be called after artistsViewLeft->setTreeModel + ui->artistsViewLeft->setHorizontalScrollBarPolicy( Qt::ScrollBarAlwaysOff ); + ui->artistsViewLeft->header()->setVisible( false ); m_timer = new QTimer( this ); connect( m_timer, SIGNAL( timeout() ), SLOT( checkQueries() ) ); @@ -139,12 +140,6 @@ WhatsHotWidget::fetchData() requestData.type = Tomahawk::InfoSystem::InfoChartCapabilities; Tomahawk::InfoSystem::InfoSystem::instance()->getInfo( requestData ); - /*requestData.type = Tomahawk::InfoSystem::InfoChartArtists; - Tomahawk::InfoSystem::InfoSystem::instance()->getInfo( requestData ); - - requestData.type = Tomahawk::InfoSystem::InfoChartTracks; - Tomahawk::InfoSystem::InfoSystem::instance()->getInfo( requestData ); - */ tDebug() << "WhatsHot: requested InfoChartCapabilities"; } @@ -162,7 +157,7 @@ WhatsHotWidget::infoSystemInfo( Tomahawk::InfoSystem::InfoRequestData requestDat { if ( requestData.caller != s_whatsHotIdentifier ) { -// tDebug() << "Info of wrong type or not with our identifier"; + tDebug() << "WhatsHot::" << "Info of wrong type or not with our identifier"; return; } @@ -184,7 +179,7 @@ WhatsHotWidget::infoSystemInfo( Tomahawk::InfoSystem::InfoRequestData requestDat } KBreadcrumbSelectionModel *selectionModelLeft = new KBreadcrumbSelectionModel(new QItemSelectionModel(m_crumbModelLeft, this), this); ui->breadCrumbLeft->setSelectionModel(selectionModelLeft); - ui->breadCrumbRight->setSelectionModel(selectionModelLeft); + //ui->breadCrumbRight->setSelectionModel(selectionModelLeft); //HACK ALERT - we want the second crumb to expand right away, so we //force it here. We should find a more elegant want to do this ui->breadCrumbLeft->currentChangedTriggered(m_crumbModelLeft->index(0,0).child(0,0)); @@ -197,15 +192,20 @@ WhatsHotWidget::infoSystemInfo( Tomahawk::InfoSystem::InfoRequestData requestDat const QString type = returnedData["type"].toString(); if( !returnedData.contains(type) ) break; - tDebug() << "WhatsHot: got chart! " << type; + const QString side = requestData.customData["whatshot_side"].toString(); + tDebug() << "WhatsHot: got chart! " << type << " on " << side; if( type == "artists" ) { + setLeftViewArtists(); const QStringList artists = returnedData["artists"].toStringList(); tDebug() << "WhatsHot: got artists! " << artists.size(); + m_artistsModel->clear(); foreach ( const QString& artist, artists ) m_artistsModel->addArtists( Artist::get( artist ) ); } else if( type == "tracks" ) { + setLeftViewTracks(); const QList<Tomahawk::InfoSystem::ArtistTrackPair> tracks = returnedData["tracks"].value<QList<Tomahawk::InfoSystem::ArtistTrackPair> >(); tDebug() << "WhatsHot: got tracks! " << tracks.size(); + m_tracksModel->clear(); foreach ( const Tomahawk::InfoSystem::ArtistTrackPair& track, tracks ) { query_ptr query = Query::get( track.artist, track.track, QString(), uuid() ); m_tracksModel->append( query ); @@ -228,6 +228,33 @@ WhatsHotWidget::infoSystemFinished( QString target ) } +void +WhatsHotWidget::leftCrumbIndexChanged( QModelIndex index ) +{ + qDebug() << "WhatsHot:: left crumb changed" << index.data(); + QStandardItem* item = m_crumbModelLeft->itemFromIndex(index); + if( !item ) + return; + if( !item->data().isValid() ) + return; + + + const QString chartId = item->data().toString(); + + Tomahawk::InfoSystem::InfoCriteriaHash criteria; + criteria.insert("chart_id", chartId); + + Tomahawk::InfoSystem::InfoRequestData requestData; + QVariantMap customData; + customData.insert("whatshot_side", "left"); + requestData.caller = s_whatsHotIdentifier; + requestData.customData = customData; + requestData.input = QVariant::fromValue< Tomahawk::InfoSystem::InfoCriteriaHash >( criteria ); + + requestData.type = Tomahawk::InfoSystem::InfoChart; + Tomahawk::InfoSystem::InfoSystem::instance()->getInfo( requestData ); +} + void WhatsHotWidget::changeEvent( QEvent* e ) { @@ -276,3 +303,15 @@ WhatsHotWidget::parseNode(QStandardItem* parentItem, const QString &label, const } return sourceItem; } + +void +WhatsHotWidget::setLeftViewArtists() +{ + ui->stackLeft->setCurrentIndex(1); +} + +void +WhatsHotWidget::setLeftViewTracks() +{ + ui->stackLeft->setCurrentIndex(0); +} diff --git a/src/libtomahawk/widgets/whatshotwidget.h b/src/libtomahawk/widgets/whatshotwidget.h index 3a46b0401..35474018d 100644 --- a/src/libtomahawk/widgets/whatshotwidget.h +++ b/src/libtomahawk/widgets/whatshotwidget.h @@ -81,8 +81,11 @@ private slots: void checkQueries(); void infoSystemInfo( Tomahawk::InfoSystem::InfoRequestData requestData, QVariant output ); void infoSystemFinished( QString target ); + void leftCrumbIndexChanged( QModelIndex ); private: + void setLeftViewArtists(); + void setLeftViewTracks(); QStandardItem* parseNode(QStandardItem* parentItem, const QString &label, const QVariant &data); Ui::WhatsHotWidget *ui; diff --git a/src/libtomahawk/widgets/whatshotwidget.ui b/src/libtomahawk/widgets/whatshotwidget.ui index 1d535aa91..902455cfb 100644 --- a/src/libtomahawk/widgets/whatshotwidget.ui +++ b/src/libtomahawk/widgets/whatshotwidget.ui @@ -10,42 +10,41 @@ <height>513</height> </rect> </property> - <layout class="QHBoxLayout" name="horizontalLayout_2"> + <layout class="QVBoxLayout" name="verticalLayout"> <item> - <layout class="QVBoxLayout" name="verticalLayout"> - <item> - <widget class="HeaderBreadCrumb" name="breadCrumbLeft"> - </widget> - </item> - <item> - <widget class="PlaylistView" name="tracksView"> - <property name="minimumSize"> - <size> - <width>320</width> - <height>0</height> - </size> - </property> - </widget> - </item> - </layout> + <widget class="HeaderBreadCrumb" name="breadCrumbLeft" native="true"/> </item> <item> - <layout class="QVBoxLayout" name="verticalLayout_2"> - <item> - <widget class="HeaderBreadCrumb" name="breadCrumbRight"> - </widget> - </item> - <item> - <widget class="ArtistView" name="artistsView"> - <property name="minimumSize"> - <size> - <width>320</width> - <height>0</height> - </size> - </property> - </widget> - </item> - </layout> + <widget class="QStackedWidget" name="stackLeft"> + <widget class="QWidget" name="page"> + <layout class="QHBoxLayout" name="horizontalLayout_2"> + <item> + <widget class="PlaylistView" name="tracksViewLeft"> + <property name="minimumSize"> + <size> + <width>320</width> + <height>0</height> + </size> + </property> + </widget> + </item> + </layout> + </widget> + <widget class="QWidget" name="page1"> + <layout class="QHBoxLayout" name="horizontalLayout"> + <item> + <widget class="ArtistView" name="artistsViewLeft"> + <property name="minimumSize"> + <size> + <width>320</width> + <height>0</height> + </size> + </property> + </widget> + </item> + </layout> + </widget> + </widget> </item> </layout> </widget>