summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2011-08-14 17:11:33 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2011-08-14 17:11:33 +0000
commitae5f278202c6a13637644a39c57fe34100cd7f6e (patch)
tree3af61718df4ddffbbc97b466fde5c0b53cb6ea3e
parentbd1d705498a30939712deada370d868664b61a34 (diff)
make control protocol's SelectByRID signal work, thus enabling MIDI binding maps to use function="select" with an argument; fix minor bug in previous commit
git-svn-id: svn://localhost/ardour2/branches/3.0@9991 d708f5d6-7413-0410-9779-e7cbd77b26cf
-rw-r--r--gtk2_ardour/editor.cc27
-rw-r--r--gtk2_ardour/editor.h1
-rw-r--r--gtk2_ardour/editor_ops.cc2
-rw-r--r--libs/surfaces/generic_midi/generic_midi_control_protocol.cc2
-rw-r--r--libs/surfaces/generic_midi/midifunction.cc12
-rw-r--r--libs/surfaces/generic_midi/midifunction.h7
6 files changed, 49 insertions, 2 deletions
diff --git a/gtk2_ardour/editor.cc b/gtk2_ardour/editor.cc
index d45d89a96e..cf1619156f 100644
--- a/gtk2_ardour/editor.cc
+++ b/gtk2_ardour/editor.cc
@@ -704,6 +704,7 @@ Editor::Editor ()
ControlProtocol::ZoomIn.connect (*this, invalidator (*this), boost::bind (&Editor::temporal_zoom_step, this, false), gui_context());
ControlProtocol::ZoomOut.connect (*this, invalidator (*this), boost::bind (&Editor::temporal_zoom_step, this, true), gui_context());
ControlProtocol::ScrollTimeline.connect (*this, invalidator (*this), ui_bind (&Editor::control_scroll, this, _1), gui_context());
+ ControlProtocol::SelectByRID.connect (*this, invalidator (*this), ui_bind (&Editor::control_select, this, _1), gui_context());
BasicUI::AccessAction.connect (*this, invalidator (*this), ui_bind (&Editor::access_action, this, _1, _2), gui_context());
/* problematic: has to return a value and thus cannot be x-thread */
@@ -912,6 +913,32 @@ Editor::zoom_adjustment_changed ()
}
void
+Editor::control_select (uint32_t rid)
+{
+ /* handles the (static) signal from the ControlProtocol class that
+ * requests setting the selected track to a given RID
+ */
+
+ if (!_session) {
+ return;
+ }
+
+ boost::shared_ptr<Route> r = _session->route_by_remote_id (rid);
+
+ if (!r) {
+ return;
+ }
+
+ TimeAxisView* tav = axis_view_from_route (r);
+
+ if (tav) {
+ selection->set (tav);
+ } else {
+ selection->clear_tracks ();
+ }
+}
+
+void
Editor::control_scroll (float fraction)
{
ENSURE_GUI_THREAD (*this, &Editor::control_scroll, fraction)
diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h
index 55d78238f7..e9960b3938 100644
--- a/gtk2_ardour/editor.h
+++ b/gtk2_ardour/editor.h
@@ -977,6 +977,7 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
Gtk::HBox edit_controls_hbox;
void control_scroll (float);
+ void control_select (uint32_t rid);
void access_action (std::string,std::string);
bool deferred_control_scroll (framepos_t);
sigc::connection control_scroll_connection;
diff --git a/gtk2_ardour/editor_ops.cc b/gtk2_ardour/editor_ops.cc
index 29471aa913..07aeda3369 100644
--- a/gtk2_ardour/editor_ops.cc
+++ b/gtk2_ardour/editor_ops.cc
@@ -4795,7 +4795,7 @@ Editor::toggle_mute ()
}
if (first) {
- new_state = !rtav->route()->soloed ();
+ new_state = !rtav->route()->muted();
first = false;
}
diff --git a/libs/surfaces/generic_midi/generic_midi_control_protocol.cc b/libs/surfaces/generic_midi/generic_midi_control_protocol.cc
index 1a615de424..05a3ef0505 100644
--- a/libs/surfaces/generic_midi/generic_midi_control_protocol.cc
+++ b/libs/surfaces/generic_midi/generic_midi_control_protocol.cc
@@ -844,7 +844,7 @@ GenericMidiControlProtocol::create_function (const XMLNode& node)
}
}
- if ((prop = node.property (X_("arg"))) != 0) {
+ if ((prop = node.property (X_("arg"))) != 0 || (prop = node.property (X_("argument"))) != 0 || (prop = node.property (X_("arguments"))) != 0) {
argument = prop->value ();
}
diff --git a/libs/surfaces/generic_midi/midifunction.cc b/libs/surfaces/generic_midi/midifunction.cc
index 186858550f..38252326d7 100644
--- a/libs/surfaces/generic_midi/midifunction.cc
+++ b/libs/surfaces/generic_midi/midifunction.cc
@@ -66,6 +66,16 @@ MIDIFunction::setup (GenericMidiControlProtocol& ui, const std::string& invokabl
return -1;
}
_function = Select;
+ } else if (strcasecmp (_invokable_name.c_str(), "track-set-solo") == 0) {
+ if (_argument.empty()) {
+ return -1;
+ }
+ _function = TrackSetSolo;
+ } else if (strcasecmp (_invokable_name.c_str(), "track-set-mute") == 0) {
+ if (_argument.empty()) {
+ return -1;
+ }
+ _function = TrackSetMute;
} else {
return -1;
}
@@ -123,6 +133,8 @@ MIDIFunction::execute ()
sscanf (_argument.c_str(), "%d", &rid);
_ui->SelectByRID (rid);
}
+ default:
+ break;
}
}
diff --git a/libs/surfaces/generic_midi/midifunction.h b/libs/surfaces/generic_midi/midifunction.h
index aafa739f20..8b3a52df3c 100644
--- a/libs/surfaces/generic_midi/midifunction.h
+++ b/libs/surfaces/generic_midi/midifunction.h
@@ -53,7 +53,14 @@ class MIDIFunction : public MIDIInvokable
TransportLoopToggle,
TransportRecordEnable,
TransportRecordDisable,
+ /* 1 argument functions: RID */
Select,
+ /* 2 argument functions: RID, value */
+ TrackSetSolo,
+ TrackSetMute,
+ TrackSetGain,
+ TrackSetRecordEnable,
+ TrackSetSoloIsolate,
};
MIDIFunction (MIDI::Port&);