basics of MIDI clip editing notification via model swap
This commit is contained in:
parent
7dee98279a
commit
044aec6563
@ -118,3 +118,16 @@ MidiCueView::set_samples_per_pixel (double spp)
|
|||||||
|
|
||||||
reset_width_dependent_items (_editing_context.duration_to_pixels (duration));
|
reset_width_dependent_items (_editing_context.duration_to_pixels (duration));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
std::shared_ptr<ARDOUR::MidiModel>
|
||||||
|
MidiCueView::model_to_edit() const
|
||||||
|
{
|
||||||
|
return std::shared_ptr<ARDOUR::MidiModel> (new ARDOUR::MidiModel (*_model, *(midi_region()->midi_source())));
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
MidiCueView::post_edit (std::shared_ptr<ARDOUR::MidiModel> edited_model, ARDOUR::MidiModel::NoteDiffCommand const & diff_command)
|
||||||
|
{
|
||||||
|
_model = edited_model;
|
||||||
|
}
|
||||||
|
@ -51,6 +51,9 @@ class MidiCueView : public MidiView
|
|||||||
|
|
||||||
std::shared_ptr<Temporal::TempoMap const> tempo_map;
|
std::shared_ptr<Temporal::TempoMap const> tempo_map;
|
||||||
ArdourCanvas::Rectangle* event_rect;
|
ArdourCanvas::Rectangle* event_rect;
|
||||||
|
|
||||||
|
std::shared_ptr<ARDOUR::MidiModel> model_to_edit() const;
|
||||||
|
void post_edit (std::shared_ptr<ARDOUR::MidiModel>, ARDOUR::MidiModel::NoteDiffCommand const &);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -907,10 +907,13 @@ MidiView::apply_note_diff (bool as_subcommand, bool was_copy)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::shared_ptr<MidiModel> op_model = model_to_edit ();
|
||||||
|
|
||||||
{
|
{
|
||||||
PBD::Unwinder<bool> puw (_select_all_notes_after_add, true);
|
PBD::Unwinder<bool> puw (_select_all_notes_after_add, true);
|
||||||
/*note that we don't use as_commit here, because that would BEGIN a new undo record; we already have one underway*/
|
/*note that we don't use as_commit here, because that would BEGIN a new undo record; we already have one underway*/
|
||||||
_model->apply_diff_command_as_subcommand (*_editing_context.session(), _note_diff_command);
|
op_model->apply_diff_command_as_subcommand (*_editing_context.session(), _note_diff_command);
|
||||||
|
post_edit (op_model, *_note_diff_command);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!as_subcommand) {
|
if (!as_subcommand) {
|
||||||
@ -924,6 +927,7 @@ MidiView::apply_note_diff (bool as_subcommand, bool was_copy)
|
|||||||
}
|
}
|
||||||
|
|
||||||
_marked_for_velocity.clear();
|
_marked_for_velocity.clear();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -640,6 +640,9 @@ class MidiView : public virtual sigc::trackable
|
|||||||
void join_notes_on_channel (int channel);
|
void join_notes_on_channel (int channel);
|
||||||
|
|
||||||
void add_split_notes ();
|
void add_split_notes ();
|
||||||
|
|
||||||
|
virtual std::shared_ptr<ARDOUR::MidiModel> model_to_edit() const { return _model; }
|
||||||
|
virtual void post_edit (std::shared_ptr<ARDOUR::MidiModel>, ARDOUR::MidiModel::NoteDiffCommand const &) {}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user