57 ossia::net::device_base& dev, ossia::net::node_base& parent,
58 const std::string& group,
const std::vector<TreeControl>& controls)
60 std::vector<ossia::net::parameter_base*> out;
61 out.reserve(controls.size());
66 ossia::net::node_base* groupPtr = parent.find_child(group);
68 groupPtr = parent.add_child(
69 std::make_unique<ossia::net::generic_node>(group, dev, parent));
72 out.resize(controls.size(),
nullptr);
76 for(
const auto& c : controls)
80 if(
auto* existing = groupPtr->find_child(c.name))
85 auto* param = existing->get_parameter();
86 const bool parameterWasRestored = (param !=
nullptr);
88 param = existing->create_parameter(c.type);
91 out.push_back(
nullptr);
96 param->set_domain(c.domain);
97 param->set_access(c.access);
98 if(!c.description.empty())
99 ossia::net::set_description(*existing, c.description);
108 const auto restored = param->value();
109 param->callbacks_clear();
115 if(parameterWasRestored && restored.valid())
118 param->add_callback(std::move(cb));
120 out.push_back(param);
124 auto node = std::make_unique<ossia::net::generic_node>(c.name, dev, *groupPtr);
125 auto* param = node->create_parameter(c.type);
128 out.push_back(
nullptr);
133 param->set_domain(c.domain);
134 param->set_access(c.access);
136 if(!c.description.empty())
137 ossia::net::set_description(*node, c.description);
143 if(c.initial.valid())
144 param->push_value(c.initial);
149 param->add_callback(std::move(cb));
153 auto* added = groupPtr->add_child(std::move(node));
154 out.push_back(added ? param :
nullptr);
std::vector< ossia::net::parameter_base * > addControlGroup(ossia::net::device_base &dev, ossia::net::node_base &parent, const std::string &group, const std::vector< TreeControl > &controls)
Creates <parent>/<group>/<name> for each control.
Definition ControlTree.hpp:56