From 15b4f310a6ee9a8f6f0c0b8ca1646ec7fb73249b Mon Sep 17 00:00:00 2001 From: Chris Danford Date: Fri, 25 Feb 2005 05:23:29 +0000 Subject: [PATCH] add more BroadcastOnChange templates --- stepmania/src/MessageManager.cpp | 17 +++++++++---- stepmania/src/MessageManager.h | 41 ++++++++++++++++++++++++++++---- 2 files changed, 50 insertions(+), 8 deletions(-) diff --git a/stepmania/src/MessageManager.cpp b/stepmania/src/MessageManager.cpp index c1d240b1b6..d4ebd99bc3 100644 --- a/stepmania/src/MessageManager.cpp +++ b/stepmania/src/MessageManager.cpp @@ -10,6 +10,11 @@ MessageManager* MESSAGEMAN = NULL; // global and accessable from anywhere in our static const CString MessageNames[NUM_MESSAGES] = { "CurrentSongChanged", + "CurrentStepsP1Changed", + "CurrentStepsP2Changed", + "EditStepsTypeChanged", + "EditSourceStepsChanged", + "EditSourceStepsTypeChanged", }; XToString( Message ); @@ -50,12 +55,16 @@ void MessageManager::Unsubscribe( IMessageSubscriber* pSubscriber, Message m ) Unsubscribe( pSubscriber, MessageToString(m) ); } -void MessageManager::Broadcast( const CString& sMessage ) +void MessageManager::Broadcast( const CString& sMessage ) const { - SubscribersSet& subs = m_MessageToSubscribers[sMessage]; - FOREACHS_CONST( IMessageSubscriber*, subs, p ) + map::const_iterator iter = m_MessageToSubscribers.find( sMessage ); + if( iter == m_MessageToSubscribers.end() ) + return; + + FOREACHS_CONST( IMessageSubscriber*, iter->second, p ) { - (*p)->HandleMessage( sMessage ); + IMessageSubscriber *pSub = *p; + pSub->HandleMessage( sMessage ); } } diff --git a/stepmania/src/MessageManager.h b/stepmania/src/MessageManager.h index 24898cfb77..2aa04814ea 100644 --- a/stepmania/src/MessageManager.h +++ b/stepmania/src/MessageManager.h @@ -17,22 +17,55 @@ struct lua_State; enum Message { MESSAGE_CURRENT_SONG_CHANGED, + MESSAGE_CURRENT_STEPS_P1_CHANGED, + MESSAGE_CURRENT_STEPS_P2_CHANGED, + MESSAGE_EDIT_STEPS_TYPE_CHANGED, + MESSAGE_EDIT_SOURCE_STEPS_CHANGED, + MESSAGE_EDIT_SOURCE_STEPS_TYPE_CHANGED, NUM_MESSAGES }; const CString& MessageToString( Message m ); -template +template +class BroadcastOnChange +{ +private: + Message mSendWhenChanged; + T val; +public: + BroadcastOnChange( Message m ) { mSendWhenChanged = m; } + const T Get() const { return val; } + void Set( T t ) { val = t; MESSAGEMAN->Broadcast( MessageToString(mSendWhenChanged) ); } + operator T () const { return val; } +}; + +template class BroadcastOnChangePtr { private: + Message mSendWhenChanged; T *val; public: - const T* Get() { return val; } - void Set( T* t ) { val = t; MESSAGEMAN->Broadcast( MessageToString(M) ); } + BroadcastOnChangePtr( Message m ) { mSendWhenChanged = m; } + const T* Get() const { return val; } + void Set( T* t ) { val = t; MESSAGEMAN->Broadcast( MessageToString(mSendWhenChanged) ); } operator T* () const { return val; } T* operator->() const { return val; } }; +template +class BroadcastOnChangePtr1D +{ +private: + Message mSendWhenChanged; + T *val[N]; +public: + BroadcastOnChangePtr1D( Message m ) { mSendWhenChanged = m; } + const T* Get( unsigned i ) const { return val[i]; } + void Set( unsigned i, T* t ) { val[i] = t; MESSAGEMAN->Broadcast( MessageToString((Message)(mSendWhenChanged+i)) ); } + T* operator[]( unsigned i ) const { return val[i]; } +}; + class MessageManager { public: @@ -43,7 +76,7 @@ public: void Subscribe( IMessageSubscriber* pSubscriber, Message m ); void Unsubscribe( IMessageSubscriber* pSubscriber, const CString& sMessage ); void Unsubscribe( IMessageSubscriber* pSubscriber, Message m ); - void Broadcast( const CString& sMessage ); + void Broadcast( const CString& sMessage ) const; // Lua void PushSelf( lua_State *L );