[DEV] WSlider list correction ==> might be rewrite with correct refs

This commit is contained in:
Edouard DUPIN 2014-05-23 21:35:37 +02:00
parent e6a5c9c85f
commit 49c3036080
2 changed files with 109 additions and 94 deletions

View File

@ -63,47 +63,47 @@ void ewol::widget::WSlider::calculateSize(const vec2& _availlable) {
ewol::widget::ContainerN::calculateSize(_availlable); ewol::widget::ContainerN::calculateSize(_availlable);
if (m_windowsDestination == m_windowsSources) { if (m_windowsDestination == m_windowsSources) {
int32_t iii = m_windowsDestination; auto it = m_subWidget.begin();
if (iii < (int32_t)m_subWidget.size()) { std::advance(it, m_windowsDestination);
if (nullptr != m_subWidget[iii]) { if ( it != m_subWidget.end()
m_subWidget[iii]->setOrigin(m_origin+m_offset); && *it != nullptr) {
m_subWidget[iii]->calculateSize(m_size); (*it)->setOrigin(m_origin+m_offset);
} (*it)->calculateSize(m_size);
} }
} else { } else {
float factor = -1.0f; float factor = -1.0f;
if (m_windowsSources < m_windowsDestination) { if (m_windowsSources < m_windowsDestination) {
factor = 1.0f; factor = 1.0f;
} }
int32_t iii = m_windowsSources; auto it = m_subWidget.begin();
if (iii < (int32_t)m_subWidget.size()) { std::advance(it, m_windowsSources);
if (nullptr != m_subWidget[iii]) { if ( it != m_subWidget.end()
&& *it != nullptr) {
if (m_transitionSlide == sladingTransitionHori) { if (m_transitionSlide == sladingTransitionHori) {
m_subWidget[iii]->setOrigin( vec2(m_origin.x() + factor*(m_size.x()*m_slidingProgress), (*it)->setOrigin( vec2(m_origin.x() + factor*(m_size.x()*m_slidingProgress),
m_origin.y()) m_origin.y())
+ m_offset); + m_offset);
} else { } else {
m_subWidget[iii]->setOrigin( vec2(m_origin.x(), (*it)->setOrigin( vec2(m_origin.x(),
m_origin.y() + factor*(m_size.y()*m_slidingProgress)) m_origin.y() + factor*(m_size.y()*m_slidingProgress))
+ m_offset); + m_offset);
} }
m_subWidget[iii]->calculateSize(m_size); (*it)->calculateSize(m_size);
} }
} it = m_subWidget.begin();
iii = m_windowsDestination; std::advance(it, m_windowsDestination);
if (iii < (int32_t)m_subWidget.size()) { if ( it != m_subWidget.end()
if (nullptr != m_subWidget[iii]) { && *it != nullptr) {
if (m_transitionSlide == sladingTransitionHori) { if (m_transitionSlide == sladingTransitionHori) {
m_subWidget[iii]->setOrigin( vec2(m_origin.x() + factor*(m_size.x()*m_slidingProgress - m_size.x()), (*it)->setOrigin( vec2(m_origin.x() + factor*(m_size.x()*m_slidingProgress - m_size.x()),
m_origin.y()) m_origin.y())
+ m_offset); + m_offset);
} else { } else {
m_subWidget[iii]->setOrigin( vec2(m_origin.x(), (*it)->setOrigin( vec2(m_origin.x(),
m_origin.y() + factor*(m_size.y()*m_slidingProgress - m_size.y())) m_origin.y() + factor*(m_size.y()*m_slidingProgress - m_size.y()))
+ m_offset); + m_offset);
} }
m_subWidget[iii]->calculateSize(m_size); (*it)->calculateSize(m_size);
}
} }
} }
markToRedraw(); markToRedraw();
@ -123,31 +123,36 @@ void ewol::widget::WSlider::subWidgetSelectSetVectorId(int32_t _id) {
} }
void ewol::widget::WSlider::subWidgetSelectSet(int32_t _id) { void ewol::widget::WSlider::subWidgetSelectSet(int32_t _id) {
int32_t elementID = -1; int32_t elementID = 0;
// search element in the list : // search element in the list :
for (size_t iii=0 ; iii<m_subWidget.size() ; iii++) { for (auto it : m_subWidget) {
if (m_subWidget[iii] != nullptr) { elementID ++;
if (m_subWidget[iii]->getId() == _id) { if (it != nullptr) {
elementID = iii; if (it->getId() == _id) {
break; break;
} }
} }
} }
if (elementID < m_subWidget.size()) {
subWidgetSelectSetVectorId(elementID); subWidgetSelectSetVectorId(elementID);
} else {
subWidgetSelectSetVectorId(-1);
}
} }
void ewol::widget::WSlider::subWidgetSelectSet(ewol::object::Shared<ewol::Widget> _widgetPointer) { void ewol::widget::WSlider::subWidgetSelectSet(const ewol::object::Shared<ewol::Widget>& _widgetPointer) {
if (_widgetPointer == nullptr) { if (_widgetPointer == nullptr) {
EWOL_ERROR("Can not change to a widget nullptr"); EWOL_ERROR("Can not change to a widget nullptr");
return; return;
} }
for (size_t iii=0; iii<m_subWidget.size(); iii++) { int32_t iii = 0;
if (m_subWidget[iii] != nullptr) { for (auto it : m_subWidget) {
if (m_subWidget[iii] == _widgetPointer) { if ( it != nullptr
&& it == _widgetPointer) {
subWidgetSelectSetVectorId(iii); subWidgetSelectSetVectorId(iii);
return; return;
} }
} iii++;
} }
EWOL_ERROR("Can not change to a widget not present"); EWOL_ERROR("Can not change to a widget not present");
} }
@ -157,13 +162,14 @@ void ewol::widget::WSlider::subWidgetSelectSet(const std::string& _widgetName) {
EWOL_ERROR("Can not change to a widget with no name (input)"); EWOL_ERROR("Can not change to a widget with no name (input)");
return; return;
} }
for (size_t iii=0; iii<m_subWidget.size(); iii++) { int32_t iii = 0;
if (m_subWidget[iii] != nullptr) { for (auto it : m_subWidget) {
if (m_subWidget[iii]->getName() == _widgetName) { if ( it != nullptr
&& it->getName() == _widgetName) {
subWidgetSelectSetVectorId(iii); subWidgetSelectSetVectorId(iii);
return; return;
} }
} iii++;
} }
EWOL_ERROR("Can not change to a widget not present"); EWOL_ERROR("Can not change to a widget not present");
} }
@ -222,51 +228,51 @@ void ewol::widget::WSlider::systemDraw(const ewol::DrawProperty& _displayProp) {
if (m_windowsDestination == m_windowsSources) { if (m_windowsDestination == m_windowsSources) {
//EWOL_DEBUG("Draw : " << m_windowsDestination); //EWOL_DEBUG("Draw : " << m_windowsDestination);
int32_t iii = m_windowsDestination; auto it = m_subWidget.begin();
if (iii >= 0 || (size_t)iii < m_subWidget.size()) { std::advance(it, m_windowsDestination);
if (nullptr != m_subWidget[iii]) { if ( it != m_subWidget.end()
m_subWidget[iii]->systemDraw(prop); && *it != nullptr) {
} (*it)->systemDraw(prop);
} }
} else { } else {
//EWOL_DEBUG("Draw : " << m_windowsSources << "=>" << m_windowsDestination << "progress=" << ((float)m_slidingProgress/1000.) ); //EWOL_DEBUG("Draw : " << m_windowsSources << "=>" << m_windowsDestination << "progress=" << ((float)m_slidingProgress/1000.) );
// draw Sources : // draw Sources :
int32_t iii = m_windowsSources; auto it = m_subWidget.begin();
if (iii >= 0 || (size_t)iii < m_subWidget.size()) { std::advance(it, m_windowsSources);
if (nullptr != m_subWidget[iii]) { if ( it != m_subWidget.end()
m_subWidget[iii]->systemDraw(prop); && *it != nullptr) {
} (*it)->systemDraw(prop);
} }
// draw Destination : // draw Destination :
iii = m_windowsDestination; it = m_subWidget.begin();
if (iii >= 0 || (size_t)iii < m_subWidget.size()) { std::advance(it, m_windowsDestination);
if (nullptr != m_subWidget[iii]) { if ( it != m_subWidget.end()
m_subWidget[iii]->systemDraw(prop); && *it != nullptr) {
} (*it)->systemDraw(prop);
} }
} }
} }
void ewol::widget::WSlider::onRegenerateDisplay() { void ewol::widget::WSlider::onRegenerateDisplay() {
if (m_windowsDestination == m_windowsSources) { if (m_windowsDestination == m_windowsSources) {
int32_t iii = m_windowsDestination; auto it = m_subWidget.begin();
if (iii >= 0 || (size_t)iii < m_subWidget.size()) { std::advance(it, m_windowsDestination);
if (nullptr != m_subWidget[iii]) { if ( it != m_subWidget.end()
m_subWidget[iii]->onRegenerateDisplay(); && *it != nullptr) {
} (*it)->onRegenerateDisplay();
} }
} else { } else {
int32_t iii = m_windowsSources; auto it = m_subWidget.begin();
if (iii >= 0 || (size_t)iii < m_subWidget.size()) { std::advance(it, m_windowsSources);
if (nullptr != m_subWidget[iii]) { if ( it != m_subWidget.end()
m_subWidget[iii]->onRegenerateDisplay(); && *it != nullptr) {
} (*it)->onRegenerateDisplay();
}
iii = m_windowsDestination;
if (iii >= 0 || (size_t)iii < m_subWidget.size()) {
if (nullptr != m_subWidget[iii]) {
m_subWidget[iii]->onRegenerateDisplay();
} }
it = m_subWidget.begin();
std::advance(it, m_windowsDestination);
if ( it != m_subWidget.end()
&& *it != nullptr) {
(*it)->onRegenerateDisplay();
} }
} }
} }
@ -320,13 +326,16 @@ ewol::object::Shared<ewol::Widget> ewol::widget::WSlider::getWidgetAtPos(const v
return nullptr; return nullptr;
} }
if (m_windowsDestination == m_windowsSources) { if (m_windowsDestination == m_windowsSources) {
if (m_windowsDestination < (int64_t)m_subWidget.size()) { auto it = m_subWidget.begin();
vec2 tmpSize = m_subWidget[m_windowsDestination]->getSize(); std::advance(it, m_windowsDestination);
vec2 tmpOrigin = m_subWidget[m_windowsDestination]->getOrigin(); if ( it != m_subWidget.end()
&& *it != nullptr) {
vec2 tmpSize = (*it)->getSize();
vec2 tmpOrigin = (*it)->getOrigin();
if( (tmpOrigin.x() <= _pos.x() && tmpOrigin.x() + tmpSize.x() >= _pos.x()) if( (tmpOrigin.x() <= _pos.x() && tmpOrigin.x() + tmpSize.x() >= _pos.x())
&& (tmpOrigin.y() <= _pos.y() && tmpOrigin.y() + tmpSize.y() >= _pos.y()) ) && (tmpOrigin.y() <= _pos.y() && tmpOrigin.y() + tmpSize.y() >= _pos.y()) )
{ {
ewol::object::Shared<ewol::Widget> tmpWidget = m_subWidget[m_windowsDestination]->getWidgetAtPos(_pos); ewol::object::Shared<ewol::Widget> tmpWidget = (*it)->getWidgetAtPos(_pos);
if (nullptr != tmpWidget) { if (nullptr != tmpWidget) {
return tmpWidget; return tmpWidget;
} }
@ -334,26 +343,32 @@ ewol::object::Shared<ewol::Widget> ewol::widget::WSlider::getWidgetAtPos(const v
} }
} }
} else { } else {
if (m_windowsDestination < (int64_t)m_subWidget.size()) { auto it = m_subWidget.begin();
vec2 tmpSize = m_subWidget[m_windowsDestination]->getSize(); std::advance(it, m_windowsDestination);
vec2 tmpOrigin = m_subWidget[m_windowsDestination]->getOrigin(); if ( it != m_subWidget.end()
&& *it != nullptr) {
vec2 tmpSize = (*it)->getSize();
vec2 tmpOrigin = (*it)->getOrigin();
if( (tmpOrigin.x() <= _pos.x() && tmpOrigin.x() + tmpSize.x() >= _pos.x()) if( (tmpOrigin.x() <= _pos.x() && tmpOrigin.x() + tmpSize.x() >= _pos.x())
&& (tmpOrigin.y() <= _pos.y() && tmpOrigin.y() + tmpSize.y() >= _pos.y()) ) && (tmpOrigin.y() <= _pos.y() && tmpOrigin.y() + tmpSize.y() >= _pos.y()) )
{ {
ewol::object::Shared<ewol::Widget> tmpWidget = m_subWidget[m_windowsDestination]->getWidgetAtPos(_pos); ewol::object::Shared<ewol::Widget> tmpWidget = (*it)->getWidgetAtPos(_pos);
if (nullptr != tmpWidget) { if (nullptr != tmpWidget) {
return tmpWidget; return tmpWidget;
} }
return nullptr; return nullptr;
} }
} }
if (m_windowsSources < (int64_t)m_subWidget.size()) { it = m_subWidget.begin();
vec2 tmpSize = m_subWidget[m_windowsSources]->getSize(); std::advance(it, m_windowsSources);
vec2 tmpOrigin = m_subWidget[m_windowsSources]->getOrigin(); if ( it != m_subWidget.end()
&& *it != nullptr) {
vec2 tmpSize = (*it)->getSize();
vec2 tmpOrigin = (*it)->getOrigin();
if( (tmpOrigin.x() <= _pos.x() && tmpOrigin.x() + tmpSize.x() >= _pos.x()) if( (tmpOrigin.x() <= _pos.x() && tmpOrigin.x() + tmpSize.x() >= _pos.x())
&& (tmpOrigin.y() <= _pos.y() && tmpOrigin.y() + tmpSize.y() >= _pos.y()) ) && (tmpOrigin.y() <= _pos.y() && tmpOrigin.y() + tmpSize.y() >= _pos.y()) )
{ {
ewol::object::Shared<ewol::Widget> tmpWidget = m_subWidget[m_windowsSources]->getWidgetAtPos(_pos); ewol::object::Shared<ewol::Widget> tmpWidget = (*it)->getWidgetAtPos(_pos);
if (nullptr != tmpWidget) { if (nullptr != tmpWidget) {
return tmpWidget; return tmpWidget;
} }

View File

@ -58,7 +58,7 @@ namespace ewol {
* @brief Select a new subwidget to display * @brief Select a new subwidget to display
* @param[in] _widgetPointer Pointer on the widget selected (must be added before) * @param[in] _widgetPointer Pointer on the widget selected (must be added before)
*/ */
void subWidgetSelectSet(ewol::object::Shared<ewol::Widget> _widgetPointer); void subWidgetSelectSet(const ewol::object::Shared<ewol::Widget>& _widgetPointer);
/** /**
* @brief Select a new subwidget to display * @brief Select a new subwidget to display
* @param[in] _widgetName Name of the subwidget name * @param[in] _widgetName Name of the subwidget name