diff options
author | Carl Hetherington <carl@carlh.net> | 2009-12-22 01:10:25 +0000 |
---|---|---|
committer | Carl Hetherington <carl@carlh.net> | 2009-12-22 01:10:25 +0000 |
commit | 8e59a26ccf13de93ac681d761bad09cd6bcf0c90 (patch) | |
tree | b9a5454636005856da201b99efb1dae3aaf7993f /gtk2_ardour/port_matrix.cc | |
parent | 06f094d4b64a826ddd71c970aaa1679867a75975 (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.cc | 38 |
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 (); |