From 632fafaa3d1615c88acce8b75559061d36e5f149 Mon Sep 17 00:00:00 2001 From: Edouard DUPIN Date: Thu, 28 Jan 2016 22:47:03 +0100 Subject: [PATCH] [DEV] continue integration af an introspection of the widget parameter --- tools/visual_test/appl/MainWindows.cpp | 218 ++++++++++++++++++++++++- tools/visual_test/appl/MainWindows.h | 2 + 2 files changed, 215 insertions(+), 5 deletions(-) diff --git a/tools/visual_test/appl/MainWindows.cpp b/tools/visual_test/appl/MainWindows.cpp index fe504e20..8efb886c 100644 --- a/tools/visual_test/appl/MainWindows.cpp +++ b/tools/visual_test/appl/MainWindows.cpp @@ -50,21 +50,22 @@ appl::MainWindows::MainWindows() : void appl::MainWindows::init() { ewol::widget::Windows::init(); std::shared_ptr mySizerHori; + std::shared_ptr mySizerVert; std::shared_ptr myButton; - m_sizerVert = ewol::widget::Sizer::create(ewol::widget::Sizer::modeVert); - if (m_sizerVert == nullptr) { + mySizerVert = ewol::widget::Sizer::create(ewol::widget::Sizer::modeVert); + if (mySizerVert == nullptr) { APPL_ERROR("Allocation error mySizerVert"); return; } - setSubWidget(m_sizerVert); + setSubWidget(mySizerVert); mySizerHori = ewol::widget::Sizer::create(ewol::widget::Sizer::modeHori); if (mySizerHori == nullptr) { APPL_ERROR("Allocation error mySizerHori"); return; } - m_sizerVert->subWidgetAdd(mySizerHori); + mySizerVert->subWidgetAdd(mySizerHori); myButton = ewol::widget::Button::create(); if (myButton != nullptr) { myButton->setSubWidget(ewol::widget::Label::create("default theme (cube)")); @@ -95,8 +96,44 @@ void appl::MainWindows::init() { mySpacer->setFill(bvec2(true,false)); mySpacer->setMinSize(vec2(3,3)); mySpacer->setColor(0x000000FF); - m_sizerVert->subWidgetAdd(mySpacer); + mySizerVert->subWidgetAdd(mySpacer); } + mySizerHori = ewol::widget::Sizer::create(ewol::widget::Sizer::modeHori); + if (mySizerHori == nullptr) { + APPL_ERROR("Allocation error mySizerVert"); + return; + } + mySizerHori->setExpand(bvec2(true,true)); + mySizerHori->setFill(bvec2(true,true)); + mySizerHori->lockExpand(bvec2(true,true)); + mySizerVert->subWidgetAdd(mySizerHori); + m_sizerDynamic = ewol::widget::Sizer::create(ewol::widget::Sizer::modeVert); + if (m_sizerDynamic == nullptr) { + APPL_ERROR("Allocation error mySizerHori"); + return; + } + m_sizerDynamic->setExpand(bvec2(false,true)); + m_sizerDynamic->setFill(bvec2(true,true)); + m_sizerDynamic->setMinSize(gale::Dimension::Dimension(vec2(12,0), gale::Dimension::Pourcent)); + m_sizerDynamic->lockExpand(bvec2(true,true)); + mySizerHori->subWidgetAdd(m_sizerDynamic); + mySpacer = ewol::widget::Spacer::create(); + if (mySpacer == nullptr) { + APPL_ERROR("Allocation error mySizerHori"); + return; + } + mySpacer->setExpand(bvec2(false,true)); + mySpacer->setFill(bvec2(false,true)); + mySpacer->setMinSize(vec2(3,3)); + mySpacer->setColor(0x000000FF); + mySizerHori->subWidgetAdd(mySpacer); + + m_sizerVert = ewol::widget::Sizer::create(ewol::widget::Sizer::modeVert); + if (m_sizerVert == nullptr) { + APPL_ERROR("Allocation error mySizerVert"); + return; + } + mySizerHori->subWidgetAdd(m_sizerVert); } void appl::MainWindows::onCallbackThemeChange(const bool& _value) { @@ -185,5 +222,176 @@ void appl::MainWindows::onCallbackWidgetChange(int32_t _increment) { m_idWidget = -1; break; } + updateProperty(); +} + +void appl::MainWindows::updateProperty() { + // remove all elements: + m_sizerDynamic->subWidgetRemoveAll(); + if (m_subWidget == nullptr) { + return; + } + std::shared_ptr widget = ewol::widget::Label::create(m_subWidget->getObjectType()); + m_sizerDynamic->subWidgetAdd(widget); + std::shared_ptr mySpacer = ewol::widget::Spacer::create(); + if (mySpacer != nullptr) { + mySpacer->setExpand(bvec2(true,false)); + mySpacer->setFill(bvec2(true,false)); + mySpacer->setMinSize(vec2(3,3)); + mySpacer->setColor(0x000000AA); + m_sizerDynamic->subWidgetAddStart(mySpacer); + } + for (size_t iii=0; iiigetParameterCount(); ++iii) { + ewol::parameter::Parameter* param = m_subWidget->getParameterRaw(iii); + if (param == nullptr) { + APPL_WARNING("Parameter EMPTY . " << iii << " : nullptr"); + continue; + } + std::string type = param->getType(); + if (type == typeid(std::string).name()) { + type = "std::string"; + } else if (type == typeid(gale::Dimension).name()) { + type = "gale::Dimension"; + } else if (type == typeid(bvec2).name()) { + type = "bvec2"; + } else if (type == typeid(ivec2).name()) { + type = "ivec2"; + } else if (type == typeid(uivec2).name()) { + type = "uivec2"; + } else if (type == typeid(vec2).name()) { + type = "vec2"; + } else if (type == typeid(bool).name()) { + type = "bool"; + } else if (type == typeid(int64_t).name()) { + type = "int64_t"; + } else if (type == typeid(int32_t).name()) { + type = "int32_t"; + } else if (type == typeid(int16_t).name()) { + type = "int16_t"; + } else if (type == typeid(int8_t).name()) { + type = "int8_t"; + } else if (type == typeid(uint64_t).name()) { + type = "uint64_t"; + } else if (type == typeid(uint32_t).name()) { + type = "uint32_t"; + } else if (type == typeid(uint16_t).name()) { + type = "uint16_t"; + } else if (type == typeid(uint8_t).name()) { + type = "uint8_t"; + } else if (type == typeid(float).name()) { + type = "float"; + } else if (type == typeid(double).name()) { + type = "double"; + } else if (type == typeid(enum ewol::gravity).name()) { + type = "enum ewol::gravity"; + } + // / " + param->getParameterType() + "<" + type + "> / " + param->getString() + std::shared_ptr widgetSizer = ewol::widget::Sizer::create(ewol::widget::Sizer::modeHori); + if (widgetSizer != nullptr) { + widgetSizer->setExpand(bvec2(true,false)); + widgetSizer->setFill(bvec2(true,true)); + m_sizerDynamic->subWidgetAddStart(widgetSizer); + + std::shared_ptr widget = ewol::widget::Label::create(param->getName() + ":"); + widgetSizer->subWidgetAdd(widget); + mySpacer = ewol::widget::Spacer::create(); + if (mySpacer != nullptr) { + mySpacer->setExpand(bvec2(true,false)); + mySpacer->setFill(bvec2(true,false)); + mySpacer->setMinSize(vec2(3,3)); + widgetSizer->subWidgetAdd(mySpacer); + } + // Main part to do ... + std::string type = param->getType(); + if (type == typeid(std::string).name()) { + type = "std::string"; + } else if (type == typeid(gale::Dimension).name()) { + type = "gale::Dimension"; + } else if (type == typeid(bvec2).name()) { + //type = "bvec2"; + std::shared_ptr widgetTmp = ewol::widget::CheckBox::create(); + widgetSizer->subWidgetAdd(widgetTmp); + widgetTmp->signalValue.connect([=](const bool& _value) { + if (m_subWidget == nullptr) { + APPL_ERROR("nullptr..."); + return; + } + APPL_INFO("set parameter : X name=" << param->getName() << " value=" << _value); + //m_subWidget->parameterSet(param->getName(), etk::to_string(_value)); + return; + }); + std::shared_ptr widgetLabel = ewol::widget::Label::create("x"); + widgetTmp->setSubWidget(widgetLabel); + + widgetTmp = ewol::widget::CheckBox::create(); + widgetSizer->subWidgetAdd(widgetTmp); + widgetTmp->signalValue.connect([=](const bool& _value) { + if (m_subWidget == nullptr) { + APPL_ERROR("nullptr..."); + return; + } + APPL_INFO("set parameter : Y name=" << param->getName() << " value=" << _value); + //m_subWidget->parameterSet(param->getName(), etk::to_string(_value)); + return; + }); + widgetLabel = ewol::widget::Label::create("y"); + widgetTmp->setSubWidget(widgetLabel); + } else if (type == typeid(ivec2).name()) { + type = "ivec2"; + } else if (type == typeid(uivec2).name()) { + type = "uivec2"; + } else if (type == typeid(vec2).name()) { + type = "vec2"; + } else if (type == typeid(bool).name()) { + type = "bool"; + std::shared_ptr widgetTmp = ewol::widget::CheckBox::create(); + widgetSizer->subWidgetAdd(widgetTmp); + widgetTmp->signalValue.connect([=](const bool& _value) { + if (m_subWidget == nullptr) { + APPL_ERROR("nullptr..."); + return; + } + APPL_INFO("set parameter : name=" << param->getName() << " value=" << _value); + m_subWidget->parameterSet(param->getName(), etk::to_string(_value)); + return; + }); + } else if (type == typeid(int64_t).name()) { + type = "int64_t"; + } else if (type == typeid(int32_t).name()) { + type = "int32_t"; + } else if (type == typeid(int16_t).name()) { + type = "int16_t"; + } else if (type == typeid(int8_t).name()) { + type = "int8_t"; + } else if (type == typeid(uint64_t).name()) { + type = "uint64_t"; + } else if (type == typeid(uint32_t).name()) { + type = "uint32_t"; + } else if (type == typeid(uint16_t).name()) { + type = "uint16_t"; + } else if (type == typeid(uint8_t).name()) { + type = "uint8_t"; + } else if (type == typeid(float).name()) { + type = "float"; + } else if (type == typeid(double).name()) { + type = "double"; + } else if (type == typeid(enum ewol::gravity).name()) { + type = "enum ewol::gravity"; + } + } + mySpacer = ewol::widget::Spacer::create(); + if (mySpacer != nullptr) { + mySpacer->setExpand(bvec2(true,false)); + mySpacer->setFill(bvec2(true,false)); + mySpacer->setMinSize(vec2(3,3)); + mySpacer->setColor(0x000000AA); + m_sizerDynamic->subWidgetAddStart(mySpacer); + } + } + mySpacer = ewol::widget::Spacer::create(); + if (mySpacer != nullptr) { + mySpacer->setExpand(bvec2(true,true)); + m_sizerDynamic->subWidgetAddStart(mySpacer); + } } diff --git a/tools/visual_test/appl/MainWindows.h b/tools/visual_test/appl/MainWindows.h index 58575455..86e60943 100644 --- a/tools/visual_test/appl/MainWindows.h +++ b/tools/visual_test/appl/MainWindows.h @@ -20,6 +20,7 @@ namespace appl { class MainWindows : public ewol::widget::Windows { private: std::shared_ptr m_sizerVert; + std::shared_ptr m_sizerDynamic; std::shared_ptr m_subWidget; std::shared_ptr m_testName; int32_t m_idWidget; @@ -33,6 +34,7 @@ namespace appl { protected: void onCallbackThemeChange(const bool& _value); void onCallbackWidgetChange(int32_t _increment); + void updateProperty(); }; }; #endif