X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Feditor_ops.cc;h=ecc9fa1f06c9c7382a9ee7e02ee3ee355cdaabcd;hb=789fcff1fe50ccf07904d43591874c509ef206c6;hp=6f4c3610fb0e3d590b132d1e35399fb82f9c54b7;hpb=b911303fddfebe13557e45eff51530ca6411e22e;p=ardour.git diff --git a/gtk2_ardour/editor_ops.cc b/gtk2_ardour/editor_ops.cc index 6f4c3610fb..ecc9fa1f06 100644 --- a/gtk2_ardour/editor_ops.cc +++ b/gtk2_ardour/editor_ops.cc @@ -1451,6 +1451,22 @@ Editor::scroll_tracks_up_line () reset_y_origin (vertical_adjustment.get_value() - 60); } +void +Editor::select_topmost_track () +{ + const double top_of_trackviews = vertical_adjustment.get_value(); + for (TrackViewList::iterator t = track_views.begin(); t != track_views.end(); ++t) { + if ((*t)->hidden()) { + continue; + } + std::pair res = (*t)->covers_y_position (top_of_trackviews); + if (res.first) { + selection->set (*t); + break; + } + } +} + bool Editor::scroll_down_one_track (bool skip_child_views) { @@ -2635,7 +2651,7 @@ Editor::play_with_preroll () const framepos_t preroll = _session->preroll_samples (start); framepos_t ret = start; - + if (start > preroll) { start = start - preroll; } @@ -2653,7 +2669,7 @@ Editor::play_with_preroll () const framepos_t preroll = _session->preroll_samples (ph); framepos_t start; if (ph > preroll) { - start = ph - preroll; + start = ph - preroll; } else { start = 0; } @@ -2670,6 +2686,11 @@ Editor::rec_with_preroll () _session->request_preroll_record_trim (ph, preroll); } +void +Editor::rec_with_count_in () +{ + _session->request_count_in_record (); +} void Editor::play_location (Location& location) @@ -4237,7 +4258,7 @@ Editor::cut_copy_points (Editing::CutCopyOp op, Evoral::Beats earliest, bool mid /* user could select points in any order */ selection->points.sort(PointsSelectionPositionSorter ()); - + /* Go through all selected points, making an AutomationRecord for each distinct AutomationList */ for (PointSelection::iterator sel_point = selection->points.begin(); sel_point != selection->points.end(); ++sel_point) { const AutomationLine& line = (*sel_point)->line(); @@ -4316,7 +4337,7 @@ Editor::cut_copy_points (Editing::CutCopyOp op, Evoral::Beats earliest, bool mid boost::shared_ptr al = line.the_list(); bool erase = true; - + if (dynamic_cast (&line)) { /* removing of first and last gain point in region gain lines is prohibited*/ if (line.is_last_point (*(*sel_point)) || line.is_first_point (*(*sel_point))) { @@ -5212,6 +5233,38 @@ Editor::adjust_region_gain (bool up) } } +void +Editor::reset_region_gain () +{ + RegionSelection rs = get_regions_from_selection_and_entered (); + + if (!_session || rs.empty()) { + return; + } + + bool in_command = false; + + for (RegionSelection::iterator r = rs.begin(); r != rs.end(); ++r) { + AudioRegionView* const arv = dynamic_cast(*r); + if (!arv) { + continue; + } + + arv->region()->clear_changes (); + + arv->audio_region()->set_scale_amplitude (1.0f); + + if (!in_command) { + begin_reversible_command ("reset region gain"); + in_command = true; + } + _session->add_command (new StatefulDiffCommand (arv->region())); + } + + if (in_command) { + commit_reversible_command (); + } +} void Editor::reverse_region () @@ -6406,7 +6459,7 @@ Editor::set_auto_punch_range () set_punch_range (tpl->start(), now, _("Auto Punch In/Out")); _session->config.set_punch_out(true); } - } else { + } else { if (_session->config.get_punch_out()) { _session->config.set_punch_out(false); } @@ -6705,12 +6758,13 @@ Editor::define_one_bar (framepos_t start, framepos_t end) XMLNode& before (_session->tempo_map().get_state()); if (do_global) { - _session->tempo_map().change_initial_tempo (beats_per_minute, t.note_type()); + _session->tempo_map().change_initial_tempo (beats_per_minute, t.note_type(), t.end_note_types_per_minute()); } else if (t.frame() == start) { - _session->tempo_map().change_existing_tempo_at (start, beats_per_minute, t.note_type()); + _session->tempo_map().change_existing_tempo_at (start, beats_per_minute, t.note_type(), t.end_note_types_per_minute()); } else { + /* constant tempo */ const Tempo tempo (beats_per_minute, t.note_type()); - _session->tempo_map().add_tempo (tempo, 0.0, start, TempoSection::Constant, AudioTime); + _session->tempo_map().add_tempo (tempo, 0.0, start, AudioTime); } XMLNode& after (_session->tempo_map().get_state()); @@ -6986,10 +7040,12 @@ Editor::snap_regions_to_grid () used_playlists.push_back(pl); pl->freeze(); } + (*r)->region()->clear_changes (); MusicFrame start ((*r)->region()->first_frame (), 0); snap_to (start); (*r)->region()->set_position (start.frame, start.division); + _session->add_command(new StatefulDiffCommand ((*r)->region())); } while (used_playlists.size() > 0) { @@ -7477,6 +7533,11 @@ Editor::insert_time ( (*i)->clear_changes (); (*i)->clear_owned_changes (); + if (!in_command) { + begin_reversible_command (_("insert time")); + in_command = true; + } + if (opt == SplitIntersected) { /* non musical split */ (*i)->split (MusicFrame (pos, 0)); @@ -7484,10 +7545,6 @@ Editor::insert_time ( (*i)->shift (pos, frames, (opt == MoveIntersected), ignore_music_glue); - if (!in_command) { - begin_reversible_command (_("insert time")); - in_command = true; - } vector cmds; (*i)->rdiff (cmds); _session->add_commands (cmds); @@ -7615,16 +7672,17 @@ Editor::remove_time (framepos_t pos, framecnt_t frames, InsertTimeOption opt, XMLNode &before = pl->get_state(); + if (!in_command) { + begin_reversible_command (_("remove time")); + in_command = true; + } + std::list rl; AudioRange ar(pos, pos+frames, 0); rl.push_back(ar); pl->cut (rl); pl->shift (pos, -frames, true, ignore_music_glue); - if (!in_command) { - begin_reversible_command (_("remove time")); - in_command = true; - } XMLNode &after = pl->get_state(); _session->add_command (new MementoCommand (*pl, &before, &after));