You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
amarok/amarok/src/engineobserver.h

77 lines
2.9 KiB

/***************************************************************************
engineobserver.h - Observer pattern for engine
-------------------
begin : Mar 14 2003
copyright : (C) 2003 by Frederik Holljen
email : fh@ez.no
***************************************************************************/
/***************************************************************************
* *
* This program 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 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
#ifndef AMAROK_ENGINEOBSERVER_H
#define AMAROK_ENGINEOBSERVER_H
#include "engine_fwd.h"
class EngineSubject;
class MetaBundle;
class TQString;
/**
* if you want to observe the engine, inherit from this class and attach yourself to
* the engine with attach
* Note that all positional information and times are in milliseconds
*/
class EngineObserver
{
public:
EngineObserver();
EngineObserver( EngineSubject* );
virtual ~EngineObserver();
virtual void engineStateChanged( Engine::State /*state*/, Engine::State /*oldState*/ = Engine::Empty ) {}
virtual void engineNewMetaData( const MetaBundle &/*bundle*/, bool /*trackChanged*/ ) {}
virtual void engineTrackEnded( int /*finalPosition*/, int /*trackLength*/, const TQString &/*reason*/ ) {}
virtual void engineVolumeChanged( int /*percent*/ ) {}
virtual void engineTrackPositionChanged( long /*position*/ , bool /*userSeek*/ ) {}
virtual void engineTrackLengthChanged( long /*length*/ ) {}
private:
EngineSubject *m_subject;
};
#include <tqptrlist.h>
/**
* Inherited by EngineController.
* Notify observer functionality is captured in this class.
*/
class EngineSubject
{
public:
void attach( EngineObserver *observer );
void detach( EngineObserver *observer );
protected:
EngineSubject();
virtual ~EngineSubject();
void stateChangedNotify( Engine::State /*state*/ );
void newMetaDataNotify( const MetaBundle &/*bundle*/, bool /*trackChanged*/ );
void trackEnded( int /*finalPosition*/, int /*trackLength*/, const TQString &reason );
void volumeChangedNotify( int /*percent*/ );
/* userSeek means the position didn't change due to normal playback */
void trackPositionChangedNotify( long /*position*/ , bool userSeek=false );
void trackLengthChangedNotify( long /*length*/ );
private:
TQPtrList<EngineObserver> Observers;
Engine::State m_oldEngineState;
};
#endif // AMAROK_ENGINEOBSERVER_H