summaryrefslogtreecommitdiff
path: root/gtk2_ardour
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2007-07-17 01:48:42 +0000
committerDavid Robillard <d@drobilla.net>2007-07-17 01:48:42 +0000
commitf542fa693cef524c066d9bf632ac6c12263d8fe6 (patch)
tree47d90d349ff8caa53b5b2ab6a2fedb196b072d42 /gtk2_ardour
parent37c74810d22f6ef392366e40a9f03dd8da16da18 (diff)
Midi pencil undo (not yet serializable).
Formatting fixes for session.h (ie kill more of those damned 8 space expanded tabs). git-svn-id: svn://localhost/ardour2/trunk@2135 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour')
-rw-r--r--gtk2_ardour/midi_region_view.cc26
-rw-r--r--gtk2_ardour/midi_region_view.h2
2 files changed, 22 insertions, 6 deletions
diff --git a/gtk2_ardour/midi_region_view.cc b/gtk2_ardour/midi_region_view.cc
index 81ea4029de..ee8dd3d7da 100644
--- a/gtk2_ardour/midi_region_view.cc
+++ b/gtk2_ardour/midi_region_view.cc
@@ -1,5 +1,6 @@
/*
- Copyright (C) 2001-2006 Paul Davis
+ Copyright (C) 2001-2007 Paul Davis
+ Author: Dave Robillard
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -24,6 +25,8 @@
#include <gtkmm2ext/gtk_ui.h>
+#include <sigc++/signal.h>
+
#include <ardour/playlist.h>
#include <ardour/tempo.h>
#include <ardour/midi_region.h>
@@ -95,6 +98,9 @@ MidiRegionView::init (Gdk::Color& basic_color, bool wfd)
midi_region()->midi_source(0)->load_model();
display_events();
}
+
+ midi_region()->midi_source(0)->model()->ContentsChanged.connect(sigc::mem_fun(
+ this, &MidiRegionView::redisplay_model));
group->signal_event().connect (mem_fun (this, &MidiRegionView::canvas_event));
}
@@ -127,13 +133,15 @@ MidiRegionView::canvas_event(GdkEvent* ev)
const Tempo& t = trackview.session().tempo_map().tempo_at(stamp);
double dur = m.frames_per_bar(t, trackview.session().frame_rate()) / m.beats_per_bar();
+ MidiModel* model = midi_region()->midi_source(0)->model();
+
// Add a 1 beat long note (for now)
const MidiModel::Note new_note(stamp, dur, (uint8_t)note, 0x40);
+
+ model->begin_command();
+ model->add_note(new_note);
+ model->finish_command();
- MidiModel::Notes& notes = midi_region()->midi_source(0)->model()->notes();
- MidiModel::Notes::iterator i = upper_bound(notes.begin(), notes.end(), new_note,
- MidiModel::NoteTimeComparator());
- notes.insert(i, new_note);
view->update_bounds(new_note.note);
add_note(new_note);
@@ -145,6 +153,14 @@ MidiRegionView::canvas_event(GdkEvent* ev)
void
+MidiRegionView::redisplay_model()
+{
+ clear_events();
+ display_events();
+}
+
+
+void
MidiRegionView::clear_events()
{
for (std::vector<ArdourCanvas::Item*>::iterator i = _events.begin(); i != _events.end(); ++i)
diff --git a/gtk2_ardour/midi_region_view.h b/gtk2_ardour/midi_region_view.h
index 6e37da9f50..730fa88d60 100644
--- a/gtk2_ardour/midi_region_view.h
+++ b/gtk2_ardour/midi_region_view.h
@@ -23,7 +23,6 @@
#include <libgnomecanvasmm.h>
#include <libgnomecanvasmm/polygon.h>
-#include <sigc++/signal.h>
#include <ardour/midi_region.h>
#include <ardour/midi_model.h>
#include <ardour/types.h>
@@ -94,6 +93,7 @@ class MidiRegionView : public RegionView
private:
+ void redisplay_model();
void display_events();
void clear_events();