From d0580ecfbc1182f3c57b4d04e514f1d944225f14 Mon Sep 17 00:00:00 2001 From: nick_m Date: Thu, 29 Dec 2016 01:39:31 +1100 Subject: allow all types of range location (loop, start, end etc.) to be glued to bars and beats. --- gtk2_ardour/editor_markers.cc | 37 +++++++++++++++++++++---------------- 1 file changed, 21 insertions(+), 16 deletions(-) (limited to 'gtk2_ardour/editor_markers.cc') diff --git a/gtk2_ardour/editor_markers.cc b/gtk2_ardour/editor_markers.cc index a4d990b1e3..ac180d1daf 100644 --- a/gtk2_ardour/editor_markers.cc +++ b/gtk2_ardour/editor_markers.cc @@ -646,7 +646,7 @@ Editor::mouse_add_new_marker (framepos_t where, bool is_cd) if (!choose_new_marker_name(markername)) { return; } - Location *location = new Location (*_session, where, where, markername, (Location::Flags) flags); + Location *location = new Location (*_session, where, where, markername, (Location::Flags) flags, get_grid_music_divisions (0)); begin_reversible_command (_("add marker")); XMLNode &before = _session->locations()->get_state(); @@ -838,9 +838,8 @@ Editor::marker_context_menu (GdkEventButton* ev, ArdourCanvas::Item* item) if (loc == transport_loop_location() || loc == transport_punch_location() || loc->is_session_range ()) { - if (transport_marker_menu == 0) { - build_range_marker_menu (loc == transport_loop_location() || loc == transport_punch_location(), loc->is_session_range()); - } + delete transport_marker_menu; + build_range_marker_menu (loc, loc == transport_loop_location() || loc == transport_punch_location(), loc->is_session_range()); marker_menu_item = item; transport_marker_menu->popup (1, ev->time); @@ -868,9 +867,9 @@ Editor::marker_context_menu (GdkEventButton* ev, ArdourCanvas::Item* item) marker_menu->popup (1, ev->time); } else if (loc->is_range_marker()) { - if (range_marker_menu == 0) { - build_range_marker_menu (false, false); - } + delete range_marker_menu; + build_range_marker_menu (loc, false, false); + marker_menu_item = item; range_marker_menu->popup (1, ev->time); } @@ -916,9 +915,8 @@ Editor::build_marker_menu (Location* loc) items.push_back (CheckMenuElem (_("Glue to Bars and Beats"))); Gtk::CheckMenuItem* glue_item = static_cast (&items.back()); - if (loc->position_lock_style() == MusicTime) { - glue_item->set_active (); - } + glue_item->set_active (loc->position_lock_style() == MusicTime); + glue_item->signal_activate().connect (sigc::mem_fun (*this, &Editor::toggle_marker_menu_glue)); items.push_back (SeparatorElem()); @@ -927,11 +925,11 @@ Editor::build_marker_menu (Location* loc) } void -Editor::build_range_marker_menu (bool loop_or_punch, bool session) +Editor::build_range_marker_menu (Location* loc, bool loop_or_punch, bool session) { using namespace Menu_Helpers; - bool const loop_or_punch_or_session = loop_or_punch | session; + bool const loop_or_punch_or_session = loop_or_punch || session; Menu *markerMenu = new Menu; if (loop_or_punch_or_session) { @@ -952,6 +950,13 @@ Editor::build_range_marker_menu (bool loop_or_punch, bool session) items.push_back (MenuElem (_("Zoom to Range"), sigc::mem_fun (*this, &Editor::marker_menu_zoom_to_range))); + items.push_back (SeparatorElem()); + items.push_back (CheckMenuElem (_("Glue to Bars and Beats"))); + + Gtk::CheckMenuItem* glue_item = static_cast (&items.back()); + glue_item->set_active (loc->position_lock_style() == MusicTime); + glue_item->signal_activate().connect (sigc::mem_fun (*this, &Editor::toggle_marker_menu_glue)); + items.push_back (SeparatorElem()); items.push_back (MenuElem (_("Export Range..."), sigc::mem_fun(*this, &Editor::export_range))); items.push_back (SeparatorElem()); @@ -1213,17 +1218,18 @@ Editor::marker_menu_set_from_playhead () Location* l; bool is_start; + const int32_t divisions = get_grid_music_divisions (0); if ((l = find_location_from_marker (marker, is_start)) != 0) { if (l->is_mark()) { - l->set_start (_session->audible_frame ()); + l->set_start (_session->audible_frame (), false, true, divisions); } else { if (is_start) { - l->set_start (_session->audible_frame ()); + l->set_start (_session->audible_frame (), false, true, divisions); } else { - l->set_end (_session->audible_frame ()); + l->set_end (_session->audible_frame (), false, true, divisions); } } } @@ -1692,7 +1698,6 @@ Editor::toggle_marker_menu_glue () } else { loc->set_position_lock_style (MusicTime); } - } void -- cgit v1.2.3