13
0

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:
Paul Davis 2011-08-14 17:11:33 +00:00
parent bd1d705498
commit ae5f278202
6 changed files with 49 additions and 2 deletions

View File

@ -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)
{

View File

@ -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;

View File

@ -4795,7 +4795,7 @@ Editor::toggle_mute ()
}
if (first) {
new_state = !rtav->route()->soloed ();
new_state = !rtav->route()->muted();
first = false;
}

View File

@ -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 ();
}

View File

@ -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;
}
}

View File

@ -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&);