From ee61c5c9eac4f4e801e29139d4d6022bb1753ae4 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Tue, 25 May 2010 01:39:45 +0000 Subject: [PATCH] Implement shift-right-click to delete MIDI note (#3170) git-svn-id: svn://localhost/ardour2/branches/3.0@7155 d708f5d6-7413-0410-9779-e7cbd77b26cf --- gtk2_ardour/editor.h | 1 + gtk2_ardour/editor_mouse.cc | 13 +++++++++++++ gtk2_ardour/midi_region_view.cc | 10 ++++++++++ gtk2_ardour/midi_region_view.h | 1 + 4 files changed, 25 insertions(+) diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h index 48798543a9..ae5bb6fa9a 100644 --- a/gtk2_ardour/editor.h +++ b/gtk2_ardour/editor.h @@ -197,6 +197,7 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD void step_mouse_mode (bool next); Editing::MouseMode current_mouse_mode () const { return mouse_mode; } Editing::MidiEditMode current_midi_edit_mode () const; + void remove_midi_note (ArdourCanvas::Item *, GdkEvent *); bool internal_editing() const { return _internal_editing ; } void set_internal_edit (bool yn); diff --git a/gtk2_ardour/editor_mouse.cc b/gtk2_ardour/editor_mouse.cc index f1640538f6..217983a2ed 100644 --- a/gtk2_ardour/editor_mouse.cc +++ b/gtk2_ardour/editor_mouse.cc @@ -1222,6 +1222,10 @@ Editor::button_release_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemT } break; + case NoteItem: + remove_midi_note (item, event); + break; + default: break; } @@ -2654,3 +2658,12 @@ Editor::effective_mouse_mode () const return mouse_mode; } + +void +Editor::remove_midi_note (ArdourCanvas::Item* item, GdkEvent *) +{ + ArdourCanvas::CanvasNoteEvent* e = dynamic_cast (item); + assert (e); + + e->region_view().delete_note (e->note ()); +} diff --git a/gtk2_ardour/midi_region_view.cc b/gtk2_ardour/midi_region_view.cc index ccd81544e4..c78386ab02 100644 --- a/gtk2_ardour/midi_region_view.cc +++ b/gtk2_ardour/midi_region_view.cc @@ -1531,6 +1531,16 @@ MidiRegionView::delete_selection() apply_delta (); } +void +MidiRegionView::delete_note (boost::shared_ptr n) +{ + start_delta_command (_("delete note")); + _delta_command->remove (n); + apply_delta (); + + trackview.editor().hide_verbose_canvas_cursor (); +} + void MidiRegionView::clear_selection_except(ArdourCanvas::CanvasNoteEvent* ev) { diff --git a/gtk2_ardour/midi_region_view.h b/gtk2_ardour/midi_region_view.h index e7d00bcef4..77215e9b90 100644 --- a/gtk2_ardour/midi_region_view.h +++ b/gtk2_ardour/midi_region_view.h @@ -193,6 +193,7 @@ class MidiRegionView : public RegionView void note_selected(ArdourCanvas::CanvasNoteEvent* ev, bool add, bool extend=false); void note_deselected(ArdourCanvas::CanvasNoteEvent* ev); void delete_selection(); + void delete_note (boost::shared_ptr); size_t selection_size() { return _selection.size(); } void move_selection(double dx, double dy);