diff options
author | Carl Hetherington <carl@carlh.net> | 2011-09-28 14:07:42 +0000 |
---|---|---|
committer | Carl Hetherington <carl@carlh.net> | 2011-09-28 14:07:42 +0000 |
commit | 5f2ef08666d7dccf5f3e6c626821d8e54c146e62 (patch) | |
tree | 054c6ca31397b8cd22667710ba6a540b98cfe33e /gtk2_ardour/midi_region_view.cc | |
parent | 97a3971babe1dd0ec1630fdf5a073bcd2161941b (diff) |
Clear selected MIDI notes in all regions when they are
cleared in a single one (#4152).
git-svn-id: svn://localhost/ardour2/branches/3.0@10158 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour/midi_region_view.cc')
-rw-r--r-- | gtk2_ardour/midi_region_view.cc | 28 |
1 files changed, 27 insertions, 1 deletions
diff --git a/gtk2_ardour/midi_region_view.cc b/gtk2_ardour/midi_region_view.cc index 8da19dd6e3..6fe9768feb 100644 --- a/gtk2_ardour/midi_region_view.cc +++ b/gtk2_ardour/midi_region_view.cc @@ -80,6 +80,8 @@ using namespace Editing; using namespace ArdourCanvas; using Gtkmm2ext::Keyboard; +PBD::Signal1<void, MidiRegionView *> MidiRegionView::SelectionCleared; + #define MIDI_BP_ZERO ((Config->get_first_midi_bank_is_zero())?0:1) MidiRegionView::MidiRegionView (ArdourCanvas::Group *parent, RouteTimeAxisView &tv, @@ -116,6 +118,8 @@ MidiRegionView::MidiRegionView (ArdourCanvas::Group *parent, RouteTimeAxisView & Config->ParameterChanged.connect (*this, invalidator (*this), ui_bind (&MidiRegionView::parameter_changed, this, _1), gui_context()); connect_to_diskstream (); + + SelectionCleared.connect (_selection_cleared_connection, invalidator (*this), ui_bind (&MidiRegionView::selection_cleared, this, _1), gui_context ()); } MidiRegionView::MidiRegionView (ArdourCanvas::Group *parent, RouteTimeAxisView &tv, @@ -149,6 +153,8 @@ MidiRegionView::MidiRegionView (ArdourCanvas::Group *parent, RouteTimeAxisView & PublicEditor::DropDownKeys.connect (sigc::mem_fun (*this, &MidiRegionView::drop_down_keys)); connect_to_diskstream (); + + SelectionCleared.connect (_selection_cleared_connection, invalidator (*this), ui_bind (&MidiRegionView::selection_cleared, this, _1), gui_context ()); } void @@ -284,6 +290,8 @@ MidiRegionView::init (Gdk::Color const & basic_color, bool wfd) Config->ParameterChanged.connect (*this, invalidator (*this), ui_bind (&MidiRegionView::parameter_changed, this, _1), gui_context()); connect_to_diskstream (); + + SelectionCleared.connect (_selection_cleared_connection, invalidator (*this), ui_bind (&MidiRegionView::selection_cleared, this, _1), gui_context ()); } void @@ -1960,7 +1968,7 @@ MidiRegionView::delete_note (boost::shared_ptr<NoteType> n) } void -MidiRegionView::clear_selection_except (ArdourCanvas::CanvasNoteEvent* ev) +MidiRegionView::clear_selection_except (ArdourCanvas::CanvasNoteEvent* ev, bool signal) { for (Selection::iterator i = _selection.begin(); i != _selection.end(); ) { if ((*i) != ev) { @@ -1980,6 +1988,10 @@ MidiRegionView::clear_selection_except (ArdourCanvas::CanvasNoteEvent* ev) /* this does not change the status of this regionview w.r.t the editor selection. */ + + if (signal) { + SelectionCleared (this); /* EMIT SIGNAL */ + } } void @@ -3627,3 +3639,17 @@ MidiRegionView::snap_frame_to_grid_underneath (framepos_t p, framecnt_t& grid_fr return snap_frame_to_frame (p); } + +/** Called when the selection has been cleared in any MidiRegionView. + * @param rv MidiRegionView that the selection was cleared in. + */ +void +MidiRegionView::selection_cleared (MidiRegionView* rv) +{ + if (rv == this) { + return; + } + + /* Clear our selection in sympathy; but don't signal the fact */ + clear_selection (false); +} |