diff --git a/SofaImGui/src/SofaImGui/ImGuiDataWidget.cpp b/SofaImGui/src/SofaImGui/ImGuiDataWidget.cpp index b58bda3b19..127aea4306 100644 --- a/SofaImGui/src/SofaImGui/ImGuiDataWidget.cpp +++ b/SofaImGui/src/SofaImGui/ImGuiDataWidget.cpp @@ -25,6 +25,8 @@ #include #include +#include + namespace sofaimgui { @@ -480,6 +482,31 @@ void DataWidget > >::showWidget(MyData showWidgetT(data); } +/*********************************************************************************************************************** + * OptionsGroup + **********************************************************************************************************************/ + +template<> +void DataWidget::showWidget(MyData& data) +{ + const auto& label = data.getName(); + const auto id = data.getName() + data.getOwner()->getPathName(); + + const auto& optionsGroup = data.getValue(); + int selectedOption = static_cast(optionsGroup.getSelectedId()); + + std::unique_ptr charArray(new const char*[optionsGroup.size()]); + for (unsigned int i = 0; i < optionsGroup.size(); ++i) + { + charArray[i] = optionsGroup[i].c_str(); + } + + if (ImGui::Combo((label + "##" + id).c_str(), &selectedOption, charArray.get(), static_cast(optionsGroup.size()))) + { + helper::WriteAccessor(data)->setSelectedItem(selectedOption); + } +} + /*********************************************************************************************************************** * Factory **********************************************************************************************************************/ @@ -539,4 +566,6 @@ const bool dw_vector_tri = DataWidgetFactory::Add > >(); const bool dw_map_vectord = DataWidgetFactory::Add > >(); +const bool dw_optionsGroup = DataWidgetFactory::Add(); + }