27 #define MYGUI_COMBINE(a, b) MYGUI_COMBINE1(a, b)
28 #define MYGUI_COMBINE1(a, b) a##b
30 #define MYGUI_I_DELEGATE MYGUI_COMBINE(IDelegate, MYGUI_SUFFIX)
32 #define MYGUI_C_STATIC_DELEGATE MYGUI_COMBINE(CStaticDelegate, MYGUI_SUFFIX)
33 #define MYGUI_C_METHOD_DELEGATE MYGUI_COMBINE(CMethodDelegate, MYGUI_SUFFIX)
35 #define MYGUI_C_DELEGATE MYGUI_COMBINE(CDelegate, MYGUI_SUFFIX)
36 #define MYGUI_C_MULTI_DELEGATE MYGUI_COMBINE(CMultiDelegate, MYGUI_SUFFIX)
45 virtual bool isType(
const std::type_info& _type) = 0;
48 virtual bool compare(IDelegateUnlink * _unlink)
const {
return false; }
72 return cast->mFunc == mFunc;
74 virtual bool compare(IDelegateUnlink * _unlink)
const {
return false; }
88 MYGUI_C_METHOD_DELEGATE(IDelegateUnlink * _unlink, T * _object, Method _method) : mUnlink(_unlink), mObject(_object), mMethod(_method) { }
101 return cast->mObject == mObject && cast->mMethod == mMethod;
104 virtual bool compare(IDelegateUnlink * _unlink)
const
106 return mUnlink == _unlink;
110 IDelegateUnlink *mUnlink;
150 mDelegate = _event.mDelegate;
155 bool empty()
const {
return mDelegate ==
nullptr; }
169 mDelegate = _delegate;
177 mDelegate = _event.mDelegate;
185 if (mDelegate ==
nullptr)
return;
190 IDelegate * mDelegate;
209 for (ConstListDelegateIterator iter = mListDelegates.begin(); iter!=mListDelegates.end(); ++iter)
211 if (*iter)
return false;
218 for (ListDelegateIterator iter=mListDelegates.begin(); iter!=mListDelegates.end(); ++iter)
228 void clear(IDelegateUnlink * _unlink)
230 for (ListDelegateIterator iter=mListDelegates.begin(); iter!=mListDelegates.end(); ++iter)
232 if ((*iter) && (*iter)->compare(_unlink))
242 for (ListDelegateIterator iter=mListDelegates.begin(); iter!=mListDelegates.end(); ++iter)
244 if ((*iter) && (*iter)->compare(_delegate))
249 mListDelegates.push_back(_delegate);
255 for (ListDelegateIterator iter=mListDelegates.begin(); iter!=mListDelegates.end(); ++iter)
257 if ((*iter) && (*iter)->compare(_delegate))
260 if ((*iter) != _delegate)
delete (*iter);
271 ListDelegateIterator iter = mListDelegates.begin();
272 while (iter != mListDelegates.end())
274 if (
nullptr == (*iter))
276 iter = mListDelegates.erase(iter);
293 ListDelegate mListDelegates;
299 #undef MYGUI_COMBINE1
301 #undef MYGUI_I_DELEGATE
303 #undef MYGUI_C_STATIC_DELEGATE
304 #undef MYGUI_C_METHOD_DELEGATE
306 #undef MYGUI_C_DELEGATE
307 #undef MYGUI_C_MULTI_DELEGATE
310 #undef MYGUI_TEMPLATE
311 #undef MYGUI_TEMPLATE_PARAMS
312 #undef MYGUI_TEMPLATE_ARGS
313 #undef MYGUI_T_TEMPLATE_PARAMS
314 #undef MYGUI_T_TEMPLATE_ARGS
317 #undef MYGUI_TYPENAME