[DEV] add an API to create widget with XML
This commit is contained in:
parent
7273b617ff
commit
b595794a0d
@ -48,6 +48,22 @@ void ewol::widget::Container::setSubWidget(std::shared_ptr<ewol::Widget> _newWid
|
|||||||
requestUpdateSize();
|
requestUpdateSize();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ewol::widget::Container::subWidgetReplace(const std::shared_ptr<ewol::Widget>& _oldWidget,
|
||||||
|
const std::shared_ptr<ewol::Widget>& _newWidget) {
|
||||||
|
if (m_subWidget != _oldWidget) {
|
||||||
|
EWOL_WARNING("Request replace with a wrong old widget");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
m_subWidget->removeParent();
|
||||||
|
m_subWidget.reset();
|
||||||
|
m_subWidget = _newWidget;
|
||||||
|
if (m_subWidget != nullptr) {
|
||||||
|
m_subWidget->setParent(shared_from_this());
|
||||||
|
}
|
||||||
|
markToRedraw();
|
||||||
|
requestUpdateSize();
|
||||||
|
}
|
||||||
|
|
||||||
void ewol::widget::Container::subWidgetRemove() {
|
void ewol::widget::Container::subWidgetRemove() {
|
||||||
if (m_subWidget != nullptr) {
|
if (m_subWidget != nullptr) {
|
||||||
m_subWidget->removeParent();
|
m_subWidget->removeParent();
|
||||||
@ -163,7 +179,7 @@ bool ewol::widget::Container::loadXML(const std::shared_ptr<const exml::Element>
|
|||||||
EWOL_ERROR("(l "<<pNode->getPos()<<") Unknown basic node=\"" << widgetName << "\" not in : [" << getWidgetManager().list() << "]" );
|
EWOL_ERROR("(l "<<pNode->getPos()<<") Unknown basic node=\"" << widgetName << "\" not in : [" << getWidgetManager().list() << "]" );
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (nullptr != getSubWidget()) {
|
if (getSubWidget() != nullptr) {
|
||||||
EWOL_ERROR("(l "<<pNode->getPos()<<") " << __class__ << " Can only have one subWidget ??? node=\"" << widgetName << "\"" );
|
EWOL_ERROR("(l "<<pNode->getPos()<<") " << __class__ << " Can only have one subWidget ??? node=\"" << widgetName << "\"" );
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -44,6 +44,13 @@ namespace ewol {
|
|||||||
* @param[in] _newWidget The widget to add.
|
* @param[in] _newWidget The widget to add.
|
||||||
*/
|
*/
|
||||||
void setSubWidget(std::shared_ptr<ewol::Widget> _newWidget);
|
void setSubWidget(std::shared_ptr<ewol::Widget> _newWidget);
|
||||||
|
/**
|
||||||
|
* @brief Replace a old subwidget with a new one.
|
||||||
|
* @param[in] _oldWidget The widget to replace.
|
||||||
|
* @param[in] _newWidget The widget to set.
|
||||||
|
*/
|
||||||
|
virtual void subWidgetReplace(const std::shared_ptr<ewol::Widget>& _oldWidget,
|
||||||
|
const std::shared_ptr<ewol::Widget>& _newWidget);
|
||||||
/**
|
/**
|
||||||
* @brief remove the subWidget node (async).
|
* @brief remove the subWidget node (async).
|
||||||
*/
|
*/
|
||||||
|
@ -44,6 +44,29 @@ void ewol::widget::Container2::setSubWidget(std::shared_ptr<ewol::Widget> _newWi
|
|||||||
requestUpdateSize();
|
requestUpdateSize();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ewol::widget::Container2::subWidgetReplace(const std::shared_ptr<ewol::Widget>& _oldWidget,
|
||||||
|
const std::shared_ptr<ewol::Widget>& _newWidget) {
|
||||||
|
bool haveChange = false;
|
||||||
|
for (size_t iii=0; iii<2; ++iii) {
|
||||||
|
if (m_subWidget[iii] != _oldWidget) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
m_subWidget[iii]->removeParent();
|
||||||
|
m_subWidget[iii].reset();
|
||||||
|
m_subWidget[iii] = _newWidget;
|
||||||
|
if (m_subWidget[iii] != nullptr) {
|
||||||
|
m_subWidget[iii]->setParent(shared_from_this());
|
||||||
|
}
|
||||||
|
haveChange = true;
|
||||||
|
}
|
||||||
|
if (haveChange == false) {
|
||||||
|
EWOL_WARNING("Request replace with a wrong old widget");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
markToRedraw();
|
||||||
|
requestUpdateSize();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void ewol::widget::Container2::subWidgetRemove(int32_t _idWidget) {
|
void ewol::widget::Container2::subWidgetRemove(int32_t _idWidget) {
|
||||||
if (m_subWidget[_idWidget] != nullptr) {
|
if (m_subWidget[_idWidget] != nullptr) {
|
||||||
|
@ -151,6 +151,13 @@ namespace ewol {
|
|||||||
}
|
}
|
||||||
return _id;
|
return _id;
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* @brief Replace a old subwidget with a new one.
|
||||||
|
* @param[in] _oldWidget The widget to replace.
|
||||||
|
* @param[in] _newWidget The widget to set.
|
||||||
|
*/
|
||||||
|
virtual void subWidgetReplace(const std::shared_ptr<ewol::Widget>& _oldWidget,
|
||||||
|
const std::shared_ptr<ewol::Widget>& _newWidget);
|
||||||
public: // Derived function
|
public: // Derived function
|
||||||
virtual void systemDraw(const ewol::DrawProperty& _displayProp);
|
virtual void systemDraw(const ewol::DrawProperty& _displayProp);
|
||||||
virtual void onRegenerateDisplay();
|
virtual void onRegenerateDisplay();
|
||||||
|
@ -56,14 +56,38 @@ void ewol::widget::ContainerN::lockExpand(const bvec2& _lockExpand) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void ewol::widget::ContainerN::subWidgetReplace(const std::shared_ptr<ewol::Widget>& _oldWidget,
|
||||||
|
const std::shared_ptr<ewol::Widget>& _newWidget) {
|
||||||
|
bool haveChange = false;
|
||||||
|
for (auto &it : m_subWidget) {
|
||||||
|
if (it != _oldWidget) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
EWOL_WARNING("Remove old");
|
||||||
|
it->removeParent();
|
||||||
|
it.reset();
|
||||||
|
EWOL_WARNING("Set New");
|
||||||
|
if (_newWidget != nullptr) {
|
||||||
|
EWOL_WARNING("set parrent");
|
||||||
|
_newWidget->setParent(shared_from_this());
|
||||||
|
}
|
||||||
|
it = _newWidget;
|
||||||
|
haveChange = true;
|
||||||
|
}
|
||||||
|
if (haveChange == false) {
|
||||||
|
EWOL_WARNING("Request replace with a wrong old widget");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
markToRedraw();
|
||||||
|
requestUpdateSize();
|
||||||
|
}
|
||||||
|
|
||||||
int32_t ewol::widget::ContainerN::subWidgetAdd(std::shared_ptr<ewol::Widget> _newWidget) {
|
int32_t ewol::widget::ContainerN::subWidgetAdd(std::shared_ptr<ewol::Widget> _newWidget) {
|
||||||
if (nullptr == _newWidget) {
|
if (_newWidget == nullptr) {
|
||||||
EWOL_ERROR("[" << getId() << "] {" << getObjectType() << "} Try to add An empty Widget ... ");
|
EWOL_ERROR("[" << getId() << "] {" << getObjectType() << "} Try to add An empty Widget ... ");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
if (_newWidget != nullptr) {
|
_newWidget->setParent(shared_from_this());
|
||||||
_newWidget->setParent(shared_from_this());
|
|
||||||
}
|
|
||||||
m_subWidget.push_back(_newWidget);
|
m_subWidget.push_back(_newWidget);
|
||||||
markToRedraw();
|
markToRedraw();
|
||||||
requestUpdateSize();
|
requestUpdateSize();
|
||||||
|
@ -54,6 +54,13 @@ namespace ewol {
|
|||||||
* @brief remove all sub element from the widget (delayed to prevent remove in the callbback).
|
* @brief remove all sub element from the widget (delayed to prevent remove in the callbback).
|
||||||
*/
|
*/
|
||||||
virtual void subWidgetRemoveAllDelayed();
|
virtual void subWidgetRemoveAllDelayed();
|
||||||
|
/**
|
||||||
|
* @brief Replace a old subwidget with a new one.
|
||||||
|
* @param[in] _oldWidget The widget to replace.
|
||||||
|
* @param[in] _newWidget The widget to set.
|
||||||
|
*/
|
||||||
|
virtual void subWidgetReplace(const std::shared_ptr<ewol::Widget>& _oldWidget,
|
||||||
|
const std::shared_ptr<ewol::Widget>& _newWidget);
|
||||||
/**
|
/**
|
||||||
* @brief add at end position a Widget (note : This system use an inverted phylisophie (button to top, and left to right)
|
* @brief add at end position a Widget (note : This system use an inverted phylisophie (button to top, and left to right)
|
||||||
* @param[in] _newWidget the element pointer
|
* @param[in] _newWidget the element pointer
|
||||||
|
Loading…
x
Reference in New Issue
Block a user