From 92e412661772e6b9c83109b7ee4996f4c040d3f4 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Thu, 1 Jul 2010 01:14:14 +0000 Subject: Allow port matrix to show both audio and midi ports at the same time, and use that facility for route IO selectors. git-svn-id: svn://localhost/ardour2/branches/3.0@7344 d708f5d6-7413-0410-9779-e7cbd77b26cf --- libs/ardour/ardour/data_type.h | 10 ++++++++++ libs/ardour/ardour/io.h | 2 +- libs/ardour/io.cc | 38 +++++++++++++++++++++++++++----------- 3 files changed, 38 insertions(+), 12 deletions(-) (limited to 'libs/ardour') diff --git a/libs/ardour/ardour/data_type.h b/libs/ardour/ardour/data_type.h index 36114b29a9..07ba7c60ef 100644 --- a/libs/ardour/ardour/data_type.h +++ b/libs/ardour/ardour/data_type.h @@ -23,6 +23,8 @@ #include #include +#include "i18n.h" + namespace ARDOUR { @@ -88,6 +90,14 @@ public: } } + const char* to_i18n_string() const { + switch (_symbol) { + case AUDIO: return _("audio"); + case MIDI: return _("MIDI"); + default: return _("unknown"); + } + } + inline operator uint32_t() const { return (uint32_t)_symbol; } /** DataType iterator, for writing generic loops that iterate over all diff --git a/libs/ardour/ardour/io.h b/libs/ardour/ardour/io.h index 72815c17cc..7475dbb203 100644 --- a/libs/ardour/ardour/io.h +++ b/libs/ardour/ardour/io.h @@ -218,7 +218,7 @@ class IO : public SessionObject, public Latent int32_t find_port_hole (const char* base); void setup_bundle (); - std::string bundle_channel_name (uint32_t, uint32_t) const; + std::string bundle_channel_name (uint32_t, uint32_t, DataType) const; }; } // namespace ARDOUR diff --git a/libs/ardour/io.cc b/libs/ardour/io.cc index 0cc61e1044..338705d633 100644 --- a/libs/ardour/io.cc +++ b/libs/ardour/io.cc @@ -1340,10 +1340,17 @@ IO::setup_bundle () snprintf(buf, sizeof (buf), _("%s out"), _name.val().c_str()); } _bundle->set_name (buf); - uint32_t const ni = _ports.num_ports(); - for (uint32_t i = 0; i < ni; ++i) { - _bundle->add_channel (bundle_channel_name (i, ni), _ports.port(i)->type()); - _bundle->set_port (i, _session.engine().make_port_name_non_relative (_ports.port(i)->name())); + + int c = 0; + for (DataType::iterator i = DataType::begin(); i != DataType::end(); ++i) { + + uint32_t const N = _ports.count().get (*i); + for (uint32_t j = 0; j < N; ++j) { + _bundle->add_channel (bundle_channel_name (j, N, *i), *i); + _bundle->set_port (c, _session.engine().make_port_name_non_relative (_ports.port(*i, j)->name())); + ++c; + } + } _bundle->resume_signals (); @@ -1397,18 +1404,27 @@ IO::UserBundleInfo::UserBundleInfo (IO* io, boost::shared_ptr b) } std::string -IO::bundle_channel_name (uint32_t c, uint32_t n) const +IO::bundle_channel_name (uint32_t c, uint32_t n, DataType t) const { char buf[32]; - switch (n) { - case 1: - return _("mono"); - case 2: - return c == 0 ? _("L") : _("R"); - default: + if (t == DataType::AUDIO) { + + switch (n) { + case 1: + return _("mono"); + case 2: + return c == 0 ? _("L") : _("R"); + default: + snprintf (buf, sizeof(buf), _("%d"), (c + 1)); + return buf; + } + + } else { + snprintf (buf, sizeof(buf), _("%d"), (c + 1)); return buf; + } return ""; -- cgit v1.2.3