1
0
mirror of https://github.com/tomahawk-player/tomahawk.git synced 2025-03-25 02:09:48 +01:00

* Added MetaPlaylistInterface, an interface that manages child interfaces.

This commit is contained in:
Christian Muehlhaeuser 2012-12-09 11:07:11 +01:00
parent b827b9fb91
commit 0d0b6fb244
3 changed files with 248 additions and 0 deletions

View File

@ -184,6 +184,7 @@ set( libSources
FuncTimeout.cpp
Playlist.cpp
PlaylistPlaylistInterface.cpp
MetaPlaylistInterface.cpp
Resolver.cpp
ExternalResolver.cpp
Query.cpp

View File

@ -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 );
}

View File

@ -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