summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gtk2_ardour/ardour.menus.in1
-rw-r--r--gtk2_ardour/automation_time_axis.cc11
-rw-r--r--gtk2_ardour/editing.h1
-rw-r--r--gtk2_ardour/editor.h1
-rw-r--r--gtk2_ardour/editor_actions.cc1
-rw-r--r--gtk2_ardour/editor_ops.cc100
-rw-r--r--gtk2_ardour/midi_region_view.cc4
-rw-r--r--gtk2_ardour/mnemonic-us.bindings.in2
-rw-r--r--gtk2_ardour/route_time_axis.cc11
9 files changed, 89 insertions, 43 deletions
diff --git a/gtk2_ardour/ardour.menus.in b/gtk2_ardour/ardour.menus.in
index 1c2c6b5194..417c3b552a 100644
--- a/gtk2_ardour/ardour.menus.in
+++ b/gtk2_ardour/ardour.menus.in
@@ -176,6 +176,7 @@
<menuitem action='select-prev-route'/>
</menu>
<separator/>
+ <menuitem action='editor-delete'/>
<menuitem action='editor-crop'/>
<menuitem action='split-region'/>
<menuitem action='split-region-at-transients'/>
diff --git a/gtk2_ardour/automation_time_axis.cc b/gtk2_ardour/automation_time_axis.cc
index d12dfa97bd..85ba4b378c 100644
--- a/gtk2_ardour/automation_time_axis.cc
+++ b/gtk2_ardour/automation_time_axis.cc
@@ -627,6 +627,12 @@ AutomationTimeAxisView::cut_copy_clear_one (AutomationLine& line, Selection& sel
double const end = tc.from (selection.time.front().end - tc.origin_b ());
switch (op) {
+ case Delete:
+ if (alist->cut (start, end) != 0) {
+ _session->add_command(new MementoCommand<AutomationList>(*alist.get(), &before, &alist->get_state()));
+ }
+ break;
+
case Cut:
if ((what_we_got = alist->cut (start, end)) != 0) {
@@ -720,6 +726,11 @@ AutomationTimeAxisView::cut_copy_clear_objects_one (AutomationLine& line, PointS
}
switch (op) {
+ case Delete:
+ if (alist->cut ((*i).start, (*i).end) != 0) {
+ _session->add_command (new MementoCommand<AutomationList>(*alist.get(), new XMLNode (before), &alist->get_state()));
+ }
+ break;
case Cut:
if ((what_we_got = alist->cut ((*i).start, (*i).end)) != 0) {
_editor.get_cut_buffer().add (what_we_got);
diff --git a/gtk2_ardour/editing.h b/gtk2_ardour/editing.h
index 6bc575116b..6ce6b74a51 100644
--- a/gtk2_ardour/editing.h
+++ b/gtk2_ardour/editing.h
@@ -196,6 +196,7 @@ enum InsertTimeOption {
/////////////////////
// These don't need their state saved. yet...
enum CutCopyOp {
+ Delete,
Cut,
Copy,
Clear
diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h
index d38238acbf..8486a999b0 100644
--- a/gtk2_ardour/editor.h
+++ b/gtk2_ardour/editor.h
@@ -1134,6 +1134,7 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
void split_region ();
+ void delete_ ();
void cut ();
void copy ();
void paste (float times);
diff --git a/gtk2_ardour/editor_actions.cc b/gtk2_ardour/editor_actions.cc
index cec7b03721..b1ef5328d1 100644
--- a/gtk2_ardour/editor_actions.cc
+++ b/gtk2_ardour/editor_actions.cc
@@ -295,6 +295,7 @@ Editor::register_actions ()
ActionManager::mouse_edit_point_requires_canvas_actions.push_back (act);
reg_sens (editor_actions, "editor-cut", _("Cut"), sigc::mem_fun(*this, &Editor::cut));
+ reg_sens (editor_actions, "editor-delete", _("Delete"), sigc::mem_fun(*this, &Editor::delete_));
reg_sens (editor_actions, "editor-copy", _("Copy"), sigc::mem_fun(*this, &Editor::copy));
reg_sens (editor_actions, "editor-paste", _("Paste"), sigc::mem_fun(*this, &Editor::keyboard_paste));
diff --git a/gtk2_ardour/editor_ops.cc b/gtk2_ardour/editor_ops.cc
index 622b102de8..9c541191b4 100644
--- a/gtk2_ardour/editor_ops.cc
+++ b/gtk2_ardour/editor_ops.cc
@@ -3375,6 +3375,13 @@ Editor::bounce_range_selection (bool replace, bool enable_processing)
commit_reversible_command ();
}
+/** Delete selected regions, automation points or a time range */
+void
+Editor::delete_ ()
+{
+ cut_copy (Delete);
+}
+
/** Cut selected regions, automation points or a time range */
void
Editor::cut ()
@@ -3427,6 +3434,9 @@ Editor::cut_copy (CutCopyOp op)
string opname;
switch (op) {
+ case Delete:
+ opname = _("delete");
+ break;
case Cut:
opname = _("cut");
break;
@@ -3444,7 +3454,7 @@ Editor::cut_copy (CutCopyOp op)
this function.
*/
- if (op == Cut || op == Clear) {
+ if (op == Delete || op == Cut || op == Clear) {
if (_drags->active ()) {
_drags->abort ();
}
@@ -3497,7 +3507,7 @@ Editor::cut_copy (CutCopyOp op)
if (!rs.empty()) {
cut_copy_regions (op, rs);
- if (op == Cut) {
+ if (op == Cut || op == Delete) {
selection->clear_regions ();
}
}
@@ -3505,7 +3515,7 @@ Editor::cut_copy (CutCopyOp op)
if (!selection->points.empty()) {
cut_copy_points (op);
- if (op == Cut) {
+ if (op == Cut || op == Delete) {
selection->clear_points ();
}
}
@@ -3532,7 +3542,7 @@ Editor::cut_copy (CutCopyOp op)
cut_copy_ranges (op);
commit_reversible_command ();
- if (op == Cut) {
+ if (op == Cut || op == Delete) {
selection->clear_time ();
}
@@ -3543,7 +3553,7 @@ Editor::cut_copy (CutCopyOp op)
}
}
- if (op == Cut || op == Clear) {
+ if (op == Delete || op == Cut || op == Clear) {
_drags->abort ();
}
}
@@ -3703,13 +3713,13 @@ Editor::cut_copy_regions (CutCopyOp op, RegionSelection& rs)
first_position = min ((framepos_t) (*x)->region()->position(), first_position);
- if (op == Cut || op == Clear) {
+ if (op == Cut || op == Clear || op == Delete) {
boost::shared_ptr<Playlist> pl = (*x)->region()->playlist();
if (pl) {
FreezeList::iterator fl;
- //only take state if this is a new playlist.
+ // only take state if this is a new playlist.
for (fl = freezelist.begin(); fl != freezelist.end(); ++fl) {
if ((*fl) == pl) {
break;
@@ -3757,22 +3767,25 @@ Editor::cut_copy_regions (CutCopyOp op, RegionSelection& rs)
tmp = x;
++tmp;
- vector<PlaylistMapping>::iterator z;
+ if (op != Delete) {
- for (z = pmap.begin(); z != pmap.end(); ++z) {
- if ((*z).tv == &tv) {
- break;
+ vector<PlaylistMapping>::iterator z;
+
+ for (z = pmap.begin(); z != pmap.end(); ++z) {
+ if ((*z).tv == &tv) {
+ break;
+ }
+ }
+
+ assert (z != pmap.end());
+
+ if (!(*z).pl) {
+ npl = PlaylistFactory::create (pl->data_type(), *_session, "cutlist", true);
+ npl->freeze();
+ (*z).pl = npl;
+ } else {
+ npl = (*z).pl;
}
- }
-
- assert (z != pmap.end());
-
- if (!(*z).pl) {
- npl = PlaylistFactory::create (pl->data_type(), *_session, "cutlist", true);
- npl->freeze();
- (*z).pl = npl;
- } else {
- npl = (*z).pl;
}
boost::shared_ptr<Region> r = (*x)->region();
@@ -3781,6 +3794,10 @@ Editor::cut_copy_regions (CutCopyOp op, RegionSelection& rs)
assert (r != 0);
switch (op) {
+ case Delete:
+ pl->remove_region (r);
+ break;
+
case Cut:
_xx = RegionFactory::create (r);
npl->add_region (_xx, r->position() - first_position);
@@ -3790,9 +3807,7 @@ Editor::cut_copy_regions (CutCopyOp op, RegionSelection& rs)
case Copy:
/* copy region before adding, so we're not putting same object into two different playlists */
npl->add_region (RegionFactory::create (r), r->position() - first_position);
- break;
-
- case Clear:
+ case Clear:
pl->remove_region (r);
break;
}
@@ -3800,25 +3815,28 @@ Editor::cut_copy_regions (CutCopyOp op, RegionSelection& rs)
x = tmp;
}
- list<boost::shared_ptr<Playlist> > foo;
+ if (op != Delete) {
- /* the pmap is in the same order as the tracks in which selected regions occured */
-
- for (vector<PlaylistMapping>::iterator i = pmap.begin(); i != pmap.end(); ++i) {
- if ((*i).pl) {
- (*i).pl->thaw();
- foo.push_back ((*i).pl);
+ list<boost::shared_ptr<Playlist> > foo;
+
+ /* the pmap is in the same order as the tracks in which selected regions occured */
+
+ for (vector<PlaylistMapping>::iterator i = pmap.begin(); i != pmap.end(); ++i) {
+ if ((*i).pl) {
+ (*i).pl->thaw();
+ foo.push_back ((*i).pl);
+ }
+ }
+
+ if (!foo.empty()) {
+ cut_buffer->set (foo);
+ }
+
+ if (pmap.empty()) {
+ _last_cut_copy_source_track = 0;
+ } else {
+ _last_cut_copy_source_track = pmap.front().tv;
}
- }
-
- if (!foo.empty()) {
- cut_buffer->set (foo);
- }
-
- if (pmap.empty()) {
- _last_cut_copy_source_track = 0;
- } else {
- _last_cut_copy_source_track = pmap.front().tv;
}
for (FreezeList::iterator pl = freezelist.begin(); pl != freezelist.end(); ++pl) {
diff --git a/gtk2_ardour/midi_region_view.cc b/gtk2_ardour/midi_region_view.cc
index 802263810e..8553900278 100644
--- a/gtk2_ardour/midi_region_view.cc
+++ b/gtk2_ardour/midi_region_view.cc
@@ -2943,6 +2943,9 @@ MidiRegionView::cut_copy_clear (Editing::CutCopyOp op)
PublicEditor& editor (trackview.editor());
switch (op) {
+ case Delete:
+ /* XXX what to do ? */
+ break;
case Cut:
case Copy:
editor.get_cut_buffer().add (selection_as_cut_buffer());
@@ -2959,6 +2962,7 @@ MidiRegionView::cut_copy_clear (Editing::CutCopyOp op)
switch (op) {
case Copy:
break;
+ case Delete:
case Cut:
case Clear:
note_diff_remove_note (*i);
diff --git a/gtk2_ardour/mnemonic-us.bindings.in b/gtk2_ardour/mnemonic-us.bindings.in
index fe1837ed3d..434924c3c7 100644
--- a/gtk2_ardour/mnemonic-us.bindings.in
+++ b/gtk2_ardour/mnemonic-us.bindings.in
@@ -250,7 +250,7 @@ This mode provides many different operations on both regions and control points,
@vis|Editor/scroll-tracks-up|Page_Up|scroll up (page)
@movp|Transport/GotoStart|Home|to start marker
@movp|Transport/GotoEnd|End|to end marker
-@edit|Editor/editor-cut|Delete|cut
+@edit|Editor/editor-delete|Delete|delete
@movp|Editor/playhead-to-edit|Return|to edit point
@eep|Editor/edit-to-playhead|<@SECONDARY@>Return|move EP to playhead
diff --git a/gtk2_ardour/route_time_axis.cc b/gtk2_ardour/route_time_axis.cc
index b4ad4da1f4..7f9575f015 100644
--- a/gtk2_ardour/route_time_axis.cc
+++ b/gtk2_ardour/route_time_axis.cc
@@ -1369,10 +1369,19 @@ RouteTimeAxisView::cut_copy_clear (Selection& selection, CutCopyOp op)
playlist->clear_owned_changes ();
switch (op) {
+ case Delete:
+ if (playlist->cut (time) != 0) {
+ vector<Command*> cmds;
+ playlist->rdiff (cmds);
+ _session->add_commands (cmds);
+
+ _session->add_command (new StatefulDiffCommand (playlist));
+ }
+ break;
+
case Cut:
if ((what_we_got = playlist->cut (time)) != 0) {
_editor.get_cut_buffer().add (what_we_got);
-
vector<Command*> cmds;
playlist->rdiff (cmds);
_session->add_commands (cmds);