26 #define MYGUI_COMBINE(a, b) MYGUI_COMBINE1(a, b)
27 #define MYGUI_COMBINE1(a, b) a##b
29 #define MYGUI_I_DELEGATE MYGUI_COMBINE(IDelegate, MYGUI_SUFFIX)
31 #define MYGUI_C_STATIC_DELEGATE MYGUI_COMBINE(CStaticDelegate, MYGUI_SUFFIX)
32 #define MYGUI_C_METHOD_DELEGATE MYGUI_COMBINE(CMethodDelegate, MYGUI_SUFFIX)
34 #define MYGUI_C_DELEGATE MYGUI_COMBINE(CDelegate, MYGUI_SUFFIX)
35 #define MYGUI_C_MULTI_DELEGATE MYGUI_COMBINE(CMultiDelegate, MYGUI_SUFFIX)
44 #ifndef MYGUI_RTTI_DISABLE_TYPE_INFO
45 virtual bool isType(
const std::type_info& _type) = 0;
49 virtual bool compare(IDelegateUnlink* _unlink)
const
65 #ifndef MYGUI_RTTI_DISABLE_TYPE_INFO
66 virtual bool isType(
const std::type_info& _type)
79 #ifndef MYGUI_RTTI_DISABLE_TYPE_INFO
84 if (
nullptr == cast)
return false;
86 return cast->mFunc == mFunc;
88 virtual bool compare(IDelegateUnlink* _unlink)
const
105 MYGUI_C_METHOD_DELEGATE(IDelegateUnlink* _unlink, T* _object, Method _method) : mUnlink(_unlink), mObject(_object), mMethod(_method) { }
107 #ifndef MYGUI_RTTI_DISABLE_TYPE_INFO
108 virtual bool isType(
const std::type_info& _type)
121 #ifndef MYGUI_RTTI_DISABLE_TYPE_INFO
126 if (
nullptr == cast)
return false;
128 return cast->mObject == mObject && cast->mMethod == mMethod;
131 virtual bool compare(IDelegateUnlink* _unlink)
const
133 return mUnlink == _unlink;
137 IDelegateUnlink* mUnlink;
177 IDelegate* del = _event.mDelegate;
180 if (mDelegate !=
nullptr && !mDelegate->compare(del))
192 return mDelegate ==
nullptr;
207 mDelegate = _delegate;
214 IDelegate* del = _event.mDelegate;
217 if (mDelegate !=
nullptr && !mDelegate->compare(del))
227 if (mDelegate ==
nullptr)
return;
232 IDelegate* mDelegate;
254 for (ConstListDelegateIterator iter = mListDelegates.begin(); iter != mListDelegates.end(); ++iter)
256 if (*iter)
return false;
263 for (ListDelegateIterator iter = mListDelegates.begin(); iter != mListDelegates.end(); ++iter)
273 void clear(IDelegateUnlink* _unlink)
275 for (ListDelegateIterator iter = mListDelegates.begin(); iter != mListDelegates.end(); ++iter)
277 if ((*iter) && (*iter)->compare(_unlink))
287 for (ListDelegateIterator iter = mListDelegates.begin(); iter != mListDelegates.end(); ++iter)
289 if ((*iter) && (*iter)->compare(_delegate))
294 mListDelegates.push_back(_delegate);
300 for (ListDelegateIterator iter = mListDelegates.begin(); iter != mListDelegates.end(); ++iter)
302 if ((*iter) && (*iter)->compare(_delegate))
305 if ((*iter) != _delegate)
delete (*iter);
316 ListDelegateIterator iter = mListDelegates.begin();
317 while (iter != mListDelegates.end())
319 if (
nullptr == (*iter))
321 iter = mListDelegates.erase(iter);
334 ListDelegate del = _event.mListDelegates;
339 mListDelegates = del;
345 ListDelegate del = _event.mListDelegates;
350 mListDelegates = del;
364 void safe_clear(ListDelegate& _delegates)
366 for (ListDelegateIterator iter = mListDelegates.begin(); iter != mListDelegates.end(); ++iter)
370 IDelegate* del = (*iter);
372 delete_is_not_found(del, _delegates);
377 void delete_is_not_found(IDelegate* _del, ListDelegate& _delegates)
379 for (ListDelegateIterator iter = _delegates.begin(); iter != _delegates.end(); ++iter)
381 if ((*iter) && (*iter)->compare(_del))
391 ListDelegate mListDelegates;
396 #undef MYGUI_COMBINE1
398 #undef MYGUI_I_DELEGATE
400 #undef MYGUI_C_STATIC_DELEGATE
401 #undef MYGUI_C_METHOD_DELEGATE
403 #undef MYGUI_C_DELEGATE
404 #undef MYGUI_C_MULTI_DELEGATE
407 #undef MYGUI_TEMPLATE
408 #undef MYGUI_TEMPLATE_PARAMS
409 #undef MYGUI_TEMPLATE_ARGS
410 #undef MYGUI_T_TEMPLATE_PARAMS
411 #undef MYGUI_T_TEMPLATE_ARGS
414 #undef MYGUI_TYPENAME