[DEV] better test tools for widget

This commit is contained in:
Edouard DUPIN 2016-01-29 22:20:06 +01:00
parent 990894af6f
commit 01a9d6b1c5
4 changed files with 150 additions and 71 deletions

View File

@ -49,6 +49,7 @@ def create(target, module_name):
my_module.copy_path('tools/visual_test/data/stone*','') my_module.copy_path('tools/visual_test/data/stone*','')
my_module.copy_path('tools/visual_test/data/sphere.png','') my_module.copy_path('tools/visual_test/data/sphere.png','')
my_module.copy_path('tools/visual_test/data/sphere.obj','') my_module.copy_path('tools/visual_test/data/sphere.obj','')
my_module.copy_path('tools/visual_test/data/gui.xml','')
my_module.add_path(os.path.join(tools.get_current_path(__file__), "tools/visual_test/")) my_module.add_path(os.path.join(tools.get_current_path(__file__), "tools/visual_test/"))

View File

@ -31,6 +31,7 @@
#include <appl/TestImage.h> #include <appl/TestImage.h>
#include <appl/TestDistanceField.h> #include <appl/TestDistanceField.h>
#include <etk/os/FSNode.h> #include <etk/os/FSNode.h>
#include <ewol/parameter/Value.h>
static const char * l_eventChangeTheme = "event-change-theme"; static const char * l_eventChangeTheme = "event-change-theme";
@ -49,6 +50,19 @@ appl::MainWindows::MainWindows() :
void appl::MainWindows::init() { void appl::MainWindows::init() {
ewol::widget::Windows::init(); ewol::widget::Windows::init();
m_composer = ewol::widget::Composer::create(ewol::widget::Composer::file, "DATA:gui.xml");
setSubWidget(m_composer);
externSubBind(m_composer, ewol::widget::Button, "appl-theme-toggle", signalValue, shared_from_this(), &appl::MainWindows::onCallbackThemeChange);
externSubBind(m_composer, ewol::widget::Button, "appl-previous-widget", signalPressed, shared_from_this(), &appl::MainWindows::onCallbackWidgetChange, -1);
externSubBind(m_composer, ewol::widget::Button, "appl-next-widget", signalPressed, shared_from_this(), &appl::MainWindows::onCallbackWidgetChange, 1);
m_sizerVert = std::dynamic_pointer_cast<ewol::widget::Sizer>(m_composer->getSubObjectNamed("appl-upper-test-widget"));
m_sizerDynamic = std::dynamic_pointer_cast<ewol::widget::Sizer>(m_composer->getSubObjectNamed("appl-dynamic-config"));
m_subWidget = std::dynamic_pointer_cast<ewol::Widget>(m_composer->getSubObjectNamed("[TEST]TO-TEST"));
m_testName = std::dynamic_pointer_cast<ewol::widget::Label>(m_composer->getSubObjectNamed("appl-label-test"));
/*
std::shared_ptr<ewol::widget::Sizer> mySizerHori; std::shared_ptr<ewol::widget::Sizer> mySizerHori;
std::shared_ptr<ewol::widget::Sizer> mySizerVert; std::shared_ptr<ewol::widget::Sizer> mySizerVert;
std::shared_ptr<ewol::widget::Button> myButton; std::shared_ptr<ewol::widget::Button> myButton;
@ -107,6 +121,17 @@ void appl::MainWindows::init() {
mySizerHori->setFill(bvec2(true,true)); mySizerHori->setFill(bvec2(true,true));
mySizerHori->lockExpand(bvec2(true,true)); mySizerHori->lockExpand(bvec2(true,true));
mySizerVert->subWidgetAdd(mySizerHori); mySizerVert->subWidgetAdd(mySizerHori);
+ " <sizer mode='hori'>\n"
+ " <spacer expand='false,false' fill='true,false' min-size='10,10px' color='#F008'/>\n"
+ " <sizer mode='vert'>\n"
+ " <spacer expand='false,false' fill='false,true' min-size='10,10px' color='#FF08'/>\n"
+ " <ButtonColor name='[TEST]TO-TEST' expand='false,false' fill='false,false' />\n"
+ " <spacer expand='false,false' fill='false,true' min-size='10,10px' color='#0FF8'/>\n"
+ " </sizer>\n"
+ " <spacer expand='false,false' fill='true,false' min-size='10,10px' color='#0F08'/>\n"
+ " </sizer>\n"
m_sizerDynamic = ewol::widget::Sizer::create(ewol::widget::Sizer::modeVert); m_sizerDynamic = ewol::widget::Sizer::create(ewol::widget::Sizer::modeVert);
if (m_sizerDynamic == nullptr) { if (m_sizerDynamic == nullptr) {
APPL_ERROR("Allocation error mySizerHori"); APPL_ERROR("Allocation error mySizerHori");
@ -134,6 +159,7 @@ void appl::MainWindows::init() {
return; return;
} }
mySizerHori->subWidgetAdd(m_sizerVert); mySizerHori->subWidgetAdd(m_sizerVert);
*/
} }
void appl::MainWindows::onCallbackThemeChange(const bool& _value) { void appl::MainWindows::onCallbackThemeChange(const bool& _value) {
@ -149,79 +175,57 @@ void appl::MainWindows::onCallbackThemeChange(const bool& _value) {
void appl::MainWindows::onCallbackWidgetChange(int32_t _increment) { void appl::MainWindows::onCallbackWidgetChange(int32_t _increment) {
m_idWidget += _increment; m_idWidget += _increment;
std::shared_ptr<ewol::Widget> oldWidget = m_subWidget;
if (m_subWidget != nullptr) { std::string tmpDescription;
m_subWidget->destroy(); std::string tmpConstruct;
// in theory it must be removed ...
m_subWidget.reset();
}
switch(m_idWidget) { switch(m_idWidget) {
case 0: case 0:
m_subWidget = appl::TestButton::create(); tmpConstruct = std::string()
if (m_subWidget != nullptr) { + "<button name='[TEST]Button:TO-TEST' expand='false,false' fill='false,false' >\n"
m_sizerVert->subWidgetAdd(m_subWidget); + " <label>My <font color='#FF0000'>Button</font> <br/> And Some under line<br/> plop <br/> and an other super long line ...</label>\n"
} + "</button>\n";
if (m_testName!=nullptr) { tmpDescription = "TestButton";
m_testName->setLabel("TestButton"); break;
}; case 1:
tmpConstruct = "<ButtonColor/>";
tmpDescription = "TestButtonColor";
break;
case 2:
tmpConstruct = "<label>Simple string</label>\n";
tmpDescription = "TestLabel";
break;
case 3:
tmpConstruct = "<image src='DATA:sphere.png'/>\n";
tmpDescription = "TestImage";
break;
case 4:
tmpConstruct = "<checkbox/>\n";
tmpDescription = "TestCheckbox";
break;
default:
tmpConstruct = "<label expand=false fill=false>Simple string</label>\n";
tmpDescription = "Test Label";
m_idWidget = -1;
break;
/*
break; break;
case 1: case 1:
m_subWidget = TestDistanceField::create(); m_subWidget = TestDistanceField::create();
if (m_subWidget != nullptr) { if (m_subWidget != nullptr) {
m_sizerVert->subWidgetAdd(m_subWidget); m_sizerVert->subWidgetAdd(m_subWidget);
} }
if (m_testName != nullptr) { tmpDescription = "Test Distance Field";
m_testName->setLabel("Test Distance Field"); */
};
break;
case 2:
m_subWidget = TestButtonColor::create();
if (m_subWidget != nullptr) {
m_sizerVert->subWidgetAdd(m_subWidget);
}
if (m_testName != nullptr) {
m_testName->setLabel("TestButtonColor");
};
break;
case 3:
m_subWidget = TestLabel::create();
if (m_subWidget != nullptr) {
m_sizerVert->subWidgetAdd(m_subWidget);
}
if (m_testName != nullptr) {
m_testName->setLabel("TestLabel");
};
break;
case 4:
m_subWidget = TestImage::create();
if (m_subWidget != nullptr) {
m_sizerVert->subWidgetAdd(m_subWidget);
}
if (m_testName != nullptr) {
m_testName->setLabel("TestImage");
};
break;
case 5:
m_subWidget = appl::TestCheckBox::create();
if (m_subWidget != nullptr) {
m_sizerVert->subWidgetAdd(m_subWidget);
}
if (m_testName != nullptr) {
m_testName->setLabel("TestCheckbox");
};
break;
default:
m_subWidget = ewol::widget::Label::create("Test software for EWOL");
if (m_subWidget != nullptr) {
m_subWidget->setExpand(bvec2(true,true));
m_sizerVert->subWidgetAdd(m_subWidget);
}
if (m_testName != nullptr) {
m_testName->setLabel("Label");
};
m_idWidget = -1;
break; break;
} }
// create the widget with a xml generator (readable for test ...):
m_subWidget = ewol::widget::composerGenerate(ewol::widget::Composer::String, tmpConstruct);
if (m_subWidget != nullptr) {
m_sizerVert->subWidgetReplace(oldWidget, m_subWidget);
}
if (m_testName!=nullptr) {
m_testName->setLabel("TestButton");
};
updateProperty(); updateProperty();
} }
@ -317,7 +321,16 @@ void appl::MainWindows::updateProperty() {
return; return;
} }
APPL_INFO("set parameter : X name=" << param->getName() << " value=" << _value); APPL_INFO("set parameter : X name=" << param->getName() << " value=" << _value);
//m_subWidget->parameterSet(param->getName(), etk::to_string(_value)); ewol::parameter::Parameter* param = m_subWidget->getParameterRaw(iii);
ewol::parameter::Value<bvec2>* paramValue = dynamic_cast<ewol::parameter::Value<bvec2>*>(param);
if (paramValue == nullptr) {
APPL_ERROR("nullptr... 2 ");
return;
}
std::string lastValue = m_subWidget->parameterGet(param->getName());
bvec2 lastValueInterpreted = paramValue->get();
lastValueInterpreted.setX(_value);
paramValue->set(lastValueInterpreted);
return; return;
}); });
std::shared_ptr<ewol::widget::Label> widgetLabel = ewol::widget::Label::create("x"); std::shared_ptr<ewol::widget::Label> widgetLabel = ewol::widget::Label::create("x");
@ -331,7 +344,16 @@ void appl::MainWindows::updateProperty() {
return; return;
} }
APPL_INFO("set parameter : Y name=" << param->getName() << " value=" << _value); APPL_INFO("set parameter : Y name=" << param->getName() << " value=" << _value);
//m_subWidget->parameterSet(param->getName(), etk::to_string(_value)); ewol::parameter::Parameter* param = m_subWidget->getParameterRaw(iii);
ewol::parameter::Value<bvec2>* paramValue = dynamic_cast<ewol::parameter::Value<bvec2>*>(param);
if (paramValue == nullptr) {
APPL_ERROR("nullptr... 2 ");
return;
}
std::string lastValue = m_subWidget->parameterGet(param->getName());
bvec2 lastValueInterpreted = paramValue->get();
lastValueInterpreted.setY(_value);
paramValue->set(lastValueInterpreted);
return; return;
}); });
widgetLabel = ewol::widget::Label::create("y"); widgetLabel = ewol::widget::Label::create("y");
@ -384,14 +406,9 @@ void appl::MainWindows::updateProperty() {
mySpacer->setExpand(bvec2(true,false)); mySpacer->setExpand(bvec2(true,false));
mySpacer->setFill(bvec2(true,false)); mySpacer->setFill(bvec2(true,false));
mySpacer->setMinSize(vec2(3,3)); mySpacer->setMinSize(vec2(3,3));
mySpacer->setColor(0x000000AA); mySpacer->setColor(etk::color::blue);
m_sizerDynamic->subWidgetAddStart(mySpacer); m_sizerDynamic->subWidgetAddStart(mySpacer);
} }
} }
mySpacer = ewol::widget::Spacer::create();
if (mySpacer != nullptr) {
mySpacer->setExpand(bvec2(true,true));
m_sizerDynamic->subWidgetAddStart(mySpacer);
}
} }

View File

@ -16,9 +16,11 @@
#include <ewol/widget/Button.h> #include <ewol/widget/Button.h>
#include <ewol/widget/Label.h> #include <ewol/widget/Label.h>
#include <ewol/widget/Spacer.h> #include <ewol/widget/Spacer.h>
#include <ewol/widget/Composer.h>
namespace appl { namespace appl {
class MainWindows : public ewol::widget::Windows { class MainWindows : public ewol::widget::Windows {
private: private:
std::shared_ptr<ewol::widget::Composer> m_composer;
std::shared_ptr<ewol::widget::Sizer> m_sizerVert; std::shared_ptr<ewol::widget::Sizer> m_sizerVert;
std::shared_ptr<ewol::widget::Sizer> m_sizerDynamic; std::shared_ptr<ewol::widget::Sizer> m_sizerDynamic;
std::shared_ptr<ewol::Widget> m_subWidget; std::shared_ptr<ewol::Widget> m_subWidget;

View File

@ -0,0 +1,59 @@
<composer>
<sizer mode="vert"
expand="true,true"
fill="true,true">
<sizer mode="hori"
expand="true,false"
lock="false,true"
fill="true,true">
<button name="appl-theme-toggle"
toggle="true">
<label expand="false,false" fill="true,true">default theme (cube)</label>
<label expand="false,false" fill="true,true">rounded theme</label>
</button>
<button name="appl-previous-widget">
<label expand="false,false" fill="true,true">Previous Widget</label>
</button>
<button name="appl-next-widget">
<label expand="false,false" fill="true,true">Next Widget</label>
</button>
<label name="appl-label-test" expand="true,false" fill="true,true">Test :</label>
<spacer expand="true,true"/>
</sizer>
<spacer min-size="(3,3)px" expand="true,false" fill="true" corlor="red"/>
<sizer mode="hori"
expand="true,true"
lock="true,true"
fill="true,true">
<scroll fill="true"
expand="false,true"
gravity="top"
lock="true,true"
limit="0,0.75"
min-size="25%">
<sizer mode="vert"
expand="false,false"
fill="true"
name="appl-dynamic-config">
<label expand="true" fill="true">No config</label>
</sizer>
</scroll>
<sizer mode="vert"
expand="true,true"
fill="true,true"
border="10px"
border-color="#F008">
<sizer mode="hori">
<spacer expand="false,false" fill="true" min-size="10,10px" color="#F008"/>
<sizer mode="vert"
name="appl-upper-test-widget">
<spacer expand="false,false" fill="true" min-size="10,10px" color="#FF08"/>
<label name="[TEST]TO-TEST" expand="true" fill="true">No widget</label>
<spacer expand='false,false' fill='true' min-size='10,10px' color="#0FF8"/>
</sizer>
<spacer expand="false,false" fill="true" min-size="10,10px" color="#0F08"/>
</sizer>
</sizer>
</sizer>
</sizer>
</composer>