From ba4464dc3ccf8dbe2c1641b2a49f58e513804b25 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Fri, 29 Apr 2016 10:33:05 -0400 Subject: [PATCH] show/hide VCA assign buttons depending on VCA existence --- gtk2_ardour/mixer_ui.cc | 10 +++++++ gtk2_ardour/visibility_group.cc | 49 +++++++++++++++++++++++++++++++++ gtk2_ardour/visibility_group.h | 3 ++ 3 files changed, 62 insertions(+) diff --git a/gtk2_ardour/mixer_ui.cc b/gtk2_ardour/mixer_ui.cc index 97485d162e..4d0c2c3e7f 100644 --- a/gtk2_ardour/mixer_ui.cc +++ b/gtk2_ardour/mixer_ui.cc @@ -1233,6 +1233,7 @@ Mixer_UI::redisplay_track_list () { TreeModel::Children rows = track_model->children(); TreeModel::Children::iterator i; + uint32_t n_masters = 0; if (no_track_list_redisplay) { return; @@ -1247,6 +1248,7 @@ Mixer_UI::redisplay_track_list () if (vms) { vca_packer.pack_start (*vms, false, false); vms->show (); + n_masters++; continue; } @@ -1296,6 +1298,14 @@ Mixer_UI::redisplay_track_list () } } + /* update visibility of VCA assign buttons */ + + if (n_masters == 0) { + UIConfiguration::instance().set_mixer_strip_visibility (VisibilityGroup::remove_element (UIConfiguration::instance().get_mixer_strip_visibility(), X_("VCA"))); + } else { + UIConfiguration::instance().set_mixer_strip_visibility (VisibilityGroup::add_element (UIConfiguration::instance().get_mixer_strip_visibility(), X_("VCA"))); + } + _group_tabs->set_dirty (); } diff --git a/gtk2_ardour/visibility_group.cc b/gtk2_ardour/visibility_group.cc index 46a941d0fc..9a59e613eb 100644 --- a/gtk2_ardour/visibility_group.cc +++ b/gtk2_ardour/visibility_group.cc @@ -21,7 +21,10 @@ #include #include #include + +#include "pbd/strsplit.h" #include "pbd/xml++.h" + #include "visibility_group.h" #include "i18n.h" @@ -167,6 +170,52 @@ VisibilityGroup::set_state (string v) update (); } +string +VisibilityGroup::remove_element (std::string const& from, std::string const& element) +{ + std::vector s; + std::string ret; + + split (from, s, ','); + for (std::vector::const_iterator i = s.begin(); i != s.end(); ++i) { + if ((*i) == element) { + continue; + } + if (!ret.empty()) { + ret += ','; + } + ret += *i; + } + + return ret; +} + +string +VisibilityGroup::add_element (std::string const& from, std::string const& element) +{ + std::vector s; + std::string ret; + + split (from, s, ','); + + for (std::vector::const_iterator i = s.begin(); i != s.end(); ++i) { + if ((*i) == element) { + /* already present, just return the original */ + return from; + } + } + + ret = from; + + if (!ret.empty()) { + ret += ','; + } + + ret += element; + + return ret; +} + string VisibilityGroup::get_state_name () const { diff --git a/gtk2_ardour/visibility_group.h b/gtk2_ardour/visibility_group.h index 8ac2c1db5f..ce1adecdd4 100644 --- a/gtk2_ardour/visibility_group.h +++ b/gtk2_ardour/visibility_group.h @@ -56,6 +56,9 @@ public: PBD::Signal0 VisibilityChanged; + static std::string remove_element (std::string const& from, std::string const& element); + static std::string add_element (std::string const& from, std::string const& element); + private: struct Member {