From 19e97d1d64e8aa6d87d79d1f6332065992e5e027 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Tue, 8 Nov 2011 02:10:56 +0000 Subject: Attempt to fix some confusions caused by bundles containing different types of port; if we loop over N MIDI channels of a mixed bundle, for example, we must convert 0...N to the indices of the channels within the bundle. Also remove the hack of creating new bundles to contain a subset of another bundle's ports; if you do this, any signals emitted by the other bundle are ignored. Should fix #4454. git-svn-id: svn://localhost/ardour2/branches/3.0@10490 d708f5d6-7413-0410-9779-e7cbd77b26cf --- gtk2_ardour/port_matrix_grid.cc | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) (limited to 'gtk2_ardour/port_matrix_grid.cc') diff --git a/gtk2_ardour/port_matrix_grid.cc b/gtk2_ardour/port_matrix_grid.cc index 67fa73c097..a4ca3df1b8 100644 --- a/gtk2_ardour/port_matrix_grid.cc +++ b/gtk2_ardour/port_matrix_grid.cc @@ -191,8 +191,16 @@ PortMatrixGrid::render (cairo_t* cr) for (uint32_t l = 0; l < _matrix->count_of_our_type ((*j)->bundle->nchannels()); ++l) { ARDOUR::BundleChannel c[2]; - c[_matrix->column_index()] = ARDOUR::BundleChannel ((*i)->bundle, k); - c[_matrix->row_index()] = ARDOUR::BundleChannel ((*j)->bundle, l); + + c[_matrix->column_index()] = ARDOUR::BundleChannel ( + (*i)->bundle, + (*i)->bundle->type_channel_to_overall (_matrix->type (), k) + ); + + c[_matrix->row_index()] = ARDOUR::BundleChannel ( + (*j)->bundle, + (*j)->bundle->type_channel_to_overall (_matrix->type (), l) + ); if (c[0].bundle->channel_type (c[0].channel) != c[1].bundle->channel_type (c[1].channel)) { /* these two channels are of different types */ @@ -328,13 +336,6 @@ PortMatrixGrid::button_press (double x, double y, int b, uint32_t t, guint) void PortMatrixGrid::set_association (PortMatrixNode node, bool s) { - if (node.row.bundle->nchannels().n_total() == 0 || node.column.bundle->nchannels().n_total() == 0) { - /* One of the bundles has no channels, which means that it has none of the appropriate type, - and is only being displayed to look pretty. So we don't need to do anything. - */ - return; - } - if (_matrix->show_only_bundles()) { for (uint32_t i = 0; i < node.column.bundle->nchannels().n_total(); ++i) { @@ -358,6 +359,7 @@ PortMatrixGrid::set_association (PortMatrixNode node, bool s) ARDOUR::BundleChannel c[2]; c[_matrix->row_index()] = node.row; c[_matrix->column_index()] = node.column; + _matrix->set_state (c, s); } } -- cgit v1.2.3