[DEV] add subElement bind with multiple argument (TODO: better with template)
This commit is contained in:
parent
499806edc5
commit
21435b9961
2
external/egami
vendored
2
external/egami
vendored
@ -1 +1 @@
|
||||
Subproject commit e07648a33c85a8886c0e9dfb806ed8585c4d7553
|
||||
Subproject commit aa66ac176f625abf61122e0a71a608adab43fca2
|
@ -238,6 +238,14 @@ namespace ewol {
|
||||
EWOL_ERROR("object named='" << _name << "' not exit or can not be cast in : " << #_type); \
|
||||
} \
|
||||
} while (false)
|
||||
#define subBind2(_type, _name, _event, _obj, _func, _param1, _param2) do {\
|
||||
std::shared_ptr<_type> myObject = std::dynamic_pointer_cast<_type>(getSubObjectNamed(_name)); \
|
||||
if (myObject != nullptr) { \
|
||||
myObject->_event.bind2(_obj, _func, _param1, _param2); \
|
||||
} else { \
|
||||
EWOL_ERROR("object named='" << _name << "' not exit or can not be cast in : " << #_type); \
|
||||
} \
|
||||
} while (false)
|
||||
/*
|
||||
template<class TYPE> void bind(std::shared_ptr<ewol::Object> _obj, void (TYPE::*_func)()) {
|
||||
std::shared_ptr<TYPE> obj2 = std::dynamic_pointer_cast<TYPE>(_obj);
|
||||
|
@ -50,7 +50,19 @@ namespace ewol {
|
||||
* @param[in] _func Link on the fuction that might be called (inside a class)
|
||||
* @example signalXXXX.bind(shared_from_this(), &ClassName::onCallbackXXX);
|
||||
*/
|
||||
template<class TYPE> void bind(std::shared_ptr<ewol::Object> _obj, void (TYPE::*_func)(const T&)) {
|
||||
/* Maybe later :
|
||||
template<class TYPE, typename... TArgs>
|
||||
void bind(std::shared_ptr<ewol::Object> _obj, void (TYPE::*_func)(const T&, TArgs...), TArgs... args2) {
|
||||
std::shared_ptr<TYPE> obj2 = std::dynamic_pointer_cast<TYPE>(_obj);
|
||||
if (obj2 == nullptr) {
|
||||
EWOL_ERROR("Can not bind signal ...");
|
||||
return;
|
||||
}
|
||||
m_callerList.push_back(std::make_pair(std::weak_ptr<ewol::Object>(_obj), std::bind(_func, obj2.get(), std::placeholders::_1, args2)));
|
||||
}
|
||||
*/
|
||||
template<class TYPE>
|
||||
void bind(std::shared_ptr<ewol::Object> _obj, void (TYPE::*_func)(const T&)) {
|
||||
std::shared_ptr<TYPE> obj2 = std::dynamic_pointer_cast<TYPE>(_obj);
|
||||
if (obj2 == nullptr) {
|
||||
EWOL_ERROR("Can not bind signal ...");
|
||||
@ -58,7 +70,9 @@ namespace ewol {
|
||||
}
|
||||
m_callerList.push_back(std::make_pair(std::weak_ptr<ewol::Object>(_obj), std::bind(_func, obj2.get(), std::placeholders::_1)));
|
||||
}
|
||||
template<class TYPE, typename TYPE2> void bind1(std::shared_ptr<ewol::Object> _obj, void (TYPE::*_func)(const T&,const TYPE2&), TYPE2 _param1) {
|
||||
// TODO : Rework this when I understand the use of variadic template with std::function
|
||||
template<class TYPE, typename TYPE2>
|
||||
void bind1(std::shared_ptr<ewol::Object> _obj, void (TYPE::*_func)(const T&, const TYPE2&), TYPE2 _param1) {
|
||||
std::shared_ptr<TYPE> obj2 = std::dynamic_pointer_cast<TYPE>(_obj);
|
||||
if (obj2 == nullptr) {
|
||||
EWOL_ERROR("Can not bind signal ...");
|
||||
@ -66,6 +80,15 @@ namespace ewol {
|
||||
}
|
||||
m_callerList.push_back(std::make_pair(std::weak_ptr<ewol::Object>(_obj), std::bind(_func, obj2.get(), std::placeholders::_1, _param1)));
|
||||
}
|
||||
template<class TYPE, typename TYPE2, typename TYPE3>
|
||||
void bind2(std::shared_ptr<ewol::Object> _obj, void (TYPE::*_func)(const T&, const TYPE2&, const TYPE3&), TYPE2 _param1, TYPE3 _param2) {
|
||||
std::shared_ptr<TYPE> obj2 = std::dynamic_pointer_cast<TYPE>(_obj);
|
||||
if (obj2 == nullptr) {
|
||||
EWOL_ERROR("Can not bind signal ...");
|
||||
return;
|
||||
}
|
||||
m_callerList.push_back(std::make_pair(std::weak_ptr<ewol::Object>(_obj), std::bind(_func, obj2.get(), std::placeholders::_1, _param1, _param2)));
|
||||
}
|
||||
/**
|
||||
* @brief Advanced binding a callback function to the current signal.
|
||||
* @param[in] _obj Shared pointer on the caller object
|
||||
@ -153,7 +176,8 @@ namespace ewol {
|
||||
* @param[in] _func Link on the fuction that might be called (inside a class)
|
||||
* @example signalXXXX.connect(shared_from_this(), &ClassName::onCallbackXXX);
|
||||
*/
|
||||
template<class TYPE> void bind(std::shared_ptr<ewol::Object> _obj, void (TYPE::*_func)()) {
|
||||
template<class TYPE>
|
||||
void bind(std::shared_ptr<ewol::Object> _obj, void (TYPE::*_func)()) {
|
||||
std::shared_ptr<TYPE> obj2 = std::dynamic_pointer_cast<TYPE>(_obj);
|
||||
if (obj2 == nullptr) {
|
||||
EWOL_ERROR("Can not bind signal ...");
|
||||
@ -161,7 +185,8 @@ namespace ewol {
|
||||
}
|
||||
m_callerList.push_back(std::make_pair(std::weak_ptr<ewol::Object>(_obj), std::bind(_func, obj2.get())));
|
||||
}
|
||||
template<class TYPE, class TYPE2> void bind1(std::shared_ptr<ewol::Object> _obj, void (TYPE::*_func)(const TYPE2&), const TYPE2& _param1) {
|
||||
template<class TYPE, class TYPE2>
|
||||
void bind1(std::shared_ptr<ewol::Object> _obj, void (TYPE::*_func)(TYPE2), TYPE2 _param1) {
|
||||
std::shared_ptr<TYPE> obj2 = std::dynamic_pointer_cast<TYPE>(_obj);
|
||||
if (obj2 == nullptr) {
|
||||
EWOL_ERROR("Can not bind signal ...");
|
||||
@ -169,6 +194,15 @@ namespace ewol {
|
||||
}
|
||||
m_callerList.push_back(std::make_pair(std::weak_ptr<ewol::Object>(_obj), std::bind(_func, obj2.get(), _param1)));
|
||||
}
|
||||
template<class TYPE, class TYPE2, class TYPE3>
|
||||
void bind2(std::shared_ptr<ewol::Object> _obj, void (TYPE::*_func)(TYPE2, TYPE2), TYPE2 _param1, TYPE3 _param2) {
|
||||
std::shared_ptr<TYPE> obj2 = std::dynamic_pointer_cast<TYPE>(_obj);
|
||||
if (obj2 == nullptr) {
|
||||
EWOL_ERROR("Can not bind signal ...");
|
||||
return;
|
||||
}
|
||||
m_callerList.push_back(std::make_pair(std::weak_ptr<ewol::Object>(_obj), std::bind(_func, obj2.get(), _param1, _param2)));
|
||||
}
|
||||
/**
|
||||
* @brief Advanced binding a callback function to the current signal.
|
||||
* @param[in] _obj Shared pointer on the caller object
|
||||
|
Loading…
x
Reference in New Issue
Block a user