using namespace Gtk;
using namespace Gtkmm2ext;
using namespace ARDOUR;
+using namespace ARDOUR_UI_UTILS;
using namespace PBD;
uint32_t RouteUI::_max_invert_buttons = 3;
rec_enable_button = manage (new ArdourButton);
rec_enable_button->set_name ("record enable button");
- rec_enable_button->set_tweaks (ArdourButton::ImplicitUsesSolidColor);
+// rec_enable_button->set_tweaks (ArdourButton::ImplicitUsesSolidColor);
UI::instance()->set_tip (rec_enable_button, _("Enable recording on this track"), "");
show_sends_button = manage (new ArdourButton);
multiple_mute_change = false;
- if (!_i_am_the_modifier) {
+ if (Keyboard::is_context_menu_event (ev)) {
- if (Keyboard::is_context_menu_event (ev)) {
-
- if (mute_menu == 0){
- build_mute_menu();
- }
-
- mute_menu->popup(0,ev->time);
+ if (mute_menu == 0){
+ build_mute_menu();
+ }
- } else {
+ mute_menu->popup(0,ev->time);
- if (Keyboard::is_button2_event (ev)) {
- // Primary-button2 click is the midi binding click
- // button2-click is "momentary"
+ } else {
+ if (Keyboard::is_button2_event (ev)) {
+ // Primary-button2 click is the midi binding click
+ // button2-click is "momentary"
- if (mute_button->on_button_press_event (ev)) {
- return true;
- }
- _mute_release = new SoloMuteRelease (_route->muted ());
+ if (mute_button->on_button_press_event (ev)) {
+ return true;
}
- if (ev->button == 1 || Keyboard::is_button2_event (ev)) {
+ _mute_release = new SoloMuteRelease (_route->muted ());
+ }
+
+ if (ev->button == 1 || Keyboard::is_button2_event (ev)) {
- if (Keyboard::modifier_state_equals (ev->state, Keyboard::ModifierMask (Keyboard::PrimaryModifier|Keyboard::TertiaryModifier))) {
+ if (Keyboard::modifier_state_equals (ev->state, Keyboard::ModifierMask (Keyboard::PrimaryModifier|Keyboard::TertiaryModifier))) {
- /* toggle mute on everything (but
- * exclude the master and monitor)
- *
- * because we are going to erase
- * elements of the list we need to work
- * on a copy.
- */
+ /* toggle mute on everything (but
+ * exclude the master and monitor)
+ *
+ * because we are going to erase
+ * elements of the list we need to work
+ * on a copy.
+ */
- boost::shared_ptr<RouteList> copy (new RouteList);
+ boost::shared_ptr<RouteList> copy (new RouteList);
- *copy = *_session->get_routes ();
+ *copy = *_session->get_routes ();
- for (RouteList::iterator i = copy->begin(); i != copy->end(); ) {
- if ((*i)->is_master() || (*i)->is_monitor()) {
- i = copy->erase (i);
- } else {
- ++i;
- }
+ for (RouteList::iterator i = copy->begin(); i != copy->end(); ) {
+ if ((*i)->is_master() || (*i)->is_monitor()) {
+ i = copy->erase (i);
+ } else {
+ ++i;
}
+ }
- if (_mute_release) {
- _mute_release->routes = copy;
- }
+ if (_mute_release) {
+ _mute_release->routes = copy;
+ }
- _session->set_mute (copy, !_route->muted());
+ DisplaySuspender ds;
+ _session->set_mute (copy, !_route->muted());
- } else if (Keyboard::modifier_state_equals (ev->state, Keyboard::PrimaryModifier)) {
+ } else if (Keyboard::modifier_state_equals (ev->state, Keyboard::PrimaryModifier)) {
- /* Primary-button1 applies change to the mix group even if it is not active
- NOTE: Primary-button2 is MIDI learn.
- */
+ /* Primary-button1 applies change to the mix group even if it is not active
+ NOTE: Primary-button2 is MIDI learn.
+ */
- boost::shared_ptr<RouteList> rl;
+ boost::shared_ptr<RouteList> rl;
- if (ev->button == 1) {
+ if (ev->button == 1) {
- if (_route->route_group()) {
+ if (_route->route_group()) {
- rl = _route->route_group()->route_list();
+ rl = _route->route_group()->route_list();
- if (_mute_release) {
- _mute_release->routes = rl;
- }
- } else {
- rl.reset (new RouteList);
- rl->push_back (_route);
+ if (_mute_release) {
+ _mute_release->routes = rl;
}
-
- _session->set_mute (rl, !_route->muted(), Session::rt_cleanup, true);
+ } else {
+ rl.reset (new RouteList);
+ rl->push_back (_route);
}
- } else {
+ DisplaySuspender ds;
+ _session->set_mute (rl, !_route->muted(), Session::rt_cleanup, true);
+ }
- /* plain click applies change to this route */
+ } else {
- boost::shared_ptr<RouteList> rl (new RouteList);
- rl->push_back (_route);
+ /* plain click applies change to this route */
+
+ boost::shared_ptr<RouteList> rl (new RouteList);
+ rl->push_back (_route);
- if (_mute_release) {
- _mute_release->routes = rl;
- }
+ if (_mute_release) {
+ _mute_release->routes = rl;
+ }
- _session->set_mute (rl, !_route->muted());
+ _session->set_mute (rl, !_route->muted());
- }
}
}
-
}
return true;
bool
RouteUI::mute_release (GdkEventButton*)
{
- if (!_i_am_the_modifier) {
- if (_mute_release){
- _session->set_mute (_mute_release->routes, _mute_release->active, Session::rt_cleanup, true);
- delete _mute_release;
- _mute_release = 0;
- }
+ if (_mute_release){
+ DisplaySuspender ds;
+ _session->set_mute (_mute_release->routes, _mute_release->active, Session::rt_cleanup, true);
+ delete _mute_release;
+ _mute_release = 0;
}
return true;
multiple_solo_change = false;
- if (!_i_am_the_modifier) {
-
- if (Keyboard::is_context_menu_event (ev)) {
+ if (Keyboard::is_context_menu_event (ev)) {
- if (! (solo_isolated_led && solo_isolated_led->is_visible()) ||
- ! (solo_safe_led && solo_safe_led->is_visible())) {
+ if (! (solo_isolated_led && solo_isolated_led->is_visible()) ||
+ ! (solo_safe_led && solo_safe_led->is_visible())) {
- if (solo_menu == 0) {
- build_solo_menu ();
- }
-
- solo_menu->popup (1, ev->time);
- }
+ if (solo_menu == 0) {
+ build_solo_menu ();
+ }
- } else {
+ solo_menu->popup (1, ev->time);
+ }
- if (Keyboard::is_button2_event (ev)) {
+ } else {
- // Primary-button2 click is the midi binding click
- // button2-click is "momentary"
+ if (Keyboard::is_button2_event (ev)) {
- if (solo_button->on_button_press_event (ev)) {
- return true;
- }
+ // Primary-button2 click is the midi binding click
+ // button2-click is "momentary"
- _solo_release = new SoloMuteRelease (_route->self_soloed());
+ if (solo_button->on_button_press_event (ev)) {
+ return true;
}
- if (ev->button == 1 || Keyboard::is_button2_event (ev)) {
+ _solo_release = new SoloMuteRelease (_route->self_soloed());
+ }
- if (Keyboard::modifier_state_equals (ev->state, Keyboard::ModifierMask (Keyboard::PrimaryModifier|Keyboard::TertiaryModifier))) {
+ if (ev->button == 1 || Keyboard::is_button2_event (ev)) {
- /* Primary-Tertiary-click applies change to all routes */
+ if (Keyboard::modifier_state_equals (ev->state, Keyboard::ModifierMask (Keyboard::PrimaryModifier|Keyboard::TertiaryModifier))) {
- if (_solo_release) {
- _solo_release->routes = _session->get_routes ();
- }
+ /* Primary-Tertiary-click applies change to all routes */
- if (Config->get_solo_control_is_listen_control()) {
- _session->set_listen (_session->get_routes(), !_route->listening_via_monitor(), Session::rt_cleanup, true);
- } else {
- _session->set_solo (_session->get_routes(), !_route->self_soloed(), Session::rt_cleanup, true);
- }
+ if (_solo_release) {
+ _solo_release->routes = _session->get_routes ();
+ }
- } else if (Keyboard::modifier_state_contains (ev->state, Keyboard::ModifierMask (Keyboard::PrimaryModifier|Keyboard::SecondaryModifier))) {
+ DisplaySuspender ds;
+ if (Config->get_solo_control_is_listen_control()) {
+ _session->set_listen (_session->get_routes(), !_route->listening_via_monitor(), Session::rt_cleanup, true);
+ } else {
+ _session->set_solo (_session->get_routes(), !_route->self_soloed(), Session::rt_cleanup, true);
+ }
+
+ } else if (Keyboard::modifier_state_contains (ev->state, Keyboard::ModifierMask (Keyboard::PrimaryModifier|Keyboard::SecondaryModifier))) {
- // Primary-Secondary-click: exclusively solo this track
+ // Primary-Secondary-click: exclusively solo this track
- if (_solo_release) {
- _solo_release->exclusive = true;
+ if (_solo_release) {
+ _solo_release->exclusive = true;
- boost::shared_ptr<RouteList> routes = _session->get_routes();
+ boost::shared_ptr<RouteList> routes = _session->get_routes();
- for (RouteList::iterator i = routes->begin(); i != routes->end(); ++i) {
- if ((*i)->soloed ()) {
- _solo_release->routes_on->push_back (*i);
- } else {
- _solo_release->routes_off->push_back (*i);
- }
+ for (RouteList::iterator i = routes->begin(); i != routes->end(); ++i) {
+ if ((*i)->soloed ()) {
+ _solo_release->routes_on->push_back (*i);
+ } else {
+ _solo_release->routes_off->push_back (*i);
}
}
+ }
- if (Config->get_solo_control_is_listen_control()) {
- /* ??? we need a just_one_listen() method */
- } else {
- _session->set_just_one_solo (_route, true);
- }
+ if (Config->get_solo_control_is_listen_control()) {
+ /* ??? we need a just_one_listen() method */
+ } else {
+ DisplaySuspender ds;
+ _session->set_just_one_solo (_route, true);
+ }
- } else if (Keyboard::modifier_state_equals (ev->state, Keyboard::TertiaryModifier)) {
+ } else if (Keyboard::modifier_state_equals (ev->state, Keyboard::TertiaryModifier)) {
- // shift-click: toggle solo isolated status
+ // shift-click: toggle solo isolated status
- _route->set_solo_isolated (!_route->solo_isolated(), this);
- delete _solo_release;
- _solo_release = 0;
+ _route->set_solo_isolated (!_route->solo_isolated(), this);
+ delete _solo_release;
+ _solo_release = 0;
- } else if (Keyboard::modifier_state_equals (ev->state, Keyboard::PrimaryModifier)) {
+ } else if (Keyboard::modifier_state_equals (ev->state, Keyboard::PrimaryModifier)) {
- /* Primary-button1: solo mix group.
- NOTE: Primary-button2 is MIDI learn.
- */
+ /* Primary-button1: solo mix group.
+ NOTE: Primary-button2 is MIDI learn.
+ */
- /* Primary-button1 applies change to the mix group even if it is not active
- NOTE: Primary-button2 is MIDI learn.
- */
+ /* Primary-button1 applies change to the mix group even if it is not active
+ NOTE: Primary-button2 is MIDI learn.
+ */
- boost::shared_ptr<RouteList> rl;
+ boost::shared_ptr<RouteList> rl;
- if (ev->button == 1) {
+ if (ev->button == 1) {
- if (_route->route_group()) {
+ if (_route->route_group()) {
- rl = _route->route_group()->route_list();
+ rl = _route->route_group()->route_list();
- if (_solo_release) {
- _solo_release->routes = rl;
- }
- } else {
- rl.reset (new RouteList);
- rl->push_back (_route);
+ if (_solo_release) {
+ _solo_release->routes = rl;
}
+ } else {
+ rl.reset (new RouteList);
+ rl->push_back (_route);
+ }
- if (Config->get_solo_control_is_listen_control()) {
- _session->set_listen (rl, !_route->listening_via_monitor(), Session::rt_cleanup, true);
- } else {
- _session->set_solo (rl, !_route->self_soloed(), Session::rt_cleanup, true);
- }
+ DisplaySuspender ds;
+ if (Config->get_solo_control_is_listen_control()) {
+ _session->set_listen (rl, !_route->listening_via_monitor(), Session::rt_cleanup, true);
+ } else {
+ _session->set_solo (rl, !_route->self_soloed(), Session::rt_cleanup, true);
}
+ }
- } else {
+ } else {
- /* click: solo this route */
+ /* click: solo this route */
- boost::shared_ptr<RouteList> rl (new RouteList);
- rl->push_back (route());
+ boost::shared_ptr<RouteList> rl (new RouteList);
+ rl->push_back (route());
- if (_solo_release) {
- _solo_release->routes = rl;
- }
+ if (_solo_release) {
+ _solo_release->routes = rl;
+ }
- if (Config->get_solo_control_is_listen_control()) {
- _session->set_listen (rl, !_route->listening_via_monitor());
- } else {
- _session->set_solo (rl, !_route->self_soloed());
- }
+ DisplaySuspender ds;
+ if (Config->get_solo_control_is_listen_control()) {
+ _session->set_listen (rl, !_route->listening_via_monitor());
+ } else {
+ _session->set_solo (rl, !_route->self_soloed());
}
}
}
bool
RouteUI::solo_release (GdkEventButton*)
{
- if (!_i_am_the_modifier) {
-
- if (_solo_release) {
+ if (_solo_release) {
- if (_solo_release->exclusive) {
+ if (_solo_release->exclusive) {
+ } else {
+ DisplaySuspender ds;
+ if (Config->get_solo_control_is_listen_control()) {
+ _session->set_listen (_solo_release->routes, _solo_release->active, Session::rt_cleanup, true);
} else {
- if (Config->get_solo_control_is_listen_control()) {
- _session->set_listen (_solo_release->routes, _solo_release->active, Session::rt_cleanup, true);
- } else {
- _session->set_solo (_solo_release->routes, _solo_release->active, Session::rt_cleanup, true);
- }
+ _session->set_solo (_solo_release->routes, _solo_release->active, Session::rt_cleanup, true);
}
-
- delete _solo_release;
- _solo_release = 0;
}
+
+ delete _solo_release;
+ _solo_release = 0;
}
return true;
}
if (!_session->engine().connected()) {
- MessageDialog msg (_("Not connected to JACK - cannot engage record"));
+ MessageDialog msg (_("Not connected to AudioEngine - cannot engage record"));
msg.run ();
return true;
}
}
}
- if (!_i_am_the_modifier && is_track() && rec_enable_button) {
+ if (is_track() && rec_enable_button) {
if (Keyboard::is_button2_event (ev)) {
} else if (Keyboard::modifier_state_equals (ev->state, Keyboard::ModifierMask (Keyboard::PrimaryModifier|Keyboard::TertiaryModifier))) {
+ DisplaySuspender ds;
_session->set_record_enabled (_session->get_routes(), !rec_enable_button->active_state());
} else if (Keyboard::modifier_state_equals (ev->state, Keyboard::PrimaryModifier)) {
rl.reset (new RouteList);
rl->push_back (_route);
}
-
+
+ DisplaySuspender ds;
_session->set_record_enabled (rl, !rec_enable_button->active_state(), Session::rt_cleanup, true);
}
boost::shared_ptr<RouteList> rl (new RouteList);
rl->push_back (route());
+ DisplaySuspender ds;
_session->set_record_enabled (rl, !rec_enable_button->active_state());
}
}
rl->push_back (route());
}
+ DisplaySuspender ds;
_session->set_monitoring (rl, mc, Session::rt_cleanup, true);
return true;
return true;
}
- if (!_i_am_the_modifier && !is_track() && show_sends_button) {
+ if (!is_track() && show_sends_button) {
if (Keyboard::is_button2_event (ev) && Keyboard::modifier_state_equals (ev->state, Keyboard::PrimaryModifier)) {
MenuList& items = mute_menu->items();
- pre_fader_mute_check = manage (new Gtk::CheckMenuItem(_("Pre Fader")));
+ pre_fader_mute_check = manage (new Gtk::CheckMenuItem(_("Pre Fader Sends")));
init_mute_menu(MuteMaster::PreFader, pre_fader_mute_check);
pre_fader_mute_check->signal_toggled().connect(sigc::bind (sigc::mem_fun (*this, &RouteUI::toggle_mute_menu), MuteMaster::PreFader, pre_fader_mute_check));
items.push_back (CheckMenuElem(*pre_fader_mute_check));
pre_fader_mute_check->show_all();
- post_fader_mute_check = manage (new Gtk::CheckMenuItem(_("Post Fader")));
+ post_fader_mute_check = manage (new Gtk::CheckMenuItem(_("Post Fader Sends")));
init_mute_menu(MuteMaster::PostFader, post_fader_mute_check);
post_fader_mute_check->signal_toggled().connect(sigc::bind (sigc::mem_fun (*this, &RouteUI::toggle_mute_menu), MuteMaster::PostFader, post_fader_mute_check));
items.push_back (CheckMenuElem(*post_fader_mute_check));
bool
RouteUI::solo_isolate_button_release (GdkEventButton* ev)
{
- if (ev->type == GDK_2BUTTON_PRESS || ev->type == GDK_3BUTTON_PRESS) {
- return true;
- }
+ if (ev->type == GDK_2BUTTON_PRESS || ev->type == GDK_3BUTTON_PRESS) {
+ return true;
+ }
- bool view = solo_isolated_led->active_state();
- bool model = _route->solo_isolated();
+ bool view = solo_isolated_led->active_state();
+ bool model = _route->solo_isolated();
- /* called BEFORE the view has changed */
+ /* called BEFORE the view has changed */
- if (ev->button == 1) {
- if (Keyboard::modifier_state_equals (ev->state, Keyboard::ModifierMask (Keyboard::PrimaryModifier|Keyboard::TertiaryModifier))) {
+ if (ev->button == 1) {
+ if (Keyboard::modifier_state_equals (ev->state, Keyboard::ModifierMask (Keyboard::PrimaryModifier|Keyboard::TertiaryModifier))) {
- if (model) {
- /* disable isolate for all routes */
- _session->set_solo_isolated (_session->get_routes(), false, Session::rt_cleanup, true);
- }
+ if (model) {
+ /* disable isolate for all routes */
+ DisplaySuspender ds;
+ _session->set_solo_isolated (_session->get_routes(), false, Session::rt_cleanup, true);
+ }
- } else {
- if (model == view) {
+ } else {
+ if (model == view) {
- /* flip just this route */
+ /* flip just this route */
- boost::shared_ptr<RouteList> rl (new RouteList);
- rl->push_back (_route);
- _session->set_solo_isolated (rl, !view, Session::rt_cleanup, true);
- }
- }
- }
+ boost::shared_ptr<RouteList> rl (new RouteList);
+ rl->push_back (_route);
+ DisplaySuspender ds;
+ _session->set_solo_isolated (rl, !view, Session::rt_cleanup, true);
+ }
+ }
+ }
- return true;
+ return true;
}
bool
(_route->is_master() ? _("the master bus") : _("the monitor bus"))));
} else {
l->set_markup (string_compose (_("The remote control ID of %5 is: %2\n\n\n"
- "Remote Control IDs are currently determined by track/bus ordering in Ardour.\n\n"
+ "Remote Control IDs are currently determined by track/bus ordering in %6.\n\n"
"%3Use the User Interaction tab of the Preferences window if you want to change this%4"),
(is_track() ? _("track") : _("bus")),
_route->remote_control_id(),
"<span size=\"small\" style=\"italic\">",
"</span>",
- Glib::Markup::escape_text (_route->name())));
+ Glib::Markup::escape_text (_route->name()),
+ PROGRAM_NAME));
}
dialog.get_vbox()->pack_start (*l);
dialog.add_button (Stock::OK, RESPONSE_CANCEL);
void
RouteUI::set_invert_button_state ()
{
- ++_i_am_the_modifier;
-
uint32_t const N = _route->input()->n_ports().n_audio();
if (N > _max_invert_buttons) {
}
}
-
- --_i_am_the_modifier;
}
bool
RouteGroup* g = _route->route_group ();
if (g && g->is_color()) {
- return GroupTabs::group_color (g);
+ Gdk::Color c;
+ set_color_from_rgba (c, GroupTabs::group_color (g));
+ return c;
}
return _color;