mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-06 06:44:57 +01:00
Group system ports by common prefix.
Extra "other" ("External") ports were already being grouped by their
common prefix into bundles to better display ports coming from different
jack clients. This commit factors out that logic into a separate method
to also apply this logic to extra "system" ("Hardware") ports. This way
hardware ports from different devices/clients (for example when using
pipewire as jack backend) are grouped by device rather than all being
listed as one bundle.
This commit is contained in:
parent
d0b95b7685
commit
7a4ddf5cce
2 changed files with 36 additions and 19 deletions
|
|
@ -697,8 +697,7 @@ PortGroupList::gather (ARDOUR::Session* session, ARDOUR::DataType type, bool inp
|
||||||
|
|
||||||
for (DataType::iterator i = DataType::begin(); i != DataType::end(); ++i) {
|
for (DataType::iterator i = DataType::begin(); i != DataType::end(); ++i) {
|
||||||
if (!extra_system[*i].empty()) {
|
if (!extra_system[*i].empty()) {
|
||||||
boost::shared_ptr<Bundle> b = make_bundle_from_ports (extra_system[*i], *i, inputs);
|
add_bundles_for_ports (extra_system[*i], *i, inputs, allow_dups, system);
|
||||||
system->add_bundle (b, allow_dups);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -712,23 +711,7 @@ PortGroupList::gather (ARDOUR::Session* session, ARDOUR::DataType type, bool inp
|
||||||
|
|
||||||
for (DataType::iterator i = DataType::begin(); i != DataType::end(); ++i) {
|
for (DataType::iterator i = DataType::begin(); i != DataType::end(); ++i) {
|
||||||
if (extra_other[*i].empty()) continue;
|
if (extra_other[*i].empty()) continue;
|
||||||
std::string cp;
|
add_bundles_for_ports (extra_other[*i], *i, inputs, allow_dups, other);
|
||||||
std::vector<std::string> nb;
|
|
||||||
for (uint32_t j = 0; j < extra_other[*i].size(); ++j) {
|
|
||||||
std::string nn = extra_other[*i][j];
|
|
||||||
std::string pf = nn.substr (0, nn.find_first_of (":") + 1);
|
|
||||||
if (pf != cp && !nb.empty()) {
|
|
||||||
boost::shared_ptr<Bundle> b = make_bundle_from_ports (nb, *i, inputs);
|
|
||||||
other->add_bundle (b);
|
|
||||||
nb.clear();
|
|
||||||
}
|
|
||||||
cp = pf;
|
|
||||||
nb.push_back(extra_other[*i][j]);
|
|
||||||
}
|
|
||||||
if (!nb.empty()) {
|
|
||||||
boost::shared_ptr<Bundle> b = make_bundle_from_ports (nb, *i, inputs);
|
|
||||||
other->add_bundle (b);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!allow_dups) {
|
if (!allow_dups) {
|
||||||
|
|
@ -747,6 +730,39 @@ PortGroupList::gather (ARDOUR::Session* session, ARDOUR::DataType type, bool inp
|
||||||
emit_changed ();
|
emit_changed ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
PortGroupList::add_bundles_for_ports (std::vector<std::string> const & p, ARDOUR::DataType type, bool inputs, bool allow_dups, boost::shared_ptr<PortGroup> group) const
|
||||||
|
{
|
||||||
|
bool has_colon = true, has_slash = true;
|
||||||
|
for (const auto& s : p) {
|
||||||
|
if (s.find('/') == std::string::npos) has_slash = false;
|
||||||
|
if (s.find(':') == std::string::npos) has_colon = false;
|
||||||
|
}
|
||||||
|
std::string sep = has_slash ? "/" : has_colon ? ":" : "";
|
||||||
|
if (sep.empty()) {
|
||||||
|
boost::shared_ptr<Bundle> b = make_bundle_from_ports (p, type, inputs);
|
||||||
|
group->add_bundle (b, allow_dups);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::vector<std::string> nb;
|
||||||
|
std::string cp;
|
||||||
|
for (const auto& s : p) {
|
||||||
|
std::string pf = s.substr (0, s.find_first_of (sep) + 1);
|
||||||
|
if (pf != cp && !nb.empty()) {
|
||||||
|
boost::shared_ptr<Bundle> b = make_bundle_from_ports (nb, type, inputs);
|
||||||
|
group->add_bundle (b, allow_dups);
|
||||||
|
nb.clear();
|
||||||
|
}
|
||||||
|
cp = pf;
|
||||||
|
nb.push_back(s);
|
||||||
|
}
|
||||||
|
if (!nb.empty()) {
|
||||||
|
boost::shared_ptr<Bundle> b = make_bundle_from_ports (nb, type, inputs);
|
||||||
|
group->add_bundle (b, allow_dups);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
boost::shared_ptr<Bundle>
|
boost::shared_ptr<Bundle>
|
||||||
PortGroupList::make_bundle_from_ports (std::vector<std::string> const & p, ARDOUR::DataType type, bool inputs, std::string const& bundle_name) const
|
PortGroupList::make_bundle_from_ports (std::vector<std::string> const & p, ARDOUR::DataType type, bool inputs, std::string const& bundle_name) const
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -144,6 +144,7 @@ private:
|
||||||
void emit_changed ();
|
void emit_changed ();
|
||||||
void emit_bundle_changed (ARDOUR::Bundle::Change);
|
void emit_bundle_changed (ARDOUR::Bundle::Change);
|
||||||
boost::shared_ptr<ARDOUR::Bundle> make_bundle_from_ports (std::vector<std::string> const &, ARDOUR::DataType, bool, std::string const& bundle_name = std::string()) const;
|
boost::shared_ptr<ARDOUR::Bundle> make_bundle_from_ports (std::vector<std::string> const &, ARDOUR::DataType, bool, std::string const& bundle_name = std::string()) const;
|
||||||
|
void add_bundles_for_ports (std::vector<std::string> const &, ARDOUR::DataType, bool, bool, boost::shared_ptr<PortGroup>) const;
|
||||||
void maybe_add_processor_to_list (boost::weak_ptr<ARDOUR::Processor>, std::list<boost::shared_ptr<ARDOUR::IO> > *, bool, std::set<boost::shared_ptr<ARDOUR::IO> > &);
|
void maybe_add_processor_to_list (boost::weak_ptr<ARDOUR::Processor>, std::list<boost::shared_ptr<ARDOUR::IO> > *, bool, std::set<boost::shared_ptr<ARDOUR::IO> > &);
|
||||||
|
|
||||||
mutable PortGroup::BundleList _bundles;
|
mutable PortGroup::BundleList _bundles;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue