[DEV] remove caller in signal emit

This commit is contained in:
Edouard DUPIN 2014-08-22 05:20:27 +02:00
parent 12c4a88c88
commit e3f71e5201
21 changed files with 214 additions and 196 deletions

View File

@ -63,7 +63,7 @@ ewol::Object::~Object() {
void ewol::Object::init() {
getObjectManager().add(shared_from_this());
parameterDisplay();
//parameterDisplay();
m_objectHasBeenInit = true;
}

View File

@ -61,13 +61,13 @@ 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)(const T&)) {
template<class TYPE, typename... Args> void bind(std::shared_ptr<ewol::Object> _obj, void (TYPE::*_func)(const T&), Args... args) {
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)));
m_callerList.push_back(std::make_pair(std::weak_ptr<ewol::Object>(_obj), std::bind(_func, obj2.get(), std::placeholders::_1, args...)));
}
/**
* @brief Advanced binding a callback function to the current signal.
@ -180,13 +180,13 @@ 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, typename... Args> void bind(std::shared_ptr<ewol::Object> _obj, void (TYPE::*_func)(), Args... args) {
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)));
m_callerList.push_back(std::make_pair(std::weak_ptr<ewol::Object>(_obj), std::bind(_func, obj2.get(), args...)));
}
/**
* @brief Advanced binding a callback function to the current signal.

View File

@ -122,13 +122,13 @@ bool ewol::widget::Button::onEventInput(const ewol::event::Input& _event) {
if (1 == _event.getId()) {
if(ewol::key::statusDown == _event.getStatus()) {
EWOL_VERBOSE(getName() << " : Generate event : " << signalDown);
signalDown.emit(shared_from_this());
signalDown.emit();
m_buttonPressed = true;
markToRedraw();
}
if(ewol::key::statusUp == _event.getStatus()) {
EWOL_VERBOSE(getName() << " : Generate event : " << signalUp);
signalUp.emit(shared_from_this());
signalUp.emit();
m_buttonPressed = false;
markToRedraw();
}
@ -143,14 +143,14 @@ bool ewol::widget::Button::onEventInput(const ewol::event::Input& _event) {
// inverse value :
setValue((m_value.get())?false:true);
EWOL_VERBOSE(getName() << " : Generate event : " << signalPressed);
signalPressed.emit(shared_from_this());
signalPressed.emit();
EWOL_VERBOSE(getName() << " : Generate event : " << signalValue << " val=" << m_value );
signalValue.emit(shared_from_this(), m_value.get());
signalValue.emit(m_value.get());
if( m_toggleMode.get() == false
&& m_value.get() == true) {
setValue(false);
EWOL_VERBOSE(getName() << " : Generate event : " << signalValue << " val=" << m_value);
signalValue.emit(shared_from_this(), m_value.get());
signalValue.emit(m_value.get());
}
}
markToRedraw();
@ -167,7 +167,7 @@ bool ewol::widget::Button::onEventEntry(const ewol::event::Entry& _event) {
if( _event.getType() == ewol::key::keyboardChar
&& _event.getStatus() == ewol::key::statusDown
&& _event.getChar() == '\r') {
signalEnter.emit(shared_from_this());
signalEnter.emit();
return true;
}
return false;

View File

@ -225,7 +225,7 @@ void ewol::widget::ButtonColor::onReceiveMessage(const ewol::object::Message& _m
if (_msg.getMessage() == eventColorHasChange) {
m_textColorFg = _msg.getData();
// TODO : set a proper call
//signalChange.emit(shared_from_this(), _msg.getData());
//signalChange.emit(_msg.getData());
EWOL_TODO("generate signal of change color : " << _msg.getData());
markToRedraw();
}

View File

@ -128,13 +128,13 @@ bool ewol::widget::CheckBox::onEventInput(const ewol::event::Input& _event) {
if (1 == _event.getId()) {
if(ewol::key::statusDown == _event.getStatus()) {
EWOL_VERBOSE(getName() << " : Generate event : " << signalDown);
signalDown.emit(shared_from_this());
signalDown.emit();
m_buttonPressed = true;
markToRedraw();
}
if(ewol::key::statusUp == _event.getStatus()) {
EWOL_VERBOSE(getName() << " : Generate event : " << signalUp);
signalUp.emit(shared_from_this());
signalUp.emit();
m_buttonPressed = false;
markToRedraw();
}
@ -142,9 +142,9 @@ bool ewol::widget::CheckBox::onEventInput(const ewol::event::Input& _event) {
// inverse value :
setValue((m_value)?false:true);
EWOL_VERBOSE(getName() << " : Generate event : " << signalPressed);
signalPressed.emit(shared_from_this());
signalPressed.emit();
EWOL_VERBOSE(getName() << " : Generate event : " << signalValue << " val=" << m_value );
signalValue.emit(shared_from_this(), m_value.get());
signalValue.emit(m_value.get());
markToRedraw();
}
}
@ -162,7 +162,7 @@ bool ewol::widget::CheckBox::onEventEntry(const ewol::event::Entry& _event) {
if( _event.getType() == ewol::key::keyboardChar
&& _event.getStatus() == ewol::key::statusDown
&& _event.getChar() == '\r') {
signalEnter.emit(shared_from_this());
signalEnter.emit();
return true;
}
return false;

View File

@ -220,7 +220,7 @@ bool ewol::widget::ColorBar::onEventInput(const ewol::event::Input& _event) {
}
if(m_currentColor != estimateColor) {
m_currentColor = estimateColor;
signalChange.emit(shared_from_this(), m_currentColor);
signalChange.emit(m_currentColor);
}
return true;
}

View File

@ -240,7 +240,7 @@ bool ewol::widget::Entry::onEventInput(const ewol::event::Input& _event) {
if (1 == _event.getId()) {
if (ewol::key::statusSingle == _event.getStatus()) {
keepFocus();
signalClick.emit(shared_from_this());
signalClick.emit();
//nothing to do ...
return true;
} else if (ewol::key::statusDouble == _event.getStatus()) {
@ -335,7 +335,7 @@ bool ewol::widget::Entry::onEventEntry(const ewol::event::Entry& _event) {
removeSelected();
if( _event.getChar() == '\n'
|| _event.getChar() == '\r') {
signalEnter.emit(shared_from_this(), m_data);
signalEnter.emit(m_data);
return true;
} else if (_event.getChar() == 0x7F) {
// SUPPR :
@ -365,7 +365,7 @@ bool ewol::widget::Entry::onEventEntry(const ewol::event::Entry& _event) {
}
}
}
signalModify.emit(shared_from_this(), m_data);
signalModify.emit(m_data);
markToRedraw();
return true;
}
@ -437,7 +437,7 @@ void ewol::widget::Entry::onEventClipboard(enum ewol::context::clipBoard::clipbo
markToRedraw();
}
}
signalModify.emit(shared_from_this(), m_data);
signalModify.emit(m_data);
}
@ -452,7 +452,7 @@ void ewol::widget::Entry::onReceiveMessage(const ewol::object::Message& _msg) {
} else if(_msg.getMessage() == ewolEventEntryCut) {
copySelectionToClipBoard(ewol::context::clipBoard::clipboardStd);
removeSelected();
signalModify.emit(shared_from_this(), m_data);
signalModify.emit(m_data);
} else if(_msg.getMessage() == ewolEventEntryCopy) {
copySelectionToClipBoard(ewol::context::clipBoard::clipboardStd);
} else if(_msg.getMessage() == ewolEventEntryPaste) {

View File

@ -133,7 +133,7 @@ bool ewol::widget::Image::onEventInput(const ewol::event::Input& _event) {
//EWOL_DEBUG("Event on BT ...");
if (1 == _event.getId()) {
if(ewol::key::statusSingle == _event.getStatus()) {
signalPressed.emit(shared_from_this());
signalPressed.emit();
return true;
}
}

View File

@ -144,10 +144,10 @@ bool ewol::widget::Joystick::onEventInput(const ewol::event::Input& _event) {
}
markToRedraw();
if(ewol::key::statusDown == typeEvent) {
signalEnable.emit(shared_from_this());
signalEnable.emit();
} else {
std::string tmp = std::string("distance=") + std::string(m_distance) + std::string("angle=") + std::string(m_angle+M_PI/2);
signalMove.emit(shared_from_this(), m_angle+M_PI/2);
signalMove.emit(m_angle+M_PI/2);
}
//teta += M_PI/2;
//EWOL_DEBUG("TETA = " << (m_angle*180/M_PI) << " deg distance = " << m_distance);
@ -163,7 +163,7 @@ bool ewol::widget::Joystick::onEventInput(const ewol::event::Input& _event) {
m_distance = 0;
}
markToRedraw();
signalDisable.emit(shared_from_this());
signalDisable.emit();
return true;
}
return false;

View File

@ -124,7 +124,7 @@ bool ewol::widget::Label::onEventInput(const ewol::event::Input& _event) {
if (1 == _event.getId()) {
if (ewol::key::statusSingle == _event.getStatus()) {
// nothing to do ...
signalPressed.emit(shared_from_this());
signalPressed.emit();
return true;
}
}

View File

@ -185,21 +185,21 @@ bool ewol::widget::ListFileSystem::onItemEvent(int32_t _IdInput,
if( m_showFolder == true
&& m_selectedLine == 0) {
// "." folder
signalFolderSelect.emit(shared_from_this(), ".");
signalFolderSelect.emit(".");
} else if ( m_showFolder == true
&& m_selectedLine == 1) {
// ".." folder
signalFolderSelect.emit(shared_from_this(), "..");
signalFolderSelect.emit("..");
} else if( m_selectedLine-offset >= 0
&& m_selectedLine-offset < (int32_t)m_list.size()
&& nullptr != m_list[m_selectedLine-offset] ) {
// generate event extern :
switch(m_list[m_selectedLine-offset]->getNodeType()) {
case etk::FSN_FILE :
signalFileSelect.emit(shared_from_this(), m_list[m_selectedLine-offset]->getNameFile());
signalFileSelect.emit(m_list[m_selectedLine-offset]->getNameFile());
break;
case etk::FSN_FOLDER :
signalFolderSelect.emit(shared_from_this(), m_list[m_selectedLine-offset]->getNameFile());
signalFolderSelect.emit(m_list[m_selectedLine-offset]->getNameFile());
break;
default:
EWOL_ERROR("Can not generate event on an unknow type");
@ -210,20 +210,20 @@ bool ewol::widget::ListFileSystem::onItemEvent(int32_t _IdInput,
if( m_showFolder == true
&& m_selectedLine == 0) {
// "." folder
signalFolderValidate.emit(shared_from_this(), ".");
signalFolderValidate.emit(".");
} else if ( m_showFolder == true
&& m_selectedLine == 1) {
// ".." folder
signalFolderValidate.emit(shared_from_this(), "..");
signalFolderValidate.emit("..");
} else if( m_selectedLine-offset >= 0
&& m_selectedLine-offset < (int32_t)m_list.size()
&& nullptr != m_list[m_selectedLine-offset] ) {
switch(m_list[m_selectedLine-offset]->getNodeType()) {
case etk::FSN_FILE :
signalFileValidate.emit(shared_from_this(), m_list[m_selectedLine-offset]->getNameFile());
signalFileValidate.emit(m_list[m_selectedLine-offset]->getNameFile());
break;
case etk::FSN_FOLDER :
signalFolderValidate.emit(shared_from_this(), m_list[m_selectedLine-offset]->getNameFile());
signalFolderValidate.emit(m_list[m_selectedLine-offset]->getNameFile());
break;
default:
EWOL_ERROR("Can not generate event on an unknow type");

View File

@ -97,7 +97,10 @@ int32_t ewol::widget::Menu::add(int32_t _parent,
// add it in the widget list
ewol::widget::Sizer::subWidgetAdd(myButton);
// keep the specific event ...
myButton->registerOnEvent(shared_from_this(), "pressed", eventButtonPressed);
//myButton->registerOnEvent(shared_from_this(), "pressed", eventButtonPressed);
std::weak_ptr<ewol::widget::Button> myButtonWeak(myButton);
//myButton->signalPressed.bind(shared_from_this(), &ewol::widget::Menu::onButtonPressed, myButtonWeak);
myButton->signalPressed.connect(shared_from_this(), std::bind(&ewol::widget::Menu::onButtonPressed, this, std::weak_ptr<ewol::widget::Button>(myButton)));
tmpObject.m_widgetPointer = myButton;
}
m_listElement.push_back(tmpObject);
@ -108,136 +111,138 @@ void ewol::widget::Menu::addSpacer() {
EWOL_TODO("NOT now...");
}
void ewol::widget::Menu::onReceiveMessage(const ewol::object::Message& _msg) {
/*
if (true == ewol::sizer::onReceiveMessage(_msg) {
return true;
void ewol::widget::Menu::onButtonPressed(std::weak_ptr<ewol::widget::Button> _button) {
std::shared_ptr<ewol::widget::Button> caller = _button.lock();
if (caller == nullptr) {
return;
}
*/
EWOL_ERROR(" receive message : " << _msg);
if (_msg.getMessage() == eventButtonPressed) {
for (auto &it : m_listElement) {
if (_msg.getCaller() == it.m_widgetPointer.lock()) {
// 2 posible case (have a message or have a child ...
if (it.m_generateEvent != nullptr) {
EWOL_DEBUG("Menu == > generate Event");
// Send a multicast event ...
sendMultiCast(it.m_generateEvent, it.m_message);
std::shared_ptr<ewol::widget::ContextMenu> tmpContext = m_widgetContextMenu.lock();
if (tmpContext != nullptr) {
EWOL_DEBUG("Mark the menu to remove ...");
tmpContext->destroy();
}
return;
} else{
EWOL_DEBUG("Menu == > load Sub Menu");
bool findChild = false;
for (auto &it2 : m_listElement) {
if (it.m_localId == it2.m_parentId) {
findChild = true;
break;
}
}
if (false == findChild) {
EWOL_WARNING("Event on menu element with no child an no event... label=" << it.m_label);
return;
}
// create a context menu :
std::shared_ptr<ewol::widget::ContextMenu> tmpContext = ewol::widget::ContextMenu::create();
m_widgetContextMenu = tmpContext;
if (tmpContext == nullptr) {
EWOL_ERROR("Allocation Error");
return;
}
// get the button widget :
vec2 newPosition;
std::shared_ptr<ewol::Widget> eventFromWidget = std::dynamic_pointer_cast<ewol::Widget>(_msg.getCaller());
if (eventFromWidget != nullptr) {
vec2 tmpOri = eventFromWidget->getOrigin();
vec2 tmpSize = eventFromWidget->getSize();
// calculate the correct position
newPosition.setValue(tmpOri.x() + tmpSize.x()/2,
tmpOri.y() );
}
tmpContext->setPositionMark(ewol::widget::ContextMenu::markTop, newPosition );
std::shared_ptr<ewol::widget::Sizer> mySizer;
std::shared_ptr<ewol::widget::Button> myButton;
mySizer = ewol::widget::Sizer::create(widget::Sizer::modeVert);
if (nullptr != mySizer) {
mySizer->lockExpand(vec2(true,true));
// set it in the pop-up-system :
tmpContext->setSubWidget(mySizer);
bool menuHaveImage = false;
for (auto &it2 : m_listElement) {
if (it.m_localId == it2.m_parentId) {
if (it2.m_image.size()!=0) {
menuHaveImage = true;
break;
}
}
}
for (auto it2=m_listElement.rbegin(); it2!=m_listElement.rend() ; ++it2) {
if (it.m_localId == it2->m_parentId) {
myButton = ewol::widget::Button::create();
if (myButton == nullptr) {
EWOL_ERROR("Allocation Error");
} else {
if (it2->m_image.size()!=0) {
std::string composeString = "<composer expand=\"true,false\" fill=\"true,true\">\n";
composeString+= " <sizer mode=\"hori\" expand=\"true,false\" fill=\"true,true\" lock=\"true\">\n";
if (etk::end_with(it2->m_image, ".edf") == true) {
composeString+=" <image src=\"" + it2->m_image + "\" size=\"8,8mm\" distance-field='true'/>\n";
} else {
composeString+=" <image src=\"" + it2->m_image + "\" size=\"8,8mm\"/>\n";
}
composeString+=" <label exand=\"true,true\" fill=\"true,true\">" + it2->m_label + "</label>\n";
composeString+=" </sizer>\n";
composeString+="</composer>\n";
myButton->setSubWidget(ewol::widget::Composer::create(widget::Composer::String, composeString));
} else {
if (true == menuHaveImage) {
myButton->setSubWidget(ewol::widget::Composer::create(widget::Composer::String,
std::string("<composer expand=\"true,false\" fill=\"true,true\">\n") +
" <sizer mode=\"hori\" expand=\"true,false\" fill=\"true,true\" lock=\"true\">\n"
" <spacer min-size=\"8,0mm\"/>\n"
" <label exand=\"true,true\" fill=\"true,true\"><![CDATA[" + it2->m_label + "]]></label>\n"
" </sizer>\n"
"</composer>\n"));
} else {
std::shared_ptr<ewol::widget::Label> tmpLabel = widget::Label::create(std::string("<left>") + it2->m_label + "</left>\n");
if (tmpLabel != nullptr) {
tmpLabel->setExpand(bvec2(true,false));
tmpLabel->setFill(bvec2(true,true));
myButton->setSubWidget(tmpLabel);
}
}
}
// set the image if one is present ...
myButton->registerOnEvent(shared_from_this(), "pressed", eventButtonPressed);
myButton->setExpand(bvec2(true,false));
myButton->setFill(bvec2(true,false));
// add it in the widget list
mySizer->subWidgetAdd(myButton);
it2->m_widgetPointer = myButton;
}
}
}
}
std::shared_ptr<ewol::widget::Windows> currentWindows = getWindows();
if (currentWindows == nullptr) {
EWOL_ERROR("Can not get the curent Windows...");
} else {
currentWindows->popUpWidgetPush(tmpContext);
}
for (auto &it : m_listElement) {
if (caller == it.m_widgetPointer.lock()) {
// 2 posible case (have a message or have a child ...
if (it.m_generateEvent != nullptr) {
EWOL_DEBUG("Menu == > generate Event");
// Send a multicast event ...
sendMultiCast(it.m_generateEvent, it.m_message);
std::shared_ptr<ewol::widget::ContextMenu> tmpContext = m_widgetContextMenu.lock();
if (tmpContext != nullptr) {
EWOL_DEBUG("Mark the menu to remove ...");
tmpContext->destroy();
}
return;
} else{
EWOL_DEBUG("Menu == > load Sub Menu");
bool findChild = false;
for (auto &it2 : m_listElement) {
if (it.m_localId == it2.m_parentId) {
findChild = true;
break;
}
}
if (false == findChild) {
EWOL_WARNING("Event on menu element with no child an no event... label=" << it.m_label);
return;
}
// create a context menu :
std::shared_ptr<ewol::widget::ContextMenu> tmpContext = ewol::widget::ContextMenu::create();
m_widgetContextMenu = tmpContext;
if (tmpContext == nullptr) {
EWOL_ERROR("Allocation Error");
return;
}
// get the button widget :
vec2 newPosition;
std::shared_ptr<ewol::Widget> eventFromWidget = std::dynamic_pointer_cast<ewol::Widget>(caller);
if (eventFromWidget != nullptr) {
vec2 tmpOri = eventFromWidget->getOrigin();
vec2 tmpSize = eventFromWidget->getSize();
// calculate the correct position
newPosition.setValue(tmpOri.x() + tmpSize.x()/2,
tmpOri.y() );
}
tmpContext->setPositionMark(ewol::widget::ContextMenu::markTop, newPosition );
std::shared_ptr<ewol::widget::Sizer> mySizer;
std::shared_ptr<ewol::widget::Button> myButton;
mySizer = ewol::widget::Sizer::create(widget::Sizer::modeVert);
if (nullptr != mySizer) {
mySizer->lockExpand(vec2(true,true));
// set it in the pop-up-system :
tmpContext->setSubWidget(mySizer);
bool menuHaveImage = false;
for (auto &it2 : m_listElement) {
if (it.m_localId == it2.m_parentId) {
if (it2.m_image.size()!=0) {
menuHaveImage = true;
break;
}
}
}
for (auto it2=m_listElement.rbegin(); it2!=m_listElement.rend() ; ++it2) {
if (it.m_localId == it2->m_parentId) {
myButton = ewol::widget::Button::create();
if (myButton == nullptr) {
EWOL_ERROR("Allocation Error");
} else {
if (it2->m_image.size()!=0) {
std::string composeString = "<composer expand=\"true,false\" fill=\"true,true\">\n";
composeString+= " <sizer mode=\"hori\" expand=\"true,false\" fill=\"true,true\" lock=\"true\">\n";
if (etk::end_with(it2->m_image, ".edf") == true) {
composeString+=" <image src=\"" + it2->m_image + "\" size=\"8,8mm\" distance-field='true'/>\n";
} else {
composeString+=" <image src=\"" + it2->m_image + "\" size=\"8,8mm\"/>\n";
}
composeString+=" <label exand=\"true,true\" fill=\"true,true\">" + it2->m_label + "</label>\n";
composeString+=" </sizer>\n";
composeString+="</composer>\n";
myButton->setSubWidget(ewol::widget::Composer::create(widget::Composer::String, composeString));
} else {
if (true == menuHaveImage) {
myButton->setSubWidget(ewol::widget::Composer::create(widget::Composer::String,
std::string("<composer expand=\"true,false\" fill=\"true,true\">\n") +
" <sizer mode=\"hori\" expand=\"true,false\" fill=\"true,true\" lock=\"true\">\n"
" <spacer min-size=\"8,0mm\"/>\n"
" <label exand=\"true,true\" fill=\"true,true\"><![CDATA[" + it2->m_label + "]]></label>\n"
" </sizer>\n"
"</composer>\n"));
} else {
std::shared_ptr<ewol::widget::Label> tmpLabel = widget::Label::create(std::string("<left>") + it2->m_label + "</left>\n");
if (tmpLabel != nullptr) {
tmpLabel->setExpand(bvec2(true,false));
tmpLabel->setFill(bvec2(true,true));
myButton->setSubWidget(tmpLabel);
}
}
}
// set the image if one is present ...
//myButton->registerOnEvent(shared_from_this(), "pressed", eventButtonPressed);
myButton->signalPressed.connect(shared_from_this(), std::bind(&ewol::widget::Menu::onButtonPressed, this, std::weak_ptr<ewol::widget::Button>(myButton)));
myButton->setExpand(bvec2(true,false));
myButton->setFill(bvec2(true,false));
// add it in the widget list
mySizer->subWidgetAdd(myButton);
it2->m_widgetPointer = myButton;
}
}
}
}
std::shared_ptr<ewol::widget::Windows> currentWindows = getWindows();
if (currentWindows == nullptr) {
EWOL_ERROR("Can not get the curent Windows...");
} else {
currentWindows->popUpWidgetPush(tmpContext);
}
}
return;
}
}
}
void ewol::widget::Menu::onReceiveMessage(const ewol::object::Message& _msg) {
/*
*/
}

View File

@ -13,6 +13,7 @@
#include <etk/types.h>
#include <ewol/debug.h>
#include <ewol/widget/Widget.h>
#include <ewol/widget/Button.h>
#include <ewol/widget/Sizer.h>
#include <ewol/widget/ContextMenu.h>
@ -55,6 +56,8 @@ namespace ewol {
void addSpacer();
// Derived function
virtual void onReceiveMessage(const ewol::object::Message& _msg);
private:
void onButtonPressed(std::weak_ptr<ewol::widget::Button> _button);
};
};
};

View File

@ -107,7 +107,7 @@ bool ewol::widget::Slider::onEventInput(const ewol::event::Input& _event) {
m_value = std::max(std::min(m_value, m_max), m_min);
if (oldValue != m_value) {
EWOL_DEBUG(" new value : " << m_value << " in [" << m_min << ".." << m_max << "]");
signalChange.emit(shared_from_this(), m_value);
signalChange.emit(m_value);
markToRedraw();
}
return true;

View File

@ -101,7 +101,7 @@ void ewol::widget::WSlider::subWidgetSelectSetVectorId(int32_t _id) {
}
if (_id != m_windowsDestination) {
m_windowsRequested = _id;
signalStartSlide.emit(shared_from_this());
signalStartSlide.emit();
periodicCallEnable();
markToRedraw();
}
@ -185,7 +185,7 @@ void ewol::widget::WSlider::periodicCall(const ewol::event::Time& _event) {
} else {
// end of periodic :
periodicCallDisable();
signalStopSlide.emit(shared_from_this());
signalStopSlide.emit();
}
m_windowsRequested = -1;
}

View File

@ -556,7 +556,7 @@ bool ewol::Widget::onEventShortCut(ewol::key::Special& _special,
sendMultiCast(m_localShortcut[iii]->generateEventId, m_localShortcut[iii]->eventData);
}
// send message direct to the current widget (in every case, really useful for some generic windows shortcut)
ewol::object::Message tmpMsg(shared_from_this(), m_localShortcut[iii]->generateEventId, m_localShortcut[iii]->eventData);
ewol::object::Message tmpMsg(m_localShortcut[iii]->generateEventId, m_localShortcut[iii]->eventData);
onReceiveMessage(tmpMsg);
} // no else
return true;

View File

@ -23,7 +23,6 @@ extern "C" {
#define __class__ "ColorChooser"
static const char * const eventColorBarHasChange = "event-color-bar-has-change";
static const char * const eventColorSpecificHasChange = "event-color-specific-has-change";
ewol::widget::ColorChooser::ColorChooser() :
@ -43,7 +42,7 @@ void ewol::widget::ColorChooser::init() {
sliderColor = etk::color::black;
m_widgetRed = ewol::widget::Slider::create();
m_widgetRed->registerOnEvent(shared_from_this(), "change", eventColorSpecificHasChange);
m_widgetRed->signalChange.bind(shared_from_this(), &ewol::widget::ColorChooser::onCallbackColorChangeRed);
m_widgetRed->setExpand(bvec2(true,false));
m_widgetRed->setFill(bvec2(true,false));
m_widgetRed->setMin(0);
@ -52,7 +51,7 @@ void ewol::widget::ColorChooser::init() {
m_widgetRed->setColor(sliderColor);
subWidgetAdd(m_widgetRed);
m_widgetGreen = ewol::widget::Slider::create();
m_widgetGreen->registerOnEvent(shared_from_this(), "change", eventColorSpecificHasChange);
m_widgetGreen->signalChange.bind(shared_from_this(), &ewol::widget::ColorChooser::onCallbackColorChangeGreen);
m_widgetGreen->setExpand(bvec2(true,false));
m_widgetGreen->setFill(bvec2(true,false));
m_widgetGreen->setMin(0);
@ -61,7 +60,7 @@ void ewol::widget::ColorChooser::init() {
m_widgetGreen->setMax(255);
subWidgetAdd(m_widgetGreen);
m_widgetBlue = ewol::widget::Slider::create();
m_widgetBlue->registerOnEvent(shared_from_this(), "change", eventColorSpecificHasChange);
m_widgetBlue->signalChange.bind(shared_from_this(), &ewol::widget::ColorChooser::onCallbackColorChangeBlue);
m_widgetBlue->setExpand(bvec2(true,false));
m_widgetBlue->setFill(bvec2(true,false));
m_widgetBlue->setMin(0);
@ -70,7 +69,7 @@ void ewol::widget::ColorChooser::init() {
m_widgetBlue->setMax(255);
subWidgetAdd(m_widgetBlue);
m_widgetAlpha = ewol::widget::Slider::create();
m_widgetAlpha->registerOnEvent(shared_from_this(), "change", eventColorSpecificHasChange);
m_widgetAlpha->signalChange.bind(shared_from_this(), &ewol::widget::ColorChooser::onCallbackColorChangeAlpha);
m_widgetAlpha->setExpand(bvec2(true,false));
m_widgetAlpha->setFill(bvec2(true,false));
m_widgetAlpha->setMin(0);
@ -112,9 +111,6 @@ etk::Color<> ewol::widget::ColorChooser::getColor() {
void ewol::widget::ColorChooser::onReceiveMessage(const ewol::object::Message& _msg) {
if (nullptr == _msg.getCaller()) {
return;
}
//EWOL_INFO("Receive Extern Event ... : widgetPointer=" << CallerObject << "\"" << eventId << "\" == > data=\"" << data << "\"" );
if (eventColorBarHasChange == _msg.getMessage()) {
// == > colorBar has change ...
@ -136,25 +132,35 @@ void ewol::widget::ColorChooser::onReceiveMessage(const ewol::object::Message& _
if (nullptr != m_widgetAlpha) {
m_widgetAlpha->setValue(m_currentColor.a());
}
signalChange.emit(shared_from_this(), m_currentColor);
} else if (eventColorSpecificHasChange == _msg.getMessage()) {
// Slider has changes his color == > get the one change ...
if (_msg.getCaller() == m_widgetRed) {
m_currentColor.setR(m_widgetRed->getValue());
}
if (_msg.getCaller() == m_widgetGreen) {
m_currentColor.setG(m_widgetGreen->getValue());
}
if (_msg.getCaller() == m_widgetBlue) {
m_currentColor.setB(m_widgetBlue->getValue());
}
if (_msg.getCaller() == m_widgetAlpha) {
m_currentColor.setA(m_widgetAlpha->getValue());
}
if (nullptr != m_widgetColorBar) {
m_widgetColorBar->setCurrentColor(m_currentColor);
}
signalChange.emit(shared_from_this(), m_currentColor);
signalChange.emit(m_currentColor);
}
};
void ewol::widget::ColorChooser::onCallbackColorChangeRed(const int32_t& _newColor) {
m_currentColor.setR(_newColor);
if (nullptr != m_widgetColorBar) {
m_widgetColorBar->setCurrentColor(m_currentColor);
}
signalChange.emit(m_currentColor);
}
void ewol::widget::ColorChooser::onCallbackColorChangeGreen(const int32_t& _newColor) {
m_currentColor.setG(_newColor);
if (nullptr != m_widgetColorBar) {
m_widgetColorBar->setCurrentColor(m_currentColor);
}
signalChange.emit(m_currentColor);
}
void ewol::widget::ColorChooser::onCallbackColorChangeBlue(const int32_t& _newColor) {
m_currentColor.setB(_newColor);
if (nullptr != m_widgetColorBar) {
m_widgetColorBar->setCurrentColor(m_currentColor);
}
signalChange.emit(m_currentColor);
}
void ewol::widget::ColorChooser::onCallbackColorChangeAlpha(const int32_t& _newColor) {
m_currentColor.setA(_newColor);
if (nullptr != m_widgetColorBar) {
m_widgetColorBar->setCurrentColor(m_currentColor);
}
signalChange.emit(m_currentColor);
}

View File

@ -47,6 +47,10 @@ namespace ewol {
std::shared_ptr<ewol::widget::Slider> m_widgetBlue;
std::shared_ptr<ewol::widget::Slider> m_widgetAlpha;
etk::Color<> m_currentColor;
void onCallbackColorChangeRed(const int32_t& _newColor);
void onCallbackColorChangeGreen(const int32_t& _newColor);
void onCallbackColorChangeBlue(const int32_t& _newColor);
void onCallbackColorChangeAlpha(const int32_t& _newColor);
};
};
};

View File

@ -164,7 +164,7 @@ void ewol::widget::FileChooser::onReceiveMessage(const ewol::object::Message& _m
parameterSetOnWidgetNamed("[" + etk::to_string(getId()) + "]file-shooser:list-files", "select", m_file);
} else if (ewolEventFileChooserCancel == _msg.getMessage()) {
// == > Auto remove ...
signalCancel.emit(shared_from_this());
signalCancel.emit();
autoDestroy();
} else if (_msg.getMessage() == ewolEventFileChooserHidenFileChange) {
if (_msg.getData() == "true") {
@ -195,7 +195,7 @@ void ewol::widget::FileChooser::onReceiveMessage(const ewol::object::Message& _m
setFileName(_msg.getData());
}
EWOL_VERBOSE(" generate a fiel opening : \"" << m_folder << "\" / \"" << m_file << "\"");
signalValidate.emit(shared_from_this(), getCompleateFileName());
signalValidate.emit(getCompleateFileName());
autoDestroy();
} else if(_msg.getMessage() == ewolEventFileChooserHome) {
std::string tmpUserFolder = etk::getUserHomeFolder();

View File

@ -200,7 +200,7 @@ void ewol::widget::Parameter::onReceiveMessage(const ewol::object::Message& _msg
EWOL_DEBUG("event on the parameter : " << _msg);
if (_msg.getMessage() == ewolEventMenuclosed) {
// inform that the parameter windows is closed
signalClose.emit(shared_from_this());
signalClose.emit();
// close this widget ...
autoDestroy();
} else if (_msg.getMessage() == ewolEventParameterSave) {

View File

@ -190,7 +190,7 @@ bool ewol::widget::ParameterList::onEventInput(const ewol::event::Input& _event)
if (rawID >= 0 && (size_t)rawID < m_list.size()) {
if (m_list[rawID]!=nullptr) {
if (m_list[rawID]->m_refId >= 0) {
signalSelect.emit(shared_from_this(), m_list[rawID]->m_refId);
signalSelect.emit(m_list[rawID]->m_refId);
m_idSelected = rawID;
markToRedraw();
return true;