style "solo_button_alternate" = "small_button"
{
+ #
+ # this is the "solo-safe" solo theme
+ #
+
bg[NORMAL] = { 0.19, 0.97, 0.69 } # solo-safe
bg[ACTIVE] = { 0.19, 0.97, 0.69 } # solo-safe
bg[SELECTED] = { 0.19, 0.97, 0.69 } # solo-safe
fg[PRELIGHT] = { 0, 0, 0 }
}
+style "solo_button_alternate2" = "small_button"
+{
+ #
+ # this is the "half-bright" solo theme
+ #
+
+ bg[NORMAL] = { 0.91, 0.97, 0.82 }
+ bg[ACTIVE] = { 0.91, 0.97, 0.82 }
+ bg[SELECTED] = { 0.91, 0.97, 0.82 }
+ bg[PRELIGHT] = { 0.91, 0.97, 0.82 }
+
+ fg[ACTIVE] = { 0, 0, 0 }
+ fg[SELECTED] = { 0, 0, 0 }
+ fg[NORMAL] = { 0, 0, 0 }
+ fg[PRELIGHT] = { 0, 0, 0 }
+}
style "solo_button_active" = "small_button"
{
+ #
+ # this is the "full-bright" solo theme
+ #
+
bg[NORMAL] = { 0.66, 0.97, 0.19 } # solo
bg[ACTIVE] = { 0.66, 0.97, 0.19 } # solo
bg[SELECTED] = { 0.66, 0.97, 0.19 } # solo
widget "*MixerMuteButton-active" style:highest "mixer_mute_button_active"
widget "*SoloButton" style:highest "solo_button"
widget "*SoloButton-alternate" style:highest "solo_button_alternate"
+widget "*SoloButton-alternate2" style:highest "solo_button_alternate2"
widget "*SoloButton-active" style:highest "solo_button_active"
widget "*MixerSoloButton" style:highest "mixer_solo_button"
widget "*MixerSoloButton-alternate" style:highest "mixer_solo_button_alternate"
, comment_button (_("Comments"))
{
init ();
- set_button_names ();
set_route (rt);
}
RouteUI::set_route (rt);
+ /* map the current state */
+
+ mute_changed (0);
+ solo_changed (0);
+
delete input_selector;
input_selector = 0;
case Wide:
rec_enable_button_label.set_text (_("Rec"));
mute_button_label.set_text (_("Mute"));
- if (!Config->get_solo_control_is_listen_control()) {
- solo_button_label.set_text (_("Solo"));
- } else {
- switch (Config->get_listen_position()) {
- case AfterFaderListen:
- solo_button_label.set_text (_("AFL"));
- break;
- case PreFaderListen:
- solo_button_label.set_text (_("PFL"));
- break;
- }
- }
+ if (_route && _route->solo_safe()) {
+ solo_button_label.set_text (X_("!"));
+ } else {
+ if (!Config->get_solo_control_is_listen_control()) {
+ solo_button_label.set_text (_("Solo"));
+ } else {
+ switch (Config->get_listen_position()) {
+ case AfterFaderListen:
+ solo_button_label.set_text (_("AFL"));
+ break;
+ case PreFaderListen:
+ solo_button_label.set_text (_("PFL"));
+ break;
+ }
+ }
+ }
break;
default:
rec_enable_button_label.set_text (_("R"));
mute_button_label.set_text (_("M"));
- if (!Config->get_solo_control_is_listen_control()) {
- solo_button_label.set_text (_("S"));
- } else {
- switch (Config->get_listen_position()) {
- case AfterFaderListen:
- solo_button_label.set_text (_("A"));
- break;
- case PreFaderListen:
- solo_button_label.set_text (_("P"));
- break;
- }
- }
+ if (_route && _route->solo_safe()) {
+ solo_button_label.set_text (X_("!"));
+ if (!Config->get_solo_control_is_listen_control()) {
+ solo_button_label.set_text (_("S"));
+ } else {
+ switch (Config->get_listen_position()) {
+ case AfterFaderListen:
+ solo_button_label.set_text (_("A"));
+ break;
+ case PreFaderListen:
+ solo_button_label.set_text (_("P"));
+ break;
+ }
+ }
+ }
break;
}
, gm (sess, slider, true, 115)
, _ignore_track_mode_change (false)
{
- set_button_names ();
-
gm.set_controls (_route, _route->shared_peak_meter(), _route->amp());
gm.get_level_meter().set_no_show_all();
gm.get_level_meter().setup_meters(50);
_marked_for_display = true;
}
+ mute_changed (0);
+ solo_changed (0);
+
timestretch_rect = 0;
no_redraw = false;
destructive_track_mode_item = 0;
{
rec_enable_button_label.set_text (_("r"));
- if (Config->get_solo_control_is_listen_control()) {
- switch (Config->get_listen_position()) {
- case AfterFaderListen:
- solo_button_label.set_text (_("A"));
- break;
- case PreFaderListen:
- solo_button_label.set_text (_("P"));
- break;
- }
- } else {
- solo_button_label.set_text (_("s"));
- }
-
+ if (_route && _route->solo_safe()) {
+ solo_button_label.set_text (X_("!"));
+ } else {
+ if (Config->get_solo_control_is_listen_control()) {
+ switch (Config->get_listen_position()) {
+ case AfterFaderListen:
+ solo_button_label.set_text (_("A"));
+ break;
+ case PreFaderListen:
+ solo_button_label.set_text (_("P"));
+ break;
+ }
+ } else {
+ solo_button_label.set_text (_("s"));
+ }
+ }
mute_button_label.set_text (_("m"));
}
post_fader_mute_check = 0;
listen_mute_check = 0;
main_mute_check = 0;
+ solo_safe_check = 0;
+ solo_isolated_check = 0;
ignore_toggle = false;
_solo_release = 0;
_mute_release = 0;
_route->active_changed.connect (route_connections, invalidator (*this), boost::bind (&RouteUI::route_active_changed, this), gui_context());
_route->mute_changed.connect (route_connections, invalidator (*this), ui_bind (&RouteUI::mute_changed, this, _1), gui_context());
_route->solo_changed.connect (route_connections, invalidator (*this), ui_bind (&RouteUI::solo_changed, this, _1), gui_context());
+ _route->solo_safe_changed.connect (route_connections, invalidator (*this), ui_bind (&RouteUI::solo_changed, this, _1), gui_context());
_route->listen_changed.connect (route_connections, invalidator (*this), ui_bind (&RouteUI::listen_changed, this, _1), gui_context());
_route->solo_isolated_changed.connect (route_connections, invalidator (*this), ui_bind (&RouteUI::solo_changed, this, _1), gui_context());
_route->phase_invert_changed.connect (route_connections, invalidator (*this), boost::bind (&RouteUI::polarity_changed, this), gui_context());
solo_button->show();
}
- /* map the current state */
-
- mute_changed (0);
- solo_changed (0);
-
map_frozen ();
}
if (r->solo_isolated()) {
return 2;
} else if (r->soloed()) {
- return 1;
+ if (!r->self_soloed()) {
+ return 3;
+ } else {
+ return 1;
+ }
} else {
return 0;
}
}
+ bool yn = _route->solo_safe ();
+
+ if (solo_safe_check && solo_safe_check->get_active() != yn) {
+ solo_safe_check->set_active (yn);
+ }
+
+ yn = _route->solo_isolated ();
+
+ if (solo_isolated_check && solo_isolated_check->get_active() != yn) {
+ solo_isolated_check->set_active (yn);
+ }
+
+ set_button_names ();
+
solo_button->set_visual_state (solo_visual_state_with_isolate (_route));
}
check = new CheckMenuItem(_("Solo Isolate"));
check->set_active (_route->solo_isolated());
check->signal_toggled().connect (sigc::bind (sigc::mem_fun (*this, &RouteUI::toggle_solo_isolated), check));
- _route->solo_isolated_changed.connect (route_connections, invalidator (*this), ui_bind (&RouteUI::solo_isolated_toggle, this, _1, check), gui_context());
items.push_back (CheckMenuElem(*check));
+ solo_isolated_check = dynamic_cast<CheckMenuItem*>(&items.back());
check->show_all();
check = new CheckMenuItem(_("Solo Safe"));
check->set_active (_route->solo_safe());
check->signal_toggled().connect (sigc::bind (sigc::mem_fun (*this, &RouteUI::toggle_solo_safe), check));
- _route->solo_safe_changed.connect (route_connections, invalidator (*this), ui_bind (&RouteUI::solo_safe_toggle, this, _1, check), gui_context());
items.push_back (CheckMenuElem(*check));
+ solo_safe_check = dynamic_cast<CheckMenuItem*>(&items.back());
check->show_all();
//items.push_back (SeparatorElem());
}
}
-void
-RouteUI::solo_isolated_toggle(void* /*src*/, Gtk::CheckMenuItem* check)
-{
- bool yn = _route->solo_isolated ();
-
- if (check->get_active() != yn) {
- check->set_active (yn);
- }
-}
-
-
-void
-RouteUI::solo_safe_toggle(void* /*src*/, Gtk::CheckMenuItem* check)
-{
- bool yn = _route->solo_safe ();
-
- if (check->get_active() != yn) {
- check->set_active (yn);
- }
-}
-
void
RouteUI::disconnect_input ()
{
Gtk::CheckMenuItem* post_fader_mute_check;
Gtk::CheckMenuItem* listen_mute_check;
Gtk::CheckMenuItem* main_mute_check;
+ Gtk::CheckMenuItem* solo_safe_check;
+ Gtk::CheckMenuItem* solo_isolated_check;
void toggle_mute_menu(ARDOUR::MuteMaster::MutePoint, Gtk::CheckMenuItem*);
void muting_change ();
void
Route::set_listen (bool yn, void* src)
{
+ if (_solo_safe) {
+ return;
+ }
+
if (_monitor_send) {
if (yn != _monitor_send->active()) {
if (yn) {
void
Route::set_self_solo (bool yn)
{
- _self_solo = yn;
+ _self_solo = yn;
}
void
Route::mod_solo_by_others (int32_t delta)
{
+ if (_solo_safe) {
+ return;
+ }
+
if (delta < 0) {
if (_soloed_by_others >= (uint32_t) abs (delta)) {
_soloed_by_others += delta;
}
set_delivery_solo ();
+ solo_changed (this);
}
void
case 2:
name += "-alternate";
break;
+
+ case 3:
+ name += "-alternate2";
+ break;
}
set_widget_name (name);