From 291575683cb87713cc7a5856a96c5fdd69b9a52c Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Wed, 22 Jul 2015 21:14:08 -0400 Subject: dynamically update menus/actions controlling tabbable show/hide/attach/detach operations --- gtk2_ardour/ardour_ui_dialogs.cc | 63 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) (limited to 'gtk2_ardour/ardour_ui_dialogs.cc') 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 + +#include "pbd/convert.h" + #include "ardour/audioengine.h" #include "ardour/automation_watch.h" #include "ardour/control_protocol_manager.h" @@ -376,6 +380,65 @@ ARDOUR_UI::detach_tabbable (Tabbable* t) t->detach (); } +void +ARDOUR_UI::tabbable_state_change (Tabbable& t) +{ + std::vector insensitive_action_names; + std::vector sensitive_action_names; + Glib::RefPtr 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::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::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 () { -- cgit v1.2.3