[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/sphere.png','')
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/"))

View File

@ -31,6 +31,7 @@
#include <appl/TestImage.h>
#include <appl/TestDistanceField.h>
#include <etk/os/FSNode.h>
#include <ewol/parameter/Value.h>
static const char * l_eventChangeTheme = "event-change-theme";
@ -49,6 +50,19 @@ appl::MainWindows::MainWindows() :
void appl::MainWindows::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> mySizerVert;
std::shared_ptr<ewol::widget::Button> myButton;
@ -107,6 +121,17 @@ void appl::MainWindows::init() {
mySizerHori->setFill(bvec2(true,true));
mySizerHori->lockExpand(bvec2(true,true));
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);
if (m_sizerDynamic == nullptr) {
APPL_ERROR("Allocation error mySizerHori");
@ -134,6 +159,7 @@ void appl::MainWindows::init() {
return;
}
mySizerHori->subWidgetAdd(m_sizerVert);
*/
}
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) {
m_idWidget += _increment;
if (m_subWidget != nullptr) {
m_subWidget->destroy();
// in theory it must be removed ...
m_subWidget.reset();
}
std::shared_ptr<ewol::Widget> oldWidget = m_subWidget;
std::string tmpDescription;
std::string tmpConstruct;
switch(m_idWidget) {
case 0:
m_subWidget = appl::TestButton::create();
if (m_subWidget != nullptr) {
m_sizerVert->subWidgetAdd(m_subWidget);
}
if (m_testName!=nullptr) {
m_testName->setLabel("TestButton");
};
tmpConstruct = std::string()
+ "<button name='[TEST]Button:TO-TEST' expand='false,false' fill='false,false' >\n"
+ " <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";
tmpDescription = "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;
case 1:
m_subWidget = TestDistanceField::create();
if (m_subWidget != nullptr) {
m_sizerVert->subWidgetAdd(m_subWidget);
}
if (m_testName != nullptr) {
m_testName->setLabel("Test Distance Field");
};
tmpDescription = "Test Distance Field";
*/
break;
case 2:
m_subWidget = TestButtonColor::create();
}
// 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->subWidgetAdd(m_subWidget);
m_sizerVert->subWidgetReplace(oldWidget, m_subWidget);
}
if (m_testName!=nullptr) {
m_testName->setLabel("TestButtonColor");
m_testName->setLabel("TestButton");
};
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;
}
updateProperty();
}
@ -317,7 +321,16 @@ void appl::MainWindows::updateProperty() {
return;
}
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;
});
std::shared_ptr<ewol::widget::Label> widgetLabel = ewol::widget::Label::create("x");
@ -331,7 +344,16 @@ void appl::MainWindows::updateProperty() {
return;
}
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;
});
widgetLabel = ewol::widget::Label::create("y");
@ -384,14 +406,9 @@ void appl::MainWindows::updateProperty() {
mySpacer->setExpand(bvec2(true,false));
mySpacer->setFill(bvec2(true,false));
mySpacer->setMinSize(vec2(3,3));
mySpacer->setColor(0x000000AA);
mySpacer->setColor(etk::color::blue);
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/Label.h>
#include <ewol/widget/Spacer.h>
#include <ewol/widget/Composer.h>
namespace appl {
class MainWindows : public ewol::widget::Windows {
private:
std::shared_ptr<ewol::widget::Composer> m_composer;
std::shared_ptr<ewol::widget::Sizer> m_sizerVert;
std::shared_ptr<ewol::widget::Sizer> m_sizerDynamic;
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>