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;
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);
303 mListDelegates = del;
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 bool compare(IDelegateUnlink *_unlink) const
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)
void operator()(MYGUI_PARAMS)
MYGUI_TYPENAME ListDelegate::const_iterator ConstListDelegateIterator
virtual bool compare(IDelegateUnlink *_unlink) const
void operator()(MYGUI_PARAMS)
virtual bool compare(IDelegateMYGUI_SUFFIX MYGUI_TEMPLATE_ARGS *_delegate) const
CDelegateMYGUI_SUFFIX MYGUI_TEMPLATE_ARGS & operator=(IDelegate *_delegate)
#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
virtual bool compare(IDelegateMYGUI_SUFFIX MYGUI_TEMPLATE_ARGS *_delegate) const
CDelegateMYGUI_SUFFIX MYGUI_TEMPLATE_ARGS & operator=(const CDelegateMYGUI_SUFFIX MYGUI_TEMPLATE_ARGS &_event)
virtual bool isType(const std::type_info &_type)
CMultiDelegateMYGUI_SUFFIX MYGUI_TEMPLATE_ARGS & operator+=(IDelegate *_delegate)
virtual void invoke(MYGUI_PARAMS)
virtual bool compare(IDelegateUnlink *_unlink) const
MYGUI_TYPENAME std::list< IDelegate *> ListDelegate
#define MYGUI_OBSOLETE(text)