summaryrefslogtreecommitdiff
path: root/gtk2_ardour
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2017-08-07 11:34:03 -0400
committerPaul Davis <paul@linuxaudiosystems.com>2017-08-07 12:04:11 -0400
commitcbe342c3570d1ddb3acab4a3f0a731afa8ffb86d (patch)
tree21b66efe469caf0283f7f9fb5b57eaa6d89e9d5e /gtk2_ardour
parent4f2dc77f6f6b5b0de07304e8a4981ff1298ef090 (diff)
some structure/code for managing menu sensitivity now that VCAs are selectable
Diffstat (limited to 'gtk2_ardour')
-rw-r--r--gtk2_ardour/actions.cc4
-rw-r--r--gtk2_ardour/actions.h4
-rw-r--r--gtk2_ardour/ardour_ui_dialogs.cc4
-rw-r--r--gtk2_ardour/ardour_ui_ed.cc2
-rw-r--r--gtk2_ardour/editor_actions.cc32
-rw-r--r--gtk2_ardour/editor_selection.cc25
6 files changed, 54 insertions, 17 deletions
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<Glib::RefPtr<Gtk::Action> > plugin_selection_sensitive_actions;
extern std::vector<Glib::RefPtr<Gtk::Action> > track_selection_sensitive_actions;
+ extern std::vector<Glib::RefPtr<Gtk::Action> > stripable_selection_sensitive_actions;
+ extern std::vector<Glib::RefPtr<Gtk::Action> > bus_selection_sensitive_actions;
+ extern std::vector<Glib::RefPtr<Gtk::Action> > route_selection_sensitive_actions;
+ extern std::vector<Glib::RefPtr<Gtk::Action> > vca_selection_sensitive_actions;
extern std::vector<Glib::RefPtr<Gtk::Action> > point_selection_sensitive_actions;
extern std::vector<Glib::RefPtr<Gtk::Action> > time_selection_sensitive_actions;
extern std::vector<Glib::RefPtr<Gtk::Action> > 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<Track> ((*i).stripable)) {
+ n_tracks++;
+ n_routes++;
+ } else if (boost::dynamic_pointer_cast<Route> ((*i).stripable)) {
+ n_busses++;
+ n_routes++;
+ } else if (boost::dynamic_pointer_cast<VCA> ((*i).stripable)) {
+ n_vcas++;
+ }
+
TimeAxisView* tav = dynamic_cast<TimeAxisView*> (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);