[DEV] change some Object interface (try to simplify object interface

This commit is contained in:
Edouard DUPIN 2014-08-25 05:56:03 +02:00
parent 7edbc3a0cf
commit 367831116f
22 changed files with 95 additions and 523 deletions

2
external/eaudiofx vendored

@ -1 +1 @@
Subproject commit 69e1259b273a429e871e5c2e994dea5bb45aa5cf
Subproject commit 428e8dfe393b5609e21b78267356e30a026cb0ad

View File

@ -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);
}

View File

@ -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:
/**

View File

@ -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);
}
}
}
}

View File

@ -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

View File

@ -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;
}

View File

@ -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

View File

@ -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);
*/
}

View File

@ -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

View File

@ -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);
}
*/
}

View File

@ -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

View File

@ -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");
}
}

View File

@ -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));
};
};
};

View File

@ -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;
}

View File

@ -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);

View File

@ -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;
}

View File

@ -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);

View File

@ -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;
}
}
}

View File

@ -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);

View File

@ -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) {

View File

@ -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:

View File

@ -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);