diff --git a/gtk2_ardour/actions.cc b/gtk2_ardour/actions.cc index 28367ff3f3..da2a75fc93 100644 --- a/gtk2_ardour/actions.cc +++ b/gtk2_ardour/actions.cc @@ -52,6 +52,10 @@ RelatedActions ActionManager::write_sensitive_actions; RelatedActions ActionManager::region_list_selection_sensitive_actions; RelatedActions ActionManager::plugin_selection_sensitive_actions; RelatedActions ActionManager::track_selection_sensitive_actions; +RelatedActions ActionManager::stripable_selection_sensitive_actions; +RelatedActions ActionManager::route_selection_sensitive_actions; +RelatedActions ActionManager::bus_selection_sensitive_actions; +RelatedActions ActionManager::vca_selection_sensitive_actions; RelatedActions ActionManager::point_selection_sensitive_actions; RelatedActions ActionManager::time_selection_sensitive_actions; RelatedActions ActionManager::line_selection_sensitive_actions; diff --git a/gtk2_ardour/actions.h b/gtk2_ardour/actions.h index ec867e9bd0..5c301655c9 100644 --- a/gtk2_ardour/actions.h +++ b/gtk2_ardour/actions.h @@ -40,6 +40,10 @@ namespace ActionManager { extern std::vector > plugin_selection_sensitive_actions; extern std::vector > track_selection_sensitive_actions; + extern std::vector > stripable_selection_sensitive_actions; + extern std::vector > bus_selection_sensitive_actions; + extern std::vector > route_selection_sensitive_actions; + extern std::vector > vca_selection_sensitive_actions; extern std::vector > point_selection_sensitive_actions; extern std::vector > time_selection_sensitive_actions; extern std::vector > line_selection_sensitive_actions; diff --git a/gtk2_ardour/ardour_ui_dialogs.cc b/gtk2_ardour/ardour_ui_dialogs.cc index 4be65dc9f0..8f1d080009 100644 --- a/gtk2_ardour/ardour_ui_dialogs.cc +++ b/gtk2_ardour/ardour_ui_dialogs.cc @@ -150,6 +150,10 @@ ARDOUR_UI::set_session (Session *s) ActionManager::set_sensitive (ActionManager::time_selection_sensitive_actions, false); ActionManager::set_sensitive (ActionManager::track_selection_sensitive_actions, false); + ActionManager::set_sensitive (ActionManager::route_selection_sensitive_actions, false); + ActionManager::set_sensitive (ActionManager::bus_selection_sensitive_actions, false); + ActionManager::set_sensitive (ActionManager::vca_selection_sensitive_actions, false); + ActionManager::set_sensitive (ActionManager::stripable_selection_sensitive_actions, false); ActionManager::set_sensitive (ActionManager::line_selection_sensitive_actions, false); ActionManager::set_sensitive (ActionManager::point_selection_sensitive_actions, false); ActionManager::set_sensitive (ActionManager::playlist_selection_sensitive_actions, false); diff --git a/gtk2_ardour/ardour_ui_ed.cc b/gtk2_ardour/ardour_ui_ed.cc index b1a76f3faa..873d07e9a6 100644 --- a/gtk2_ardour/ardour_ui_ed.cc +++ b/gtk2_ardour/ardour_ui_ed.cc @@ -178,7 +178,7 @@ ARDOUR_UI::install_actions () sigc::mem_fun(*this, &ARDOUR_UI::start_duplicate_routes)); ActionManager::session_sensitive_actions.push_back (act); ActionManager::write_sensitive_actions.push_back (act); - ActionManager::track_selection_sensitive_actions.push_back (act); + ActionManager::route_selection_sensitive_actions.push_back (act); act = global_actions.register_action (main_actions, X_("cancel-solo"), _("Cancel Solo"), sigc::mem_fun(*this, &ARDOUR_UI::cancel_solo)); ActionManager::session_sensitive_actions.push_back (act); diff --git a/gtk2_ardour/editor_actions.cc b/gtk2_ardour/editor_actions.cc index 67ccd86eee..14d82fc3ce 100644 --- a/gtk2_ardour/editor_actions.cc +++ b/gtk2_ardour/editor_actions.cc @@ -160,7 +160,10 @@ Editor::register_actions () myactions.register_action (editor_menu_actions, X_("SyncMenu"), _("Sync")); myactions.register_action (editor_menu_actions, X_("TempoMenu"), _("Tempo")); myactions.register_action (editor_menu_actions, X_("Timecode"), _("Timecode fps")); - myactions.register_action (editor_menu_actions, X_("TrackHeightMenu"), _("Height")); + + act = myactions.register_action (editor_menu_actions, X_("TrackHeightMenu"), _("Height")); + ActionManager::stripable_selection_sensitive_actions.push_back (act); + myactions.register_action (editor_menu_actions, X_("TrackMenu"), _("Track")); myactions.register_action (editor_menu_actions, X_("Tools"), _("Tools")); myactions.register_action (editor_menu_actions, X_("View"), _("View")); @@ -246,11 +249,11 @@ Editor::register_actions () act = reg_sens (editor_actions, "track-record-enable-toggle", _("Toggle Record Enable"), sigc::mem_fun(*this, &Editor::toggle_record_enable)); ActionManager::track_selection_sensitive_actions.push_back (act); act = reg_sens (editor_actions, "track-solo-toggle", _("Toggle Solo"), sigc::mem_fun(*this, &Editor::toggle_solo)); - ActionManager::track_selection_sensitive_actions.push_back (act); + ActionManager::stripable_selection_sensitive_actions.push_back (act); act = reg_sens (editor_actions, "track-mute-toggle", _("Toggle Mute"), sigc::mem_fun(*this, &Editor::toggle_mute)); - ActionManager::track_selection_sensitive_actions.push_back (act); + ActionManager::stripable_selection_sensitive_actions.push_back (act); act = reg_sens (editor_actions, "track-solo-isolate-toggle", _("Toggle Solo Isolate"), sigc::mem_fun(*this, &Editor::toggle_solo_isolate)); - ActionManager::track_selection_sensitive_actions.push_back (act); + ActionManager::stripable_selection_sensitive_actions.push_back (act); for (int i = 1; i <= 12; ++i) { string const a = string_compose (X_("save-visual-state-%1"), i); @@ -297,9 +300,9 @@ Editor::register_actions () reg_sens (editor_actions, "zoom_10_min", _("Zoom to 10 min"), sigc::bind (sigc::mem_fun(*this, &Editor::set_zoom_preset), 10 * 60 * 1000)); act = reg_sens (editor_actions, "move-selected-tracks-up", _("Move Selected Tracks Up"), sigc::bind (sigc::mem_fun(*_routes, &EditorRoutes::move_selected_tracks), true)); - ActionManager::track_selection_sensitive_actions.push_back (act); + ActionManager::stripable_selection_sensitive_actions.push_back (act); act = reg_sens (editor_actions, "move-selected-tracks-down", _("Move Selected Tracks Down"), sigc::bind (sigc::mem_fun(*_routes, &EditorRoutes::move_selected_tracks), false)); - ActionManager::track_selection_sensitive_actions.push_back (act); + ActionManager::stripable_selection_sensitive_actions.push_back (act); act = reg_sens (editor_actions, "scroll-tracks-up", _("Scroll Tracks Up"), sigc::mem_fun(*this, &Editor::scroll_tracks_up)); act = reg_sens (editor_actions, "scroll-tracks-down", _("Scroll Tracks Down"), sigc::mem_fun(*this, &Editor::scroll_tracks_down)); @@ -429,29 +432,28 @@ Editor::register_actions () act = reg_sens (editor_actions, "toggle-track-active", _("Toggle Active"), (sigc::mem_fun(*this, &Editor::toggle_tracks_active))); - ActionManager::track_selection_sensitive_actions.push_back (act); + ActionManager::route_selection_sensitive_actions.push_back (act); act = reg_sens (editor_actions, "remove-track", _("Remove"), (sigc::mem_fun(*this, &Editor::remove_tracks))); - /* not selection sensitive? */ - - ActionManager::track_selection_sensitive_actions.push_back (act); + ActionManager::stripable_selection_sensitive_actions.push_back (act); act = reg_sens (editor_actions, "fit-selection", _("Fit Selection (Vertical)"), sigc::mem_fun(*this, &Editor::fit_selection)); + ActionManager::stripable_selection_sensitive_actions.push_back (act); act = reg_sens (editor_actions, "track-height-largest", _("Largest"), sigc::bind ( sigc::mem_fun(*this, &Editor::set_track_height), HeightLargest)); - ActionManager::track_selection_sensitive_actions.push_back (act); + ActionManager::stripable_selection_sensitive_actions.push_back (act); act = reg_sens (editor_actions, "track-height-larger", _("Larger"), sigc::bind ( sigc::mem_fun(*this, &Editor::set_track_height), HeightLarger)); - ActionManager::track_selection_sensitive_actions.push_back (act); + ActionManager::stripable_selection_sensitive_actions.push_back (act); act = reg_sens (editor_actions, "track-height-large", _("Large"), sigc::bind ( sigc::mem_fun(*this, &Editor::set_track_height), HeightLarge)); - ActionManager::track_selection_sensitive_actions.push_back (act); + ActionManager::stripable_selection_sensitive_actions.push_back (act); act = reg_sens (editor_actions, "track-height-normal", _("Normal"), sigc::bind ( sigc::mem_fun(*this, &Editor::set_track_height), HeightNormal)); - ActionManager::track_selection_sensitive_actions.push_back (act); + ActionManager::stripable_selection_sensitive_actions.push_back (act); act = reg_sens (editor_actions, "track-height-small", _("Small"), sigc::bind ( sigc::mem_fun(*this, &Editor::set_track_height), HeightSmall)); - ActionManager::track_selection_sensitive_actions.push_back (act); + ActionManager::stripable_selection_sensitive_actions.push_back (act); toggle_reg_sens (editor_actions, "sound-midi-notes", _("Sound Selected MIDI Notes"), sigc::mem_fun (*this, &Editor::toggle_sound_midi_notes)); diff --git a/gtk2_ardour/editor_selection.cc b/gtk2_ardour/editor_selection.cc index 2eb0279f46..b5a0be1c78 100644 --- a/gtk2_ardour/editor_selection.cc +++ b/gtk2_ardour/editor_selection.cc @@ -30,6 +30,7 @@ #include "ardour/route_group.h" #include "ardour/selection.h" #include "ardour/session.h" +#include "ardour/vca.h" #include "editor.h" #include "editor_drag.h" @@ -1000,6 +1001,12 @@ struct SelectionOrderSorter { void Editor::presentation_info_changed (PropertyChange const & what_changed) { + uint32_t n_tracks = 0; + uint32_t n_busses = 0; + uint32_t n_vcas = 0; + uint32_t n_routes = 0; + uint32_t n_stripables = 0; + /* We cannot ensure ordering of the handlers for * PresentationInfo::Changed, so we have to do everything in order * here, as a single handler. @@ -1047,6 +1054,18 @@ Editor::presentation_info_changed (PropertyChange const & what_changed) continue; } + n_stripables++; + + if (boost::dynamic_pointer_cast ((*i).stripable)) { + n_tracks++; + n_routes++; + } else if (boost::dynamic_pointer_cast ((*i).stripable)) { + n_busses++; + n_routes++; + } else if (boost::dynamic_pointer_cast ((*i).stripable)) { + n_vcas++; + } + TimeAxisView* tav = dynamic_cast (av); if (!tav) { @@ -1082,7 +1101,11 @@ Editor::presentation_info_changed (PropertyChange const & what_changed) stripables->push_back ((*i).stripable); } - ActionManager::set_sensitive (ActionManager::track_selection_sensitive_actions, !selection->tracks.empty()); + ActionManager::set_sensitive (ActionManager::stripable_selection_sensitive_actions, (n_stripables > 0)); + ActionManager::set_sensitive (ActionManager::track_selection_sensitive_actions, (n_tracks > 0)); + ActionManager::set_sensitive (ActionManager::bus_selection_sensitive_actions, (n_busses > 0)); + ActionManager::set_sensitive (ActionManager::route_selection_sensitive_actions, (n_routes > 0)); + ActionManager::set_sensitive (ActionManager::vca_selection_sensitive_actions, (n_vcas > 0)); sensitize_the_right_region_actions (false);