[DEV] correct tool and add Scroll property

This commit is contained in:
Edouard DUPIN 2016-03-20 22:46:10 +01:00
parent d01d270135
commit 6c3a78560a
5 changed files with 218 additions and 168 deletions

View File

@ -28,6 +28,9 @@ ewol::widget::Scroll::Scroll() :
"{ewol}THEME:GUI:WidgetScrolled.json", "{ewol}THEME:GUI:WidgetScrolled.json",
"shape for the horizonal display", "shape for the horizonal display",
&ewol::widget::Scroll::onChangePropertyShapeHori), &ewol::widget::Scroll::onChangePropertyShapeHori),
propertyHover(this, "hover",
true,
"the display bar are hover the subWidget"),
m_pixelScrolling(20), m_pixelScrolling(20),
m_highSpeedStartPos(0,0), m_highSpeedStartPos(0,0),
m_highSpeedMode(speedModeDisable), m_highSpeedMode(speedModeDisable),
@ -69,13 +72,38 @@ void ewol::widget::Scroll::onChangeSize() {
if (m_subWidget == nullptr) { if (m_subWidget == nullptr) {
return; return;
} }
// remove the bar if hover
vec2 basicSize = m_size;
if (*propertyHover == false) {
basicSize -= vec2(SCROLL_BAR_SPACE,SCROLL_BAR_SPACE);
}
vec2 origin = m_origin+m_offset; vec2 origin = m_origin+m_offset;
vec2 minSize = m_subWidget->getCalculateMinSize(); vec2 minSize = m_subWidget->getCalculateMinSize();
bvec2 expand = m_subWidget->propertyExpand.get(); bvec2 expand = m_subWidget->propertyExpand.get();
//The gravity is not set on the sub element ==> special use of the widget //The gravity is not set on the sub element ==> special use of the widget
//origin += ewol::gravityGenerateDelta(propertyGravity.get(), minSize - m_size); //origin += ewol::gravityGenerateDelta(propertyGravity.get(), minSize - m_size);
m_subWidget->setOrigin(origin); if ( expand.x() == true
&& minSize.x() < basicSize.x()) {
minSize.setX(basicSize.x());
}
if ( expand.y() == true
&& minSize.y() < basicSize.y()) {
minSize.setY(basicSize.y());
}
m_subWidget->setSize(minSize); m_subWidget->setSize(minSize);
if (*propertyGravity == ewol::gravity_top) {
origin += vec2(0.0f, basicSize.y()-minSize.y());
if (*propertyHover == false) {
origin += vec2(0,SCROLL_BAR_SPACE);
}
} else if (*propertyGravity == ewol::gravity_buttom) {
// nothing to do ... origin +=
} else {
EWOL_ERROR(" Not manage other gravity ...");
}
m_subWidget->setOrigin(origin);
m_subWidget->onChangeSize(); m_subWidget->onChangeSize();
} }
@ -103,6 +131,7 @@ void ewol::widget::Scroll::systemDraw(const ewol::DrawProperty& _displayProp) {
void ewol::widget::Scroll::onDraw() { void ewol::widget::Scroll::onDraw() {
m_shaperH.draw(); m_shaperH.draw();
m_shaperV.draw(); m_shaperV.draw();
/*
ewol::compositing::Drawing draw; ewol::compositing::Drawing draw;
draw.setPos(vec2(10,10)); draw.setPos(vec2(10,10));
draw.setColor(etk::color::orange); draw.setColor(etk::color::orange);
@ -111,6 +140,7 @@ void ewol::widget::Scroll::onDraw() {
draw.setColor(etk::color::green); draw.setColor(etk::color::green);
draw.rectangleWidth(vec2(25,25)); draw.rectangleWidth(vec2(25,25));
draw.draw(); draw.draw();
*/
} }
void ewol::widget::Scroll::onRegenerateDisplay() { void ewol::widget::Scroll::onRegenerateDisplay() {
@ -169,7 +199,7 @@ bool ewol::widget::Scroll::onEventInput(const ewol::event::Input& _event) {
scrollOffset = m_subWidget->getOffset(); scrollOffset = m_subWidget->getOffset();
scrollSize = m_subWidget->getSize(); scrollSize = m_subWidget->getSize();
} }
EWOL_ERROR("Get Event on scroll : " << _event); EWOL_VERBOSE("Get Event on scroll : " << _event);
relativePos.setY(m_size.y() - relativePos.y()); relativePos.setY(m_size.y() - relativePos.y());
if( _event.getType() == gale::key::type_mouse if( _event.getType() == gale::key::type_mouse
&& ( m_highSpeedType == gale::key::type_unknow && ( m_highSpeedType == gale::key::type_unknow
@ -215,7 +245,7 @@ bool ewol::widget::Scroll::onEventInput(const ewol::event::Input& _event) {
return false; return false;
} else if( _event.getId() == 4 } else if( _event.getId() == 4
&& _event.getStatus() == gale::key::status_up) { && _event.getStatus() == gale::key::status_up) {
EWOL_ERROR(" mode UP " << m_size.y() << "<" << scrollSize.y()); EWOL_VERBOSE(" mode UP " << m_size.y() << "<" << scrollSize.y());
if(m_size.y() < scrollSize.y()) { if(m_size.y() < scrollSize.y()) {
scrollOffset.setY(scrollOffset.y()-m_pixelScrolling); scrollOffset.setY(scrollOffset.y()-m_pixelScrolling);
scrollOffset.setY(std::avg(0.0f, scrollOffset.y(), (scrollSize.y() - m_size.y()*propertyLimit->y()))); scrollOffset.setY(std::avg(0.0f, scrollOffset.y(), (scrollSize.y() - m_size.y()*propertyLimit->y())));
@ -227,7 +257,7 @@ bool ewol::widget::Scroll::onEventInput(const ewol::event::Input& _event) {
} }
} else if( _event.getId() == 5 } else if( _event.getId() == 5
&& _event.getStatus() == gale::key::status_up) { && _event.getStatus() == gale::key::status_up) {
EWOL_ERROR(" mode DOWN " << m_size.y() << "<" << scrollSize.y()); EWOL_VERBOSE(" mode DOWN " << m_size.y() << "<" << scrollSize.y());
if(m_size.y() < scrollSize.y()) { if(m_size.y() < scrollSize.y()) {
scrollOffset.setY(scrollOffset.y()+m_pixelScrolling); scrollOffset.setY(scrollOffset.y()+m_pixelScrolling);
scrollOffset.setY(std::avg(0.0f, scrollOffset.y(), (scrollSize.y() - m_size.y()*propertyLimit->y()))); scrollOffset.setY(std::avg(0.0f, scrollOffset.y(), (scrollSize.y() - m_size.y()*propertyLimit->y())));

View File

@ -24,6 +24,7 @@ namespace ewol {
eproperty::Range<vec2> propertyLimit; //!< Set the limitation of the ratio in the sreen eproperty::Range<vec2> propertyLimit; //!< Set the limitation of the ratio in the sreen
eproperty::Value<std::string> propertyShapeVert; //!< Vertical shaper name eproperty::Value<std::string> propertyShapeVert; //!< Vertical shaper name
eproperty::Value<std::string> propertyShapeHori; //!< Horizontal shaper name eproperty::Value<std::string> propertyShapeHori; //!< Horizontal shaper name
eproperty::Value<bool> propertyHover; //!< Horizontal shaper name
public: public:
enum highSpeedMode { enum highSpeedMode {
speedModeDisable, speedModeDisable,

View File

@ -30,12 +30,6 @@
#include <etk/os/FSNode.h> #include <etk/os/FSNode.h>
#include <eproperty/Value.h> #include <eproperty/Value.h>
static const char * l_eventChangeTheme = "event-change-theme";
static const char * l_eventChangeWidgetNext = "event-change-widget-test-next";
static const char * l_eventChangeWidgetPrevious = "event-change-widget-test-previous";
#undef __class__ #undef __class__
#define __class__ "MainWindows" #define __class__ "MainWindows"
@ -212,6 +206,7 @@ void appl::MainWindows::updateProperty() {
if (m_subWidget == nullptr) { if (m_subWidget == nullptr) {
return; return;
} }
m_listConnection.clear();
std::shared_ptr<ewol::widget::Label> widget = ewol::widget::Label::create(); std::shared_ptr<ewol::widget::Label> widget = ewol::widget::Label::create();
widget->propertyValue.set(m_subWidget->getObjectType()); widget->propertyValue.set(m_subWidget->getObjectType());
m_sizerDynamic->subWidgetAdd(widget); m_sizerDynamic->subWidgetAdd(widget);
@ -222,6 +217,7 @@ void appl::MainWindows::updateProperty() {
APPL_WARNING("Parameter EMPTY . " << iii << " : nullptr"); APPL_WARNING("Parameter EMPTY . " << iii << " : nullptr");
continue; continue;
} }
if (param->getPropertyType() != "eproperty::List") {
std::shared_ptr<ewol::widget::Sizer> widgetSizer = ewol::widget::Sizer::create(); std::shared_ptr<ewol::widget::Sizer> widgetSizer = ewol::widget::Sizer::create();
if (widgetSizer != nullptr) { if (widgetSizer != nullptr) {
widgetSizer->propertyMode.set(ewol::widget::Sizer::modeHori); widgetSizer->propertyMode.set(ewol::widget::Sizer::modeHori);
@ -248,11 +244,13 @@ void appl::MainWindows::updateProperty() {
widgetTmp->propertyValue.set(value); widgetTmp->propertyValue.set(value);
widgetTmp->propertyExpand.set(bvec2(true,false)); widgetTmp->propertyExpand.set(bvec2(true,false));
widgetTmp->propertyFill.set(bvec2(true,false)); widgetTmp->propertyFill.set(bvec2(true,false));
widgetTmp->signalModify.connect([=](const std::string& _value) { esignal::Connection conn = widgetTmp->signalModify.connect(
[=](const std::string& _value) {
APPL_INFO("set parameter : NAME name=" << param->getName() << " value=" << _value); APPL_INFO("set parameter : NAME name=" << param->getName() << " value=" << _value);
paramValue->set(_value); paramValue->set(_value);
return; return;
}); });
m_listConnection.push_back(std::move(conn));
} else if (type == typeid(gale::Dimension).name()) { } else if (type == typeid(gale::Dimension).name()) {
type = "gale::Dimension"; type = "gale::Dimension";
} else if (type == typeid(bvec2).name()) { } else if (type == typeid(bvec2).name()) {
@ -267,13 +265,15 @@ void appl::MainWindows::updateProperty() {
} }
bvec2 value = paramValue->get(); bvec2 value = paramValue->get();
widgetTmp->propertyValue.set(value.x()); widgetTmp->propertyValue.set(value.x());
widgetTmp->signalValue.connect([=](const bool& _value) { esignal::Connection conn = widgetTmp->signalValue.connect(
[=](const bool& _value) {
APPL_INFO("set parameter : X name=" << param->getName() << " value=" << _value); APPL_INFO("set parameter : X name=" << param->getName() << " value=" << _value);
bvec2 lastValueInterpreted = paramValue->get(); bvec2 lastValueInterpreted = paramValue->get();
lastValueInterpreted.setX(_value); lastValueInterpreted.setX(_value);
paramValue->set(lastValueInterpreted); paramValue->set(lastValueInterpreted);
return; return;
}); });
m_listConnection.push_back(std::move(conn));
std::shared_ptr<ewol::widget::Label> widgetLabel = ewol::widget::Label::create(); std::shared_ptr<ewol::widget::Label> widgetLabel = ewol::widget::Label::create();
widgetLabel->propertyValue.set("x"); widgetLabel->propertyValue.set("x");
widgetTmp->setSubWidget(widgetLabel); widgetTmp->setSubWidget(widgetLabel);
@ -281,13 +281,15 @@ void appl::MainWindows::updateProperty() {
widgetTmp = ewol::widget::CheckBox::create(); widgetTmp = ewol::widget::CheckBox::create();
widgetSizer->subWidgetAdd(widgetTmp); widgetSizer->subWidgetAdd(widgetTmp);
widgetTmp->propertyValue.set(value.y()); widgetTmp->propertyValue.set(value.y());
widgetTmp->signalValue.connect([=](const bool& _value) { conn = widgetTmp->signalValue.connect(
[=](const bool& _value) {
APPL_INFO("set parameter : Y name=" << param->getName() << " value=" << _value); APPL_INFO("set parameter : Y name=" << param->getName() << " value=" << _value);
bvec2 lastValueInterpreted = paramValue->get(); bvec2 lastValueInterpreted = paramValue->get();
lastValueInterpreted.setY(_value); lastValueInterpreted.setY(_value);
paramValue->set(lastValueInterpreted); paramValue->set(lastValueInterpreted);
return; return;
}); });
m_listConnection.push_back(std::move(conn));
widgetLabel = ewol::widget::Label::create(); widgetLabel = ewol::widget::Label::create();
widgetLabel->propertyValue.set("y"); widgetLabel->propertyValue.set("y");
widgetTmp->setSubWidget(widgetLabel); widgetTmp->setSubWidget(widgetLabel);
@ -301,7 +303,8 @@ void appl::MainWindows::updateProperty() {
addSpacer(widgetSizer); addSpacer(widgetSizer);
std::shared_ptr<ewol::widget::CheckBox> widgetTmp = ewol::widget::CheckBox::create(); std::shared_ptr<ewol::widget::CheckBox> widgetTmp = ewol::widget::CheckBox::create();
widgetSizer->subWidgetAdd(widgetTmp); widgetSizer->subWidgetAdd(widgetTmp);
widgetTmp->signalValue.connect([=](const bool& _value) { esignal::Connection conn = widgetTmp->signalValue.connect(
[=](const bool& _value) {
if (m_subWidget == nullptr) { if (m_subWidget == nullptr) {
APPL_ERROR("nullptr..."); APPL_ERROR("nullptr...");
return; return;
@ -310,6 +313,7 @@ void appl::MainWindows::updateProperty() {
m_subWidget->propertySet(param->getName(), etk::to_string(_value)); m_subWidget->propertySet(param->getName(), etk::to_string(_value));
return; return;
}); });
m_listConnection.push_back(std::move(conn));
} else if ( type == typeid(int64_t).name() } else if ( type == typeid(int64_t).name()
|| type == typeid(int32_t).name() || type == typeid(int32_t).name()
|| type == typeid(int16_t).name() || type == typeid(int16_t).name()
@ -318,22 +322,27 @@ void appl::MainWindows::updateProperty() {
|| type == typeid(uint32_t).name() || type == typeid(uint32_t).name()
|| type == typeid(uint16_t).name() || type == typeid(uint16_t).name()
|| type == typeid(uint8_t).name()) { || type == typeid(uint8_t).name()) {
std::shared_ptr<ewol::widget::Entry> widgetTmp = ewol::widget::Entry::create(); ewol::widget::SpinShared widgetTmp = ewol::widget::Spin::create();
widgetSizer->subWidgetAdd(widgetTmp); widgetSizer->subWidgetAdd(widgetTmp);
eproperty::Property* param = m_subWidget->getPropertyRaw(iii); eproperty::Property* param = m_subWidget->getPropertyRaw(iii);
std::string value = param->getString(); std::string value = param->getString();
widgetTmp->propertyValue.set(value); widgetTmp->propertyValue.set(etk::string_to_int8_t(value));
widgetTmp->propertyExpand.set(bvec2(true,false)); widgetTmp->propertyExpand.set(bvec2(true,false));
widgetTmp->propertyFill.set(bvec2(true,false)); widgetTmp->propertyFill.set(bvec2(true,false));
widgetTmp->signalModify.connect([=](const std::string& _value) {
esignal::Connection conn = widgetTmp->signalValue.connect(
[=](const int64_t& _value) {
APPL_INFO("set parameter : NAME name=" << param->getName() << " value=" << _value); APPL_INFO("set parameter : NAME name=" << param->getName() << " value=" << _value);
param->setString(_value); param->setString(etk::to_string(_value));
return; return;
}); });
m_listConnection.push_back(std::move(conn));
if (type == typeid(int64_t).name()) { if (type == typeid(int64_t).name()) {
type = "int64_t"; widgetTmp->propertyMin.set(0x8000000000000000LL);
widgetTmp->propertyMax.set(0x7FFFFFFFFFFFFFFFLL);
} else if (type == typeid(int32_t).name()) { } else if (type == typeid(int32_t).name()) {
type = "int32_t"; widgetTmp->propertyMin.set(0x80000000LL);
widgetTmp->propertyMax.set(0x7FFFFFFFLL);
} else if (type == typeid(int16_t).name()) { } else if (type == typeid(int16_t).name()) {
type = "int16_t"; type = "int16_t";
} else if (type == typeid(int8_t).name()) { } else if (type == typeid(int8_t).name()) {
@ -347,11 +356,13 @@ void appl::MainWindows::updateProperty() {
} else if (type == typeid(uint8_t).name()) { } else if (type == typeid(uint8_t).name()) {
type = "uint8_t"; type = "uint8_t";
} }
} else if (type == typeid(float).name()) { } else if (type == typeid(float).name()) {
type = "float"; type = "float";
} else if (type == typeid(double).name()) { } else if (type == typeid(double).name()) {
type = "double"; type = "double";
} else if (type == typeid(enum ewol::gravity).name()) { } else if (type == typeid(enum ewol::gravity).name()) {
// TODO: generize this for all list of parameters
type = "enum ewol::gravity"; type = "enum ewol::gravity";
std::shared_ptr<ewol::widget::Select> widgetTmp = ewol::widget::Select::create(); std::shared_ptr<ewol::widget::Select> widgetTmp = ewol::widget::Select::create();
widgetSizer->subWidgetAdd(widgetTmp); widgetSizer->subWidgetAdd(widgetTmp);
@ -374,12 +385,18 @@ void appl::MainWindows::updateProperty() {
} }
ewol::gravity value = paramValue->get(); ewol::gravity value = paramValue->get();
widgetTmp->propertyValue.set(value); widgetTmp->propertyValue.set(value);
widgetTmp->signalValue.connect([=](const int32_t& _value) { esignal::Connection conn = widgetTmp->signalValue.connect(
[=](const int32_t& _value) {
enum ewol::gravity val = ewol::gravity(_value); enum ewol::gravity val = ewol::gravity(_value);
APPL_INFO("set parameter: gravity name=" << param->getName() << " value=" << val); APPL_INFO("set parameter: gravity name=" << param->getName() << " value=" << val);
paramValue->set(val); paramValue->set(val);
return; return;
}); });
m_listConnection.push_back(std::move(conn));
}
} else {
// property list ...
} }
} }
std::shared_ptr<ewol::widget::Spacer> mySpacer = ewol::widget::Spacer::create(); std::shared_ptr<ewol::widget::Spacer> mySpacer = ewol::widget::Spacer::create();

View File

@ -18,10 +18,11 @@
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::vector<esignal::Connection> m_listConnection;
std::shared_ptr<ewol::widget::Sizer> m_sizerVert; ewol::widget::ComposerShared m_composer;
std::shared_ptr<ewol::widget::Sizer> m_sizerDynamic; ewol::widget::SizerShared m_sizerVert;
std::shared_ptr<ewol::Widget> m_subWidget; ewol::widget::SizerShared m_sizerDynamic;
ewol::WidgetShared m_subWidget;
ewol::gravity m_gravity; ewol::gravity m_gravity;
int32_t m_idWidget; int32_t m_idWidget;
public: public:

View File

@ -36,9 +36,10 @@
gravity="top" gravity="top"
lock="true,true" lock="true,true"
limit="0,0.5" limit="0,0.5"
min-size="25%"> min-size="25%"
hover="false">
<sizer mode="vert" <sizer mode="vert"
expand="false,false" expand="true,false"
fill="true" fill="true"
name="appl-dynamic-config"> name="appl-dynamic-config">
<label expand="true" fill="true">No config</label> <label expand="true" fill="true">No config</label>