summaryrefslogtreecommitdiff
path: root/gtk2_ardour
diff options
context:
space:
mode:
authorCarl Hetherington <carl@carlh.net>2011-03-07 13:04:36 +0000
committerCarl Hetherington <carl@carlh.net>2011-03-07 13:04:36 +0000
commit92a5e4da48b85017647fb2c55d2d76fff47243e1 (patch)
tree0062d9d85e0d50e7c1adde227482253069cddd20 /gtk2_ardour
parent965a9740835a77cc2bf9e6cea237e56ae41150d8 (diff)
Make stuff in the automation menu apply to the track selection.
git-svn-id: svn://localhost/ardour2/branches/3.0@9088 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour')
-rw-r--r--gtk2_ardour/audio_time_axis.cc67
-rw-r--r--gtk2_ardour/audio_time_axis.h8
-rw-r--r--gtk2_ardour/midi_time_axis.cc7
-rw-r--r--gtk2_ardour/midi_time_axis.h2
-rw-r--r--gtk2_ardour/route_time_axis.cc184
-rw-r--r--gtk2_ardour/route_time_axis.h9
6 files changed, 153 insertions, 124 deletions
diff --git a/gtk2_ardour/audio_time_axis.cc b/gtk2_ardour/audio_time_axis.cc
index 5cfe3500db..79751145bf 100644
--- a/gtk2_ardour/audio_time_axis.cc
+++ b/gtk2_ardour/audio_time_axis.cc
@@ -311,38 +311,51 @@ AudioTimeAxisView::update_pan_track_visibility ()
}
void
-AudioTimeAxisView::show_all_automation ()
+AudioTimeAxisView::show_all_automation (bool apply_to_selection)
{
- no_redraw = true;
-
- RouteTimeAxisView::show_all_automation ();
-
- no_redraw = false;
-
- _route->gui_changed ("track_height", (void *) 0); /* EMIT_SIGNAL */
+ if (apply_to_selection) {
+ _editor.get_selection().tracks.foreach_audio_time_axis (boost::bind (&AudioTimeAxisView::show_all_automation, _1, false));
+ } else {
+
+ no_redraw = true;
+
+ RouteTimeAxisView::show_all_automation ();
+
+ no_redraw = false;
+
+ _route->gui_changed ("track_height", (void *) 0); /* EMIT_SIGNAL */
+ }
}
void
-AudioTimeAxisView::show_existing_automation ()
+AudioTimeAxisView::show_existing_automation (bool apply_to_selection)
{
- no_redraw = true;
-
- RouteTimeAxisView::show_existing_automation ();
-
- no_redraw = false;
-
- _route->gui_changed ("track_height", (void *) 0); /* EMIT_SIGNAL */
+ if (apply_to_selection) {
+ _editor.get_selection().tracks.foreach_audio_time_axis (boost::bind (&AudioTimeAxisView::show_existing_automation, _1, false));
+ } else {
+ no_redraw = true;
+
+ RouteTimeAxisView::show_existing_automation ();
+
+ no_redraw = false;
+
+ _route->gui_changed ("track_height", (void *) 0); /* EMIT_SIGNAL */
+ }
}
void
-AudioTimeAxisView::hide_all_automation ()
+AudioTimeAxisView::hide_all_automation (bool apply_to_selection)
{
- no_redraw = true;
-
- RouteTimeAxisView::hide_all_automation();
-
- no_redraw = false;
- _route->gui_changed ("track_height", (void *) 0); /* EMIT_SIGNAL */
+ if (apply_to_selection) {
+ _editor.get_selection().tracks.foreach_audio_time_axis (boost::bind (&AudioTimeAxisView::hide_all_automation, _1, false));
+ } else {
+ no_redraw = true;
+
+ RouteTimeAxisView::hide_all_automation();
+
+ no_redraw = false;
+ _route->gui_changed ("track_height", (void *) 0); /* EMIT_SIGNAL */
+ }
}
void
@@ -436,23 +449,23 @@ AudioTimeAxisView::update_control_names ()
}
void
-AudioTimeAxisView::build_automation_action_menu ()
+AudioTimeAxisView::build_automation_action_menu (bool for_selection)
{
using namespace Menu_Helpers;
- RouteTimeAxisView::build_automation_action_menu ();
+ RouteTimeAxisView::build_automation_action_menu (for_selection);
MenuList& automation_items = automation_action_menu->items ();
automation_items.push_back (CheckMenuElem (_("Fader"), sigc::mem_fun (*this, &AudioTimeAxisView::update_gain_track_visibility)));
gain_automation_item = dynamic_cast<CheckMenuItem*> (&automation_items.back ());
- gain_automation_item->set_active (gain_track->marked_for_display ());
+ gain_automation_item->set_active (gain_track->marked_for_display () && (!for_selection || _editor.get_selection().tracks.size() == 1));
_main_automation_menu_map[Evoral::Parameter(GainAutomation)] = gain_automation_item;
automation_items.push_back (CheckMenuElem (_("Pan"), sigc::mem_fun (*this, &AudioTimeAxisView::update_pan_track_visibility)));
pan_automation_item = dynamic_cast<CheckMenuItem*> (&automation_items.back ());
- pan_automation_item->set_active (pan_tracks.front()->marked_for_display ());
+ pan_automation_item->set_active (pan_tracks.front()->marked_for_display () && (!for_selection || _editor.get_selection().tracks.size() == 1));
set<Evoral::Parameter> const & params = _route->pannable()->what_can_be_automated ();
for (set<Evoral::Parameter>::iterator p = params.begin(); p != params.end(); ++p) {
diff --git a/gtk2_ardour/audio_time_axis.h b/gtk2_ardour/audio_time_axis.h
index 1023c1edf5..3688f49062 100644
--- a/gtk2_ardour/audio_time_axis.h
+++ b/gtk2_ardour/audio_time_axis.h
@@ -95,11 +95,11 @@ class AudioTimeAxisView : public RouteTimeAxisView
void append_extra_display_menu_items ();
Gtk::Menu* build_mode_menu();
- void build_automation_action_menu ();
+ void build_automation_action_menu (bool);
- void show_all_automation ();
- void show_existing_automation ();
- void hide_all_automation ();
+ void show_all_automation (bool apply_to_selection = false);
+ void show_existing_automation (bool apply_to_selection = false);
+ void hide_all_automation (bool apply_to_selection = false);
void gain_hidden ();
void pan_hidden ();
diff --git a/gtk2_ardour/midi_time_axis.cc b/gtk2_ardour/midi_time_axis.cc
index b1068e7e3f..0348e632f8 100644
--- a/gtk2_ardour/midi_time_axis.cc
+++ b/gtk2_ardour/midi_time_axis.cc
@@ -414,7 +414,7 @@ MidiTimeAxisView::toggle_midi_thru ()
}
void
-MidiTimeAxisView::build_automation_action_menu ()
+MidiTimeAxisView::build_automation_action_menu (bool for_selection)
{
using namespace Menu_Helpers;
@@ -430,7 +430,7 @@ MidiTimeAxisView::build_automation_action_menu ()
}
_channel_command_menu_map.clear ();
- RouteTimeAxisView::build_automation_action_menu ();
+ RouteTimeAxisView::build_automation_action_menu (for_selection);
MenuList& automation_items = automation_action_menu->items();
@@ -447,7 +447,9 @@ MidiTimeAxisView::build_automation_action_menu ()
*/
add_channel_command_menu_item (automation_items, _("Bender"), MidiPitchBenderAutomation, 0);
+ automation_items.back().set_sensitive (!for_selection || _editor.get_selection().tracks.size() == 1);
add_channel_command_menu_item (automation_items, _("Pressure"), MidiChannelPressureAutomation, 0);
+ automation_items.back().set_sensitive (!for_selection || _editor.get_selection().tracks.size() == 1);
/* now all MIDI controllers. Always offer the possibility that we will rebuild the controllers menu
since it might need to be updated after a channel mode change or other change. Also detach it
@@ -458,6 +460,7 @@ MidiTimeAxisView::build_automation_action_menu ()
automation_items.push_back (SeparatorElem());
automation_items.push_back (MenuElem (_("Controllers"), *controller_menu));
+ automation_items.back().set_sensitive (!for_selection || _editor.get_selection().tracks.size() == 1);
} else {
automation_items.push_back (MenuElem (string_compose ("<i>%1</i>", _("No MIDI Channels selected"))));
dynamic_cast<Label*> (automation_items.back().get_child())->set_use_markup (true);
diff --git a/gtk2_ardour/midi_time_axis.h b/gtk2_ardour/midi_time_axis.h
index 1adba26d24..94926e28a2 100644
--- a/gtk2_ardour/midi_time_axis.h
+++ b/gtk2_ardour/midi_time_axis.h
@@ -112,7 +112,7 @@ class MidiTimeAxisView : public RouteTimeAxisView
void custom_device_mode_changed();
void append_extra_display_menu_items ();
- void build_automation_action_menu ();
+ void build_automation_action_menu (bool);
Gtk::Menu* build_note_mode_menu();
Gtk::Menu* build_color_mode_menu();
diff --git a/gtk2_ardour/route_time_axis.cc b/gtk2_ardour/route_time_axis.cc
index 6d09fe8792..7197f30bcd 100644
--- a/gtk2_ardour/route_time_axis.cc
+++ b/gtk2_ardour/route_time_axis.cc
@@ -338,7 +338,7 @@ void
RouteTimeAxisView::automation_click ()
{
conditionally_add_to_selection ();
- build_automation_action_menu ();
+ build_automation_action_menu (false);
automation_action_menu->popup (1, gtk_get_current_event_time());
}
@@ -372,7 +372,7 @@ RouteTimeAxisView::set_state (const XMLNode& node, int version)
}
void
-RouteTimeAxisView::build_automation_action_menu ()
+RouteTimeAxisView::build_automation_action_menu (bool for_selection)
{
using namespace Menu_Helpers;
@@ -391,13 +391,13 @@ RouteTimeAxisView::build_automation_action_menu ()
automation_action_menu->set_name ("ArdourContextMenu");
items.push_back (MenuElem (_("Show All Automation"),
- sigc::mem_fun(*this, &RouteTimeAxisView::show_all_automation)));
+ sigc::bind (sigc::mem_fun (*this, &RouteTimeAxisView::show_all_automation), for_selection)));
items.push_back (MenuElem (_("Show Existing Automation"),
- sigc::mem_fun(*this, &RouteTimeAxisView::show_existing_automation)));
+ sigc::bind (sigc::mem_fun (*this, &RouteTimeAxisView::show_existing_automation), for_selection)));
items.push_back (MenuElem (_("Hide All Automation"),
- sigc::mem_fun(*this, &RouteTimeAxisView::hide_all_automation)));
+ sigc::bind (sigc::mem_fun (*this, &RouteTimeAxisView::hide_all_automation), for_selection)));
items.push_back (SeparatorElem ());
@@ -405,7 +405,7 @@ RouteTimeAxisView::build_automation_action_menu ()
so it was detached above */
items.push_back (MenuElem (_("Plugins"), subplugin_menu));
- items.back().set_sensitive (!subplugin_menu.items().empty());
+ items.back().set_sensitive (!subplugin_menu.items().empty() && (!for_selection || _editor.get_selection().tracks.size() == 1));;
}
void
@@ -615,7 +615,7 @@ RouteTimeAxisView::build_display_menu ()
route_group_menu->build (r);
items.push_back (MenuElem (_("Route Group"), *route_group_menu->menu ()));
- build_automation_action_menu ();
+ build_automation_action_menu (true);
items.push_back (MenuElem (_("Automation"), *automation_action_menu));
items.push_back (SeparatorElem());
@@ -1615,109 +1615,121 @@ RouteTimeAxisView::automation_track_hidden (Evoral::Parameter param)
void
-RouteTimeAxisView::show_all_automation ()
+RouteTimeAxisView::show_all_automation (bool apply_to_selection)
{
- no_redraw = true;
-
- /* Show our automation */
-
- for (AutomationTracks::iterator i = _automation_tracks.begin(); i != _automation_tracks.end(); ++i) {
- i->second->set_marked_for_display (true);
- i->second->canvas_display()->show();
- i->second->get_state_node()->add_property ("shown", X_("yes"));
-
- Gtk::CheckMenuItem* menu = automation_child_menu_item (i->first);
+ if (apply_to_selection) {
+ _editor.get_selection().tracks.foreach_route_time_axis (boost::bind (&RouteTimeAxisView::show_all_automation, _1, false));
+ } else {
+ no_redraw = true;
- if (menu) {
- menu->set_active(true);
- }
- }
-
-
- /* Show processor automation */
-
- for (list<ProcessorAutomationInfo*>::iterator i = processor_automation.begin(); i != processor_automation.end(); ++i) {
- for (vector<ProcessorAutomationNode*>::iterator ii = (*i)->lines.begin(); ii != (*i)->lines.end(); ++ii) {
- if ((*ii)->view == 0) {
- add_processor_automation_curve ((*i)->processor, (*ii)->what);
- }
-
- (*ii)->menu_item->set_active (true);
- }
- }
-
- no_redraw = false;
-
- /* Redraw */
-
- _route->gui_changed ("track_height", (void *) 0); /* EMIT_SIGNAL */
-}
-
-void
-RouteTimeAxisView::show_existing_automation ()
-{
- no_redraw = true;
-
- /* Show our automation */
-
- for (AutomationTracks::iterator i = _automation_tracks.begin(); i != _automation_tracks.end(); ++i) {
- if (i->second->has_automation()) {
+ /* Show our automation */
+
+ for (AutomationTracks::iterator i = _automation_tracks.begin(); i != _automation_tracks.end(); ++i) {
i->second->set_marked_for_display (true);
i->second->canvas_display()->show();
i->second->get_state_node()->add_property ("shown", X_("yes"));
-
+
Gtk::CheckMenuItem* menu = automation_child_menu_item (i->first);
+
if (menu) {
menu->set_active(true);
}
}
- }
-
-
- /* Show processor automation */
-
- for (list<ProcessorAutomationInfo*>::iterator i = processor_automation.begin(); i != processor_automation.end(); ++i) {
- for (vector<ProcessorAutomationNode*>::iterator ii = (*i)->lines.begin(); ii != (*i)->lines.end(); ++ii) {
- if ((*ii)->view != 0 && (*i)->processor->control((*ii)->what)->list()->size() > 0) {
+
+
+ /* Show processor automation */
+
+ for (list<ProcessorAutomationInfo*>::iterator i = processor_automation.begin(); i != processor_automation.end(); ++i) {
+ for (vector<ProcessorAutomationNode*>::iterator ii = (*i)->lines.begin(); ii != (*i)->lines.end(); ++ii) {
+ if ((*ii)->view == 0) {
+ add_processor_automation_curve ((*i)->processor, (*ii)->what);
+ }
+
(*ii)->menu_item->set_active (true);
}
}
+
+ no_redraw = false;
+
+ /* Redraw */
+
+ _route->gui_changed ("track_height", (void *) 0); /* EMIT_SIGNAL */
}
-
- no_redraw = false;
-
- _route->gui_changed ("track_height", (void *) 0); /* EMIT_SIGNAL */
}
-
+
void
-RouteTimeAxisView::hide_all_automation ()
+RouteTimeAxisView::show_existing_automation (bool apply_to_selection)
{
- no_redraw = true;
-
- /* Hide our automation */
-
- for (AutomationTracks::iterator i = _automation_tracks.begin(); i != _automation_tracks.end(); ++i) {
- i->second->set_marked_for_display (false);
- i->second->hide ();
- i->second->get_state_node()->add_property ("shown", X_("no"));
-
- Gtk::CheckMenuItem* menu = automation_child_menu_item (i->first);
+ if (apply_to_selection) {
+ _editor.get_selection().tracks.foreach_route_time_axis (boost::bind (&RouteTimeAxisView::show_existing_automation, _1, false));
+ } else {
+ no_redraw = true;
+
+ /* Show our automation */
+
+ for (AutomationTracks::iterator i = _automation_tracks.begin(); i != _automation_tracks.end(); ++i) {
+ if (i->second->has_automation()) {
+ i->second->set_marked_for_display (true);
+ i->second->canvas_display()->show();
+ i->second->get_state_node()->add_property ("shown", X_("yes"));
+
+ Gtk::CheckMenuItem* menu = automation_child_menu_item (i->first);
+ if (menu) {
+ menu->set_active(true);
+ }
+ }
+ }
+
+
+ /* Show processor automation */
- if (menu) {
- menu->set_active (false);
+ for (list<ProcessorAutomationInfo*>::iterator i = processor_automation.begin(); i != processor_automation.end(); ++i) {
+ for (vector<ProcessorAutomationNode*>::iterator ii = (*i)->lines.begin(); ii != (*i)->lines.end(); ++ii) {
+ if ((*ii)->view != 0 && (*i)->processor->control((*ii)->what)->list()->size() > 0) {
+ (*ii)->menu_item->set_active (true);
+ }
+ }
}
+
+ no_redraw = false;
+
+ _route->gui_changed ("track_height", (void *) 0); /* EMIT_SIGNAL */
}
+}
- /* Hide processor automation */
+void
+RouteTimeAxisView::hide_all_automation (bool apply_to_selection)
+{
+ if (apply_to_selection) {
+ _editor.get_selection().tracks.foreach_route_time_axis (boost::bind (&RouteTimeAxisView::hide_all_automation, _1, false));
+ } else {
+ no_redraw = true;
- for (list<ProcessorAutomationInfo*>::iterator i = processor_automation.begin(); i != processor_automation.end(); ++i) {
- for (vector<ProcessorAutomationNode*>::iterator ii = (*i)->lines.begin(); ii != (*i)->lines.end(); ++ii) {
- (*ii)->menu_item->set_active (false);
+ /* Hide our automation */
+
+ for (AutomationTracks::iterator i = _automation_tracks.begin(); i != _automation_tracks.end(); ++i) {
+ i->second->set_marked_for_display (false);
+ i->second->hide ();
+ i->second->get_state_node()->add_property ("shown", X_("no"));
+
+ Gtk::CheckMenuItem* menu = automation_child_menu_item (i->first);
+
+ if (menu) {
+ menu->set_active (false);
+ }
}
+
+ /* Hide processor automation */
+
+ for (list<ProcessorAutomationInfo*>::iterator i = processor_automation.begin(); i != processor_automation.end(); ++i) {
+ for (vector<ProcessorAutomationNode*>::iterator ii = (*i)->lines.begin(); ii != (*i)->lines.end(); ++ii) {
+ (*ii)->menu_item->set_active (false);
+ }
+ }
+
+ no_redraw = false;
+ _route->gui_changed ("track_height", (void *) 0); /* EMIT_SIGNAL */
}
-
- no_redraw = false;
- _route->gui_changed ("track_height", (void *) 0); /* EMIT_SIGNAL */
}
diff --git a/gtk2_ardour/route_time_axis.h b/gtk2_ardour/route_time_axis.h
index 9a4f321301..91bc1ff5c6 100644
--- a/gtk2_ardour/route_time_axis.h
+++ b/gtk2_ardour/route_time_axis.h
@@ -212,7 +212,7 @@ protected:
void set_color (Gdk::Color const &);
- virtual void build_automation_action_menu ();
+ virtual void build_automation_action_menu (bool);
virtual void append_extra_display_menu_items () {}
void build_display_menu ();
@@ -225,9 +225,10 @@ protected:
void rename_current_playlist ();
void automation_click ();
- virtual void show_all_automation ();
- virtual void show_existing_automation ();
- virtual void hide_all_automation ();
+
+ virtual void show_all_automation (bool apply_to_selection = false);
+ virtual void show_existing_automation (bool apply_to_selection = false);
+ virtual void hide_all_automation (bool apply_to_selection = false);
void timestretch (framepos_t start, framepos_t end);