diff options
Diffstat (limited to 'gtk2_ardour/route_ui.cc')
-rw-r--r-- | gtk2_ardour/route_ui.cc | 76 |
1 files changed, 41 insertions, 35 deletions
diff --git a/gtk2_ardour/route_ui.cc b/gtk2_ardour/route_ui.cc index 3005e37df3..a0e9ff5ed1 100644 --- a/gtk2_ardour/route_ui.cc +++ b/gtk2_ardour/route_ui.cc @@ -109,7 +109,7 @@ RouteUI::~RouteUI() delete solo_menu; delete mute_menu; delete sends_menu; - delete record_menu; + delete record_menu; delete comment_window; delete input_selector; delete output_selector; @@ -126,20 +126,21 @@ RouteUI::init () mute_menu = 0; solo_menu = 0; sends_menu = 0; - record_menu = 0; + record_menu = 0; _invert_menu = 0; pre_fader_mute_check = 0; post_fader_mute_check = 0; listen_mute_check = 0; main_mute_check = 0; - solo_safe_check = 0; - solo_isolated_check = 0; - solo_isolated_led = 0; - solo_safe_led = 0; + solo_safe_check = 0; + solo_isolated_check = 0; + solo_isolated_led = 0; + solo_safe_led = 0; _solo_release = 0; _mute_release = 0; denormal_menu_item = 0; - step_edit_item = 0; + step_edit_item = 0; + rec_safe_item = 0; multiple_mute_change = false; multiple_solo_change = false; _i_am_the_modifier = 0; @@ -886,29 +887,30 @@ RouteUI::monitor_release (GdkEventButton* ev, MonitorChoice monitor_choice) void RouteUI::build_record_menu () { - if (record_menu) { - return; - } - - /* no rec-button context menu for non-MIDI tracks - */ - - if (is_midi_track()) { + if (!record_menu) { record_menu = new Menu; record_menu->set_name ("ArdourContextMenu"); - using namespace Menu_Helpers; MenuList& items = record_menu->items(); - items.push_back (CheckMenuElem (_("Step Entry"), sigc::mem_fun (*this, &RouteUI::toggle_step_edit))); - step_edit_item = dynamic_cast<Gtk::CheckMenuItem*> (&items.back()); + items.push_back (CheckMenuElem (_("Rec-Safe"), sigc::mem_fun (*this, &RouteUI::toggle_rec_safe))); + rec_safe_item = dynamic_cast<Gtk::CheckMenuItem*> (&items.back()); - if (_route->record_enabled()) { - step_edit_item->set_sensitive (false); + if (is_midi_track()) { + items.push_back (SeparatorElem()); + items.push_back (CheckMenuElem (_("Step Entry"), sigc::mem_fun (*this, &RouteUI::toggle_step_edit))); + step_edit_item = dynamic_cast<Gtk::CheckMenuItem*> (&items.back()); } + } + if (step_edit_item) { + step_edit_item->set_sensitive (!_route->record_enabled()); step_edit_item->set_active (midi_track()->step_editing()); } + if (rec_safe_item) { + rec_safe_item->set_sensitive (!_route->record_enabled()); + rec_safe_item->set_active (_route->record_safe()); + } } void @@ -922,6 +924,18 @@ RouteUI::toggle_step_edit () } void +RouteUI::toggle_rec_safe () +{ + if (_route->record_enabled()) { + return; + } + DisplaySuspender ds; + boost::shared_ptr<RouteList> rl (new RouteList); + rl->push_back (_route); + _session->set_record_safe (rl, rec_safe_item->get_active (), Session::rt_cleanup); +} + +void RouteUI::step_edit_changed (bool yn) { if (yn) { @@ -1927,24 +1941,16 @@ RouteUI::check_rec_enable_sensitivity () if (_session->transport_rolling() && rec_enable_button->active_state() && Config->get_disable_disarm_during_roll()) { rec_enable_button->set_sensitive (false); - } else if (_route && _route->record_safe ()) { + } else if (is_audio_track () && track()->freeze_state() == AudioTrack::Frozen) { rec_enable_button->set_sensitive (false); } else { - boost::shared_ptr<AudioTrack> at = boost::dynamic_pointer_cast<AudioTrack>(_route); - if (at) { - switch (at->freeze_state()) { - case AudioTrack::Frozen: - rec_enable_button->set_sensitive (false); - break; - default: - rec_enable_button->set_sensitive (true); - break; - } - } else { - rec_enable_button->set_sensitive (true); - } + rec_enable_button->set_sensitive (true); + } + if (_route && _route->record_safe ()) { + rec_enable_button->set_visual_state (Gtkmm2ext::VisualState (solo_button->visual_state() | Gtkmm2ext::Insensitive)); + } else { + rec_enable_button->set_visual_state (Gtkmm2ext::VisualState (solo_button->visual_state() & ~Gtkmm2ext::Insensitive)); } - update_monitoring_display (); } |