diff --git a/src/Patchage.cpp b/src/Patchage.cpp index dc83b3a3..f6b5c244 100644 --- a/src/Patchage.cpp +++ b/src/Patchage.cpp @@ -93,6 +93,8 @@ Patchage::Patchage(int argc, char** argv) , INIT_WIDGET(_menu_help_about) , INIT_WIDGET(_menu_jack_start) , INIT_WIDGET(_menu_jack_stop) + , INIT_WIDGET(_menu_a2j_start) + , INIT_WIDGET(_menu_a2j_stop) , INIT_WIDGET(_menu_load_project) , INIT_WIDGET(_menu_save_all_projects) , INIT_WIDGET(_menu_close_all_projects) @@ -220,6 +222,11 @@ Patchage::Patchage(int argc, char** argv) _menu_jack_stop->signal_activate().connect( sigc::mem_fun(_jack, &jack_proxy::stop_server)); + _menu_a2j_start->signal_activate().connect( + sigc::mem_fun(_a2j, &a2j_proxy::start_bridge)); + _menu_a2j_stop->signal_activate().connect( + sigc::mem_fun(_a2j, &a2j_proxy::stop_bridge)); + jack_status_changed(_jack->is_started()); connect_widgets(); @@ -573,16 +580,24 @@ Patchage::set_a2j_status( { case A2J_STATUS_NO_RESPONSE: status_text = "A2J N/A"; + _menu_a2j_start->set_sensitive(false); + _menu_a2j_stop->set_sensitive(false); break; case A2J_STATUS_BRIDGE_STOPPED: status_text = "A2J bridge stopped"; + _menu_a2j_start->set_sensitive(true); + _menu_a2j_stop->set_sensitive(false); break; case A2J_STATUS_BRIDGE_STARTED: status_text = "A2J bridge started"; + _menu_a2j_start->set_sensitive(false); + _menu_a2j_stop->set_sensitive(true); break; default: error_msg(str(boost::format("Unknown A2J status %u") % status)); status_text = "Unknown A2J status"; + _menu_a2j_start->set_sensitive(true); + _menu_a2j_stop->set_sensitive(true); break; } diff --git a/src/Patchage.hpp b/src/Patchage.hpp index 1151c265..f49333b2 100644 --- a/src/Patchage.hpp +++ b/src/Patchage.hpp @@ -165,6 +165,8 @@ protected: Widget _menu_help_about; Widget _menu_jack_start; Widget _menu_jack_stop; + Widget _menu_a2j_start; + Widget _menu_a2j_stop; Widget _menu_load_project; Widget _menu_save_all_projects; Widget _menu_close_all_projects; diff --git a/src/a2j_proxy.cpp b/src/a2j_proxy.cpp index 44699aec..eac2e475 100644 --- a/src/a2j_proxy.cpp +++ b/src/a2j_proxy.cpp @@ -310,3 +310,29 @@ a2j_proxy_impl::is_started() return started; } + +void +a2j_proxy::start_bridge() +{ + DBusMessage * reply_ptr; + + if (!_impl_ptr->call(true, A2J_IFACE_CONTROL, "start", &reply_ptr, DBUS_TYPE_INVALID)) + { + return; + } + + dbus_message_unref(reply_ptr); +} + +void +a2j_proxy::stop_bridge() +{ + DBusMessage * reply_ptr; + + if (!_impl_ptr->call(true, A2J_IFACE_CONTROL, "stop", &reply_ptr, DBUS_TYPE_INVALID)) + { + return; + } + + dbus_message_unref(reply_ptr); +} diff --git a/src/a2j_proxy.hpp b/src/a2j_proxy.hpp index 7b12abd8..14e8efc2 100644 --- a/src/a2j_proxy.hpp +++ b/src/a2j_proxy.hpp @@ -40,6 +40,12 @@ public: string& alsa_client_name, string& alsa_port_name); + void + start_bridge(); + + void + stop_bridge(); + private: a2j_proxy_impl * _impl_ptr; }; diff --git a/src/patchage.glade b/src/patchage.glade index fab5b3f1..85645f41 100644 --- a/src/patchage.glade +++ b/src/patchage.glade @@ -144,6 +144,37 @@ + + + True + Start A2J bridge + True + + + + True + gtk-media-play + 1 + + + + + + + True + False + Stop A2J bridge + True + + + + True + gtk-media-stop + 1 + + + +