mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-12 01:26:31 +01:00
add "remove gaps" editing operation
Like the libardour functionality it uses, this likely needs work to properly deal with the intended cross-track workflow
This commit is contained in:
parent
fecce7c333
commit
d0f94dd63d
4 changed files with 61 additions and 0 deletions
|
|
@ -414,6 +414,7 @@
|
||||||
<separator/>
|
<separator/>
|
||||||
<menuitem action='insert-time'/>
|
<menuitem action='insert-time'/>
|
||||||
<menuitem action='remove-time'/>
|
<menuitem action='remove-time'/>
|
||||||
|
<menuitem action='remove-gaps'/>
|
||||||
<menuitem action="move-selected-tracks-up"/>
|
<menuitem action="move-selected-tracks-up"/>
|
||||||
<menuitem action="move-selected-tracks-down"/>
|
<menuitem action="move-selected-tracks-down"/>
|
||||||
<menu action='TrackHeightMenu'>
|
<menu action='TrackHeightMenu'>
|
||||||
|
|
|
||||||
|
|
@ -579,6 +579,7 @@ public:
|
||||||
void split_regions_at (ARDOUR::MusicSample, RegionSelection&);
|
void split_regions_at (ARDOUR::MusicSample, RegionSelection&);
|
||||||
void split_region_at_points (boost::shared_ptr<ARDOUR::Region>, ARDOUR::AnalysisFeatureList&, bool can_ferret, bool select_new = false);
|
void split_region_at_points (boost::shared_ptr<ARDOUR::Region>, ARDOUR::AnalysisFeatureList&, bool can_ferret, bool select_new = false);
|
||||||
RegionSelection get_regions_from_selection_and_mouse (samplepos_t);
|
RegionSelection get_regions_from_selection_and_mouse (samplepos_t);
|
||||||
|
void remove_gaps ();
|
||||||
|
|
||||||
void mouse_add_new_tempo_event (samplepos_t where);
|
void mouse_add_new_tempo_event (samplepos_t where);
|
||||||
void mouse_add_new_meter_event (samplepos_t where);
|
void mouse_add_new_meter_event (samplepos_t where);
|
||||||
|
|
|
||||||
|
|
@ -455,6 +455,10 @@ Editor::register_actions ()
|
||||||
ActionManager::session_sensitive_actions.push_back (act);
|
ActionManager::session_sensitive_actions.push_back (act);
|
||||||
ActionManager::track_selection_sensitive_actions.push_back (act);
|
ActionManager::track_selection_sensitive_actions.push_back (act);
|
||||||
|
|
||||||
|
act = reg_sens (editor_actions, "remove-gaps", _("Remove Gaps"), (sigc::mem_fun(*this, &Editor::remove_gaps)));
|
||||||
|
ActionManager::track_selection_sensitive_actions.push_back (act);
|
||||||
|
ActionManager::session_sensitive_actions.push_back (act);
|
||||||
|
|
||||||
|
|
||||||
act = reg_sens (editor_actions, "toggle-track-active", _("Toggle Active"), (sigc::mem_fun(*this, &Editor::toggle_tracks_active)));
|
act = reg_sens (editor_actions, "toggle-track-active", _("Toggle Active"), (sigc::mem_fun(*this, &Editor::toggle_tracks_active)));
|
||||||
ActionManager::route_selection_sensitive_actions.push_back (act);
|
ActionManager::route_selection_sensitive_actions.push_back (act);
|
||||||
|
|
|
||||||
|
|
@ -8922,3 +8922,58 @@ Editor::make_region_markers_global (bool as_cd_marker)
|
||||||
commit_reversible_command ();
|
commit_reversible_command ();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
Editor::remove_gaps ()
|
||||||
|
{
|
||||||
|
bool in_command = false;
|
||||||
|
TrackViewList ts = selection->tracks.filter_to_unique_playlists ();
|
||||||
|
bool all_playlists = false;
|
||||||
|
|
||||||
|
for (TrackSelection::iterator x = ts.begin(); x != ts.end(); ++x) {
|
||||||
|
|
||||||
|
/* don't operate on any playlist more than once, which could
|
||||||
|
* happen if "all playlists" is enabled, but there is more
|
||||||
|
* than 1 track using playlists "from" a given track.
|
||||||
|
*/
|
||||||
|
|
||||||
|
set<boost::shared_ptr<Playlist> > pl;
|
||||||
|
|
||||||
|
if (all_playlists) {
|
||||||
|
RouteTimeAxisView* rtav = dynamic_cast<RouteTimeAxisView*> (*x);
|
||||||
|
if (rtav && rtav->track ()) {
|
||||||
|
vector<boost::shared_ptr<Playlist> > all = _session->playlists()->playlists_for_track (rtav->track ());
|
||||||
|
for (vector<boost::shared_ptr<Playlist> >::iterator p = all.begin(); p != all.end(); ++p) {
|
||||||
|
pl.insert (*p);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if ((*x)->playlist ()) {
|
||||||
|
pl.insert ((*x)->playlist ());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (set<boost::shared_ptr<Playlist> >::iterator i = pl.begin(); i != pl.end(); ++i) {
|
||||||
|
|
||||||
|
(*i)->clear_changes ();
|
||||||
|
(*i)->clear_owned_changes ();
|
||||||
|
|
||||||
|
if (!in_command) {
|
||||||
|
begin_reversible_command (_("remove gaps"));
|
||||||
|
in_command = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
(*i)->remove_gaps (24000, 4410);
|
||||||
|
|
||||||
|
vector<Command*> cmds;
|
||||||
|
(*i)->rdiff (cmds);
|
||||||
|
_session->add_commands (cmds);
|
||||||
|
|
||||||
|
_session->add_command (new StatefulDiffCommand (*i));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (in_command) {
|
||||||
|
commit_reversible_command ();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue