summaryrefslogtreecommitdiff
path: root/gtk2_ardour
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2016-04-29 10:33:05 -0400
committerPaul Davis <paul@linuxaudiosystems.com>2016-05-31 15:30:42 -0400
commitba4464dc3ccf8dbe2c1641b2a49f58e513804b25 (patch)
treeac55bcc49a7d5af2361f80ed14ff464984ae3083 /gtk2_ardour
parentf485cfa324717f57b9f820f43f1b53307b96a8b9 (diff)
show/hide VCA assign buttons depending on VCA existence
Diffstat (limited to 'gtk2_ardour')
-rw-r--r--gtk2_ardour/mixer_ui.cc10
-rw-r--r--gtk2_ardour/visibility_group.cc49
-rw-r--r--gtk2_ardour/visibility_group.h3
3 files changed, 62 insertions, 0 deletions
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 <gtkmm/menu.h>
#include <gtkmm/menushell.h>
#include <gtkmm/treeview.h>
+
+#include "pbd/strsplit.h"
#include "pbd/xml++.h"
+
#include "visibility_group.h"
#include "i18n.h"
@@ -168,6 +171,52 @@ VisibilityGroup::set_state (string v)
}
string
+VisibilityGroup::remove_element (std::string const& from, std::string const& element)
+{
+ std::vector<string> s;
+ std::string ret;
+
+ split (from, s, ',');
+ for (std::vector<string>::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<string> s;
+ std::string ret;
+
+ split (from, s, ',');
+
+ for (std::vector<string>::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
{
return _xml_property_name;
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<void> 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 {