summaryrefslogtreecommitdiff
path: root/gtk2_ardour/port_matrix.cc
diff options
context:
space:
mode:
authorCarl Hetherington <carl@carlh.net>2009-12-22 01:10:25 +0000
committerCarl Hetherington <carl@carlh.net>2009-12-22 01:10:25 +0000
commit8e59a26ccf13de93ac681d761bad09cd6bcf0c90 (patch)
treeb9a5454636005856da201b99efb1dae3aaf7993f /gtk2_ardour/port_matrix.cc
parent06f094d4b64a826ddd71c970aaa1679867a75975 (diff)
Add remove all and disconnect all to port matrix menu. Hide bundles whose channels are already represented by other, larger bundles.
git-svn-id: svn://localhost/ardour2/branches/3.0@6381 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour/port_matrix.cc')
-rw-r--r--gtk2_ardour/port_matrix.cc38
1 files changed, 38 insertions, 0 deletions
diff --git a/gtk2_ardour/port_matrix.cc b/gtk2_ardour/port_matrix.cc
index 33115432e6..247d750534 100644
--- a/gtk2_ardour/port_matrix.cc
+++ b/gtk2_ardour/port_matrix.cc
@@ -411,6 +411,12 @@ PortMatrix::popup_menu (BundleChannel column, BundleChannel row, uint32_t t)
if (bc[dim].channel != -1) {
add_remove_option (sub, w, bc[dim].channel);
} else {
+
+ snprintf (buf, sizeof (buf), _("Remove all"));
+ sub.push_back (
+ MenuElem (buf, sigc::bind (sigc::mem_fun (*this, &PortMatrix::remove_all_channels), w))
+ );
+
for (uint32_t i = 0; i < bc[dim].bundle->nchannels(); ++i) {
add_remove_option (sub, w, i);
}
@@ -424,9 +430,15 @@ PortMatrix::popup_menu (BundleChannel column, BundleChannel row, uint32_t t)
);
} else {
+
if (bc[dim].channel != -1) {
add_disassociate_option (sub, w, dim, bc[dim].channel);
} else {
+ snprintf (buf, sizeof (buf), _("%s all"), disassociation_verb().c_str());
+ sub.push_back (
+ MenuElem (buf, sigc::bind (sigc::mem_fun (*this, &PortMatrix::disassociate_all_on_bundle), w, dim))
+ );
+
for (uint32_t i = 0; i < bc[dim].bundle->nchannels(); ++i) {
add_disassociate_option (sub, w, dim, i);
}
@@ -477,6 +489,19 @@ PortMatrix::rename_channel_proxy (boost::weak_ptr<Bundle> b, uint32_t c)
}
void
+PortMatrix::disassociate_all_on_bundle (boost::weak_ptr<Bundle> bundle, int dim)
+{
+ boost::shared_ptr<Bundle> sb = bundle.lock ();
+ if (!sb) {
+ return;
+ }
+
+ for (uint32_t i = 0; i < sb->nchannels(); ++i) {
+ disassociate_all_on_channel (bundle, i, dim);
+ }
+}
+
+void
PortMatrix::disassociate_all_on_channel (boost::weak_ptr<Bundle> bundle, uint32_t channel, int dim)
{
boost::shared_ptr<Bundle> sb = bundle.lock ();
@@ -621,6 +646,19 @@ PortMatrix::remove_channel (ARDOUR::BundleChannel b)
}
void
+PortMatrix::remove_all_channels (boost::weak_ptr<Bundle> w)
+{
+ boost::shared_ptr<Bundle> b = w.lock ();
+ if (!b) {
+ return;
+ }
+
+ for (uint32_t i = 0; i < b->nchannels(); ++i) {
+ remove_channel (ARDOUR::BundleChannel (b, i));
+ }
+}
+
+void
PortMatrix::add_channel_proxy (boost::weak_ptr<Bundle> w)
{
boost::shared_ptr<Bundle> b = w.lock ();