chxavplayerstatedispatch.cpp
上传用户:zhongxx05
上传日期:2007-06-06
资源大小:33641k
文件大小:5k
源码类别:
Symbian
开发平台:
C/C++
- /************************************************************************
- * chxavplayerstatedispatch.cpp
- * ----------------------------
- *
- * Synopsis:
- * Contains the implementation of the CHXAvPlayerStateDispatch class.
- * This class calls any play state observer with state changes.
- *
- * Target:
- * Symbian OS
- *
- *
- * (c) 1995-2003 RealNetworks, Inc. Patents pending. All rights reserved.
- *
- *****************************************************************************/
- #include "hxstring.h"
- #include "ihxsymplayerstateobserver.h"
- #include "chxavplayerstatedispatch.h"
- namespace
- {
- //
- // ugly stuff to make fowarding methods
- // prettier (plus share some code)
- //
- void Notify0(CHXSimpleList& list,
- void (IHXSymPlayerStateObserver::* pmfn)())
- {
- for ( CHXSimpleList::Iterator iter = list.Begin(); iter != list.End(); ++iter )
- {
- IHXSymPlayerStateObserver* pObserver = static_cast<IHXSymPlayerStateObserver*>(*iter);
- (pObserver->*pmfn)();
- }
- }
- template<typename ArgType1>
- void Notify1(CHXSimpleList& list,
- void (IHXSymPlayerStateObserver::* pmfn)(ArgType1),
- ArgType1 arg1)
- {
- for ( CHXSimpleList::Iterator iter = list.Begin(); iter != list.End(); ++iter )
- {
- IHXSymPlayerStateObserver* pObserver = static_cast<IHXSymPlayerStateObserver*>(*iter);
- (pObserver->*pmfn)(arg1);
- }
- }
- template<typename ArgType1, typename ArgType2>
- void Notify2(CHXSimpleList& list,
- void (IHXSymPlayerStateObserver::* pmfn)(ArgType1,ArgType2),
- ArgType1 arg1, ArgType2 arg2)
- {
- for ( CHXSimpleList::Iterator iter = list.Begin(); iter != list.End(); ++iter )
- {
- IHXSymPlayerStateObserver* pObserver = static_cast<IHXSymPlayerStateObserver*>(*iter);
- (pObserver->*pmfn)(arg1,arg2);
- }
- }
- } // local namespace
- /*
- * CHXAvPlayerStateDispatch
- * ------------------------
- * Ctor.
- *
- */
- CHXAvPlayerStateDispatch::CHXAvPlayerStateDispatch()
- {
- }
- /*
- * ~CHXAvPlayerStateDispatch
- * -------------------------
- * Dtor. Make sure list is empty.
- *
- */
- CHXAvPlayerStateDispatch::~CHXAvPlayerStateDispatch()
- {
- HX_ASSERT(m_observers.IsEmpty());
- }
- void CHXAvPlayerStateDispatch::OnPlayInitiate(const char* url)
- {
- Notify1(m_observers, &IHXSymPlayerStateObserver::OnPlayInitiate, url);
- }
- void CHXAvPlayerStateDispatch::OnNetConnect()
- {
- Notify0(m_observers, &IHXSymPlayerStateObserver::OnNetConnect);
- }
- void
- CHXAvPlayerStateDispatch::OnLoadSession(IHXRequest* request)
- {
- Notify1(m_observers, &IHXSymPlayerStateObserver::OnLoadSession, request);
- }
- void
- CHXAvPlayerStateDispatch::OnError(HX_RESULT code)
- {
- Notify1(m_observers, &IHXSymPlayerStateObserver::OnError, code);
- }
- void
- CHXAvPlayerStateDispatch::OnAdvancePlaylist()
- {
- Notify0(m_observers, &IHXSymPlayerStateObserver::OnAdvancePlaylist);
- }
- void
- CHXAvPlayerStateDispatch::OnResume()
- {
- Notify0(m_observers, &IHXSymPlayerStateObserver::OnResume);
- }
- void
- CHXAvPlayerStateDispatch::OnStop()
- {
- Notify0(m_observers, &IHXSymPlayerStateObserver::OnStop);
- }
- void
- CHXAvPlayerStateDispatch::OnPause()
- {
- Notify0(m_observers, &IHXSymPlayerStateObserver::OnPause);
- }
- void
- CHXAvPlayerStateDispatch::OnBeginBuffering(bool bIsBegin)
- {
- Notify1(m_observers, &IHXSymPlayerStateObserver::OnBeginBuffering, bIsBegin);
- }
- void
- CHXAvPlayerStateDispatch::OnBuffering(UINT16 percent)
- {
- Notify1(m_observers, &IHXSymPlayerStateObserver::OnBuffering, percent);
- }
- void
- CHXAvPlayerStateDispatch::OnBeginSeek()
- {
- Notify0(m_observers, &IHXSymPlayerStateObserver::OnBeginSeek);
- }
- void
- CHXAvPlayerStateDispatch::OnVolume(unsigned int percentVol)
- {
- Notify1(m_observers, &IHXSymPlayerStateObserver::OnVolume, percentVol);
- }
- void
- CHXAvPlayerStateDispatch::OnMute(bool bMute)
- {
- Notify1(m_observers, &IHXSymPlayerStateObserver::OnMute, bMute);
- }
- void
- CHXAvPlayerStateDispatch::OnNewPos(ULONG32 msNewTime)
- {
- Notify1(m_observers, &IHXSymPlayerStateObserver::OnNewPos, msNewTime);
- }
- /*
- * AddObserver
- * -----------
- * Add an observer
- *
- */
- void CHXAvPlayerStateDispatch::AddObserver(IHXSymPlayerStateObserver* pObserver)
- {
- // Make sure this observer is not already in the list...
- if (0 == m_observers.Find((void *)pObserver, NULL))
- {
- m_observers.AddTail((void *)pObserver);
- }
- }
- /*
- * RemoveObserver
- * --------------
- * Remove an observer
- *
- */
- void CHXAvPlayerStateDispatch::RemoveObserver(IHXSymPlayerStateObserver* pObserver)
- {
- LISTPOSITION position = m_observers.Find((void *)pObserver, NULL);
- if (position != NULL)
- {
- m_observers.RemoveAt(position);
- }
- }