summaryrefslogtreecommitdiff
path: root/gtk2_ardour/ardour_ui_dialogs.cc
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2015-07-22 21:14:08 -0400
committerPaul Davis <paul@linuxaudiosystems.com>2016-02-22 15:31:22 -0500
commit291575683cb87713cc7a5856a96c5fdd69b9a52c (patch)
treec7a270f828a47acbd81b68d280da64f92f545e71 /gtk2_ardour/ardour_ui_dialogs.cc
parent1c41f75488ba654a22bf63237edc3a8c2dfca0e5 (diff)
dynamically update menus/actions controlling tabbable show/hide/attach/detach operations
Diffstat (limited to 'gtk2_ardour/ardour_ui_dialogs.cc')
-rw-r--r--gtk2_ardour/ardour_ui_dialogs.cc63
1 files changed, 63 insertions, 0 deletions
diff --git a/gtk2_ardour/ardour_ui_dialogs.cc b/gtk2_ardour/ardour_ui_dialogs.cc
index 0d8c8a9c27..08174a62bc 100644
--- a/gtk2_ardour/ardour_ui_dialogs.cc
+++ b/gtk2_ardour/ardour_ui_dialogs.cc
@@ -23,6 +23,10 @@
This is to cut down on the compile times. It also helps with my sanity.
*/
+#include <vector>
+
+#include "pbd/convert.h"
+
#include "ardour/audioengine.h"
#include "ardour/automation_watch.h"
#include "ardour/control_protocol_manager.h"
@@ -377,6 +381,65 @@ ARDOUR_UI::detach_tabbable (Tabbable* t)
}
void
+ARDOUR_UI::tabbable_state_change (Tabbable& t)
+{
+ std::vector<std::string> insensitive_action_names;
+ std::vector<std::string> sensitive_action_names;
+ Glib::RefPtr<Action> action;
+ std::string downcased_name = downcase (t.name());
+
+ std::cerr << t.name() << " changed state\n";
+
+ if (t.tabbed()) {
+
+ std::cerr << "tabbed\n";
+
+ insensitive_action_names.push_back (string_compose ("attach-%1", downcased_name));
+ insensitive_action_names.push_back (string_compose ("show-%1", downcased_name));
+ sensitive_action_names.push_back (string_compose ("detach-%1", downcased_name));
+ sensitive_action_names.push_back (string_compose ("hide-%1", downcased_name));
+
+
+ } else if (t.window_visible()) {
+
+ std::cerr << "windowed\n";
+
+ insensitive_action_names.push_back (string_compose ("detach-%1", downcased_name));
+ insensitive_action_names.push_back (string_compose ("show-%1", downcased_name));
+ sensitive_action_names.push_back (string_compose ("attach-%1", downcased_name));
+ sensitive_action_names.push_back (string_compose ("hide-%1", downcased_name));
+
+ } else {
+
+ std::cerr << "invisible\n";
+
+ /* not currently visible. allow user to retab it or just make
+ * it visible.
+ */
+
+ insensitive_action_names.push_back (string_compose ("detach-%1", downcased_name));
+ insensitive_action_names.push_back (string_compose ("hide-%1", downcased_name));
+ sensitive_action_names.push_back (string_compose ("show-%1", downcased_name));
+ sensitive_action_names.push_back (string_compose ("attach-%1", downcased_name));
+ }
+
+
+ for (std::vector<std::string>::iterator s = insensitive_action_names.begin(); s != insensitive_action_names.end(); ++s) {
+ action = ActionManager::get_action (X_("Common"), (*s).c_str());
+ if (action) {
+ action->set_sensitive (false);
+ }
+ }
+
+ for (std::vector<std::string>::iterator s = sensitive_action_names.begin(); s != sensitive_action_names.end(); ++s) {
+ action = ActionManager::get_action (X_("Common"), (*s).c_str());
+ if (action) {
+ action->set_sensitive (true);
+ }
+ }
+}
+
+void
ARDOUR_UI::toggle_meterbridge ()
{
assert (editor && mixer && meterbridge);