X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Feditor_ops.cc;h=5419ce937484ecc353bf1108391c25bc101f68f2;hb=456596bced4a3647cde4613792002142f9fea4d7;hp=d05b183028e33fe83c983001675fae7c51e95a6c;hpb=d30266dfc33f6918709e0c8ab1cab82151927fe5;p=ardour.git diff --git a/gtk2_ardour/editor_ops.cc b/gtk2_ardour/editor_ops.cc index d05b183028..5419ce9374 100644 --- a/gtk2_ardour/editor_ops.cc +++ b/gtk2_ardour/editor_ops.cc @@ -102,7 +102,7 @@ #include "transform_dialog.h" #include "ui_config.h" -#include "i18n.h" +#include "pbd/i18n.h" using namespace std; using namespace ARDOUR; @@ -151,7 +151,7 @@ Editor::redo (uint32_t n) } void -Editor::split_regions_at (framepos_t where, RegionSelection& regions) +Editor::split_regions_at (framepos_t where, RegionSelection& regions, const int32_t sub_num) { bool frozen = false; @@ -226,7 +226,7 @@ Editor::split_regions_at (framepos_t where, RegionSelection& regions) if (pl) { pl->clear_changes (); - pl->split_region ((*a)->region(), where); + pl->split_region ((*a)->region(), where, sub_num); _session->add_command (new StatefulDiffCommand (pl)); } @@ -433,6 +433,9 @@ Editor::nudge_forward (bool next, bool force_playhead) } else { loc->set_end (max_framepos); } + if (loc->is_session_range()) { + _session->set_end_is_free (false); + } } if (!in_command) { begin_reversible_command (_("nudge location forward")); @@ -524,6 +527,9 @@ Editor::nudge_backward (bool next, bool force_playhead) } else { loc->set_end (loc->length()); } + if (loc->is_session_range()) { + _session->set_end_is_free (false); + } } if (!in_command) { begin_reversible_command (_("nudge location forward")); @@ -2233,6 +2239,8 @@ Editor::set_session_end_from_playhead () commit_reversible_command (); } + + _session->set_end_is_free (false); } void @@ -2574,7 +2582,7 @@ Editor::play_from_edit_point_and_return () void Editor::play_selection () { - framepos_t start, end; + framepos_t start, end; if (!get_selection_extents ( start, end)) return; @@ -3043,62 +3051,63 @@ Editor::separate_regions_between (const TimeSelection& ts) for (TrackSelection::iterator i = tmptracks.begin(); i != tmptracks.end(); ++i) { - RouteTimeAxisView* rtv; - - if ((rtv = dynamic_cast ((*i))) != 0) { + RouteTimeAxisView* rtv = dynamic_cast ((*i)); - if (rtv->is_track()) { + if (!rtv) { + continue; + } - /* no edits to destructive tracks */ + if (!rtv->is_track()) { + continue; + } - if (rtv->track()->destructive()) { - continue; - } + /* no edits to destructive tracks */ - if ((playlist = rtv->playlist()) != 0) { + if (rtv->track()->destructive()) { + continue; + } - playlist->clear_changes (); + if ((playlist = rtv->playlist()) != 0) { - /* XXX need to consider musical time selections here at some point */ + playlist->clear_changes (); - double speed = rtv->track()->speed(); + /* XXX need to consider musical time selections here at some point */ + double speed = rtv->track()->speed(); - for (list::const_iterator t = ts.begin(); t != ts.end(); ++t) { + for (list::const_iterator t = ts.begin(); t != ts.end(); ++t) { - sigc::connection c = rtv->view()->RegionViewAdded.connect ( - sigc::mem_fun(*this, &Editor::collect_new_region_view)); + sigc::connection c = rtv->view()->RegionViewAdded.connect ( + sigc::mem_fun(*this, &Editor::collect_new_region_view)); - latest_regionviews.clear (); + latest_regionviews.clear (); - playlist->partition ((framepos_t)((*t).start * speed), - (framepos_t)((*t).end * speed), false); + playlist->partition ((framepos_t)((*t).start * speed), + (framepos_t)((*t).end * speed), false); - c.disconnect (); + c.disconnect (); - if (!latest_regionviews.empty()) { + if (!latest_regionviews.empty()) { - rtv->view()->foreach_regionview (sigc::bind ( - sigc::ptr_fun (add_if_covered), - &(*t), &new_selection)); + rtv->view()->foreach_regionview (sigc::bind ( + sigc::ptr_fun (add_if_covered), + &(*t), &new_selection)); - if (!in_command) { - begin_reversible_command (_("separate")); - in_command = true; - } + if (!in_command) { + begin_reversible_command (_("separate")); + in_command = true; + } - /* pick up changes to existing regions */ + /* pick up changes to existing regions */ - vector cmds; - playlist->rdiff (cmds); - _session->add_commands (cmds); + vector cmds; + playlist->rdiff (cmds); + _session->add_commands (cmds); - /* pick up changes to the playlist itself (adds/removes) - */ + /* pick up changes to the playlist itself (adds/removes) + */ - _session->add_command(new StatefulDiffCommand (playlist)); - } - } + _session->add_command(new StatefulDiffCommand (playlist)); } } } @@ -3218,7 +3227,7 @@ Editor::separate_under_selected_regions () if (!playlist) { // is this check necessary? - continue; + continue; } vector::iterator i; @@ -3293,17 +3302,18 @@ Editor::crop_region_to (framepos_t start, framepos_t end) for (TrackSelection::iterator i = ts.begin(); i != ts.end(); ++i) { - RouteTimeAxisView* rtv; + RouteTimeAxisView* rtv = dynamic_cast ((*i)); - if ((rtv = dynamic_cast ((*i))) != 0) { + if (!rtv) { + continue; + } - boost::shared_ptr t = rtv->track(); + boost::shared_ptr t = rtv->track(); - if (t != 0 && ! t->destructive()) { + if (t != 0 && ! t->destructive()) { - if ((playlist = rtv->playlist()) != 0) { - playlists.push_back (playlist); - } + if ((playlist = rtv->playlist()) != 0) { + playlists.push_back (playlist); } } } @@ -3392,7 +3402,7 @@ Editor::region_fill_track () sigc::connection c = rtv->view()->RegionViewAdded.connect (sigc::mem_fun(*this, &Editor::collect_new_region_view)); framepos_t const position = end_frame + (r->first_frame() - start_frame + 1); - playlist = (*i)->region()->playlist(); + playlist = (*i)->region()->playlist(); playlist->clear_changes (); playlist->duplicate_until (r, position, gap, end); _session->add_command(new StatefulDiffCommand (playlist)); @@ -3957,9 +3967,9 @@ Editor::bounce_range_selection (bool replace, bool enable_processing) for (TrackViewList::iterator i = views.begin(); i != views.end(); ++i) { - RouteTimeAxisView* rtv; + RouteTimeAxisView* rtv = dynamic_cast (*i); - if ((rtv = dynamic_cast (*i)) == 0) { + if (!rtv) { continue; } @@ -4384,7 +4394,7 @@ Editor::remove_selected_regions () if (!playlist) { // is this check necessary? - continue; + continue; } /* get_regions_from_selection_and_entered() guarantees that @@ -4633,7 +4643,7 @@ Editor::paste (float times, bool from_context) { DEBUG_TRACE (DEBUG::CutNPaste, "paste to preferred edit pos\n"); - paste_internal (get_preferred_edit_position (EDIT_IGNORE_NONE, from_context), times); + paste_internal (get_preferred_edit_position (EDIT_IGNORE_NONE, from_context), times, get_grid_music_divisions (0)); } void @@ -4647,11 +4657,11 @@ Editor::mouse_paste () } snap_to (where); - paste_internal (where, 1); + paste_internal (where, 1, get_grid_music_divisions (0)); } void -Editor::paste_internal (framepos_t position, float times) +Editor::paste_internal (framepos_t position, float times, const int32_t sub_num) { DEBUG_TRACE (DEBUG::CutNPaste, string_compose ("apparent paste position is %1\n", position)); @@ -4744,7 +4754,7 @@ Editor::paste_internal (framepos_t position, float times) "greedy" paste from one automation type to another. */ PasteContext ctx(paste_count, times, ItemCounts(), true); - ts.front()->paste (position, *cut_buffer, ctx); + ts.front()->paste (position, *cut_buffer, ctx, sub_num); } else { @@ -4752,7 +4762,7 @@ Editor::paste_internal (framepos_t position, float times) PasteContext ctx(paste_count, times, ItemCounts(), false); for (TrackViewList::iterator i = ts.begin(); i != ts.end(); ++i) { - (*i)->paste (position, *cut_buffer, ctx); + (*i)->paste (position, *cut_buffer, ctx, sub_num); } } @@ -4788,7 +4798,7 @@ Editor::duplicate_some_regions (RegionSelection& regions, float times) sigc::connection c = rtv->view()->RegionViewAdded.connect (sigc::mem_fun(*this, &Editor::collect_new_region_view)); framepos_t const position = end_frame + (r->first_frame() - start_frame + 1); - playlist = (*i)->region()->playlist(); + playlist = (*i)->region()->playlist(); playlist->clear_changes (); playlist->duplicate (r, position, gap, times); _session->add_command(new StatefulDiffCommand (playlist)); @@ -6149,7 +6159,11 @@ Editor::split_region () return; } - split_regions_at (where, rs); + if (snap_musical()) { + split_regions_at (where, rs, get_grid_music_divisions (0)); + } else { + split_regions_at (where, rs, 0); + } } } @@ -6166,6 +6180,7 @@ Editor::select_next_route() RouteUI *rui; do { for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) { + if (*i == current) { ++i; if (i != track_views.end()) { @@ -6177,10 +6192,12 @@ Editor::select_next_route() break; } } + rui = dynamic_cast(current); - } while ( current->hidden() || (rui != NULL && !rui->route()->active())); - selection->set(current); + } while (current->hidden() || (rui == NULL) || !rui->route()->active()); + + selection->set (current); ensure_time_axis_view_is_visible (*current, false); } @@ -6198,6 +6215,7 @@ Editor::select_prev_route() RouteUI *rui; do { for (TrackViewList::reverse_iterator i = track_views.rbegin(); i != track_views.rend(); ++i) { + if (*i == current) { ++i; if (i != track_views.rend()) { @@ -6209,7 +6227,8 @@ Editor::select_prev_route() } } rui = dynamic_cast(current); - } while ( current->hidden() || (rui != NULL && !rui->route()->active())); + + } while (current->hidden() || (rui == NULL) || !rui->route()->active()); selection->set (current); @@ -6276,11 +6295,11 @@ Editor::set_session_extents_from_selection () Location* loc; if ((loc = _session->locations()->session_range_location()) == 0) { - _session->set_session_extents ( start, end ); // this will create a new session range; no need for UNDO + _session->set_session_extents (start, end); // this will create a new session range; no need for UNDO } else { XMLNode &before = loc->get_state(); - _session->set_session_extents ( start, end ); + _session->set_session_extents (start, end); XMLNode &after = loc->get_state(); @@ -6290,6 +6309,8 @@ Editor::set_session_extents_from_selection () commit_reversible_command (); } + + _session->set_end_is_free (false); } void @@ -6546,7 +6567,8 @@ Editor::define_one_bar (framepos_t start, framepos_t end) } else if (t.frame() == start) { _session->tempo_map().change_existing_tempo_at (start, beats_per_minute, t.note_type()); } else { - _session->tempo_map().add_tempo (Tempo (beats_per_minute, t.note_type()), 0.0, start, TempoSection::Constant, AudioTime); + const Tempo tempo (beats_per_minute, t.note_type()); + _session->tempo_map().add_tempo (tempo, 0.0, start, TempoSection::Constant, AudioTime); } XMLNode& after (_session->tempo_map().get_state()); @@ -7287,7 +7309,8 @@ Editor::insert_time ( (*i)->clear_owned_changes (); if (opt == SplitIntersected) { - (*i)->split (pos); + /* non musical split */ + (*i)->split (pos, 0); } (*i)->shift (pos, frames, (opt == MoveIntersected), ignore_music_glue); @@ -7886,7 +7909,7 @@ Editor::update_bring_in_message (Gtk::Label* label, uint32_t n, uint32_t total, { Timers::TimerSuspender t; label->set_text (string_compose ("Copying %1, %2 of %3", name, n, total)); - Gtkmm2ext::UI::instance()->flush_pending (); + Gtkmm2ext::UI::instance()->flush_pending (1); } void @@ -7906,7 +7929,7 @@ Editor::bring_all_sources_into_session () */ Timers::TimerSuspender t; - Gtkmm2ext::UI::instance()->flush_pending (); + Gtkmm2ext::UI::instance()->flush_pending (3); cerr << " Do it\n";