[DEV] remove caller in signal emit
This commit is contained in:
parent
12c4a88c88
commit
e3f71e5201
@ -63,7 +63,7 @@ ewol::Object::~Object() {
|
||||
|
||||
void ewol::Object::init() {
|
||||
getObjectManager().add(shared_from_this());
|
||||
parameterDisplay();
|
||||
//parameterDisplay();
|
||||
m_objectHasBeenInit = true;
|
||||
}
|
||||
|
||||
|
@ -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.
|
||||
|
@ -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;
|
||||
|
@ -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();
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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) {
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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");
|
||||
|
@ -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) {
|
||||
/*
|
||||
*/
|
||||
}
|
||||
|
||||
|
||||
|
@ -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);
|
||||
};
|
||||
};
|
||||
};
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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);
|
||||
};
|
||||
};
|
||||
};
|
||||
|
@ -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();
|
||||
|
@ -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) {
|
||||
|
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user