add more BroadcastOnChange templates
This commit is contained in:
@@ -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<CString,SubscribersSet>::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 );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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<class T, Message M>
|
||||
template<class T>
|
||||
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 T>
|
||||
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 T, int N>
|
||||
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 );
|
||||
|
||||
Reference in New Issue
Block a user