get "solo safe" back in action again

git-svn-id: svn://localhost/ardour2/branches/3.0@6149 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
Paul Davis 2009-11-21 19:33:09 +00:00
parent 3ef1fe2493
commit 7fdfa981b5
4 changed files with 49 additions and 13 deletions

View File

@ -398,19 +398,10 @@ RouteUI::solo_press(GdkEventButton* ev)
} else if (Keyboard::modifier_state_equals (ev->state, Keyboard::TertiaryModifier)) {
// shift-click: set this route to solo safe
// shift-click: toggle solo isolated status
if (Profile->get_sae() && ev->button == 1) {
// button 1 and shift-click: disables solo_latched for this click
if (!Config->get_solo_latched ()) {
Config->set_solo_latched (true);
reversibly_apply_route_boolean ("solo change", &Route::set_solo, !_route->soloed(), this);
Config->set_solo_latched (false);
}
} else {
_route->set_solo_isolated (!_route->solo_isolated(), this);
wait_for_release = false;
}
_route->set_solo_isolated (!_route->solo_isolated(), this);
wait_for_release = false;
} else if (Keyboard::modifier_state_equals (ev->state, Keyboard::PrimaryModifier)) {
@ -827,6 +818,13 @@ RouteUI::build_solo_menu (void)
items.push_back (CheckMenuElem(*check));
check->show_all();
check = new CheckMenuItem(_("Solo Safe"));
check->set_active (_route->solo_safe());
check->signal_toggled().connect (bind (mem_fun (*this, &RouteUI::toggle_solo_safe), check));
_route->solo_safe_changed.connect(bind (mem_fun (*this, &RouteUI::solo_safe_toggle), check));
items.push_back (CheckMenuElem(*check));
check->show_all();
//items.push_back (SeparatorElem());
// items.push_back (MenuElem (_("MIDI Bind"), mem_fun (*mute_button, &BindableToggleButton::midi_learn)));
@ -927,6 +925,12 @@ RouteUI::toggle_solo_isolated (Gtk::CheckMenuItem* check)
_route->set_solo_isolated (check->get_active(), this);
}
void
RouteUI::toggle_solo_safe (Gtk::CheckMenuItem* check)
{
_route->set_solo_safe (check->get_active(), this);
}
void
RouteUI::set_route_group_solo(boost::shared_ptr<Route> route, bool yn)
{
@ -1231,6 +1235,17 @@ RouteUI::solo_isolated_toggle(void* /*src*/, Gtk::CheckMenuItem* check)
}
}
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 ()
{

View File

@ -139,6 +139,9 @@ class RouteUI : public virtual AxisView
void solo_isolated_toggle (void*, Gtk::CheckMenuItem*);
void toggle_solo_isolated (Gtk::CheckMenuItem*);
void solo_safe_toggle (void*, Gtk::CheckMenuItem*);
void toggle_solo_safe (Gtk::CheckMenuItem*);
Gtk::CheckMenuItem* pre_fader_mute_check;
Gtk::CheckMenuItem* post_fader_mute_check;
Gtk::CheckMenuItem* listen_mute_check;

View File

@ -129,14 +129,17 @@ class Route : public SessionObject, public AutomatableControls
*/
void set_solo (bool yn, void *src);
bool soloed () const {return self_soloed () || soloed_by_others (); }
bool soloed_by_others () const { return !_solo_isolated && _soloed_by_others; }
bool self_soloed () const { return _self_solo; }
bool soloed () const {return self_soloed () || soloed_by_others (); }
void set_solo_isolated (bool yn, void *src);
bool solo_isolated() const;
void set_solo_safe (bool yn, void *src);
bool solo_safe() const;
void set_listen (bool yn, void* src);
bool listening () const;

View File

@ -521,6 +521,21 @@ Route::listening () const
}
}
void
Route::set_solo_safe (bool yn, void *src)
{
if (_solo_safe != yn) {
_solo_safe = yn;
solo_safe_changed (src);
}
}
bool
Route::solo_safe() const
{
return _solo_safe;
}
void
Route::set_solo (bool yn, void *src)
{