diff --git a/src/libtomahawk/CMakeLists.txt b/src/libtomahawk/CMakeLists.txt index 7db019b14..cfd5b83d4 100644 --- a/src/libtomahawk/CMakeLists.txt +++ b/src/libtomahawk/CMakeLists.txt @@ -184,6 +184,7 @@ set( libSources FuncTimeout.cpp Playlist.cpp PlaylistPlaylistInterface.cpp + MetaPlaylistInterface.cpp Resolver.cpp ExternalResolver.cpp Query.cpp diff --git a/src/libtomahawk/MetaPlaylistInterface.cpp b/src/libtomahawk/MetaPlaylistInterface.cpp new file mode 100644 index 000000000..98dc5626e --- /dev/null +++ b/src/libtomahawk/MetaPlaylistInterface.cpp @@ -0,0 +1,181 @@ +/* === This file is part of Tomahawk Player - <http://tomahawk-player.org> === + * + * Copyright 2012, Christian Muehlhaeuser <muesli@tomahawk-player.org> + * + * Tomahawk is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Tomahawk is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Tomahawk. If not, see <http://www.gnu.org/licenses/>. + */ + +#include "MetaPlaylistInterface.h" +#include "Result.h" +#include "Pipeline.h" +#include "Source.h" +#include "utils/Logger.h" + +using namespace Tomahawk; + + +MetaPlaylistInterface::MetaPlaylistInterface() + : Tomahawk::PlaylistInterface() +{ +} + + +MetaPlaylistInterface::~MetaPlaylistInterface() +{ +} + + +void +MetaPlaylistInterface::addChildInterface( const Tomahawk::playlistinterface_ptr& interface ) +{ + m_childInterfaces << interface; + + if ( m_childInterfaces.count() == 1 ) + { + connect( interface.data(), SIGNAL( repeatModeChanged( Tomahawk::PlaylistModes::RepeatMode ) ), + SIGNAL( repeatModeChanged( Tomahawk::PlaylistModes::RepeatMode ) ) ); + + connect( interface.data(), SIGNAL( shuffleModeChanged( bool ) ), + SIGNAL( shuffleModeChanged( bool ) ) ); + } +} + + +QList< Tomahawk::query_ptr > +MetaPlaylistInterface::tracks() const +{ + if ( m_childInterfaces.count() ) + return m_childInterfaces.first()->tracks(); + else + return QList< Tomahawk::query_ptr >(); +} + + +int +MetaPlaylistInterface::trackCount() const +{ + if ( m_childInterfaces.count() ) + return m_childInterfaces.first()->trackCount(); + else + return 0; +} + + +result_ptr +MetaPlaylistInterface::currentItem() const +{ + if ( m_childInterfaces.count() ) + return m_childInterfaces.first()->currentItem(); + else + return Tomahawk::result_ptr(); +} + + +qint64 +MetaPlaylistInterface::siblingIndex( int itemsAway, qint64 rootIndex ) const +{ + if ( m_childInterfaces.count() ) + return m_childInterfaces.first()->siblingIndex( itemsAway, rootIndex ); + else + return -1; +} + + +Tomahawk::query_ptr +MetaPlaylistInterface::queryAt( qint64 index ) const +{ + if ( m_childInterfaces.count() ) + return m_childInterfaces.first()->queryAt( index ); + else + return Tomahawk::query_ptr(); +} + + +Tomahawk::result_ptr +MetaPlaylistInterface::resultAt( qint64 index ) const +{ + if ( m_childInterfaces.count() ) + return m_childInterfaces.first()->resultAt( index ); + else + return Tomahawk::result_ptr(); +} + + +qint64 +MetaPlaylistInterface::indexOfResult( const Tomahawk::result_ptr& result ) const +{ + if ( m_childInterfaces.count() ) + return m_childInterfaces.first()->indexOfResult( result ); + else + return -1; +} + + +qint64 +MetaPlaylistInterface::indexOfQuery( const Tomahawk::query_ptr& query ) const +{ + if ( m_childInterfaces.count() ) + return m_childInterfaces.first()->indexOfQuery( query ); + else + return -1; +} + + +PlaylistModes::RepeatMode +MetaPlaylistInterface::repeatMode() const +{ + if ( m_childInterfaces.count() ) + return m_childInterfaces.first()->repeatMode(); + else + return PlaylistModes::NoRepeat; +} + + +bool +MetaPlaylistInterface::shuffled() const +{ + if ( m_childInterfaces.count() ) + return m_childInterfaces.first()->shuffled(); + else + return false; +} + + +bool +MetaPlaylistInterface::hasChildInterface( const Tomahawk::playlistinterface_ptr& interface ) +{ + foreach ( const Tomahawk::playlistinterface_ptr& iface, m_childInterfaces ) + { + if ( iface == interface || iface->hasChildInterface( interface ) ) + return true; + } + + return false; +} + + +void +MetaPlaylistInterface::setRepeatMode( PlaylistModes::RepeatMode mode ) +{ + if ( m_childInterfaces.count() ) + return m_childInterfaces.first()->setRepeatMode( mode ); +} + + +void +MetaPlaylistInterface::setShuffled( bool enabled ) +{ + if ( m_childInterfaces.count() ) + return m_childInterfaces.first()->setShuffled( enabled ); +} diff --git a/src/libtomahawk/MetaPlaylistInterface.h b/src/libtomahawk/MetaPlaylistInterface.h new file mode 100644 index 000000000..cf7bb9030 --- /dev/null +++ b/src/libtomahawk/MetaPlaylistInterface.h @@ -0,0 +1,66 @@ +/* === This file is part of Tomahawk Player - <http://tomahawk-player.org> === + * + * Copyright 2012, Christian Muehlhaeuser <muesli@tomahawk-player.org> + * + * Tomahawk is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Tomahawk is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Tomahawk. If not, see <http://www.gnu.org/licenses/>. + */ + +#ifndef METAPLAYLISTINTERFACE_H +#define METAPLAYLISTINTERFACE_H + +#include <QtCore/QModelIndex> + +#include "PlaylistInterface.h" +#include "playlist/PlayableItem.h" +#include "Typedefs.h" +#include "DllMacro.h" + +namespace Tomahawk +{ + +class DLLEXPORT MetaPlaylistInterface : public PlaylistInterface +{ +Q_OBJECT + +public: + explicit MetaPlaylistInterface(); + virtual ~MetaPlaylistInterface(); + + void addChildInterface( const Tomahawk::playlistinterface_ptr& interface ); + + virtual QList< Tomahawk::query_ptr > tracks() const; + virtual int trackCount() const; + virtual Tomahawk::result_ptr currentItem() const; + virtual qint64 siblingIndex( int itemsAway, qint64 rootIndex = -1 ) const; + virtual Tomahawk::result_ptr resultAt( qint64 index ) const; + virtual Tomahawk::query_ptr queryAt( qint64 index ) const; + virtual qint64 indexOfResult( const Tomahawk::result_ptr& result ) const; + virtual qint64 indexOfQuery( const Tomahawk::query_ptr& query ) const; + + virtual PlaylistModes::RepeatMode repeatMode() const; + virtual bool shuffled() const; + + virtual bool hasChildInterface( const Tomahawk::playlistinterface_ptr& interface ); + +public slots: + virtual void setRepeatMode( PlaylistModes::RepeatMode mode ); + virtual void setShuffled( bool enabled ); + +private: + QList< Tomahawk::playlistinterface_ptr > m_childInterfaces; +}; + +} + +#endif // METAPLAYLISTINTERFACE_H