From 745a235b9d930c7c28acb3d4e05d37131bc072dc Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Sat, 17 Jan 2015 12:00:34 -0500 Subject: [PATCH] properly track, update, maintain and set auto return state Conflicts: gtk2_ardour/ardour_ui_options.cc --- gtk2_ardour/ardour_ui.cc | 27 ++++++++++++++++++++++++--- gtk2_ardour/ardour_ui2.cc | 12 ++++++++++++ gtk2_ardour/ardour_ui_options.cc | 6 ++++++ 3 files changed, 42 insertions(+), 3 deletions(-) diff --git a/gtk2_ardour/ardour_ui.cc b/gtk2_ardour/ardour_ui.cc index f3483769d8..49424c78b6 100644 --- a/gtk2_ardour/ardour_ui.cc +++ b/gtk2_ardour/ardour_ui.cc @@ -4875,10 +4875,31 @@ void ARDOUR_UI::toggle_auto_return_state (AutoReturnTarget t) { AutoReturnTarget art = Config->get_auto_return_target_list (); - if (art & t) { - Config->set_auto_return_target_list (AutoReturnTarget (art & ~t)); - } else { + CheckMenuItem* check_menu_item = 0; + + switch (t) { + case LastLocate: + check_menu_item = auto_return_last_locate; + break; + case Loop: + check_menu_item = auto_return_loop; + break; + case RangeSelectionStart: + check_menu_item = auto_return_range_selection; + break; + case RegionSelectionStart: + check_menu_item = auto_return_region_selection; + break; + } + + if (!check_menu_item) { + return; + } + + if (check_menu_item->get_active()) { Config->set_auto_return_target_list (AutoReturnTarget (art | t)); + } else { + Config->set_auto_return_target_list (AutoReturnTarget (art & ~t)); } } diff --git a/gtk2_ardour/ardour_ui2.cc b/gtk2_ardour/ardour_ui2.cc index db53080e5c..d16b0f9c6d 100644 --- a/gtk2_ardour/ardour_ui2.cc +++ b/gtk2_ardour/ardour_ui2.cc @@ -265,6 +265,18 @@ ARDOUR_UI::setup_transport () auto_return_region_selection->show (); auto_return_dropdown.AddMenuElem (Gtk::Menu_Helpers::CheckMenuElem (*auto_return_region_selection)); + auto_return_range_selection = manage (new CheckMenuItem (_("Play from range selection"))); + auto_return_range_selection->signal_toggled().connect (sigc::bind (sigc::mem_fun (*this, &ARDOUR_UI::toggle_auto_return_state), RangeSelectionStart)); + auto_return_range_selection->show (); + auto_return_dropdown.AddMenuElem (Gtk::Menu_Helpers::CheckMenuElem (*auto_return_range_selection)); + + auto_return_loop = manage (new CheckMenuItem (_("Play from loop"))); + auto_return_loop->signal_toggled().connect (sigc::bind (sigc::mem_fun (*this, &ARDOUR_UI::toggle_auto_return_state), Loop)); + auto_return_loop->show (); + auto_return_dropdown.AddMenuElem (Gtk::Menu_Helpers::CheckMenuElem (*auto_return_loop)); + + auto_return_dropdown.AddMenuElem (Gtk::Menu_Helpers::MenuElem (_("Disable/Enable All Options"), sigc::mem_fun (*this, &ARDOUR_UI::toggle_all_auto_return))); + follow_edits_button.set_text(_("Follow Edits")); // auto_input_button.set_text (_("Auto Input")); diff --git a/gtk2_ardour/ardour_ui_options.cc b/gtk2_ardour/ardour_ui_options.cc index 52f289b3f2..e5feeadeb0 100644 --- a/gtk2_ardour/ardour_ui_options.cc +++ b/gtk2_ardour/ardour_ui_options.cc @@ -422,6 +422,12 @@ ARDOUR_UI::parameter_changed (std::string p) } else if (p == "waveform-cache-size") { /* GUI option has units of megabytes; image cache uses units of bytes */ ArdourCanvas::WaveView::set_image_cache_size (ARDOUR_UI::config()->get_waveform_cache_size() * 1048576); + } else if (p == "auto-return-target-list") { + AutoReturnTarget art = Config->get_auto_return_target_list (); + auto_return_loop->set_active ((bool) (art & Loop)); + auto_return_range_selection->set_active ((bool) (art & RangeSelectionStart)); + auto_return_region_selection->set_active ((bool) (art & RegionSelectionStart)); + auto_return_last_locate->set_active ((bool) (art & LastLocate)); } }