diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2015-07-22 21:14:08 -0400 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2016-02-22 15:31:22 -0500 |
commit | 291575683cb87713cc7a5856a96c5fdd69b9a52c (patch) | |
tree | c7a270f828a47acbd81b68d280da64f92f545e71 /gtk2_ardour/ardour_ui_dialogs.cc | |
parent | 1c41f75488ba654a22bf63237edc3a8c2dfca0e5 (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.cc | 63 |
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); |