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;
156 return mDelegate ==
nullptr;
168 mDelegate = _delegate;
178 IDelegate* del = _event.mDelegate;
181 if (mDelegate !=
nullptr && !mDelegate->compare(del))
191 if (mDelegate ==
nullptr)
return;
196 IDelegate* mDelegate;
218 for (ConstListDelegateIterator iter = mListDelegates.begin(); iter != mListDelegates.end(); ++iter)
220 if (*iter)
return false;
227 for (ListDelegateIterator iter = mListDelegates.begin(); iter != mListDelegates.end(); ++iter)
237 void clear(IDelegateUnlink* _unlink)
239 for (ListDelegateIterator iter = mListDelegates.begin(); iter != mListDelegates.end(); ++iter)
241 if ((*iter) && (*iter)->compare(_unlink))
251 for (ListDelegateIterator iter = mListDelegates.begin(); iter != mListDelegates.end(); ++iter)
253 if ((*iter) && (*iter)->compare(_delegate))
258 mListDelegates.push_back(_delegate);
264 for (ListDelegateIterator iter = mListDelegates.begin(); iter != mListDelegates.end(); ++iter)
266 if ((*iter) && (*iter)->compare(_delegate))
269 if ((*iter) != _delegate)
delete (*iter);
280 ListDelegateIterator iter = mListDelegates.begin();
281 while (iter != mListDelegates.end())
283 if (
nullptr == (*iter))
285 iter = mListDelegates.erase(iter);
298 ListDelegate del = _event.mListDelegates;
303 mListDelegates = del;
309 ListDelegate del = _event.mListDelegates;
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
#define MYGUI_T_TEMPLATE_ARGS
#define MYGUI_C_MULTI_DELEGATE
CMultiDelegateMYGUI_SUFFIX MYGUI_TEMPLATE_ARGS & operator-=(IDelegate *_delegate)
virtual void invoke(MYGUI_PARAMS)
MYGUI_TYPENAME ListDelegate::iterator ListDelegateIterator
IDelegateMYGUI_SUFFIX MYGUI_TEMPLATE_ARGS IDelegate
#define MYGUI_C_METHOD_DELEGATE
IDelegateUnlink * GetDelegateUnlink(void *_base)
CMultiDelegateMYGUI_SUFFIX MYGUI_TEMPLATE_ARGS & operator=(const CMultiDelegateMYGUI_SUFFIX MYGUI_TEMPLATE_ARGS &_event)
void clear(IDelegateUnlink *_unlink)
virtual bool compare(IDelegateMYGUI_SUFFIX MYGUI_TEMPLATE_ARGS *_delegate) const
void operator()(MYGUI_PARAMS)
MYGUI_TYPENAME ListDelegate::const_iterator ConstListDelegateIterator
void operator()(MYGUI_PARAMS)
CDelegateMYGUI_SUFFIX MYGUI_TEMPLATE_ARGS & operator=(IDelegate *_delegate)
virtual bool compare(IDelegateUnlink *_unlink) const
#define MYGUI_EXCEPT(dest)
virtual bool isType(const std::type_info &_type)
#define MYGUI_T_TEMPLATE_PARAMS
IDelegateMYGUI_SUFFIX MYGUI_TEMPLATE_ARGS IDelegate
#define MYGUI_TEMPLATE_PARAMS
#define MYGUI_TEMPLATE_ARGS
MYGUI_TEMPLATE MYGUI_TEMPLATE_PARAMS delegates::IDelegateMYGUI_SUFFIX MYGUI_TEMPLATE_ARGS * newDelegate(void(*_func)(MYGUI_PARAMS))
#define MYGUI_C_STATIC_DELEGATE
CDelegateMYGUI_SUFFIX MYGUI_TEMPLATE_ARGS & operator=(const CDelegateMYGUI_SUFFIX MYGUI_TEMPLATE_ARGS &_event)
virtual bool compare(IDelegateUnlink *_unlink) const
virtual bool compare(IDelegateUnlink *_unlink) const
virtual bool isType(const std::type_info &_type)
CMultiDelegateMYGUI_SUFFIX MYGUI_TEMPLATE_ARGS & operator+=(IDelegate *_delegate)
virtual void invoke(MYGUI_PARAMS)
MYGUI_TYPENAME std::list< IDelegate * > ListDelegate
virtual bool compare(IDelegateMYGUI_SUFFIX MYGUI_TEMPLATE_ARGS *_delegate) const
#define MYGUI_OBSOLETE(text)