diff options
author | David Robillard <d@drobilla.net> | 2007-07-17 01:48:42 +0000 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2007-07-17 01:48:42 +0000 |
commit | f542fa693cef524c066d9bf632ac6c12263d8fe6 (patch) | |
tree | 47d90d349ff8caa53b5b2ab6a2fedb196b072d42 /gtk2_ardour | |
parent | 37c74810d22f6ef392366e40a9f03dd8da16da18 (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.cc | 26 | ||||
-rw-r--r-- | gtk2_ardour/midi_region_view.h | 2 |
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(); |