diff options
author | Hans Baier <hansfbaier@googlemail.com> | 2008-04-29 21:58:05 +0000 |
---|---|---|
committer | Hans Baier <hansfbaier@googlemail.com> | 2008-04-29 21:58:05 +0000 |
commit | 38eb5f4539786e0edafc31e275ed598bd4e4164b (patch) | |
tree | 025f91c514d7c09f2ef9d9da96139e8ac75d1d36 | |
parent | d3cc2981b0018b3d7ac11017b909117a6ff24e83 (diff) |
* renamed canvas-midi-event.* into canvas-note-event.*
* make MidiModel keep track of its CanvasProgramChange instances
git-svn-id: svn://localhost/ardour2/branches/3.0@3297 d708f5d6-7413-0410-9779-e7cbd77b26cf
-rw-r--r-- | gtk2_ardour/SConscript | 2 | ||||
-rw-r--r-- | gtk2_ardour/canvas-note-event.cc (renamed from gtk2_ardour/canvas-midi-event.cc) | 2 | ||||
-rw-r--r-- | gtk2_ardour/canvas-note-event.h (renamed from gtk2_ardour/canvas-midi-event.h) | 0 | ||||
-rw-r--r-- | gtk2_ardour/canvas-note.h | 2 | ||||
-rw-r--r-- | gtk2_ardour/canvas-program-change.cc | 3 | ||||
-rw-r--r-- | gtk2_ardour/canvas-program-change.h | 9 | ||||
-rw-r--r-- | gtk2_ardour/diamond.h | 2 | ||||
-rw-r--r-- | gtk2_ardour/editor_canvas_events.cc | 2 | ||||
-rw-r--r-- | gtk2_ardour/midi_region_view.cc | 16 | ||||
-rw-r--r-- | gtk2_ardour/midi_region_view.h | 3 | ||||
-rw-r--r-- | libs/ardour/midi_model.cc | 7 |
11 files changed, 25 insertions, 23 deletions
diff --git a/gtk2_ardour/SConscript b/gtk2_ardour/SConscript index aceb587998..2d39c0b772 100644 --- a/gtk2_ardour/SConscript +++ b/gtk2_ardour/SConscript @@ -132,7 +132,7 @@ automation_time_axis.cc axis_view.cc bundle_manager.cc canvas-program-change.cc -canvas-midi-event.cc +canvas-note-event.cc canvas-note.cc canvas-simpleline.c canvas-simplerect.c diff --git a/gtk2_ardour/canvas-midi-event.cc b/gtk2_ardour/canvas-note-event.cc index d9b5713183..d775514b1f 100644 --- a/gtk2_ardour/canvas-midi-event.cc +++ b/gtk2_ardour/canvas-note-event.cc @@ -18,7 +18,7 @@ */ #include <iostream> -#include "canvas-midi-event.h" +#include "canvas-note-event.h" #include "midi_region_view.h" #include "public_editor.h" #include "editing_syms.h" diff --git a/gtk2_ardour/canvas-midi-event.h b/gtk2_ardour/canvas-note-event.h index f575808bb1..f575808bb1 100644 --- a/gtk2_ardour/canvas-midi-event.h +++ b/gtk2_ardour/canvas-note-event.h diff --git a/gtk2_ardour/canvas-note.h b/gtk2_ardour/canvas-note.h index 8f745bcbc8..de2d0ecb9d 100644 --- a/gtk2_ardour/canvas-note.h +++ b/gtk2_ardour/canvas-note.h @@ -23,7 +23,7 @@ #include <iostream> #include "simplerect.h" -#include "canvas-midi-event.h" +#include "canvas-note-event.h" #include "midi_util.h" namespace Gnome { diff --git a/gtk2_ardour/canvas-program-change.cc b/gtk2_ardour/canvas-program-change.cc index 5883dd5b86..103bd7bb8d 100644 --- a/gtk2_ardour/canvas-program-change.cc +++ b/gtk2_ardour/canvas-program-change.cc @@ -1,7 +1,8 @@ #include "canvas-program-change.h" #include <iostream> +#include "ardour_ui.h" -using namespace ArdourCanvas; +using namespace Gnome::Canvas; using namespace std; CanvasProgramChange::CanvasProgramChange( diff --git a/gtk2_ardour/canvas-program-change.h b/gtk2_ardour/canvas-program-change.h index cf99ca0715..37dc0cc8da 100644 --- a/gtk2_ardour/canvas-program-change.h +++ b/gtk2_ardour/canvas-program-change.h @@ -4,15 +4,14 @@ #include <libgnomecanvasmm/group.h> #include "simplerect.h" #include "simpleline.h" -#include "midi_region_view.h" #include <libgnomecanvasmm/text.h> #include <libgnomecanvasmm/widget.h> #include <ardour/midi_model.h> -namespace Gnome -{ -namespace Canvas -{ +class MidiRegionView; + +namespace Gnome { +namespace Canvas { class CanvasProgramChange : public Group { diff --git a/gtk2_ardour/diamond.h b/gtk2_ardour/diamond.h index 32544f4880..da344fed29 100644 --- a/gtk2_ardour/diamond.h +++ b/gtk2_ardour/diamond.h @@ -21,7 +21,7 @@ #define __ardour_diamond_h__ #include <libgnomecanvasmm/polygon.h> -#include "canvas-midi-event.h" +#include "canvas-note-event.h" namespace Gnome { namespace Canvas { diff --git a/gtk2_ardour/editor_canvas_events.cc b/gtk2_ardour/editor_canvas_events.cc index 054be80bc6..0da0bfc487 100644 --- a/gtk2_ardour/editor_canvas_events.cc +++ b/gtk2_ardour/editor_canvas_events.cc @@ -40,7 +40,7 @@ #include "control_point.h" #include "canvas_impl.h" #include "simplerect.h" -#include "canvas-midi-event.h" +#include "canvas-note-event.h" #include "i18n.h" diff --git a/gtk2_ardour/midi_region_view.cc b/gtk2_ardour/midi_region_view.cc index 09165bfcfd..d1b5f74990 100644 --- a/gtk2_ardour/midi_region_view.cc +++ b/gtk2_ardour/midi_region_view.cc @@ -431,6 +431,7 @@ MidiRegionView::clear_events() delete *i; _events.clear(); + _pgm_changes.clear(); } @@ -476,14 +477,8 @@ MidiRegionView::redisplay_model() } MidiModel::PgmChanges& pgm_changes = _model->pgm_changes(); - /* - for (MidiModel::PgmChanges::const_iterator i = pgm_changes.begin(); - i != pgm_changes.end(); - ++i) { - add_pgm_change() - } - */ - for_each(pgm_changes.begin(), pgm_changes.end(), sigc::mem_fun(this, &MidiRegionView::add_pgm_change)); + for_each(pgm_changes.begin(), pgm_changes.end(), + sigc::mem_fun(this, &MidiRegionView::add_pgm_change)); end_write(); @@ -820,8 +815,9 @@ MidiRegionView::add_pgm_change(boost::shared_ptr<MIDI::Event> event) const double x = trackview.editor.frame_to_pixel((nframes_t)event->time() - _region->start()); double height = midi_stream_view()->contents_height(); - new CanvasProgramChange(*this, *group, event, height, x, 1.0); - //TODO : keep track of pgm changes + _pgm_changes.push_back( + boost::shared_ptr<CanvasProgramChange>( + new CanvasProgramChange(*this, *group, event, height, x, 1.0))); } void diff --git a/gtk2_ardour/midi_region_view.h b/gtk2_ardour/midi_region_view.h index 7c545fa82a..1a37205bef 100644 --- a/gtk2_ardour/midi_region_view.h +++ b/gtk2_ardour/midi_region_view.h @@ -36,7 +36,7 @@ #include "enums.h" #include "canvas.h" #include "canvas-note.h" -#include "canvas-midi-event.h" +#include "canvas-note-event.h" #include "canvas-program-change.h" namespace ARDOUR { @@ -254,6 +254,7 @@ class MidiRegionView : public RegionView boost::shared_ptr<ARDOUR::MidiModel> _model; std::vector<ArdourCanvas::CanvasNoteEvent*> _events; + std::vector< boost::shared_ptr<ArdourCanvas::CanvasProgramChange> > _pgm_changes; ArdourCanvas::CanvasNote** _active_notes; ArdourCanvas::Group* _note_group; ARDOUR::MidiModel::DeltaCommand* _delta_command; diff --git a/libs/ardour/midi_model.cc b/libs/ardour/midi_model.cc index 495991853a..23dff7f165 100644 --- a/libs/ardour/midi_model.cc +++ b/libs/ardour/midi_model.cc @@ -362,11 +362,13 @@ MidiModel::read(MidiRingBuffer& dst, nframes_t start, nframes_t nframes, nframes assert(_read_iter->size() > 0); dst.write(_read_iter->time() + stamp_offset - negative_stamp_offset, _read_iter->size(), _read_iter->buffer()); + /* cerr << this << " MidiModel::read event @ " << _read_iter->time() << " type: " << hex << int(_read_iter->type()) << dec << " note: " << int(_read_iter->note()) << " velocity: " << int(_read_iter->velocity()) << endl; + */ ++_read_iter; ++read_events; @@ -573,7 +575,7 @@ MidiModel::append_cc_unlocked(uint8_t chan, double time, uint8_t number, uint8_t void MidiModel::append_pgm_change_unlocked(uint8_t chan, double time, uint8_t number) { - cerr << "MidiModel::append_pgm_change_unlocked: channel " << int(chan) << " time: " << time << " program number: " << int(number) <<endl; + //cerr << "MidiModel::append_pgm_change_unlocked: channel " << int(chan) << " time: " << time << " program number: " << int(number) <<endl; assert(chan < 16); assert(_writing); _edited = true; @@ -603,6 +605,9 @@ MidiModel::remove_note_unlocked(const boost::shared_ptr<const Note> note) for(Notes::iterator n = _notes.begin(); n != _notes.end(); ++n) { Note& _n = *(*n); const Note& _note = *note; + // TODO: There is still the issue, that after restarting ardour + // persisted undo does not work, because of rounding errors in the + // event times after saving/restoring to/from MIDI files cerr << "======================================= " << endl; cerr << int(_n.note()) << "@" << int(_n.time()) << "[" << int(_n.channel()) << "] --" << int(_n.duration()) << "-- #" << int(_n.velocity()) << endl; cerr << int(_note.note()) << "@" << int(_note.time()) << "[" << int(_note.channel()) << "] --" << int(_note.duration()) << "-- #" << int(_note.velocity()) << endl; |