10 #define MYGUI_COMBINE(a, b) MYGUI_COMBINE1(a, b)
11 #define MYGUI_COMBINE1(a, b) a##b
13 #define MYGUI_I_DELEGATE MYGUI_COMBINE(IDelegate, MYGUI_SUFFIX)
15 #define MYGUI_C_STATIC_DELEGATE MYGUI_COMBINE(CStaticDelegate, MYGUI_SUFFIX)
16 #define MYGUI_C_METHOD_DELEGATE MYGUI_COMBINE(CMethodDelegate, MYGUI_SUFFIX)
18 #define MYGUI_C_DELEGATE MYGUI_COMBINE(CDelegate, MYGUI_SUFFIX)
19 #define MYGUI_C_MULTI_DELEGATE MYGUI_COMBINE(CMultiDelegate, MYGUI_SUFFIX)
28 virtual bool isType(
const std::type_info& _type) = 0;
31 virtual bool compare(IDelegateUnlink* _unlink)
const
47 virtual bool isType(
const std::type_info& _type)
61 return cast->mFunc == mFunc;
63 virtual bool compare(IDelegateUnlink* _unlink)
const
80 MYGUI_C_METHOD_DELEGATE(IDelegateUnlink* _unlink, T* _object, Method _method) : mUnlink(_unlink), mObject(_object), mMethod(_method) { }
82 virtual bool isType(
const std::type_info& _type)
96 return cast->mObject == mObject && cast->mMethod == mMethod;
99 virtual bool compare(IDelegateUnlink* _unlink)
const
101 return mUnlink == _unlink;
105 IDelegateUnlink* mUnlink;
145 mDelegate = _event.mDelegate;
146 const_cast< MYGUI_C_DELEGATE MYGUI_TEMPLATE_ARGS& >(_event).mDelegate =
nullptr;
156 return mDelegate ==
nullptr;
168 mDelegate = _delegate;
179 const_cast< MYGUI_C_DELEGATE MYGUI_TEMPLATE_ARGS& >(_event).mDelegate =
nullptr;
181 if (mDelegate !=
nullptr && !mDelegate->compare(del))
191 if (mDelegate ==
nullptr)
return;
196 IDelegate* mDelegate;
220 if (*iter)
return false;
237 void clear(IDelegateUnlink* _unlink)
241 if ((*iter) && (*iter)->compare(_unlink))
253 if ((*iter) && (*iter)->compare(_delegate))
258 mListDelegates.push_back(_delegate);
266 if ((*iter) && (*iter)->compare(_delegate))
269 if ((*iter) != _delegate)
delete (*iter);
281 while (iter != mListDelegates.end())
283 if (
nullptr == (*iter))
285 iter = mListDelegates.erase(iter);
299 const_cast< MYGUI_C_MULTI_DELEGATE MYGUI_TEMPLATE_ARGS& >(_event).mListDelegates.clear();
303 mListDelegates = del;
310 const_cast< MYGUI_C_MULTI_DELEGATE MYGUI_TEMPLATE_ARGS& >(_event).mListDelegates.clear();
314 mListDelegates = del;
328 void safe_clear(ListDelegate& _delegates)
330 for (ListDelegateIterator iter = mListDelegates.begin(); iter != mListDelegates.end(); ++iter)
334 IDelegate* del = (*iter);
336 delete_is_not_found(del, _delegates);
341 void delete_is_not_found(IDelegate* _del, ListDelegate& _delegates)
343 for (ListDelegateIterator iter = _delegates.begin(); iter != _delegates.end(); ++iter)
345 if ((*iter) && (*iter)->compare(_del))
355 ListDelegate mListDelegates;
360 #undef MYGUI_COMBINE1
362 #undef MYGUI_I_DELEGATE
364 #undef MYGUI_C_STATIC_DELEGATE
365 #undef MYGUI_C_METHOD_DELEGATE
367 #undef MYGUI_C_DELEGATE
368 #undef MYGUI_C_MULTI_DELEGATE
371 #undef MYGUI_TEMPLATE
372 #undef MYGUI_TEMPLATE_PARAMS
373 #undef MYGUI_TEMPLATE_ARGS
374 #undef MYGUI_T_TEMPLATE_PARAMS
375 #undef MYGUI_T_TEMPLATE_ARGS
378 #undef MYGUI_TYPENAME