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
This commit is contained in:
parent
bd1d705498
commit
ae5f278202
@ -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 */
|
||||
@ -911,6 +912,32 @@ Editor::zoom_adjustment_changed ()
|
||||
temporal_zoom (fpu);
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
|
@ -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;
|
||||
|
@ -4795,7 +4795,7 @@ Editor::toggle_mute ()
|
||||
}
|
||||
|
||||
if (first) {
|
||||
new_state = !rtav->route()->soloed ();
|
||||
new_state = !rtav->route()->muted();
|
||||
first = false;
|
||||
}
|
||||
|
||||
|
@ -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 ();
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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&);
|
||||
|
Loading…
Reference in New Issue
Block a user