[DEV] change some Object interface (try to simplify object interface
This commit is contained in:
parent
7edbc3a0cf
commit
367831116f
2
external/eaudiofx
vendored
2
external/eaudiofx
vendored
@ -1 +1 @@
|
||||
Subproject commit 69e1259b273a429e871e5c2e994dea5bb45aa5cf
|
||||
Subproject commit 428e8dfe393b5609e21b78267356e30a026cb0ad
|
@ -53,7 +53,6 @@ void ewol::object::Manager::unInit() {
|
||||
if (m_eObjectList.size() != 0) {
|
||||
EWOL_ERROR("Have " << m_eObjectList.size() << " active Object");
|
||||
}
|
||||
m_multiCast.clear();
|
||||
m_eObjectList.clear();
|
||||
}
|
||||
|
||||
@ -101,19 +100,6 @@ std::shared_ptr<ewol::Object> ewol::object::Manager::get(const std::string& _nam
|
||||
}
|
||||
|
||||
|
||||
void ewol::object::Manager::add(ewol::object::RemoveEvent* _class) {
|
||||
m_removeEventList.push_back(_class);
|
||||
}
|
||||
|
||||
void ewol::object::Manager::rm(ewol::object::RemoveEvent* _class) {
|
||||
for (size_t iii=0; iii<m_removeEventList.size(); ++iii) {
|
||||
if (m_removeEventList[iii] == _class) {
|
||||
m_removeEventList.erase(m_removeEventList.begin() + iii);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
std::shared_ptr<ewol::Object> ewol::object::Manager::getObjectNamed(const std::string& _name) {
|
||||
return ewol::object::Manager::get(_name);
|
||||
}
|
||||
|
@ -11,7 +11,6 @@
|
||||
|
||||
#include <etk/types.h>
|
||||
#include <ewol/object/Object.h>
|
||||
#include <ewol/object/MultiCast.h>
|
||||
#include <ewol/object/RemoveEvent.h>
|
||||
|
||||
namespace ewol {
|
||||
@ -19,7 +18,6 @@ namespace ewol {
|
||||
namespace object {
|
||||
class Manager {
|
||||
private:
|
||||
std::vector<ewol::object::RemoveEvent*> m_removeEventList;
|
||||
std::vector<std::weak_ptr<ewol::Object>> m_eObjectList; // all widget allocated == > all time increment ... never removed ...
|
||||
Context& m_context;
|
||||
public:
|
||||
@ -47,15 +45,6 @@ namespace ewol {
|
||||
void cleanInternalRemoved();
|
||||
|
||||
std::shared_ptr<ewol::Object> get(const std::string& _name);
|
||||
private:
|
||||
ewol::object::MultiCast m_multiCast; //!< muticast manager
|
||||
public:
|
||||
ewol::object::MultiCast& multiCast() {
|
||||
return m_multiCast;
|
||||
};
|
||||
|
||||
void add(ewol::object::RemoveEvent* _class);
|
||||
void rm(ewol::object::RemoveEvent* _class);
|
||||
|
||||
public:
|
||||
/**
|
||||
|
@ -1,80 +0,0 @@
|
||||
/**
|
||||
* @author Edouard DUPIN
|
||||
*
|
||||
* @copyright 2011, Edouard DUPIN, all right reserved
|
||||
*
|
||||
* @license APACHE v2.0 (see license file)
|
||||
*/
|
||||
|
||||
#include <ewol/debug.h>
|
||||
#include <ewol/object/MultiCast.h>
|
||||
#include <ewol/context/Context.h>
|
||||
|
||||
#undef __class__
|
||||
#define __class__ "object::MultiCast"
|
||||
|
||||
ewol::object::MultiCast::MultiCast() {
|
||||
EWOL_INFO("EObject message Multi-Cast");
|
||||
}
|
||||
|
||||
|
||||
ewol::object::MultiCast::~MultiCast() {
|
||||
EWOL_INFO("EObject message Multi-Cast");
|
||||
m_messageList.clear();
|
||||
}
|
||||
|
||||
void ewol::object::MultiCast::clear() {
|
||||
EWOL_INFO("EObject message Multi-Cast");
|
||||
m_messageList.clear();
|
||||
}
|
||||
|
||||
void ewol::object::MultiCast::add(const std::shared_ptr<ewol::Object>& _object, const char* const _message) {
|
||||
if (_object == nullptr) {
|
||||
EWOL_ERROR("Add with nullptr object");
|
||||
return;
|
||||
}
|
||||
if (_message == nullptr) {
|
||||
EWOL_ERROR("Add with nullptr Message");
|
||||
return;
|
||||
}
|
||||
m_messageList.push_back(MessageList(_message, _object));
|
||||
EWOL_DEBUG("SendMulticast ADD listener :" << _object->getId() << " on \"" << _message << "\"" );
|
||||
}
|
||||
|
||||
|
||||
void ewol::object::MultiCast::rm(const std::shared_ptr<ewol::Object>& _object) {
|
||||
if (_object == nullptr) {
|
||||
EWOL_ERROR("Rm with nullptr object");
|
||||
return;
|
||||
}
|
||||
// send the message at all registered widget ...
|
||||
auto it(m_messageList.begin());
|
||||
while (it != m_messageList.end()) {
|
||||
std::shared_ptr<ewol::Object> obj = it->m_object.lock();
|
||||
if(obj == _object) {
|
||||
EWOL_DEBUG("SendMulticast RM listener :" << _object->getId());
|
||||
m_messageList.erase(it);
|
||||
it = m_messageList.begin();
|
||||
} else {
|
||||
++it;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void ewol::object::MultiCast::send(const std::shared_ptr<ewol::Object>& _object, const char* const _message, const std::string& _data) {
|
||||
EWOL_VERBOSE("SendMulticast message \"" << _message << "\" data=\"" << _data << "\" to:");
|
||||
// send the message at all registered widget ...
|
||||
for (auto &it : m_messageList) {
|
||||
std::shared_ptr<ewol::Object> obj = it.m_object.lock();
|
||||
if( it.m_message == _message
|
||||
&& obj != _object) {
|
||||
if (obj != nullptr) {
|
||||
EWOL_VERBOSE(" id = " << obj->getId() << " type=" << obj->getObjectType());
|
||||
// generate event ... (create message before ...
|
||||
ewol::object::Message tmpMsg(it.m_message, _data);
|
||||
obj->onReceiveMessage(tmpMsg);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,47 +0,0 @@
|
||||
/**
|
||||
* @author Edouard DUPIN
|
||||
*
|
||||
* @copyright 2011, Edouard DUPIN, all right reserved
|
||||
*
|
||||
* @license APACHE v2.0 (see license file)
|
||||
*/
|
||||
|
||||
#ifndef __EWOL_OBJECT_MULTICAST_H__
|
||||
#define __EWOL_OBJECT_MULTICAST_H__
|
||||
|
||||
#include <etk/types.h>
|
||||
#include <etk/types.h>
|
||||
#include <vector>
|
||||
#include <exml/exml.h>
|
||||
|
||||
#include <ewol/object/Object.h>
|
||||
|
||||
namespace ewol {
|
||||
namespace object {
|
||||
class MultiCast {
|
||||
private:
|
||||
class MessageList {
|
||||
public:
|
||||
MessageList(const char* _message=nullptr, std::shared_ptr<ewol::Object> _object=nullptr) :
|
||||
m_message(_message), m_object(_object) {
|
||||
|
||||
}
|
||||
const char* m_message;
|
||||
std::weak_ptr<ewol::Object> m_object;
|
||||
};
|
||||
std::vector<MessageList> m_messageList; //!< List of all message ...
|
||||
public:
|
||||
MultiCast();
|
||||
virtual ~MultiCast();
|
||||
void clear();
|
||||
void anonymousSend(const char* const _messageId, const std::string& _data) {
|
||||
send(nullptr, _messageId, _data);
|
||||
};
|
||||
void send(const std::shared_ptr<ewol::Object>& _object, const char* const _message, const std::string& _data);
|
||||
void rm(const std::shared_ptr<ewol::Object>& _object);
|
||||
void add(const std::shared_ptr<ewol::Object>& _object, const char* const _message);
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
#endif
|
@ -10,7 +10,6 @@
|
||||
#include <ewol/object/Manager.h>
|
||||
#include <ewol/debug.h>
|
||||
#include <ewol/context/Context.h>
|
||||
#include <ewol/object/MultiCast.h>
|
||||
|
||||
#undef __class__
|
||||
#define __class__ "Object"
|
||||
@ -107,76 +106,6 @@ bool ewol::Object::isTypeCompatible(const std::string& _type) {
|
||||
return false;
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
void ewol::Object::addEventId(const char * _generateEventId) {
|
||||
for (auto &it : m_availlableEventId) {
|
||||
if (std::string(it) == _generateEventId) {
|
||||
EWOL_WARNING("Event already existed : '" << it << "' == '" << _generateEventId << "'");
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (_generateEventId != nullptr) {
|
||||
m_availlableEventId.push_back(_generateEventId);
|
||||
}
|
||||
}
|
||||
|
||||
void ewol::Object::generateEventId(const char * _generateEventId, const std::string& _data) {
|
||||
if (m_objectHasBeenInit == false) {
|
||||
EWOL_WARNING("try to generate an event inside a constructor");
|
||||
return;
|
||||
}
|
||||
int32_t nbObject = getObjectManager().getNumberObject();
|
||||
EWOL_VERBOSE("try send message '" << _generateEventId << "'");
|
||||
// for every element registered ...
|
||||
for (auto &it : m_externEvent) {
|
||||
// if we find the event ...
|
||||
if (it.localEventId != _generateEventId) {
|
||||
EWOL_VERBOSE(" wrong event '" << it.localEventId << "' != '" << _generateEventId << "'");
|
||||
continue;
|
||||
}
|
||||
std::shared_ptr<ewol::Object> destObject = it.destObject.lock();
|
||||
if (destObject == nullptr) {
|
||||
EWOL_VERBOSE(" nullptr dest");
|
||||
continue;
|
||||
}
|
||||
if (it.overloadData.size() <= 0){
|
||||
ewol::object::Message tmpMsg(shared_from_this(), it.destEventId, _data);
|
||||
EWOL_VERBOSE("send message " << tmpMsg);
|
||||
destObject->onReceiveMessage(tmpMsg);
|
||||
} else {
|
||||
// set the user requested data ...
|
||||
ewol::object::Message tmpMsg(shared_from_this(), it.destEventId, it.overloadData);
|
||||
EWOL_VERBOSE("send message " << tmpMsg);
|
||||
destObject->onReceiveMessage(tmpMsg);
|
||||
}
|
||||
}
|
||||
if (nbObject > getObjectManager().getNumberObject()) {
|
||||
EWOL_CRITICAL("It if really dangerous ro remove (delete) element inside a callback ... use ->removObject() which is asynchronous");
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
void ewol::Object::sendMultiCast(const char* const _messageId, const std::string& _data) {
|
||||
if (m_objectHasBeenInit == false) {
|
||||
EWOL_WARNING("try to generate an multicast event inside a constructor");
|
||||
return;
|
||||
}
|
||||
int32_t nbObject = getObjectManager().getNumberObject();
|
||||
getMultiCast().send(shared_from_this(), _messageId, _data);
|
||||
if (nbObject > getObjectManager().getNumberObject()) {
|
||||
EWOL_CRITICAL("It if really dangerous ro remove (delete) element inside a callback ... use ->removObject() which is asynchronous");
|
||||
}
|
||||
}
|
||||
|
||||
void ewol::Object::registerMultiCast(const char* const _messageId) {
|
||||
if (m_objectHasBeenInit == false) {
|
||||
EWOL_ERROR("Try to Register multicast inside a constructor (move it in the init function)");
|
||||
return;
|
||||
}
|
||||
getMultiCast().add(shared_from_this(), _messageId);
|
||||
}
|
||||
|
||||
bool ewol::Object::loadXML(exml::Element* _node) {
|
||||
if (nullptr == _node) {
|
||||
return false;
|
||||
@ -219,13 +148,17 @@ ewol::object::Manager& ewol::Object::getObjectManager() const {
|
||||
return tmp;
|
||||
}
|
||||
|
||||
ewol::object::MultiCast& ewol::Object::getMultiCast() const {
|
||||
return ewol::getContext().getEObjectManager().multiCast();
|
||||
}
|
||||
|
||||
ewol::Context& ewol::Object::getContext() const {
|
||||
return ewol::getContext();
|
||||
}
|
||||
std::shared_ptr<ewol::Object> ewol::Object::getObjectNamed(const std::string& _objectName) const {
|
||||
return getObjectManager().getObjectNamed(_objectName);
|
||||
}
|
||||
|
||||
std::shared_ptr<ewol::Object> ewol::Object::getSubObjectNamed(const std::string& _objectName) {
|
||||
if (_objectName == m_name.get()) {
|
||||
return shared_from_this();
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
|
@ -21,7 +21,6 @@ namespace ewol {
|
||||
class Object;
|
||||
namespace object {
|
||||
class Manager;
|
||||
class MultiCast;
|
||||
};
|
||||
class Context;
|
||||
};
|
||||
@ -138,21 +137,6 @@ namespace ewol {
|
||||
int32_t getId(){
|
||||
return m_uniqueId;
|
||||
};
|
||||
// TODO : Remove this section :
|
||||
protected:
|
||||
/**
|
||||
* @brief generate Multicast event on all Object requested the event
|
||||
* @param[in] _messageId Event Id that is generated
|
||||
* @param[in] _data String that is send at all the destinations
|
||||
*/
|
||||
// TODO : Remove this ... Not really needed : user can simply create an object and send event with it ...
|
||||
void sendMultiCast(const char* const _messageId, const std::string& _data = "");
|
||||
/**
|
||||
* @brief Register of the arrival of a Multicast message
|
||||
* @param[in] _messageId Event Id waiting for...
|
||||
*/
|
||||
// TODO : Remove this ...
|
||||
void registerMultiCast(const char* const _messageId);
|
||||
public:
|
||||
// TODO : Rework the position on this function ... This is a convignet function ...
|
||||
bool parameterSetOnWidgetNamed(const std::string& _objectName, const std::string& _config, const std::string& _value);
|
||||
@ -194,11 +178,6 @@ namespace ewol {
|
||||
* @return the requested object manager.
|
||||
*/
|
||||
ewol::object::Manager& getObjectManager() const;
|
||||
/**
|
||||
* @breif get the current Object Message Multicast manager.
|
||||
* @return the requested object manager.
|
||||
*/
|
||||
ewol::object::MultiCast& getMultiCast() const;
|
||||
/**
|
||||
* @brief get the curent the system inteface.
|
||||
* @return current reference on the instance.
|
||||
@ -228,10 +207,56 @@ namespace ewol {
|
||||
* @return the requested object or nullptr
|
||||
*/
|
||||
std::shared_ptr<ewol::Object> getObjectNamed(const std::string& _objectName) const;
|
||||
/**
|
||||
* @brief Retrive an object with his name (in the global list)
|
||||
* @param[in] _name Name of the object
|
||||
* @return the requested object or nullptr
|
||||
*/
|
||||
virtual std::shared_ptr<ewol::Object> getSubObjectNamed(const std::string& _objectName);
|
||||
protected:
|
||||
// TODO : Create a template ...
|
||||
/**
|
||||
* @brief link on an signal in the subwiget with his name
|
||||
*/
|
||||
#define subBind(_type, _name, _event, _obj, _func) do {\
|
||||
std::shared_ptr<_type> myObject = std::dynamic_pointer_cast<_type>(getSubObjectNamed(_name)); \
|
||||
if (myObject != nullptr) { \
|
||||
myObject->_event.bind(_obj, _func); \
|
||||
} \
|
||||
} 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);
|
||||
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())));
|
||||
}
|
||||
*/
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief link on an signal in the global object list with his name
|
||||
*/
|
||||
#define globalBind(_type, _name, _event, _obj, _func) do {\
|
||||
std::shared_ptr<_type> myObject = std::dynamic_pointer_cast<_type>(ewol::getContext().getEObjectManager().getObjectNamed(_name)); \
|
||||
if (myObject != nullptr) { \
|
||||
myObject->_event.bind(_obj, _func); \
|
||||
} \
|
||||
} while (false)
|
||||
|
||||
/**
|
||||
* @brief link on an signal in the subWidget of an object with his name
|
||||
*/
|
||||
#define externSubBind(_object, _type, _name, _event, _obj, _func) do {\
|
||||
std::shared_ptr<_type> myObject = std::dynamic_pointer_cast<_type>(_object->getObjectNamed(_name)); \
|
||||
if (myObject != nullptr) { \
|
||||
myObject->_event.bind(_obj, _func); \
|
||||
} \
|
||||
} while (false)
|
||||
//#include <ewol/object/Signal.h>
|
||||
|
||||
#endif
|
||||
|
@ -1,28 +0,0 @@
|
||||
/**
|
||||
* @author Edouard DUPIN
|
||||
*
|
||||
* @copyright 2011, Edouard DUPIN, all right reserved
|
||||
*
|
||||
* @license APACHE v2.0 (see license file)
|
||||
*/
|
||||
|
||||
#include <ewol/object/RemoveEvent.h>
|
||||
#include <ewol/context/Context.h>
|
||||
|
||||
ewol::object::RemoveEvent::RemoveEvent() {
|
||||
EWOL_TODO("ewol::object::RemoveEvent::RemoveEvent()");
|
||||
/*
|
||||
Context& tmp = ewol::getContext();
|
||||
ewol::object::Manager& manager = tmp.getEObjectManager();
|
||||
manager.add(this);
|
||||
*/
|
||||
}
|
||||
|
||||
ewol::object::RemoveEvent::~RemoveEvent() {
|
||||
EWOL_TODO("ewol::object::RemoveEvent::~RemoveEvent()");
|
||||
/*
|
||||
Context& tmp = ewol::getContext();
|
||||
ewol::object::Manager& manager = tmp.getEObjectManager();
|
||||
manager.rm(this);
|
||||
*/
|
||||
}
|
@ -1,25 +0,0 @@
|
||||
/**
|
||||
* @author Edouard DUPIN
|
||||
*
|
||||
* @copyright 2011, Edouard DUPIN, all right reserved
|
||||
*
|
||||
* @license APACHE v2.0 (see license file)
|
||||
*/
|
||||
|
||||
#ifndef __EWOL_OBJECT_REMOVE_EVENT_H__
|
||||
#define __EWOL_OBJECT_REMOVE_EVENT_H__
|
||||
|
||||
#include <etk/types.h>
|
||||
#include <ewol/object/Object.h>
|
||||
|
||||
namespace ewol {
|
||||
namespace object {
|
||||
class RemoveEvent {
|
||||
public:
|
||||
RemoveEvent();
|
||||
virtual ~RemoveEvent();
|
||||
};
|
||||
}
|
||||
};
|
||||
|
||||
#endif
|
@ -40,71 +40,8 @@ std::vector<std::string> ewol::object::SignalList::signalGetAll() const {
|
||||
return out;
|
||||
}
|
||||
|
||||
void ewol::object::SignalList::registerOnObjectEvent(const std::shared_ptr<ewol::Object>& _destinationObject,
|
||||
const std::string& _objectName,
|
||||
const char * _eventId,
|
||||
const char * _eventIdgenerated,
|
||||
const std::string& _overloadData) {
|
||||
EWOL_TODO("RegisterOnEvent ... + name");
|
||||
/*ewol::object::Manager& tmp = ewol::getContext().getEObjectManager();
|
||||
std::shared_ptr<ewol::Object> tmpObject = tmp.getObjectNamed(_objectName);
|
||||
if (nullptr != tmpObject) {
|
||||
EWOL_DEBUG("Find widget named : '" << _objectName << "' register event='" << _eventId << "'");
|
||||
tmpObject->registerOnEvent(_destinationObject, _eventId, _eventIdgenerated, _overloadData);
|
||||
} else {
|
||||
EWOL_WARNING(" Can not register event : '" << _eventId << "' the object named='" << _objectName << "' does not exist");
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
void ewol::object::SignalList::registerOnEvent(const std::shared_ptr<ewol::Object>& _destinationObject,
|
||||
const char * _eventId,
|
||||
const char * _eventIdgenerated,
|
||||
const std::string& _overloadData) {
|
||||
EWOL_TODO("RegisterOnEvent ...");
|
||||
/*
|
||||
if (_destinationObject == nullptr) {
|
||||
EWOL_ERROR("Input ERROR nullptr pointer Object ...");
|
||||
return;
|
||||
}
|
||||
if (_eventId == nullptr) {
|
||||
EWOL_ERROR("Input ERROR nullptr pointer Event Id...");
|
||||
return;
|
||||
}
|
||||
if ( _eventId[0] == '*'
|
||||
&& _eventId[1] == '\0') {
|
||||
EWOL_VERBOSE("Register on all event ...");
|
||||
for(auto &it : m_list) {
|
||||
if (it == nullptr) {
|
||||
continue;
|
||||
}
|
||||
it->connect(_destinationObject, _eventIdgenerated, _overloadData);
|
||||
}
|
||||
return;
|
||||
}
|
||||
// check if event existed :
|
||||
bool findIt = false;
|
||||
for(auto &it : m_list) {
|
||||
if (it == nullptr) {
|
||||
continue;
|
||||
}
|
||||
if (it->getName() == _eventId) {
|
||||
findIt = true;
|
||||
it->connect(_destinationObject, _eventIdgenerated, _overloadData);
|
||||
}
|
||||
}
|
||||
if (false == findIt) {
|
||||
EWOL_ERROR("Can not register event on this event=\"" << _eventId << "\" == > unknow event");
|
||||
return;
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
void ewol::object::SignalList::unRegisterOnEvent(const std::shared_ptr<ewol::Object>& _destinationObject,
|
||||
const char * _eventId) {
|
||||
EWOL_TODO("unRegisterOnEvent ...");
|
||||
/*
|
||||
if (_destinationObject == nullptr) {
|
||||
void ewol::object::SignalList::unBindAll(const std::shared_ptr<ewol::Object>& _object) {
|
||||
if (_object == nullptr) {
|
||||
EWOL_ERROR("Input ERROR nullptr pointer Object ...");
|
||||
return;
|
||||
}
|
||||
@ -112,11 +49,6 @@ void ewol::object::SignalList::unRegisterOnEvent(const std::shared_ptr<ewol::Obj
|
||||
if (it == nullptr) {
|
||||
continue;
|
||||
}
|
||||
if ( it->getName() == _eventId
|
||||
|| ( _eventId[0] == '*'
|
||||
&& _eventId[1] == '\0') ) {
|
||||
it->release(_destinationObject);
|
||||
}
|
||||
it->release(_object);
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
@ -41,40 +41,11 @@ namespace ewol {
|
||||
*/
|
||||
std::vector<std::string> signalGetAll() const;
|
||||
/**
|
||||
* @brief Register an Event an named widget. @see registerOnEvent
|
||||
* @param[in] _destinationObject pointer on the object that might be call when an event is generated
|
||||
* @param[in] _objectName Name of the object.
|
||||
* @param[in] _eventId Event generate inside the object.
|
||||
* @param[in] _eventIdgenerated event generated when call the distant EObject.onReceiveMessage(...)
|
||||
* @param[in] _overloadData When the user prever to receive a data specificly for this event ...
|
||||
* @note : To used when NOT herited from this object.
|
||||
* @brief Remove binding on all event class.
|
||||
* @param[in] _object Object to unlink.
|
||||
*/
|
||||
// TODO : Change name : registerOnSignal
|
||||
void registerOnObjectEvent(const std::shared_ptr<ewol::Object>& _destinationObject,
|
||||
const std::string& _objectName,
|
||||
const char * _eventId,
|
||||
const char * _eventIdgenerated = nullptr,
|
||||
const std::string& _overloadData="");
|
||||
|
||||
void unBindAll(const std::shared_ptr<ewol::Object>& _object);
|
||||
public:
|
||||
/**
|
||||
* @brief Register an Object over an other to get event on the second...
|
||||
* @param[in] _destinationObject pointer on the object that might be call when an event is generated
|
||||
* @param[in] _eventId Event generate inside the object (note : "*" event register on all event generated )
|
||||
* @param[in] _eventIdgenerated event generated when call the distant Object.onReceiveMessage(...)
|
||||
* @param[in] _overloadData When the user prever to receive a data specificly for this event ...
|
||||
*/
|
||||
void registerOnEvent(const std::shared_ptr<ewol::Object>& _destinationObject,
|
||||
const char * _eventId,
|
||||
const char * _eventIdgenerated = nullptr,
|
||||
const std::string& _overloadData = "") __attribute__ ((deprecated));
|
||||
/**
|
||||
* @brief Un-Register an Object over an other.
|
||||
* @param[in] _destinationObject pointer on the object that might be call when an event is generated
|
||||
* @param[in] _eventId Event generate inside the object (nullptr to remove all event on this object)
|
||||
*/
|
||||
void unRegisterOnEvent(const std::shared_ptr<ewol::Object>& _destinationObject,
|
||||
const char * _eventId = nullptr) __attribute__ ((deprecated));
|
||||
/**
|
||||
* @brief Receive a message from an other Object with a specific eventId and data
|
||||
* @param[in] _msg Message handle
|
||||
|
@ -88,25 +88,3 @@ bool ewol::widget::Composer::loadFromString(const std::string& _composerXmlStrin
|
||||
requestUpdateSize();
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
void ewol::widget::Composer::registerOnEventNameWidget(const std::string& _subWidgetName,
|
||||
const char * _eventId,
|
||||
const char * _eventIdgenerated,
|
||||
const std::string& _overloadData) {
|
||||
registerOnEventNameWidget(shared_from_this(), _subWidgetName, _eventId, _eventIdgenerated, _overloadData);
|
||||
}
|
||||
|
||||
void ewol::widget::Composer::registerOnEventNameWidget(const std::shared_ptr<ewol::Object>& _destinationObject,
|
||||
const std::string& _subWidgetName,
|
||||
const char * _eventId,
|
||||
const char * _eventIdgenerated,
|
||||
const std::string& _overloadData) {
|
||||
std::shared_ptr<ewol::Widget> tmpWidget = getWidgetNamed(_subWidgetName);
|
||||
if (tmpWidget != nullptr) {
|
||||
EWOL_DEBUG("Find widget named : \"" << _subWidgetName << "\" register event=\"" << _eventId << "\"");
|
||||
tmpWidget->registerOnEvent(_destinationObject, _eventId, _eventIdgenerated, _overloadData);
|
||||
} else {
|
||||
EWOL_WARNING("[" << getId() << "] {" << getObjectType() << "} Can not register event : \"" << _eventId << "\" the widget named=\"" << _subWidgetName << "\" does not exist");
|
||||
}
|
||||
}
|
||||
|
@ -57,57 +57,6 @@ namespace ewol {
|
||||
* @return false == > some error occured
|
||||
*/
|
||||
bool loadFromString(const std::string& _composerXmlString);
|
||||
protected:
|
||||
// TODO : Create a template ...
|
||||
#define composerBind(_type, _name, _event, _obj, _func) do {\
|
||||
std::shared_ptr<_type> myObject = std::dynamic_pointer_cast<_type>(getObjectNamed(_name)); \
|
||||
if (myObject != nullptr) { \
|
||||
myObject->_event.bind(_obj, _func); \
|
||||
} \
|
||||
} 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);
|
||||
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())));
|
||||
}
|
||||
*/
|
||||
/**
|
||||
* @brief Register an Event an named widget. @see registerOnEvent
|
||||
* @param[in] _subWidgetName Name of the subWidget.
|
||||
* @param[in] _eventId Event generate inside the object.
|
||||
* @param[in] _eventIdgenerated event generated when call the distant EObject.onReceiveMessage(...)
|
||||
* @param[in] _overloadData When the user prever to receive a data specificly for this event ...
|
||||
* @note : To used when herited from this object.
|
||||
*/
|
||||
void registerOnEventNameWidget(const std::string& _subWidgetName,
|
||||
const char * _eventId,
|
||||
const char * _eventIdgenerated = nullptr,
|
||||
const std::string& _overloadData="") __attribute__ ((deprecated));
|
||||
public:
|
||||
#define composerExternBind(_composer, _type, _name, _event, _obj, _func) do {\
|
||||
std::shared_ptr<_type> myObject = std::dynamic_pointer_cast<_type>(_composer->getObjectNamed(_name)); \
|
||||
if (myObject != nullptr) { \
|
||||
myObject->_event.bind(_obj, _func); \
|
||||
} \
|
||||
} while (false)
|
||||
/**
|
||||
* @brief Register an Event an named widget. @see registerOnEvent
|
||||
* @param[in] _destinationObject pointer on the object that might be call when an event is generated
|
||||
* @param[in] _subWidgetName Name of the subWidget.
|
||||
* @param[in] _eventId Event generate inside the object.
|
||||
* @param[in] _eventIdgenerated event generated when call the distant EObject.onReceiveMessage(...)
|
||||
* @param[in] _overloadData When the user prever to receive a data specificly for this event ...
|
||||
* @note : To used when NOT herited from this object.
|
||||
*/
|
||||
void registerOnEventNameWidget(const std::shared_ptr<ewol::Object>& _destinationObject,
|
||||
const std::string& _subWidgetName,
|
||||
const char * _eventId,
|
||||
const char * _eventIdgenerated = nullptr,
|
||||
const std::string& _overloadData="") __attribute__ ((deprecated));
|
||||
};
|
||||
};
|
||||
};
|
||||
|
@ -64,13 +64,13 @@ void ewol::widget::Container::subWidgetUnLink() {
|
||||
m_subWidget.reset();
|
||||
}
|
||||
|
||||
std::shared_ptr<ewol::Widget> ewol::widget::Container::getWidgetNamed(const std::string& _widgetName) {
|
||||
std::shared_ptr<ewol::Widget> tmpUpperWidget = ewol::Widget::getWidgetNamed(_widgetName);
|
||||
if (nullptr!=tmpUpperWidget) {
|
||||
return tmpUpperWidget;
|
||||
std::shared_ptr<ewol::Object> ewol::widget::Container::getSubObjectNamed(const std::string& _objectName) {
|
||||
std::shared_ptr<ewol::Object> tmpObject = ewol::Widget::getSubObjectNamed(_objectName);
|
||||
if (nullptr!=tmpObject) {
|
||||
return tmpObject;
|
||||
}
|
||||
if (nullptr != m_subWidget) {
|
||||
return m_subWidget->getWidgetNamed(_widgetName);
|
||||
return m_subWidget->getSubObjectNamed(_objectName);
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
@ -58,7 +58,7 @@ namespace ewol {
|
||||
virtual void calculateSize(const vec2& _availlable);
|
||||
virtual void calculateMinMaxSize();
|
||||
virtual std::shared_ptr<ewol::Widget> getWidgetAtPos(const vec2& _pos);
|
||||
virtual std::shared_ptr<ewol::Widget> getWidgetNamed(const std::string& _widgetName);
|
||||
virtual std::shared_ptr<ewol::Object> getSubObjectNamed(const std::string& _objectName);
|
||||
virtual bool loadXML(exml::Element* _node);
|
||||
virtual void setOffset(const vec2& _newVal);
|
||||
virtual void requestDestroyFromChild(const std::shared_ptr<Object>& _child);
|
||||
|
@ -63,16 +63,19 @@ void ewol::widget::Container2::subWidgetUnLink(int32_t _idWidget) {
|
||||
m_subWidget[_idWidget].reset();
|
||||
}
|
||||
|
||||
std::shared_ptr<ewol::Widget> ewol::widget::Container2::getWidgetNamed(const std::string& _widgetName) {
|
||||
std::shared_ptr<ewol::Widget> tmpUpperWidget = ewol::Widget::getWidgetNamed(_widgetName);
|
||||
if (tmpUpperWidget != nullptr) {
|
||||
return tmpUpperWidget;
|
||||
std::shared_ptr<ewol::Object> ewol::widget::Container2::getSubObjectNamed(const std::string& _widgetName) {
|
||||
std::shared_ptr<ewol::Object> tmpObject = ewol::Widget::getSubObjectNamed(_widgetName);
|
||||
if (tmpObject != nullptr) {
|
||||
return tmpObject;
|
||||
}
|
||||
if (m_subWidget[0] != nullptr) {
|
||||
return m_subWidget[0]->getWidgetNamed(_widgetName);
|
||||
tmpObject = m_subWidget[0]->getSubObjectNamed(_widgetName);
|
||||
if (tmpObject != nullptr) {
|
||||
return tmpObject;
|
||||
}
|
||||
}
|
||||
if (m_subWidget[1] != nullptr) {
|
||||
return m_subWidget[1]->getWidgetNamed(_widgetName);
|
||||
return m_subWidget[1]->getSubObjectNamed(_widgetName);
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
@ -161,7 +161,7 @@ namespace ewol {
|
||||
calculateMinMaxSizePadded();
|
||||
}
|
||||
//virtual std::shared_ptr<ewol::Widget> getWidgetAtPos(const vec2& _pos);
|
||||
virtual std::shared_ptr<ewol::Widget> getWidgetNamed(const std::string& _widgetName);
|
||||
virtual std::shared_ptr<ewol::Object> getSubObjectNamed(const std::string& _objectName);
|
||||
virtual bool loadXML(exml::Element* _node);
|
||||
virtual void setOffset(const vec2& _newVal);
|
||||
virtual void requestDestroyFromChild(const std::shared_ptr<Object>& _child);
|
||||
|
@ -138,16 +138,16 @@ void ewol::widget::ContainerN::subWidgetRemoveAllDelayed() {
|
||||
subWidgetRemoveAll();
|
||||
}
|
||||
|
||||
std::shared_ptr<ewol::Widget> ewol::widget::ContainerN::getWidgetNamed(const std::string& _widgetName) {
|
||||
std::shared_ptr<ewol::Widget> tmpUpperWidget = ewol::Widget::getWidgetNamed(_widgetName);
|
||||
if (tmpUpperWidget != nullptr) {
|
||||
return tmpUpperWidget;
|
||||
std::shared_ptr<ewol::Object> ewol::widget::ContainerN::getSubObjectNamed(const std::string& _objectName) {
|
||||
std::shared_ptr<ewol::Object> tmpObject = ewol::Widget::getSubObjectNamed(_objectName);
|
||||
if (tmpObject != nullptr) {
|
||||
return tmpObject;
|
||||
}
|
||||
for (auto &it : m_subWidget) {
|
||||
if (it != nullptr) {
|
||||
std::shared_ptr<ewol::Widget> tmpWidget = it->getWidgetNamed(_widgetName);
|
||||
if (tmpWidget != nullptr) {
|
||||
return tmpWidget;
|
||||
tmpObject = it->getSubObjectNamed(_objectName);
|
||||
if (tmpObject != nullptr) {
|
||||
return tmpObject;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -94,7 +94,7 @@ namespace ewol {
|
||||
virtual void calculateSize(const vec2& _availlable);
|
||||
virtual void calculateMinMaxSize();
|
||||
virtual std::shared_ptr<ewol::Widget> getWidgetAtPos(const vec2& _pos);
|
||||
virtual std::shared_ptr<ewol::Widget> getWidgetNamed(const std::string& _widgetName);
|
||||
virtual std::shared_ptr<ewol::Object> getSubObjectNamed(const std::string& _objectName);
|
||||
virtual bool loadXML(exml::Element* _node);
|
||||
virtual void setOffset(const vec2& _newVal);
|
||||
virtual void requestDestroyFromChild(const std::shared_ptr<Object>& _child);
|
||||
|
@ -602,14 +602,6 @@ bool ewol::Widget::loadXML(exml::Element* _node) {
|
||||
return true;
|
||||
}
|
||||
|
||||
std::shared_ptr<ewol::Widget> ewol::Widget::getWidgetNamed(const std::string& _widgetName) {
|
||||
EWOL_VERBOSE("[" << getId() << "] {" << getObjectType() << "} compare : " << getName() << " == " << _widgetName );
|
||||
if (getName() == _widgetName) {
|
||||
return std::dynamic_pointer_cast<ewol::Widget>(shared_from_this());
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
bool ewol::Widget::systemEventEntry(ewol::event::EntrySystem& _event) {
|
||||
std::shared_ptr<ewol::Widget> up = std::dynamic_pointer_cast<ewol::Widget>(m_parent.lock());
|
||||
if (up != nullptr) {
|
||||
|
@ -532,12 +532,6 @@ namespace ewol {
|
||||
}
|
||||
return nullptr;
|
||||
};
|
||||
/**
|
||||
* @brief get the widget if it have this name or one of the subwidget with the same name
|
||||
* @param[in] _widgetName name of the widget
|
||||
* @return the requested pointer on the node (or nullptr pointer)
|
||||
*/
|
||||
virtual std::shared_ptr<ewol::Widget> getWidgetNamed(const std::string& _widgetName);
|
||||
|
||||
// event section:
|
||||
public:
|
||||
|
@ -95,17 +95,17 @@ void ewol::widget::FileChooser::init() {
|
||||
+ " </sizer>\n"
|
||||
+ "</popup>";
|
||||
loadFromString(myDescription);
|
||||
composerBind(ewol::widget::CheckBox, "[" + etk::to_string(getId()) + "]file-shooser:show-hiden-file", signalValue, shared_from_this(), &ewol::widget::FileChooser::onCallbackHidenFileChangeChangeValue);
|
||||
composerBind(ewol::widget::Button, "[" + etk::to_string(getId()) + "]file-shooser:button-validate", signalPressed, shared_from_this(), &ewol::widget::FileChooser::onCallbackListValidate);
|
||||
composerBind(ewol::widget::Button, "[" + etk::to_string(getId()) + "]file-shooser:button-cancel", signalPressed, shared_from_this(), &ewol::widget::FileChooser::onCallbackButtonCancelPressed);
|
||||
composerBind(ewol::widget::ListFileSystem, "[" + etk::to_string(getId()) + "]file-shooser:list-folder", signalFolderValidate, shared_from_this(), &ewol::widget::FileChooser::onCallbackListFolderSelectChange);
|
||||
composerBind(ewol::widget::ListFileSystem, "[" + etk::to_string(getId()) + "]file-shooser:list-files", signalFileSelect, shared_from_this(), &ewol::widget::FileChooser::onCallbackListFileSelectChange);
|
||||
composerBind(ewol::widget::ListFileSystem, "[" + etk::to_string(getId()) + "]file-shooser:list-files", signalFileValidate, shared_from_this(), &ewol::widget::FileChooser::onCallbackListFileValidate);
|
||||
composerBind(ewol::widget::Entry, "[" + etk::to_string(getId()) + "]file-shooser:entry-file", signalModify, shared_from_this(), &ewol::widget::FileChooser::onCallbackEntryFileChangeValue);
|
||||
composerBind(ewol::widget::Entry, "[" + etk::to_string(getId()) + "]file-shooser:entry-file", signalEnter, shared_from_this(), &ewol::widget::FileChooser::onCallbackListFileValidate);
|
||||
composerBind(ewol::widget::Entry, "[" + etk::to_string(getId()) + "]file-shooser:entry-folder", signalModify, shared_from_this(), &ewol::widget::FileChooser::onCallbackEntryFolderChangeValue);
|
||||
subBind(ewol::widget::CheckBox, "[" + etk::to_string(getId()) + "]file-shooser:show-hiden-file", signalValue, shared_from_this(), &ewol::widget::FileChooser::onCallbackHidenFileChangeChangeValue);
|
||||
subBind(ewol::widget::Button, "[" + etk::to_string(getId()) + "]file-shooser:button-validate", signalPressed, shared_from_this(), &ewol::widget::FileChooser::onCallbackListValidate);
|
||||
subBind(ewol::widget::Button, "[" + etk::to_string(getId()) + "]file-shooser:button-cancel", signalPressed, shared_from_this(), &ewol::widget::FileChooser::onCallbackButtonCancelPressed);
|
||||
subBind(ewol::widget::ListFileSystem, "[" + etk::to_string(getId()) + "]file-shooser:list-folder", signalFolderValidate, shared_from_this(), &ewol::widget::FileChooser::onCallbackListFolderSelectChange);
|
||||
subBind(ewol::widget::ListFileSystem, "[" + etk::to_string(getId()) + "]file-shooser:list-files", signalFileSelect, shared_from_this(), &ewol::widget::FileChooser::onCallbackListFileSelectChange);
|
||||
subBind(ewol::widget::ListFileSystem, "[" + etk::to_string(getId()) + "]file-shooser:list-files", signalFileValidate, shared_from_this(), &ewol::widget::FileChooser::onCallbackListFileValidate);
|
||||
subBind(ewol::widget::Entry, "[" + etk::to_string(getId()) + "]file-shooser:entry-file", signalModify, shared_from_this(), &ewol::widget::FileChooser::onCallbackEntryFileChangeValue);
|
||||
subBind(ewol::widget::Entry, "[" + etk::to_string(getId()) + "]file-shooser:entry-file", signalEnter, shared_from_this(), &ewol::widget::FileChooser::onCallbackListFileValidate);
|
||||
subBind(ewol::widget::Entry, "[" + etk::to_string(getId()) + "]file-shooser:entry-folder", signalModify, shared_from_this(), &ewol::widget::FileChooser::onCallbackEntryFolderChangeValue);
|
||||
//composerBind(ewol::widget::CheckBox, "[" + etk::to_string(getId()) + "]file-shooser:entry-folder", signalEnter, shared_from_this(), &ewol::widget::FileChooser::);
|
||||
composerBind(ewol::widget::Image, "[" + etk::to_string(getId()) + "]file-shooser:img-home", signalPressed, shared_from_this(), &ewol::widget::FileChooser::onCallbackHomePressed);
|
||||
subBind(ewol::widget::Image, "[" + etk::to_string(getId()) + "]file-shooser:img-home", signalPressed, shared_from_this(), &ewol::widget::FileChooser::onCallbackHomePressed);
|
||||
// set the default Folder properties:
|
||||
updateCurrentFolder();
|
||||
setCanHaveFocus(true);
|
||||
|
Loading…
x
Reference in New Issue
Block a user