implement a delete operation that works like "cut" but doesn't put the deleted items in the cut buffer. you will not be able to access this from your keyboard (Delete keyunless you remove your existing ~/.config/ardour3/ardour.bindings file

git-svn-id: svn://localhost/ardour2/branches/3.0@9711 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
Paul Davis 2011-06-12 15:50:47 +00:00
parent 1de3eac2de
commit a82b900e44
9 changed files with 89 additions and 43 deletions

View file

@ -176,6 +176,7 @@
<menuitem action='select-prev-route'/> <menuitem action='select-prev-route'/>
</menu> </menu>
<separator/> <separator/>
<menuitem action='editor-delete'/>
<menuitem action='editor-crop'/> <menuitem action='editor-crop'/>
<menuitem action='split-region'/> <menuitem action='split-region'/>
<menuitem action='split-region-at-transients'/> <menuitem action='split-region-at-transients'/>

View file

@ -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 ()); double const end = tc.from (selection.time.front().end - tc.origin_b ());
switch (op) { 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: case Cut:
if ((what_we_got = alist->cut (start, end)) != 0) { if ((what_we_got = alist->cut (start, end)) != 0) {
@ -720,6 +726,11 @@ AutomationTimeAxisView::cut_copy_clear_objects_one (AutomationLine& line, PointS
} }
switch (op) { 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: case Cut:
if ((what_we_got = alist->cut ((*i).start, (*i).end)) != 0) { if ((what_we_got = alist->cut ((*i).start, (*i).end)) != 0) {
_editor.get_cut_buffer().add (what_we_got); _editor.get_cut_buffer().add (what_we_got);

View file

@ -196,6 +196,7 @@ enum InsertTimeOption {
///////////////////// /////////////////////
// These don't need their state saved. yet... // These don't need their state saved. yet...
enum CutCopyOp { enum CutCopyOp {
Delete,
Cut, Cut,
Copy, Copy,
Clear Clear

View file

@ -1134,6 +1134,7 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
void split_region (); void split_region ();
void delete_ ();
void cut (); void cut ();
void copy (); void copy ();
void paste (float times); void paste (float times);

View file

@ -295,6 +295,7 @@ Editor::register_actions ()
ActionManager::mouse_edit_point_requires_canvas_actions.push_back (act); 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-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-copy", _("Copy"), sigc::mem_fun(*this, &Editor::copy));
reg_sens (editor_actions, "editor-paste", _("Paste"), sigc::mem_fun(*this, &Editor::keyboard_paste)); reg_sens (editor_actions, "editor-paste", _("Paste"), sigc::mem_fun(*this, &Editor::keyboard_paste));

View file

@ -3375,6 +3375,13 @@ Editor::bounce_range_selection (bool replace, bool enable_processing)
commit_reversible_command (); 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 */ /** Cut selected regions, automation points or a time range */
void void
Editor::cut () Editor::cut ()
@ -3427,6 +3434,9 @@ Editor::cut_copy (CutCopyOp op)
string opname; string opname;
switch (op) { switch (op) {
case Delete:
opname = _("delete");
break;
case Cut: case Cut:
opname = _("cut"); opname = _("cut");
break; break;
@ -3444,7 +3454,7 @@ Editor::cut_copy (CutCopyOp op)
this function. this function.
*/ */
if (op == Cut || op == Clear) { if (op == Delete || op == Cut || op == Clear) {
if (_drags->active ()) { if (_drags->active ()) {
_drags->abort (); _drags->abort ();
} }
@ -3497,7 +3507,7 @@ Editor::cut_copy (CutCopyOp op)
if (!rs.empty()) { if (!rs.empty()) {
cut_copy_regions (op, rs); cut_copy_regions (op, rs);
if (op == Cut) { if (op == Cut || op == Delete) {
selection->clear_regions (); selection->clear_regions ();
} }
} }
@ -3505,7 +3515,7 @@ Editor::cut_copy (CutCopyOp op)
if (!selection->points.empty()) { if (!selection->points.empty()) {
cut_copy_points (op); cut_copy_points (op);
if (op == Cut) { if (op == Cut || op == Delete) {
selection->clear_points (); selection->clear_points ();
} }
} }
@ -3532,7 +3542,7 @@ Editor::cut_copy (CutCopyOp op)
cut_copy_ranges (op); cut_copy_ranges (op);
commit_reversible_command (); commit_reversible_command ();
if (op == Cut) { if (op == Cut || op == Delete) {
selection->clear_time (); 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 (); _drags->abort ();
} }
} }
@ -3703,7 +3713,7 @@ Editor::cut_copy_regions (CutCopyOp op, RegionSelection& rs)
first_position = min ((framepos_t) (*x)->region()->position(), first_position); 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(); boost::shared_ptr<Playlist> pl = (*x)->region()->playlist();
if (pl) { if (pl) {
@ -3757,6 +3767,8 @@ Editor::cut_copy_regions (CutCopyOp op, RegionSelection& rs)
tmp = x; tmp = x;
++tmp; ++tmp;
if (op != Delete) {
vector<PlaylistMapping>::iterator z; vector<PlaylistMapping>::iterator z;
for (z = pmap.begin(); z != pmap.end(); ++z) { for (z = pmap.begin(); z != pmap.end(); ++z) {
@ -3774,6 +3786,7 @@ Editor::cut_copy_regions (CutCopyOp op, RegionSelection& rs)
} else { } else {
npl = (*z).pl; npl = (*z).pl;
} }
}
boost::shared_ptr<Region> r = (*x)->region(); boost::shared_ptr<Region> r = (*x)->region();
boost::shared_ptr<Region> _xx; boost::shared_ptr<Region> _xx;
@ -3781,6 +3794,10 @@ Editor::cut_copy_regions (CutCopyOp op, RegionSelection& rs)
assert (r != 0); assert (r != 0);
switch (op) { switch (op) {
case Delete:
pl->remove_region (r);
break;
case Cut: case Cut:
_xx = RegionFactory::create (r); _xx = RegionFactory::create (r);
npl->add_region (_xx, r->position() - first_position); npl->add_region (_xx, r->position() - first_position);
@ -3790,8 +3807,6 @@ Editor::cut_copy_regions (CutCopyOp op, RegionSelection& rs)
case Copy: case Copy:
/* copy region before adding, so we're not putting same object into two different playlists */ /* 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); npl->add_region (RegionFactory::create (r), r->position() - first_position);
break;
case Clear: case Clear:
pl->remove_region (r); pl->remove_region (r);
break; break;
@ -3800,6 +3815,8 @@ Editor::cut_copy_regions (CutCopyOp op, RegionSelection& rs)
x = tmp; x = tmp;
} }
if (op != Delete) {
list<boost::shared_ptr<Playlist> > foo; list<boost::shared_ptr<Playlist> > foo;
/* the pmap is in the same order as the tracks in which selected regions occured */ /* the pmap is in the same order as the tracks in which selected regions occured */
@ -3820,6 +3837,7 @@ Editor::cut_copy_regions (CutCopyOp op, RegionSelection& rs)
} else { } else {
_last_cut_copy_source_track = pmap.front().tv; _last_cut_copy_source_track = pmap.front().tv;
} }
}
for (FreezeList::iterator pl = freezelist.begin(); pl != freezelist.end(); ++pl) { for (FreezeList::iterator pl = freezelist.begin(); pl != freezelist.end(); ++pl) {
(*pl)->thaw (); (*pl)->thaw ();

View file

@ -2943,6 +2943,9 @@ MidiRegionView::cut_copy_clear (Editing::CutCopyOp op)
PublicEditor& editor (trackview.editor()); PublicEditor& editor (trackview.editor());
switch (op) { switch (op) {
case Delete:
/* XXX what to do ? */
break;
case Cut: case Cut:
case Copy: case Copy:
editor.get_cut_buffer().add (selection_as_cut_buffer()); editor.get_cut_buffer().add (selection_as_cut_buffer());
@ -2959,6 +2962,7 @@ MidiRegionView::cut_copy_clear (Editing::CutCopyOp op)
switch (op) { switch (op) {
case Copy: case Copy:
break; break;
case Delete:
case Cut: case Cut:
case Clear: case Clear:
note_diff_remove_note (*i); note_diff_remove_note (*i);

View file

@ -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) @vis|Editor/scroll-tracks-up|Page_Up|scroll up (page)
@movp|Transport/GotoStart|Home|to start marker @movp|Transport/GotoStart|Home|to start marker
@movp|Transport/GotoEnd|End|to end 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 @movp|Editor/playhead-to-edit|Return|to edit point
@eep|Editor/edit-to-playhead|<@SECONDARY@>Return|move EP to playhead @eep|Editor/edit-to-playhead|<@SECONDARY@>Return|move EP to playhead

View file

@ -1369,10 +1369,19 @@ RouteTimeAxisView::cut_copy_clear (Selection& selection, CutCopyOp op)
playlist->clear_owned_changes (); playlist->clear_owned_changes ();
switch (op) { 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: case Cut:
if ((what_we_got = playlist->cut (time)) != 0) { if ((what_we_got = playlist->cut (time)) != 0) {
_editor.get_cut_buffer().add (what_we_got); _editor.get_cut_buffer().add (what_we_got);
vector<Command*> cmds; vector<Command*> cmds;
playlist->rdiff (cmds); playlist->rdiff (cmds);
_session->add_commands (cmds); _session->add_commands (cmds);