summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHans Baier <hansfbaier@googlemail.com>2008-04-29 21:58:05 +0000
committerHans Baier <hansfbaier@googlemail.com>2008-04-29 21:58:05 +0000
commit38eb5f4539786e0edafc31e275ed598bd4e4164b (patch)
tree025f91c514d7c09f2ef9d9da96139e8ac75d1d36
parentd3cc2981b0018b3d7ac11017b909117a6ff24e83 (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/SConscript2
-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.h2
-rw-r--r--gtk2_ardour/canvas-program-change.cc3
-rw-r--r--gtk2_ardour/canvas-program-change.h9
-rw-r--r--gtk2_ardour/diamond.h2
-rw-r--r--gtk2_ardour/editor_canvas_events.cc2
-rw-r--r--gtk2_ardour/midi_region_view.cc16
-rw-r--r--gtk2_ardour/midi_region_view.h3
-rw-r--r--libs/ardour/midi_model.cc7
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;