diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2010-04-20 12:38:37 +0000 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2010-04-20 12:38:37 +0000 |
commit | f119387d767d9e8411556579e48022ed9b5d3974 (patch) | |
tree | 5595577ae9970b34bfb9bd6c4ef03e34891e7a7a /gtk2_ardour | |
parent | 2cb5595b11df77375d199c4bed3e35361fba52a3 (diff) |
indicate "soloed-by-others" state on solo button via a "half-lit" state
git-svn-id: svn://localhost/ardour2/branches/3.0@6939 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour')
-rw-r--r-- | gtk2_ardour/ardour3_ui_dark.rc.in | 25 | ||||
-rw-r--r-- | gtk2_ardour/mixer_strip.cc | 61 | ||||
-rw-r--r-- | gtk2_ardour/route_time_axis.cc | 34 | ||||
-rw-r--r-- | gtk2_ardour/route_ui.cc | 53 | ||||
-rw-r--r-- | gtk2_ardour/route_ui.h | 2 |
5 files changed, 106 insertions, 69 deletions
diff --git a/gtk2_ardour/ardour3_ui_dark.rc.in b/gtk2_ardour/ardour3_ui_dark.rc.in index a945cd8240..f338a736dc 100644 --- a/gtk2_ardour/ardour3_ui_dark.rc.in +++ b/gtk2_ardour/ardour3_ui_dark.rc.in @@ -327,6 +327,10 @@ style "solo_button" = "small_button" 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 @@ -338,9 +342,29 @@ style "solo_button_alternate" = "small_button" 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 @@ -1429,6 +1453,7 @@ widget "*MixerMuteButton-alternate" style:highest "mixer_mute_button_alternate" 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" diff --git a/gtk2_ardour/mixer_strip.cc b/gtk2_ardour/mixer_strip.cc index 290081c2f1..5e7064ee8d 100644 --- a/gtk2_ardour/mixer_strip.cc +++ b/gtk2_ardour/mixer_strip.cc @@ -115,7 +115,6 @@ MixerStrip::MixerStrip (Mixer_UI& mx, Session* sess, boost::shared_ptr<Route> rt , comment_button (_("Comments")) { init (); - set_button_names (); set_route (rt); } @@ -326,6 +325,11 @@ MixerStrip::set_route (boost::shared_ptr<Route> rt) RouteUI::set_route (rt); + /* map the current state */ + + mute_changed (0); + solo_changed (0); + delete input_selector; input_selector = 0; @@ -1731,35 +1735,42 @@ MixerStrip::set_button_names () 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; } diff --git a/gtk2_ardour/route_time_axis.cc b/gtk2_ardour/route_time_axis.cc index b3b3f360e3..bb4737622f 100644 --- a/gtk2_ardour/route_time_axis.cc +++ b/gtk2_ardour/route_time_axis.cc @@ -116,8 +116,6 @@ RouteTimeAxisView::RouteTimeAxisView (PublicEditor& ed, Session* sess, boost::sh , 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); @@ -134,6 +132,9 @@ RouteTimeAxisView::RouteTimeAxisView (PublicEditor& ed, Session* sess, boost::sh _marked_for_display = true; } + mute_changed (0); + solo_changed (0); + timestretch_rect = 0; no_redraw = false; destructive_track_mode_item = 0; @@ -2422,18 +2423,21 @@ RouteTimeAxisView::set_button_names () { 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")); } diff --git a/gtk2_ardour/route_ui.cc b/gtk2_ardour/route_ui.cc index 284925d06a..526d99cd94 100644 --- a/gtk2_ardour/route_ui.cc +++ b/gtk2_ardour/route_ui.cc @@ -99,6 +99,8 @@ RouteUI::init () 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; @@ -210,6 +212,7 @@ RouteUI::set_route (boost::shared_ptr<Route> rp) _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()); @@ -238,11 +241,6 @@ RouteUI::set_route (boost::shared_ptr<Route> rp) solo_button->show(); } - /* map the current state */ - - mute_changed (0); - solo_changed (0); - map_frozen (); } @@ -752,7 +750,11 @@ RouteUI::solo_visual_state_with_isolate (boost::shared_ptr<Route> r) if (r->solo_isolated()) { return 2; } else if (r->soloed()) { - return 1; + if (!r->self_soloed()) { + return 3; + } else { + return 1; + } } else { return 0; } @@ -809,6 +811,20 @@ RouteUI::update_solo_display () } + 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)); } @@ -949,15 +965,15 @@ RouteUI::build_solo_menu (void) 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()); @@ -1265,27 +1281,6 @@ RouteUI::denormal_protection_changed () } 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 () { _route->input()->disconnect (this); diff --git a/gtk2_ardour/route_ui.h b/gtk2_ardour/route_ui.h index 5741687040..a01db6dd8e 100644 --- a/gtk2_ardour/route_ui.h +++ b/gtk2_ardour/route_ui.h @@ -153,6 +153,8 @@ class RouteUI : public virtual AxisView 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 (); |