1
0
mirror of https://github.com/tomahawk-player/tomahawk.git synced 2025-08-04 21:27:58 +02:00

Show the same mode as the source when clicking into an album from the collection

This commit is contained in:
Leo Franchi
2011-10-30 22:36:14 -04:00
parent ae56d51076
commit 7ab68fb418
10 changed files with 44 additions and 28 deletions

View File

@@ -158,7 +158,7 @@ ArtistView::onItemActivated( const QModelIndex& index )
if ( !item->artist().isNull() ) if ( !item->artist().isNull() )
ViewManager::instance()->show( item->artist() ); ViewManager::instance()->show( item->artist() );
else if ( !item->album().isNull() ) else if ( !item->album().isNull() )
ViewManager::instance()->show( item->album() ); ViewManager::instance()->show( item->album(), m_model->mode() );
else if ( !item->result().isNull() && item->result()->isOnline() ) else if ( !item->result().isNull() && item->result()->isOnline() )
{ {
m_model->setCurrentItem( item->index ); m_model->setCurrentItem( item->index );

View File

@@ -38,7 +38,7 @@ TreeModel::TreeModel( QObject* parent )
, m_rootItem( new TreeModelItem( 0, this ) ) , m_rootItem( new TreeModelItem( 0, this ) )
, m_infoId( uuid() ) , m_infoId( uuid() )
, m_columnStyle( AllColumns ) , m_columnStyle( AllColumns )
, m_mode( Database ) , m_mode( DatabaseMode )
{ {
setIcon( QPixmap( RESPATH "images/music-icon.png" ) ); setIcon( QPixmap( RESPATH "images/music-icon.png" ) );
@@ -576,7 +576,7 @@ TreeModel::addAlbums( const artist_ptr& artist, const QModelIndex& parent )
{ {
emit loadingStarted(); emit loadingStarted();
if ( m_mode == Database ) if ( m_mode == DatabaseMode )
{ {
DatabaseCommand_AllAlbums* cmd = new DatabaseCommand_AllAlbums( m_collection, artist ); DatabaseCommand_AllAlbums* cmd = new DatabaseCommand_AllAlbums( m_collection, artist );
cmd->setData( parent.row() ); cmd->setData( parent.row() );
@@ -586,7 +586,7 @@ TreeModel::addAlbums( const artist_ptr& artist, const QModelIndex& parent )
Database::instance()->enqueue( QSharedPointer<DatabaseCommand>( cmd ) ); Database::instance()->enqueue( QSharedPointer<DatabaseCommand>( cmd ) );
} }
else if ( m_mode == InfoSystem ) else if ( m_mode == InfoSystemMode )
{ {
Tomahawk::InfoSystem::InfoStringHash artistInfo; Tomahawk::InfoSystem::InfoStringHash artistInfo;
artistInfo["artist"] = artist->name(); artistInfo["artist"] = artist->name();
@@ -612,7 +612,7 @@ TreeModel::addTracks( const album_ptr& album, const QModelIndex& parent )
rows << parent.row(); rows << parent.row();
rows << parent.parent().row(); rows << parent.parent().row();
if ( m_mode == Database ) if ( m_mode == DatabaseMode )
{ {
DatabaseCommand_AllTracks* cmd = new DatabaseCommand_AllTracks( m_collection ); DatabaseCommand_AllTracks* cmd = new DatabaseCommand_AllTracks( m_collection );
cmd->setAlbum( album.data() ); cmd->setAlbum( album.data() );
@@ -623,7 +623,7 @@ TreeModel::addTracks( const album_ptr& album, const QModelIndex& parent )
Database::instance()->enqueue( QSharedPointer<DatabaseCommand>( cmd ) ); Database::instance()->enqueue( QSharedPointer<DatabaseCommand>( cmd ) );
} }
else if ( m_mode == InfoSystem ) else if ( m_mode == InfoSystemMode )
{ {
Tomahawk::InfoSystem::InfoStringHash artistInfo; Tomahawk::InfoSystem::InfoStringHash artistInfo;
artistInfo["artist"] = album->artist()->name(); artistInfo["artist"] = album->artist()->name();
@@ -850,14 +850,14 @@ TreeModel::infoSystemInfo( Tomahawk::InfoSystem::InfoRequestData requestData, QV
{ {
if ( m_receivedInfoData.contains( requestData.input.value< Tomahawk::InfoSystem::InfoStringHash >() ) ) if ( m_receivedInfoData.contains( requestData.input.value< Tomahawk::InfoSystem::InfoStringHash >() ) )
break; break;
QVariantMap returnedData = output.value< QVariantMap >(); QVariantMap returnedData = output.value< QVariantMap >();
if ( returnedData.isEmpty() ) if ( returnedData.isEmpty() )
break; break;
m_receivedInfoData.insert( requestData.input.value< Tomahawk::InfoSystem::InfoStringHash >() ); m_receivedInfoData.insert( requestData.input.value< Tomahawk::InfoSystem::InfoStringHash >() );
QStringList tracks = returnedData[ "tracks" ].toStringList(); QStringList tracks = returnedData[ "tracks" ].toStringList();
QList<query_ptr> ql; QList<query_ptr> ql;

View File

@@ -33,6 +33,7 @@
#include "infosystem/infosystem.h" #include "infosystem/infosystem.h"
#include "dllmacro.h" #include "dllmacro.h"
#include "typedefs.h"
class QMetaData; class QMetaData;
@@ -55,9 +56,6 @@ public:
enum ColumnStyle enum ColumnStyle
{ AllColumns = 0, TrackOnly }; { AllColumns = 0, TrackOnly };
enum ModelMode
{ Database = 0, InfoSystem };
explicit TreeModel( QObject* parent = 0 ); explicit TreeModel( QObject* parent = 0 );
virtual ~TreeModel(); virtual ~TreeModel();
@@ -73,8 +71,8 @@ public:
virtual int rowCount( const QModelIndex& parent = QModelIndex() ) const; virtual int rowCount( const QModelIndex& parent = QModelIndex() ) const;
virtual int columnCount( const QModelIndex& parent = QModelIndex() ) const; virtual int columnCount( const QModelIndex& parent = QModelIndex() ) const;
virtual ModelMode mode() const { return m_mode; } virtual Tomahawk::ModelMode mode() const { return m_mode; }
virtual void setMode( ModelMode mode ) { m_mode = mode; } virtual void setMode( Tomahawk::ModelMode mode ) { m_mode = mode; }
virtual QVariant data( const QModelIndex& index, int role = Qt::DisplayRole ) const; virtual QVariant data( const QModelIndex& index, int role = Qt::DisplayRole ) const;
virtual QVariant headerData( int section, Qt::Orientation orientation, int role ) const; virtual QVariant headerData( int section, Qt::Orientation orientation, int role ) const;
@@ -165,7 +163,7 @@ private:
QString m_description; QString m_description;
QPixmap m_icon; QPixmap m_icon;
ColumnStyle m_columnStyle; ColumnStyle m_columnStyle;
ModelMode m_mode; Tomahawk::ModelMode m_mode;
QList<Tomahawk::artist_ptr> m_artistsFilter; QList<Tomahawk::artist_ptr> m_artistsFilter;

View File

@@ -195,7 +195,7 @@ TreeProxyModel::filterAcceptsRow( int sourceRow, const QModelIndex& sourceParent
TreeModelItem* pi = sourceModel()->itemFromIndex( sourceModel()->index( sourceRow, 0, sourceParent ) ); TreeModelItem* pi = sourceModel()->itemFromIndex( sourceModel()->index( sourceRow, 0, sourceParent ) );
Q_ASSERT( pi ); Q_ASSERT( pi );
if ( m_model->mode() == TreeModel::Database && !pi->result().isNull() ) if ( m_model->mode() == Tomahawk::DatabaseMode && !pi->result().isNull() )
{ {
QList< Tomahawk::result_ptr > rl = m_cache.values( sourceParent ); QList< Tomahawk::result_ptr > rl = m_cache.values( sourceParent );
foreach ( const Tomahawk::result_ptr& result, rl ) foreach ( const Tomahawk::result_ptr& result, rl )

View File

@@ -63,6 +63,12 @@ namespace Tomahawk
Static Static
}; };
enum ModelMode
{
DatabaseMode = 0,
InfoSystemMode
};
}; // ns }; // ns
typedef int AudioErrorCode; typedef int AudioErrorCode;

View File

@@ -217,12 +217,12 @@ ViewManager::show( const Tomahawk::artist_ptr& artist )
Tomahawk::ViewPage* Tomahawk::ViewPage*
ViewManager::show( const Tomahawk::album_ptr& album ) ViewManager::show( const Tomahawk::album_ptr& album, Tomahawk::ModelMode initialMode )
{ {
AlbumInfoWidget* swidget; AlbumInfoWidget* swidget;
if ( !m_albumViews.contains( album ) || m_albumViews.value( album ).isNull() ) if ( !m_albumViews.contains( album ) || m_albumViews.value( album ).isNull() )
{ {
swidget = new AlbumInfoWidget( album ); swidget = new AlbumInfoWidget( album, initialMode );
m_albumViews.insert( album, swidget ); m_albumViews.insert( album, swidget );
} }
else else

View File

@@ -139,7 +139,7 @@ public slots:
Tomahawk::ViewPage* show( const Tomahawk::playlist_ptr& playlist ); Tomahawk::ViewPage* show( const Tomahawk::playlist_ptr& playlist );
Tomahawk::ViewPage* show( const Tomahawk::dynplaylist_ptr& playlist ); Tomahawk::ViewPage* show( const Tomahawk::dynplaylist_ptr& playlist );
Tomahawk::ViewPage* show( const Tomahawk::artist_ptr& artist ); Tomahawk::ViewPage* show( const Tomahawk::artist_ptr& artist );
Tomahawk::ViewPage* show( const Tomahawk::album_ptr& album ); Tomahawk::ViewPage* show( const Tomahawk::album_ptr& album, Tomahawk::ModelMode withInitialMode = Tomahawk::InfoSystemMode );
Tomahawk::ViewPage* show( const Tomahawk::collection_ptr& collection ); Tomahawk::ViewPage* show( const Tomahawk::collection_ptr& collection );
Tomahawk::ViewPage* show( const Tomahawk::source_ptr& source ); Tomahawk::ViewPage* show( const Tomahawk::source_ptr& source );

View File

@@ -39,7 +39,7 @@ static QString s_aiInfoIdentifier = QString( "AlbumInfoWidget" );
using namespace Tomahawk; using namespace Tomahawk;
AlbumInfoWidget::AlbumInfoWidget( const Tomahawk::album_ptr& album, QWidget* parent ) AlbumInfoWidget::AlbumInfoWidget( const Tomahawk::album_ptr& album, ModelMode startingMode, QWidget* parent )
: QWidget( parent ) : QWidget( parent )
, ui( new Ui::AlbumInfoWidget ) , ui( new Ui::AlbumInfoWidget )
{ {
@@ -58,16 +58,19 @@ AlbumInfoWidget::AlbumInfoWidget( const Tomahawk::album_ptr& album, QWidget* par
ui->albumsView->setAlbumModel( m_albumsModel ); ui->albumsView->setAlbumModel( m_albumsModel );
m_tracksModel = new TreeModel( ui->tracksView ); m_tracksModel = new TreeModel( ui->tracksView );
m_tracksModel->setMode( TreeModel::InfoSystem ); m_tracksModel->setMode( startingMode );
ui->tracksView->setTreeModel( m_tracksModel ); ui->tracksView->setTreeModel( m_tracksModel );
ui->tracksView->setRootIsDecorated( false ); ui->tracksView->setRootIsDecorated( false );
m_pixmap = QPixmap( RESPATH "images/no-album-art-placeholder.png" ).scaledToWidth( 48, Qt::SmoothTransformation ); m_pixmap = QPixmap( RESPATH "images/no-album-art-placeholder.png" ).scaledToWidth( 48, Qt::SmoothTransformation );
m_button = new OverlayButton( ui->tracksView ); m_button = new OverlayButton( ui->tracksView );
m_button->setText( tr( "Click to show Super Collection Tracks" ) );
m_button->setCheckable( true ); m_button->setCheckable( true );
m_button->setChecked( true ); m_button->setChecked( m_tracksModel->mode() == InfoSystemMode );
if ( m_button->isChecked() )
m_button->setText( tr( "Click to show Super Collection Tracks" ) );
else
m_button->setText( tr( "Click to show Official Tracks" ) );
connect( m_button, SIGNAL( clicked() ), SLOT( onModeToggle() ) ); connect( m_button, SIGNAL( clicked() ), SLOT( onModeToggle() ) );
connect( m_tracksModel, SIGNAL( loadingStarted() ), SLOT( onLoadingStarted() ) ); connect( m_tracksModel, SIGNAL( loadingStarted() ), SLOT( onLoadingStarted() ) );
@@ -94,11 +97,18 @@ AlbumInfoWidget::playlistInterface() const
return ui->tracksView->playlistInterface(); return ui->tracksView->playlistInterface();
} }
void
AlbumInfoWidget::setMode( ModelMode mode )
{
if ( m_tracksModel->mode() != mode )
onModeToggle();
}
void void
AlbumInfoWidget::onModeToggle() AlbumInfoWidget::onModeToggle()
{ {
m_tracksModel->setMode( m_button->isChecked() ? TreeModel::InfoSystem : TreeModel::Database ); m_tracksModel->setMode( m_button->isChecked() ? InfoSystemMode : DatabaseMode );
m_tracksModel->clear(); m_tracksModel->clear();
m_tracksModel->addTracks( m_album, QModelIndex() ); m_tracksModel->addTracks( m_album, QModelIndex() );

View File

@@ -35,6 +35,7 @@
#include "infosystem/infosystem.h" #include "infosystem/infosystem.h"
#include "dllmacro.h" #include "dllmacro.h"
#include "typedefs.h"
class AlbumModel; class AlbumModel;
class TreeModel; class TreeModel;
@@ -50,7 +51,7 @@ class DLLEXPORT AlbumInfoWidget : public QWidget, public Tomahawk::ViewPage
Q_OBJECT Q_OBJECT
public: public:
AlbumInfoWidget( const Tomahawk::album_ptr& album, QWidget* parent = 0 ); AlbumInfoWidget( const Tomahawk::album_ptr& album, Tomahawk::ModelMode startingMode = Tomahawk::InfoSystemMode, QWidget* parent = 0 );
~AlbumInfoWidget(); ~AlbumInfoWidget();
virtual QWidget* widget() { return this; } virtual QWidget* widget() { return this; }
@@ -63,6 +64,8 @@ public:
virtual QString longDescription() const { return m_longDescription; } virtual QString longDescription() const { return m_longDescription; }
virtual QPixmap pixmap() const { if ( m_pixmap.isNull() ) return Tomahawk::ViewPage::pixmap(); else return m_pixmap; } virtual QPixmap pixmap() const { if ( m_pixmap.isNull() ) return Tomahawk::ViewPage::pixmap(); else return m_pixmap; }
void setMode( Tomahawk::ModelMode mode );
virtual bool isTemporaryPage() const { return true; } virtual bool isTemporaryPage() const { return true; }
virtual bool showStatsBar() const { return false; } virtual bool showStatsBar() const { return false; }

View File

@@ -21,7 +21,6 @@
#include "ui_ArtistInfoWidget.h" #include "ui_ArtistInfoWidget.h"
#include "audio/audioengine.h" #include "audio/audioengine.h"
#include "viewmanager.h"
#include "playlist/treemodel.h" #include "playlist/treemodel.h"
#include "playlist/playlistmodel.h" #include "playlist/playlistmodel.h"
#include "playlist/treeproxymodel.h" #include "playlist/treeproxymodel.h"
@@ -63,7 +62,7 @@ ArtistInfoWidget::ArtistInfoWidget( const Tomahawk::artist_ptr& artist, QWidget*
TomahawkUtils::unmarginLayout( ui->albumHeader->layout() ); TomahawkUtils::unmarginLayout( ui->albumHeader->layout() );
m_albumsModel = new TreeModel( ui->albums ); m_albumsModel = new TreeModel( ui->albums );
m_albumsModel->setMode( TreeModel::InfoSystem ); m_albumsModel->setMode( InfoSystemMode );
ui->albums->setTreeModel( m_albumsModel ); ui->albums->setTreeModel( m_albumsModel );
m_relatedModel = new TreeModel( ui->relatedArtists ); m_relatedModel = new TreeModel( ui->relatedArtists );
@@ -111,7 +110,7 @@ ArtistInfoWidget::playlistInterface() const
void void
ArtistInfoWidget::onModeToggle() ArtistInfoWidget::onModeToggle()
{ {
m_albumsModel->setMode( m_button->isChecked() ? TreeModel::InfoSystem : TreeModel::Database ); m_albumsModel->setMode( m_button->isChecked() ? InfoSystemMode : DatabaseMode );
m_albumsModel->clear(); m_albumsModel->clear();
m_albumsModel->addAlbums( m_artist, QModelIndex() ); m_albumsModel->addAlbums( m_artist, QModelIndex() );