namespace Gnome {
namespace Canvas {
+PBD::Signal1<void,CanvasNoteEvent*> CanvasNoteEvent::CanvasNoteEventDeleted;
+
/// dividing the hue circle in 16 parts, hand adjusted for equal look, courtesy Thorsten Wilms
const uint32_t CanvasNoteEvent::midi_channel_colors[16] = {
0xd32d2dff, 0xd36b2dff, 0xd3972dff, 0xd3d12dff,
CanvasNoteEvent::~CanvasNoteEvent()
{
- cerr << "Destroying CNE @ " << this << endl;
+ CanvasNoteEventDeleted (this);
if (_text) {
_text->hide();
void
MidiRegionView::init (Gdk::Color const & basic_color, bool wfd)
{
+ CanvasNoteEvent::CanvasNoteEventDeleted.connect (note_delete_connection, MISSING_INVALIDATOR,
+ ui_bind (&MidiRegionView::maybe_remove_deleted_note_from_selection, this, _1),
+ gui_context());
+
if (wfd) {
midi_region()->midi_source(0)->load_model();
}
MidiModel::Notes& notes (_model->notes());
_optimization_iterator = _events.begin();
+ cerr << "++++++++++ MIDI REdisplay\n";
+
for (MidiModel::Notes::iterator n = notes.begin(); n != notes.end(); ++n) {
boost::shared_ptr<NoteType> note (*n);
}
}
+
/* remove note items that are no longer valid */
for (Events::iterator i = _events.begin(); i != _events.end(); ) {
{
in_destructor = true;
+ note_delete_connection.disconnect ();
+
delete _list_editor;
RegionViewGoingAway (this); /* EMIT_SIGNAL */
}
}
+void
+MidiRegionView::maybe_remove_deleted_note_from_selection (CanvasNoteEvent* cne)
+{
+ if (_selection.empty()) {
+ return;
+ }
+
+ if (_selection.erase (cne) > 0) {
+ cerr << "Erased a CNE from selection\n";
+ }
+}
+
void
MidiRegionView::delete_selection()
{
}
if (_selection.insert (ev).second) {
- cerr << "Added CNE to selection, size now " << _selection.size() << endl;
ev->selected (true);
play_midi_note ((ev)->note());
}
break;
}
- start_delta_command();
+ if (op != Copy) {
- for (Selection::iterator i = _selection.begin(); i != _selection.end(); ++i) {
- switch (op) {
- case Copy:
- break;
- case Cut:
- delta_remove_note (*i);
- break;
- case Clear:
- break;
- }
- }
-
- apply_delta();
+ start_delta_command();
+
+ for (Selection::iterator i = _selection.begin(); i != _selection.end(); ++i) {
+ switch (op) {
+ case Copy:
+ break;
+ case Cut:
+ case Clear:
+ delta_remove_note (*i);
+ break;
+ }
+ }
+
+ apply_delta();
+ }
}
MidiCutBuffer*
{
Notes notes;
- cerr << "Convert selection of " << _selection.size() << " into a cut buffer\n";
-
for (Selection::iterator i = _selection.begin(); i != _selection.end(); ++i) {
NoteType* n = (*i)->note().get();
- cerr << "CNE's note is " << n << endl;
notes.insert (boost::shared_ptr<NoteType> (new NoteType (*n)));
}