engineobserver.cpp
来自「Amarok是一款在LINUX或其他类UNIX操作系统中运行的音频播放器软件。 」· C++ 代码 · 共 152 行
CPP
152 行
/*************************************************************************** engineobserver.cpp - Observer pattern for engine -------------------begin : Mar 14 2003copyright : (C) 2003 by Frederik Holljenemail : 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. * * * ***************************************************************************/#include "debug.h"#include "collectiondb.h"#include "engineobserver.h"#include "metabundle.h"#include "podcastbundle.h"#include <qptrlist.h>///////////////////////////////////////////////////////////////////////////////////////////// CLASS EngineObserver//////////////////////////////////////////////////////////////////////////////////////////EngineObserver::EngineObserver() : m_subject( 0 ){}EngineObserver::EngineObserver( EngineSubject *s ) : m_subject( s ){ m_subject->attach( this );}EngineObserver::~EngineObserver(){ if ( m_subject ) m_subject->detach( this );}///////////////////////////////////////////////////////////////////////////////////////////// CLASS EngineSubject//////////////////////////////////////////////////////////////////////////////////////////EngineSubject::EngineSubject() : m_oldEngineState( Engine::Empty ){}EngineSubject::~EngineSubject(){}void EngineSubject::stateChangedNotify( Engine::State state ){ DEBUG_BLOCK QPtrListIterator<EngineObserver> it( Observers ); EngineObserver *observer; while( ( observer = it.current() ) != 0 ) { ++it; observer->engineStateChanged( state, m_oldEngineState ); } m_oldEngineState = state;}void EngineSubject::newMetaDataNotify( const MetaBundle &bundle, bool trackChanged ){ DEBUG_BLOCK QPtrListIterator<EngineObserver> it( Observers ); EngineObserver *observer; PodcastEpisodeBundle peb; MetaBundle b( bundle ); if( CollectionDB::instance()->getPodcastEpisodeBundle( bundle.url(), &peb ) ) { b.setPodcastBundle( peb ); } while( ( observer = it.current() ) != 0 ) { ++it; observer->engineNewMetaData( b, trackChanged ); }}void EngineSubject::trackEnded( int finalPosition, int trackLength, const QString &reason ){ for( QPtrListIterator<EngineObserver> it( Observers ); *it; ++it ) (*it)->engineTrackEnded( finalPosition, trackLength, reason );}void EngineSubject::volumeChangedNotify( int percent ){ QPtrListIterator<EngineObserver> it( Observers ); EngineObserver *observer; while( ( observer = it.current() ) != 0 ) { ++it; observer->engineVolumeChanged( percent ); }}void EngineSubject::trackPositionChangedNotify( long position, bool userSeek ){ QPtrListIterator<EngineObserver> it( Observers ); EngineObserver *observer; while( ( observer = it.current() ) != 0 ) { ++it; observer->engineTrackPositionChanged( position, userSeek ); }}void EngineSubject::trackLengthChangedNotify( long length ){ QPtrListIterator<EngineObserver> it( Observers ); EngineObserver *observer; while( ( observer = it.current() ) != 0 ) { ++it; observer->engineTrackLengthChanged( length ); }}void EngineSubject::attach( EngineObserver *observer ){ if( !observer || Observers.find( observer ) != -1 ) return; Observers.append( observer );}void EngineSubject::detach( EngineObserver *observer ){ if( Observers.find( observer ) != -1 ) Observers.remove();}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?