Special case MIDI note selection auditioning - #8358
This adds a few exceptions to the general preference "Sound MIDI notes as they are being selected in the editor". * Select all no longer plays _all_ notes. * Remain silent when selection is inverted or a range is selected. * Play no sound when a saved selection is restored on session load.
This commit is contained in:
parent
90f8212af7
commit
4ad1c19166
@ -233,5 +233,5 @@ EditNoteDialog::done (int r)
|
||||
notes.push_back ((*i)->note()->id());
|
||||
}
|
||||
|
||||
_region_view->select_notes (notes);
|
||||
_region_view->select_notes (notes, true);
|
||||
}
|
||||
|
@ -5319,7 +5319,7 @@ Editor::region_view_added (RegionView * rv)
|
||||
list<pair<PBD::ID const, list<Evoral::event_id_t> > >::iterator rnote;
|
||||
for (rnote = selection->pending_midi_note_selection.begin(); rnote != selection->pending_midi_note_selection.end(); ++rnote) {
|
||||
if (rv->region()->id () == (*rnote).first) {
|
||||
mrv->select_notes ((*rnote).second);
|
||||
mrv->select_notes ((*rnote).second, false);
|
||||
selection->pending_midi_note_selection.erase(rnote);
|
||||
break;
|
||||
}
|
||||
|
@ -889,7 +889,7 @@ MidiRegionView::create_note_at (samplepos_t t, double y, Temporal::Beats length,
|
||||
trackview.editor().set_selected_midi_region_view (*this);
|
||||
list<Evoral::event_id_t> to_be_selected;
|
||||
to_be_selected.push_back (new_note->id());
|
||||
select_notes (to_be_selected);
|
||||
select_notes (to_be_selected, true);
|
||||
|
||||
play_midi_note (new_note);
|
||||
}
|
||||
@ -2159,6 +2159,7 @@ MidiRegionView::unique_select(NoteBase* ev)
|
||||
void
|
||||
MidiRegionView::select_all_notes ()
|
||||
{
|
||||
PBD::Unwinder<bool> uw (_no_sound_notes, true);
|
||||
for (Events::iterator i = _events.begin(); i != _events.end(); ++i) {
|
||||
add_to_selection (i->second);
|
||||
}
|
||||
@ -2167,6 +2168,7 @@ MidiRegionView::select_all_notes ()
|
||||
void
|
||||
MidiRegionView::select_range (samplepos_t start, samplepos_t end)
|
||||
{
|
||||
PBD::Unwinder<bool> uw (_no_sound_notes, true);
|
||||
for (Events::iterator i = _events.begin(); i != _events.end(); ++i) {
|
||||
samplepos_t t = source_beats_to_absolute_samples(i->first->time());
|
||||
if (t >= start && t <= end) {
|
||||
@ -2178,6 +2180,7 @@ MidiRegionView::select_range (samplepos_t start, samplepos_t end)
|
||||
void
|
||||
MidiRegionView::invert_selection ()
|
||||
{
|
||||
PBD::Unwinder<bool> uw (_no_sound_notes, true);
|
||||
for (Events::iterator i = _events.begin(); i != _events.end(); ++i) {
|
||||
if (i->second->selected()) {
|
||||
remove_from_selection(i->second);
|
||||
@ -2191,11 +2194,13 @@ MidiRegionView::invert_selection ()
|
||||
The requested notes most likely won't exist in the view until the next model redisplay.
|
||||
*/
|
||||
void
|
||||
MidiRegionView::select_notes (list<Evoral::event_id_t> notes)
|
||||
MidiRegionView::select_notes (list<Evoral::event_id_t> notes, bool allow_audition)
|
||||
{
|
||||
NoteBase* cne;
|
||||
list<Evoral::event_id_t>::iterator n;
|
||||
|
||||
PBD::Unwinder<bool> uw (_no_sound_notes, allow_audition ? _no_sound_notes : true);
|
||||
|
||||
for (n = notes.begin(); n != notes.end(); ++n) {
|
||||
if ((cne = find_canvas_note(*n)) != 0) {
|
||||
add_to_selection (cne);
|
||||
|
@ -214,7 +214,7 @@ public:
|
||||
NoteBase* copy_selection (NoteBase* primary);
|
||||
void move_copies(double dx_qn, double dy, double cumulative_dy);
|
||||
|
||||
void select_notes (std::list<Evoral::event_id_t>);
|
||||
void select_notes (std::list<Evoral::event_id_t>, bool allow_audition);
|
||||
void select_matching_notes (uint8_t notenum, uint16_t channel_mask, bool add, bool extend);
|
||||
void toggle_matching_notes (uint8_t notenum, uint16_t channel_mask);
|
||||
|
||||
|
@ -1216,7 +1216,7 @@ Selection::set_state (XMLNode const & node, int)
|
||||
for (RegionSelection::iterator rsi = rs.begin(); rsi != rs.end(); ++rsi) {
|
||||
MidiRegionView* mrv = dynamic_cast<MidiRegionView*> (*rsi);
|
||||
if (mrv) {
|
||||
mrv->select_notes(notes);
|
||||
mrv->select_notes(notes, false);
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user