[DEV] end composer and add a container obstraction
This commit is contained in:
parent
3bb4c6a700
commit
3ff3c38710
2
external/etk
vendored
2
external/etk
vendored
@ -1 +1 @@
|
|||||||
Subproject commit 2b19ef4bc89e82906865244e056a138c937f88de
|
Subproject commit 32da0ffb78f9ff9e3ede49c87a9fd5c19e23136b
|
@ -100,6 +100,7 @@ void widget::Button::SetSubWidget(ewol::Widget* subWidget)
|
|||||||
m_subWidget[idWidget] = subWidget;
|
m_subWidget[idWidget] = subWidget;
|
||||||
// element change ... We need to recalculate all the subElments :
|
// element change ... We need to recalculate all the subElments :
|
||||||
ewol::RequestUpdateSize();
|
ewol::RequestUpdateSize();
|
||||||
|
MarkToRedraw();
|
||||||
}
|
}
|
||||||
|
|
||||||
void widget::Button::SetSubWidgetToggle(ewol::Widget* subWidget)
|
void widget::Button::SetSubWidgetToggle(ewol::Widget* subWidget)
|
||||||
|
@ -12,34 +12,33 @@
|
|||||||
#include <etk/os/FSNode.h>
|
#include <etk/os/FSNode.h>
|
||||||
#include <ewol/widget/WidgetManager.h>
|
#include <ewol/widget/WidgetManager.h>
|
||||||
|
|
||||||
widget::Composer::Composer(void) :
|
|
||||||
m_subWidget(NULL)
|
widget::Composer::Composer(void)
|
||||||
{
|
{
|
||||||
// nothing to do ...
|
// nothing to do ...
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
widget::Composer::Composer(widget::Composer::composerMode_te mode, const etk::UString& fileName)
|
||||||
|
{
|
||||||
|
switch(mode) {
|
||||||
|
case widget::Composer::None:
|
||||||
|
// nothing to do ...
|
||||||
|
break;
|
||||||
|
case widget::Composer::String:
|
||||||
|
LoadFromString(fileName);
|
||||||
|
break;
|
||||||
|
case widget::Composer::File:
|
||||||
|
LoadFromFile(fileName);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
widget::Composer::~Composer(void)
|
widget::Composer::~Composer(void)
|
||||||
{
|
{
|
||||||
Clean();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void widget::Composer::Clean(void)
|
|
||||||
{
|
|
||||||
if (NULL != m_subWidget) {
|
|
||||||
delete(m_subWidget);
|
|
||||||
// might have been destroy first here :
|
|
||||||
if (m_subWidget!=NULL) {
|
|
||||||
EWOL_ERROR("Composer : An error Occured when removing main node");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// nothing else to do .. all node in the list might have been removed now ...
|
|
||||||
if (0!=m_list.Size()) {
|
|
||||||
EWOL_ERROR("the subName element in the list are incorect...");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
bool widget::Composer::LoadFromFile(const etk::UString& _fileName)
|
bool widget::Composer::LoadFromFile(const etk::UString& _fileName)
|
||||||
{
|
{
|
||||||
// open the curent File
|
// open the curent File
|
||||||
@ -98,7 +97,7 @@ bool widget::Composer::CommonLoadXML(const char* data)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
// remove previous elements ...
|
// remove previous elements ...
|
||||||
Clean();
|
RemoveSubWidget();
|
||||||
ewol::Widget::LoadXML(root);
|
ewol::Widget::LoadXML(root);
|
||||||
|
|
||||||
for(TiXmlNode * pNode = root->FirstChild() ;
|
for(TiXmlNode * pNode = root->FirstChild() ;
|
||||||
@ -113,7 +112,7 @@ bool widget::Composer::CommonLoadXML(const char* data)
|
|||||||
EWOL_ERROR("(l "<<pNode->Row()<<") Unknown basic node=\"" << widgetName << "\" not in : [" << ewol::widgetManager::List() << "]" );
|
EWOL_ERROR("(l "<<pNode->Row()<<") Unknown basic node=\"" << widgetName << "\" not in : [" << ewol::widgetManager::List() << "]" );
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (NULL != m_subWidget) {
|
if (NULL != GetSubWidget()) {
|
||||||
EWOL_ERROR("(l "<<pNode->Row()<<") " << __class__ << " Can only have one subWidget ??? node=\"" << widgetName << "\"" );
|
EWOL_ERROR("(l "<<pNode->Row()<<") " << __class__ << " Can only have one subWidget ??? node=\"" << widgetName << "\"" );
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -122,6 +121,8 @@ bool widget::Composer::CommonLoadXML(const char* data)
|
|||||||
EWOL_ERROR ("(l "<<pNode->Row()<<") Can not create the widget : \"" << widgetName << "\"");
|
EWOL_ERROR ("(l "<<pNode->Row()<<") Can not create the widget : \"" << widgetName << "\"");
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
// add widget :
|
||||||
|
SetSubWidget(tmpWidget);
|
||||||
if (false == tmpWidget->LoadXML(pNode)) {
|
if (false == tmpWidget->LoadXML(pNode)) {
|
||||||
EWOL_ERROR ("(l "<<pNode->Row()<<") can not load widget properties : \"" << widgetName << "\"");
|
EWOL_ERROR ("(l "<<pNode->Row()<<") can not load widget properties : \"" << widgetName << "\"");
|
||||||
return false;
|
return false;
|
||||||
@ -131,50 +132,3 @@ bool widget::Composer::CommonLoadXML(const char* data)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
ewol::Widget* widget::Composer::GetWidgetNamed(const etk::UString& widgetName)
|
|
||||||
{
|
|
||||||
for (int32_t iii=0; iii<m_list.Size(); iii++) {
|
|
||||||
if (m_list[iii].widgetName == widgetName) {
|
|
||||||
return m_list[iii].widget;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
void widget::Composer::OnObjectRemove(ewol::EObject* removeObject)
|
|
||||||
{
|
|
||||||
for (int32_t iii=0; iii<m_list.Size(); iii++) {
|
|
||||||
if (m_list[iii].widget == removeObject) {
|
|
||||||
m_list.Erase(iii);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (m_subWidget==removeObject) {
|
|
||||||
m_subWidget=NULL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void widget::Composer::OnDraw(ewol::DrawProperty& displayProp)
|
|
||||||
{
|
|
||||||
if (NULL!=m_subWidget) {
|
|
||||||
m_subWidget->GenDraw(displayProp);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void widget::Composer::CalculateSize(const vec2& availlable)
|
|
||||||
{
|
|
||||||
if (NULL!=m_subWidget) {
|
|
||||||
m_subWidget->CalculateSize(availlable);
|
|
||||||
// copy all sub parameters:
|
|
||||||
m_hide = m_subWidget->IsHide();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
void widget::Composer::CalculateMinMaxSize(void)
|
|
||||||
{
|
|
||||||
if (NULL!=m_subWidget) {
|
|
||||||
m_subWidget->CalculateMinMaxSize();
|
|
||||||
// copy all sub parameters :
|
|
||||||
m_hide = m_subWidget->IsHide();
|
|
||||||
m_userFill = m_subWidget->CanFill();
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
@ -11,36 +11,36 @@
|
|||||||
|
|
||||||
#include <etk/types.h>
|
#include <etk/types.h>
|
||||||
#include <ewol/debug.h>
|
#include <ewol/debug.h>
|
||||||
#include <ewol/widget/Widget.h>
|
#include <ewol/widget/Container.h>
|
||||||
|
|
||||||
namespace widget
|
namespace widget
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* @brief the composer widget is a widget that create a link on a string.file to parse the data and generate some widget tree
|
* @brief the composer widget is a widget that create a link on a string.file to parse the data and generate some widget tree
|
||||||
*/
|
*/
|
||||||
class Composer : public ewol::Widget
|
class Composer : public widget::Container
|
||||||
{
|
{
|
||||||
private:
|
public:
|
||||||
class ComposerWidgetListNamed {
|
typedef enum {
|
||||||
public:
|
None,
|
||||||
ewol::Widget* widget;
|
String,
|
||||||
etk::UString widgetName;
|
File
|
||||||
};
|
} composerMode_te;
|
||||||
ewol::Widget* m_subWidget;
|
|
||||||
etk::Vector<ComposerWidgetListNamed> m_list;
|
|
||||||
public:
|
public:
|
||||||
/**
|
/**
|
||||||
* @brief Constructor
|
* @brief Constructor
|
||||||
*/
|
*/
|
||||||
Composer(void);
|
Composer(void);
|
||||||
|
/**
|
||||||
|
* @brief Constructor
|
||||||
|
* @param[in] mode mode of parsing the string
|
||||||
|
* @param[in] data File/directString data to generate compositing of the widget..
|
||||||
|
*/
|
||||||
|
Composer(composerMode_te mode, const etk::UString& data);
|
||||||
/**
|
/**
|
||||||
* @brief Destructor
|
* @brief Destructor
|
||||||
*/
|
*/
|
||||||
~Composer(void);
|
~Composer(void);
|
||||||
/**
|
|
||||||
* @brief Remove all sub elements
|
|
||||||
*/
|
|
||||||
void Clean(void);
|
|
||||||
/**
|
/**
|
||||||
* @brief Load a composition with a file
|
* @brief Load a composition with a file
|
||||||
* @param[in] fileName Name of the file
|
* @param[in] fileName Name of the file
|
||||||
@ -63,26 +63,6 @@ namespace widget
|
|||||||
* @return false ==> some error occured.
|
* @return false ==> some error occured.
|
||||||
*/
|
*/
|
||||||
bool CommonLoadXML(const char* data);
|
bool CommonLoadXML(const char* data);
|
||||||
public:
|
|
||||||
/**
|
|
||||||
* @brief Get the main node widget
|
|
||||||
* @return the requested pointer on the node
|
|
||||||
*/
|
|
||||||
ewol::Widget* GetMainWidget(void);
|
|
||||||
/**
|
|
||||||
* @brief Get the main node widget
|
|
||||||
* @param[in] widgetName name of the widget
|
|
||||||
* @return the requested pointer on the node
|
|
||||||
*/
|
|
||||||
ewol::Widget* GetWidgetNamed(const etk::UString& widgetName);
|
|
||||||
|
|
||||||
protected: // Derived function
|
|
||||||
virtual void OnDraw(ewol::DrawProperty& displayProp);
|
|
||||||
public:// Derived function
|
|
||||||
virtual void OnObjectRemove(ewol::EObject* removeObject);
|
|
||||||
virtual void CalculateSize(const vec2& availlable);
|
|
||||||
virtual void CalculateMinMaxSize(void);
|
|
||||||
// TODO : Call all sub element getter an setter ==> this object might be transparent ...
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
125
sources/ewol/widget/Container.cpp
Normal file
125
sources/ewol/widget/Container.cpp
Normal file
@ -0,0 +1,125 @@
|
|||||||
|
/**
|
||||||
|
* @author Edouard DUPIN
|
||||||
|
*
|
||||||
|
* @copyright 2011, Edouard DUPIN, all right reserved
|
||||||
|
*
|
||||||
|
* @license BSD v3 (see license file)
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#include <ewol/ewol.h>
|
||||||
|
#include <ewol/widget/Composer.h>
|
||||||
|
#include <etk/os/FSNode.h>
|
||||||
|
#include <ewol/widget/WidgetManager.h>
|
||||||
|
|
||||||
|
|
||||||
|
widget::Container::Container(ewol::Widget* subElement) :
|
||||||
|
m_subWidget(subElement)
|
||||||
|
{
|
||||||
|
// nothing to do ...
|
||||||
|
}
|
||||||
|
|
||||||
|
widget::Container::~Container(void)
|
||||||
|
{
|
||||||
|
RemoveSubWidget();
|
||||||
|
}
|
||||||
|
|
||||||
|
ewol::Widget* widget::Container::GetSubWidget(void)
|
||||||
|
{
|
||||||
|
return m_subWidget;
|
||||||
|
}
|
||||||
|
|
||||||
|
void widget::Container::SetSubWidget(ewol::Widget* newWidget)
|
||||||
|
{
|
||||||
|
if (NULL==newWidget) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
RemoveSubWidget();
|
||||||
|
m_subWidget = newWidget;
|
||||||
|
MarkToRedraw();
|
||||||
|
ewol::RequestUpdateSize();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void widget::Container::RemoveSubWidget(void)
|
||||||
|
{
|
||||||
|
if (NULL != m_subWidget) {
|
||||||
|
delete(m_subWidget);
|
||||||
|
// might have been destroy first here :
|
||||||
|
if (m_subWidget!=NULL) {
|
||||||
|
EWOL_ERROR("Composer : An error Occured when removing main node");
|
||||||
|
}
|
||||||
|
MarkToRedraw();
|
||||||
|
ewol::RequestUpdateSize();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ewol::Widget* widget::Container::GetWidgetNamed(const etk::UString& widgetName)
|
||||||
|
{
|
||||||
|
if (GetName()==widgetName) {
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
if (NULL != m_subWidget) {
|
||||||
|
return m_subWidget->GetWidgetNamed(widgetName);
|
||||||
|
}
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
void widget::Container::OnObjectRemove(ewol::EObject* removeObject)
|
||||||
|
{
|
||||||
|
if (m_subWidget==removeObject) {
|
||||||
|
m_subWidget=NULL;
|
||||||
|
MarkToRedraw();
|
||||||
|
ewol::RequestUpdateSize();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void widget::Container::OnDraw(ewol::DrawProperty& displayProp)
|
||||||
|
{
|
||||||
|
if (NULL!=m_subWidget) {
|
||||||
|
m_subWidget->GenDraw(displayProp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void widget::Container::CalculateSize(const vec2& availlable)
|
||||||
|
{
|
||||||
|
if (NULL!=m_subWidget) {
|
||||||
|
m_subWidget->SetOrigin(m_origin);
|
||||||
|
m_subWidget->CalculateSize(availlable);
|
||||||
|
}
|
||||||
|
ewol::Widget::CalculateSize(availlable);
|
||||||
|
}
|
||||||
|
|
||||||
|
void widget::Container::CalculateMinMaxSize(void)
|
||||||
|
{
|
||||||
|
// callmain class
|
||||||
|
ewol::Widget::CalculateMinMaxSize();
|
||||||
|
// call sub classes
|
||||||
|
if (NULL!=m_subWidget) {
|
||||||
|
m_subWidget->CalculateMinMaxSize();
|
||||||
|
vec2 min = m_subWidget->GetCalculateMinSize();
|
||||||
|
if (m_minSize.x()<min.x()) {
|
||||||
|
m_minSize.setX(min.x());
|
||||||
|
}
|
||||||
|
if (m_minSize.y()<min.y()) {
|
||||||
|
m_minSize.setY(min.y());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void widget::Container::OnRegenerateDisplay(void)
|
||||||
|
{
|
||||||
|
if (NULL!=m_subWidget) {
|
||||||
|
m_subWidget->OnRegenerateDisplay();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ewol::Widget* widget::Container::GetWidgetAtPos(const vec2& pos)
|
||||||
|
{
|
||||||
|
if (false==IsHide()) {
|
||||||
|
if (NULL!=m_subWidget) {
|
||||||
|
return m_subWidget->GetWidgetAtPos(pos);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return NULL;
|
||||||
|
};
|
62
sources/ewol/widget/Container.h
Normal file
62
sources/ewol/widget/Container.h
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
/**
|
||||||
|
* @author Edouard DUPIN
|
||||||
|
*
|
||||||
|
* @copyright 2011, Edouard DUPIN, all right reserved
|
||||||
|
*
|
||||||
|
* @license BSD v3 (see license file)
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __EWOL_WIDGET_CONTAINER_H__
|
||||||
|
#define __EWOL_WIDGET_CONTAINER_H__
|
||||||
|
|
||||||
|
#include <etk/types.h>
|
||||||
|
#include <ewol/debug.h>
|
||||||
|
#include <ewol/widget/Widget.h>
|
||||||
|
|
||||||
|
namespace widget
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @brief the Cotainer widget is a widget that have an only one subWidget
|
||||||
|
*/
|
||||||
|
class Container : public ewol::Widget
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
ewol::Widget* m_subWidget;
|
||||||
|
public:
|
||||||
|
/**
|
||||||
|
* @brief Constructor
|
||||||
|
*/
|
||||||
|
Container(ewol::Widget* subElement=NULL);
|
||||||
|
/**
|
||||||
|
* @brief Destructor
|
||||||
|
*/
|
||||||
|
~Container(void);
|
||||||
|
public:
|
||||||
|
/**
|
||||||
|
* @brief Get the main node widget
|
||||||
|
* @return the requested pointer on the node
|
||||||
|
*/
|
||||||
|
ewol::Widget* GetSubWidget(void);
|
||||||
|
/**
|
||||||
|
* @brief Set the subWidget node widget.
|
||||||
|
* @param[in] newWidget The widget to Add.
|
||||||
|
*/
|
||||||
|
void SetSubWidget(ewol::Widget* newWidget);
|
||||||
|
/**
|
||||||
|
* @brief Remove the subWidget node.
|
||||||
|
*/
|
||||||
|
void RemoveSubWidget(void);
|
||||||
|
|
||||||
|
protected: // Derived function
|
||||||
|
virtual void OnDraw(ewol::DrawProperty& displayProp);
|
||||||
|
public:// Derived function
|
||||||
|
virtual void OnRegenerateDisplay(void);
|
||||||
|
virtual void OnObjectRemove(ewol::EObject* removeObject);
|
||||||
|
virtual void CalculateSize(const vec2& availlable);
|
||||||
|
virtual void CalculateMinMaxSize(void);
|
||||||
|
virtual ewol::Widget* GetWidgetAtPos(const vec2& pos);
|
||||||
|
virtual ewol::Widget* GetWidgetNamed(const etk::UString& widgetName);
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
0
sources/ewol/widget/ContainerN.cpp
Normal file
0
sources/ewol/widget/ContainerN.cpp
Normal file
64
sources/ewol/widget/ContainerN.h
Normal file
64
sources/ewol/widget/ContainerN.h
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
/**
|
||||||
|
* @author Edouard DUPIN
|
||||||
|
*
|
||||||
|
* @copyright 2011, Edouard DUPIN, all right reserved
|
||||||
|
*
|
||||||
|
* @license BSD v3 (see license file)
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __EWOL_WIDGET_CONTAINER_H__
|
||||||
|
#define __EWOL_WIDGET_CONTAINER_H__
|
||||||
|
|
||||||
|
#include <etk/types.h>
|
||||||
|
#include <ewol/debug.h>
|
||||||
|
#include <ewol/widget/Widget.h>
|
||||||
|
|
||||||
|
namespace widget
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @brief the Cotainer widget is a widget that have an only one subWidget
|
||||||
|
*/
|
||||||
|
class ContainerN : public ewol::Widget
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
int32_t m_limitElement;
|
||||||
|
etk::Vector<ewol::Widget*> m_subList;
|
||||||
|
public:
|
||||||
|
/**
|
||||||
|
* @brief Constructor
|
||||||
|
*/
|
||||||
|
ContainerN(int32_t limitElement=-1);
|
||||||
|
/**
|
||||||
|
* @brief Destructor
|
||||||
|
*/
|
||||||
|
~ContainerN(void);
|
||||||
|
public:
|
||||||
|
/**
|
||||||
|
* @brief Get the main node widget
|
||||||
|
* @return the requested pointer on the node
|
||||||
|
*/
|
||||||
|
ewol::Widget* GetSubWidget(int32_t id);
|
||||||
|
/**
|
||||||
|
* @brief Set the subWidget node widget.
|
||||||
|
* @param[in] newWidget The widget to Add.
|
||||||
|
*/
|
||||||
|
void SubWidgetAdd(ewol::Widget* newWidget);
|
||||||
|
void SubWidgetAddStart(ewol::Widget* newWidget);
|
||||||
|
/**
|
||||||
|
* @brief Remove the subWidget node.
|
||||||
|
*/
|
||||||
|
void RemoveSubWidget(void);
|
||||||
|
|
||||||
|
protected: // Derived function
|
||||||
|
virtual void OnDraw(ewol::DrawProperty& displayProp);
|
||||||
|
public:// Derived function
|
||||||
|
virtual void OnRegenerateDisplay(void);
|
||||||
|
virtual void OnObjectRemove(ewol::EObject* removeObject);
|
||||||
|
virtual void CalculateSize(const vec2& availlable);
|
||||||
|
virtual void CalculateMinMaxSize(void);
|
||||||
|
virtual ewol::Widget* GetWidgetAtPos(const vec2& pos);
|
||||||
|
virtual ewol::Widget* GetWidgetNamed(const etk::UString& widgetName);
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
@ -23,10 +23,10 @@ namespace widget {
|
|||||||
static void Init(void);
|
static void Init(void);
|
||||||
static void UnInit(void);
|
static void UnInit(void);
|
||||||
public:
|
public:
|
||||||
Image(const etk::UString& dataFile="", int32_t size=-1); // automatic considering in the appl Data older
|
Image(const etk::UString& dataFile="", int32_t size=-1);
|
||||||
virtual ~Image(void);
|
virtual ~Image(void);
|
||||||
void SetFile(etk::UString newFile);
|
void SetFile(etk::UString newFile);
|
||||||
void SetPadding(vec2 newPadding);
|
void SetPadding(vec2 newPadding);
|
||||||
private:
|
private:
|
||||||
etk::UString m_imageSelected;
|
etk::UString m_imageSelected;
|
||||||
vec2 m_padding;
|
vec2 m_padding;
|
||||||
|
@ -61,7 +61,7 @@ void widget::Label::CalculateMinMaxSize(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void widget::Label::SetLabel(etk::UString newLabel)
|
void widget::Label::SetLabel(const etk::UString& newLabel)
|
||||||
{
|
{
|
||||||
m_label = newLabel;
|
m_label = newLabel;
|
||||||
MarkToRedraw();
|
MarkToRedraw();
|
||||||
@ -152,6 +152,7 @@ bool widget::Label::LoadXML(TiXmlNode* node)
|
|||||||
ewol::Widget::LoadXML(node);
|
ewol::Widget::LoadXML(node);
|
||||||
// get internal data :
|
// get internal data :
|
||||||
// TODO : Unparse data type XML ...
|
// TODO : Unparse data type XML ...
|
||||||
|
EWOL_DEBUG("Load label:" << node->ToElement()->GetText());
|
||||||
SetLabel(node->ToElement()->GetText());
|
SetLabel(node->ToElement()->GetText());
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -39,7 +39,7 @@ namespace widget {
|
|||||||
* @brief Change the label displayed
|
* @brief Change the label displayed
|
||||||
* @param[in] newLabel The displayed decorated text.
|
* @param[in] newLabel The displayed decorated text.
|
||||||
*/
|
*/
|
||||||
void SetLabel(etk::UString newLabel);
|
void SetLabel(const etk::UString& newLabel);
|
||||||
/**
|
/**
|
||||||
* @brief Get the current displayed label
|
* @brief Get the current displayed label
|
||||||
* @return The displayed decorated text.
|
* @return The displayed decorated text.
|
||||||
|
@ -345,3 +345,72 @@ void widget::Sizer::OnObjectRemove(ewol::EObject * removeObject)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool widget::Sizer::LoadXML(TiXmlNode* node)
|
||||||
|
{
|
||||||
|
if (NULL==node) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
// parse generic properties :
|
||||||
|
ewol::Widget::LoadXML(node);
|
||||||
|
// remove previous element :
|
||||||
|
SubWidgetRemoveAll();
|
||||||
|
|
||||||
|
const char *tmpAttributeValue = node->ToElement()->Attribute("lock");
|
||||||
|
if (NULL != tmpAttributeValue) {
|
||||||
|
etk::UString val(tmpAttributeValue);
|
||||||
|
m_lockExpandContamination = val;
|
||||||
|
}
|
||||||
|
tmpAttributeValue = node->ToElement()->Attribute("borderSize");
|
||||||
|
if (NULL != tmpAttributeValue) {
|
||||||
|
etk::UString val(tmpAttributeValue);
|
||||||
|
m_borderSize = val;
|
||||||
|
}
|
||||||
|
tmpAttributeValue = node->ToElement()->Attribute("mode");
|
||||||
|
if (NULL != tmpAttributeValue) {
|
||||||
|
etk::UString val(tmpAttributeValue);
|
||||||
|
if( val.CompareNoCase("vert")
|
||||||
|
|| val.CompareNoCase("vertical")) {
|
||||||
|
m_mode = widget::Sizer::modeVert;
|
||||||
|
} else {
|
||||||
|
m_mode = widget::Sizer::modeHori;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
bool invertAdding=false;
|
||||||
|
tmpAttributeValue = node->ToElement()->Attribute("addmode");
|
||||||
|
if (NULL != tmpAttributeValue) {
|
||||||
|
etk::UString val(tmpAttributeValue);
|
||||||
|
if(val.CompareNoCase("invert")) {
|
||||||
|
invertAdding=true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// parse all the elements :
|
||||||
|
for(TiXmlNode * pNode = node->FirstChild() ;
|
||||||
|
NULL != pNode ;
|
||||||
|
pNode = pNode->NextSibling() ) {
|
||||||
|
if (pNode->Type()==TiXmlNode::TINYXML_COMMENT) {
|
||||||
|
// nothing to do, just proceed to next step
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
etk::UString widgetName = pNode->Value();
|
||||||
|
if (ewol::widgetManager::Exist(widgetName) == false) {
|
||||||
|
EWOL_ERROR("(l "<<pNode->Row()<<") Unknown basic node=\"" << widgetName << "\" not in : [" << ewol::widgetManager::List() << "]" );
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
ewol::Widget *subWidget = ewol::widgetManager::Create(widgetName);
|
||||||
|
if (subWidget == NULL) {
|
||||||
|
EWOL_ERROR ("(l "<<pNode->Row()<<") Can not create the widget : \"" << widgetName << "\"");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
// add sub element :
|
||||||
|
if (false==invertAdding) {
|
||||||
|
SubWidgetAdd(subWidget);
|
||||||
|
} else {
|
||||||
|
SubWidgetAddStart(subWidget);
|
||||||
|
}
|
||||||
|
if (false == subWidget->LoadXML(pNode)) {
|
||||||
|
EWOL_ERROR ("(l "<<pNode->Row()<<") can not load widget properties : \"" << widgetName << "\"");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
@ -104,7 +104,8 @@ namespace widget {
|
|||||||
virtual void CalculateMinMaxSize(void);
|
virtual void CalculateMinMaxSize(void);
|
||||||
virtual void SetMinSize(const vec2& size);
|
virtual void SetMinSize(const vec2& size);
|
||||||
virtual void SetExpand(const bvec2& newExpand);
|
virtual void SetExpand(const bvec2& newExpand);
|
||||||
virtual bvec2 CanExpand(void);;
|
virtual bvec2 CanExpand(void);
|
||||||
|
virtual bool LoadXML(TiXmlNode* node);
|
||||||
};
|
};
|
||||||
|
|
||||||
};
|
};
|
||||||
|
@ -593,6 +593,8 @@ bool ewol::Widget::LoadXML(TiXmlNode* node)
|
|||||||
if (NULL != tmpAttributeValue) {
|
if (NULL != tmpAttributeValue) {
|
||||||
m_userMaxSize.SetString(tmpAttributeValue);
|
m_userMaxSize.SetString(tmpAttributeValue);
|
||||||
}
|
}
|
||||||
|
EWOL_DEBUG("Widget parse: m_hide=" << m_hide << " m_userMinSize=" << m_userMinSize << " m_userMaxSize=" << m_userMaxSize << " m_userFill=" << m_userFill << " m_userExpand=" << m_userExpand);
|
||||||
|
MarkToRedraw();
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -634,3 +636,12 @@ bool ewol::Widget::StoreXML(TiXmlNode* node)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
ewol::Widget* ewol::Widget::GetWidgetNamed(const etk::UString& widgetName)
|
||||||
|
{
|
||||||
|
if (GetName()==widgetName) {
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -347,6 +347,12 @@ namespace ewol {
|
|||||||
* @note : INTERNAL EWOL SYSTEM
|
* @note : INTERNAL EWOL SYSTEM
|
||||||
*/
|
*/
|
||||||
virtual ewol::Widget* GetWidgetAtPos(const vec2& pos) { if (false==IsHide()) { return this; } return NULL; };
|
virtual ewol::Widget* GetWidgetAtPos(const vec2& pos) { if (false==IsHide()) { return this; } return NULL; };
|
||||||
|
/**
|
||||||
|
* @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 NULL pointer)
|
||||||
|
*/
|
||||||
|
virtual ewol::Widget* GetWidgetNamed(const etk::UString& widgetName);
|
||||||
/**
|
/**
|
||||||
* @brief Event on an input of this Widget
|
* @brief Event on an input of this Widget
|
||||||
* @param[in] type Type of the input (ewol::INPUT_TYPE_MOUSE/ewol::INPUT_TYPE_FINGER ...)
|
* @param[in] type Type of the input (ewol::INPUT_TYPE_MOUSE/ewol::INPUT_TYPE_FINGER ...)
|
||||||
|
@ -259,7 +259,7 @@ bool ewol::widgetManager::IsDrawingNeeded(void)
|
|||||||
void ewol::widgetManager::AddWidgetCreator(const etk::UString& name, ewol::widgetManager::creator_tf pointer)
|
void ewol::widgetManager::AddWidgetCreator(const etk::UString& name, ewol::widgetManager::creator_tf pointer)
|
||||||
{
|
{
|
||||||
for (int32_t iii=0; iii<l_creatorList.Size() ; iii++) {
|
for (int32_t iii=0; iii<l_creatorList.Size() ; iii++) {
|
||||||
if (name == l_creatorList[iii].name) {
|
if (name.CompareNoCase(l_creatorList[iii].name)) {
|
||||||
if (NULL==pointer) {
|
if (NULL==pointer) {
|
||||||
EWOL_INFO("Remove Creator of a specify widget : " << name);
|
EWOL_INFO("Remove Creator of a specify widget : " << name);
|
||||||
} else {
|
} else {
|
||||||
@ -282,7 +282,7 @@ void ewol::widgetManager::AddWidgetCreator(const etk::UString& name, ewol::widge
|
|||||||
ewol::Widget* ewol::widgetManager::Create(const etk::UString& name)
|
ewol::Widget* ewol::widgetManager::Create(const etk::UString& name)
|
||||||
{
|
{
|
||||||
for (int32_t iii=0; iii<l_creatorList.Size() ; iii++) {
|
for (int32_t iii=0; iii<l_creatorList.Size() ; iii++) {
|
||||||
if (name == l_creatorList[iii].name) {
|
if (name.CompareNoCase(l_creatorList[iii].name)) {
|
||||||
if (NULL != l_creatorList[iii].pointer) {
|
if (NULL != l_creatorList[iii].pointer) {
|
||||||
return (*l_creatorList[iii].pointer)();
|
return (*l_creatorList[iii].pointer)();
|
||||||
}
|
}
|
||||||
@ -295,7 +295,7 @@ ewol::Widget* ewol::widgetManager::Create(const etk::UString& name)
|
|||||||
bool ewol::widgetManager::Exist(const etk::UString& name)
|
bool ewol::widgetManager::Exist(const etk::UString& name)
|
||||||
{
|
{
|
||||||
for (int32_t iii=0; iii<l_creatorList.Size() ; iii++) {
|
for (int32_t iii=0; iii<l_creatorList.Size() ; iii++) {
|
||||||
if (name == l_creatorList[iii].name) {
|
if (name.CompareNoCase(l_creatorList[iii].name)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -65,6 +65,7 @@ FILE_LIST+= ewol/widget/Widget.cpp \
|
|||||||
ewol/widget/ColorBar.cpp \
|
ewol/widget/ColorBar.cpp \
|
||||||
ewol/widget/ContextMenu.cpp \
|
ewol/widget/ContextMenu.cpp \
|
||||||
ewol/widget/Composer.cpp \
|
ewol/widget/Composer.cpp \
|
||||||
|
ewol/widget/Container.cpp \
|
||||||
ewol/widget/Drawable.cpp \
|
ewol/widget/Drawable.cpp \
|
||||||
ewol/widget/Entry.cpp \
|
ewol/widget/Entry.cpp \
|
||||||
ewol/widget/Joystick.cpp \
|
ewol/widget/Joystick.cpp \
|
||||||
|
Loading…
x
Reference in New Issue
Block a user