summaryrefslogtreecommitdiff
path: root/gtk2_ardour
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2012-11-13 02:19:04 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2012-11-13 02:19:04 +0000
commit3fa84d0caa2fb74471619cff2e44f5db3f0a12c6 (patch)
tree55159b5ad4afd54b86601ee7b922186a9517f54d /gtk2_ardour
parentcf55921aea8adec135535419febb8bbd0803f008 (diff)
add alt-i as a binding in both the editor and mixer windows to toggle the state of MIDI input on the selected track(s); in the mixer this will also operate on the strip under the mouse. fixes #4838
git-svn-id: svn://localhost/ardour2/branches/3.0@13475 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour')
-rw-r--r--gtk2_ardour/ardour.menus.in1
-rw-r--r--gtk2_ardour/ardour_ui2.cc2
-rw-r--r--gtk2_ardour/editor.h2
-rw-r--r--gtk2_ardour/editor_actions.cc3
-rw-r--r--gtk2_ardour/editor_ops.cc23
-rw-r--r--gtk2_ardour/mixer.bindings1
-rw-r--r--gtk2_ardour/mixer_actor.cc4
-rw-r--r--gtk2_ardour/mixer_actor.h6
-rw-r--r--gtk2_ardour/mixer_strip.cc20
-rw-r--r--gtk2_ardour/mixer_ui.cc23
-rw-r--r--gtk2_ardour/mixer_ui.h1
-rw-r--r--gtk2_ardour/mnemonic-us.bindings.in1
12 files changed, 69 insertions, 18 deletions
diff --git a/gtk2_ardour/ardour.menus.in b/gtk2_ardour/ardour.menus.in
index aca08444df..59e3c996a3 100644
--- a/gtk2_ardour/ardour.menus.in
+++ b/gtk2_ardour/ardour.menus.in
@@ -11,6 +11,7 @@
<accelerator action='track-solo-toggle'/>
<accelerator action='track-mute-toggle'/>
<accelerator action='toggle-edit-mode'/>
+ <accelerator action='toggle-midi-input-active'/>
<menubar name='Main' action='MainMenu'>
<menu name='Session' action='Session'>
diff --git a/gtk2_ardour/ardour_ui2.cc b/gtk2_ardour/ardour_ui2.cc
index dd7a48e74d..b112576a5b 100644
--- a/gtk2_ardour/ardour_ui2.cc
+++ b/gtk2_ardour/ardour_ui2.cc
@@ -419,7 +419,7 @@ ARDOUR_UI::setup_transport ()
auto_box->pack_start (auto_return_button, false, false);
transport_tearoff_hbox.pack_start (*auto_box, false, false);
- transport_tearoff_hbox.pack_start (*clock_box, false, false);
+ transport_tearoff_hbox.pack_start (*clock_box, true, true);
time_info_box = manage (new TimeInfoBox);
transport_tearoff_hbox.pack_start (*time_info_box, false, false);
diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h
index d53972afc3..f3860812f2 100644
--- a/gtk2_ardour/editor.h
+++ b/gtk2_ardour/editor.h
@@ -1247,6 +1247,8 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
boost::shared_ptr<ARDOUR::AudioTrack> get_nth_selected_audio_track (int nth) const;
boost::shared_ptr<ARDOUR::MidiTrack> get_nth_selected_midi_track (int nth) const;
+ void toggle_midi_input_active (bool flip_others);
+
ARDOUR::InterThreadInfo* current_interthread_info;
AnalysisWindow* analysis_window;
diff --git a/gtk2_ardour/editor_actions.cc b/gtk2_ardour/editor_actions.cc
index e274170982..a8b9f0da0c 100644
--- a/gtk2_ardour/editor_actions.cc
+++ b/gtk2_ardour/editor_actions.cc
@@ -623,6 +623,9 @@ Editor::register_actions ()
Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic(act);
tact->set_active (true);
+ ActionManager::register_action (editor_actions, X_("toggle-midi-input-active"), _("Toggle MIDI Input Active for Editor-Selected Tracks/Busses"),
+ sigc::bind (sigc::mem_fun (*this, &Editor::toggle_midi_input_active), false));
+
ActionManager::add_action_group (rl_actions);
ActionManager::add_action_group (ruler_actions);
ActionManager::add_action_group (zoom_actions);
diff --git a/gtk2_ardour/editor_ops.cc b/gtk2_ardour/editor_ops.cc
index 0aac921afd..ac402981a8 100644
--- a/gtk2_ardour/editor_ops.cc
+++ b/gtk2_ardour/editor_ops.cc
@@ -6828,3 +6828,26 @@ Editor::uncombine_regions ()
commit_reversible_command ();
}
+void
+Editor::toggle_midi_input_active (bool flip_others)
+{
+ bool onoff;
+ boost::shared_ptr<RouteList> rl (new RouteList);
+
+ for (TrackSelection::iterator i = selection->tracks.begin(); i != selection->tracks.end(); ++i) {
+ RouteTimeAxisView *rtav = dynamic_cast<RouteTimeAxisView *>(*i);
+
+ if (!rtav) {
+ continue;
+ }
+
+ boost::shared_ptr<MidiTrack> mt = rtav->midi_track();
+
+ if (mt) {
+ rl->push_back (rtav->route());
+ onoff = !mt->input_active();
+ }
+ }
+
+ _session->set_exclusive_input_active (rl, onoff, flip_others);
+}
diff --git a/gtk2_ardour/mixer.bindings b/gtk2_ardour/mixer.bindings
index 25d4cfb077..bd5ec90458 100644
--- a/gtk2_ardour/mixer.bindings
+++ b/gtk2_ardour/mixer.bindings
@@ -3,6 +3,7 @@
<Press>
<Binding key="s" action="Mixer/solo"/>
<Binding key="m" action="Mixer/mute"/>
+ <Binding key="Secondary-i" action="Mixer/toggle-midi-input-active"/>
<Binding key="r" action="Mixer/recenable"/>
<Binding key="0" action="Mixer/unity-gain"/>
<Binding key="Up" action="Mixer/increment-gain"/>
diff --git a/gtk2_ardour/mixer_actor.cc b/gtk2_ardour/mixer_actor.cc
index 6a60fd0bf1..d7a1149a4b 100644
--- a/gtk2_ardour/mixer_actor.cc
+++ b/gtk2_ardour/mixer_actor.cc
@@ -71,6 +71,9 @@ MixerActor::register_actions ()
myactions.register_action ("Mixer", "scroll-left", _("Scroll Mixer Window to the left"), sigc::mem_fun (*this, &MixerActor::scroll_left));
myactions.register_action ("Mixer", "scroll-right", _("Scroll Mixer Window to the left"), sigc::mem_fun (*this, &MixerActor::scroll_right));
+
+ myactions.register_action ("Mixer", "toggle-midi-input-active", _("Toggle MIDI Input Active for Mixer-Selected Tracks/Busses"),
+ sigc::bind (sigc::mem_fun (*this, &MixerActor::toggle_midi_input_active), false));
}
void
@@ -261,3 +264,4 @@ MixerActor::ab_plugins ()
}
}
}
+
diff --git a/gtk2_ardour/mixer_actor.h b/gtk2_ardour/mixer_actor.h
index 85c7bc1cf8..0b856d338c 100644
--- a/gtk2_ardour/mixer_actor.h
+++ b/gtk2_ardour/mixer_actor.h
@@ -63,10 +63,14 @@ class MixerActor : virtual public sigc::trackable
void toggle_processors ();
void ab_plugins ();
+ /* these actions need access to a Session, do defer to
+ a derived class
+ */
+ virtual void toggle_midi_input_active (bool flip_others) = 0;
+
/* these actions don't apply to the selection, so defer to
a derived class.
*/
-
virtual void scroll_left () {}
virtual void scroll_right () {}
};
diff --git a/gtk2_ardour/mixer_strip.cc b/gtk2_ardour/mixer_strip.cc
index c4410438f9..398edf1997 100644
--- a/gtk2_ardour/mixer_strip.cc
+++ b/gtk2_ardour/mixer_strip.cc
@@ -1915,22 +1915,12 @@ MixerStrip::input_active_button_release (GdkEventButton* ev)
return true;
}
- if (mt->input_active()) {
- if (Keyboard::modifier_state_contains (ev->state, Keyboard::ModifierMask (Keyboard::PrimaryModifier|Keyboard::SecondaryModifier))) {
- /* turn all other tracks using this input off */
- _session->set_exclusive_input_active (mt, false);
- } else {
- mt->set_input_active (false);
- }
+ boost::shared_ptr<RouteList> rl (new RouteList);
- } else {
- if (Keyboard::modifier_state_contains (ev->state, Keyboard::ModifierMask (Keyboard::PrimaryModifier|Keyboard::SecondaryModifier))) {
- /* turn all other tracks using this input on */
- _session->set_exclusive_input_active (mt, true);
- } else {
- mt->set_input_active (true);
- }
- }
+ rl->push_back (route());
+
+ _session->set_exclusive_input_active (rl, !mt->input_active(),
+ Keyboard::modifier_state_contains (ev->state, Keyboard::ModifierMask (Keyboard::PrimaryModifier|Keyboard::SecondaryModifier)));
return true;
}
diff --git a/gtk2_ardour/mixer_ui.cc b/gtk2_ardour/mixer_ui.cc
index 468cdf2244..18ad28d774 100644
--- a/gtk2_ardour/mixer_ui.cc
+++ b/gtk2_ardour/mixer_ui.cc
@@ -38,6 +38,7 @@
#include <gtkmm2ext/window_title.h>
#include "ardour/debug.h"
+#include "ardour/midi_track.h"
#include "ardour/plugin_manager.h"
#include "ardour/route_group.h"
#include "ardour/session.h"
@@ -1888,7 +1889,7 @@ Mixer_UI::set_route_targets_for_operation ()
return;
}
- /* try to get mixer strip at mouse */
+ /* nothing selected ... try to get mixer strip at mouse */
int x, y;
get_pointer (x, y);
@@ -1908,3 +1909,23 @@ Mixer_UI::monitor_section_going_away ()
_monitor_section->set_session (0);
}
}
+
+void
+Mixer_UI::toggle_midi_input_active (bool flip_others)
+{
+ boost::shared_ptr<RouteList> rl (new RouteList);
+ bool onoff;
+
+ set_route_targets_for_operation ();
+
+ for (RouteUISelection::iterator r = _route_targets.begin(); r != _route_targets.end(); ++r) {
+ boost::shared_ptr<MidiTrack> mt = (*r)->midi_track();
+
+ if (mt) {
+ rl->push_back ((*r)->route());
+ onoff = !mt->input_active();
+ }
+ }
+
+ _session->set_exclusive_input_active (rl, onoff, flip_others);
+}
diff --git a/gtk2_ardour/mixer_ui.h b/gtk2_ardour/mixer_ui.h
index 624181356e..2946d0ae59 100644
--- a/gtk2_ardour/mixer_ui.h
+++ b/gtk2_ardour/mixer_ui.h
@@ -129,6 +129,7 @@ class Mixer_UI : public Gtk::Window, public PBD::ScopedConnectionList, public AR
bool strip_scroller_button_release (GdkEventButton*);
void scroll_left ();
void scroll_right ();
+ void toggle_midi_input_active (bool flip_others);
void add_strips (ARDOUR::RouteList&);
void remove_strip (MixerStrip *);
diff --git a/gtk2_ardour/mnemonic-us.bindings.in b/gtk2_ardour/mnemonic-us.bindings.in
index cb50b05242..a10f59d95a 100644
--- a/gtk2_ardour/mnemonic-us.bindings.in
+++ b/gtk2_ardour/mnemonic-us.bindings.in
@@ -157,6 +157,7 @@ This mode provides many different operations on both regions and control points,
@eep|Region/insert-region-from-region-list|i|insert from region list
@select|Editor/invert-selection|<@TERTIARY@>i|invert selection
@sess|Editor/addExistingAudioFiles|<@PRIMARY@>i|import audio files
+@sess|Editor/toggle-midi-input-active|<@SECONDARY@>i|toggle selected track(s) MIDI input
@mmode|MouseMode/set-mouse-mode-object|o|object mode
@sess|Main/Open|<@PRIMARY@>o|open an existing session
@sess|Main/Recent|<@PRIMARY@><@TERTIARY@>o|open a recent session