summaryrefslogtreecommitdiff
path: root/gtk2_ardour/midi_streamview.cc
diff options
context:
space:
mode:
authorCarl Hetherington <carl@carlh.net>2009-07-09 13:39:45 +0000
committerCarl Hetherington <carl@carlh.net>2009-07-09 13:39:45 +0000
commit4297071b3f7360b17d81ef9cf36b8d75d46d2818 (patch)
tree13cbb169cfcf79a2e845d8860f0f98e192f3a8d3 /gtk2_ardour/midi_streamview.cc
parent0f8031da06e131595b3625169f9687c1a1ab2f3a (diff)
Use shared_ptr for the TimeAxisView hierarchy.
git-svn-id: svn://localhost/ardour2/branches/3.0@5339 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour/midi_streamview.cc')
-rw-r--r--gtk2_ardour/midi_streamview.cc62
1 files changed, 33 insertions, 29 deletions
diff --git a/gtk2_ardour/midi_streamview.cc b/gtk2_ardour/midi_streamview.cc
index 30718ad158..4f6b77a53c 100644
--- a/gtk2_ardour/midi_streamview.cc
+++ b/gtk2_ardour/midi_streamview.cc
@@ -53,7 +53,7 @@ using namespace ARDOUR;
using namespace PBD;
using namespace Editing;
-MidiStreamView::MidiStreamView (MidiTimeAxisView& tv)
+MidiStreamView::MidiStreamView (MidiTimeAxisViewPtr tv)
: StreamView (tv)
, note_range_adjustment(0.0f, 0.0f, 0.0f)
, _range_dirty(false)
@@ -63,13 +63,13 @@ MidiStreamView::MidiStreamView (MidiTimeAxisView& tv)
, _data_note_min(60)
, _data_note_max(71)
{
- if (tv.is_track()) {
+ if (tv->is_track()) {
stream_base_color = ARDOUR_UI::config()->canvasvar_MidiTrackBase.get();
} else {
stream_base_color = ARDOUR_UI::config()->canvasvar_MidiBusBase.get();
}
- use_rec_regions = tv.editor().show_waveforms_recording ();
+ use_rec_regions = tv->editor().show_waveforms_recording ();
/* use a group dedicated to MIDI underlays. Audio underlays are not in this group. */
midi_underlay_group = new ArdourCanvas::Group (*canvas_group);
@@ -81,12 +81,16 @@ MidiStreamView::MidiStreamView (MidiTimeAxisView& tv)
_note_lines->property_x1() = 0;
_note_lines->property_y1() = 0;
- _note_lines->property_x2() = trackview().editor().frame_to_pixel (max_frames);
+ _note_lines->property_x2() = trackview()->editor().frame_to_pixel (max_frames);
_note_lines->property_y2() = 0;
- _note_lines->signal_event().connect(bind(
- mem_fun(_trackview.editor(), &PublicEditor::canvas_stream_view_event),
- _note_lines, &_trackview));
+ TimeAxisViewPtr w (_trackview);
+ _note_lines->signal_event().connect(
+ bind(
+ mem_fun(_trackview->editor(), &PublicEditor::canvas_stream_view_event),
+ _note_lines, w
+ )
+ );
_note_lines->lower_to_bottom();
@@ -247,7 +251,7 @@ MidiStreamView::update_data_note_range(uint8_t min, uint8_t max)
void
MidiStreamView::redisplay_diskstream ()
{
- if (!_trackview.is_midi_track()) {
+ if (!_trackview->is_midi_track()) {
return;
}
@@ -257,7 +261,7 @@ MidiStreamView::redisplay_diskstream ()
_range_dirty = false;
_data_note_min = 127;
_data_note_max = 0;
- _trackview.get_diskstream()->playlist()->foreach_region(
+ _trackview->get_diskstream()->playlist()->foreach_region(
sigc::mem_fun (*this, &StreamView::update_contents_metrics)
);
@@ -280,7 +284,7 @@ MidiStreamView::redisplay_diskstream ()
}
// Add and display region views, and flag them as valid
- _trackview.get_diskstream()->playlist()->foreach_region(
+ _trackview->get_diskstream()->playlist()->foreach_region(
sigc::hide_return (sigc::mem_fun (*this, &StreamView::add_region_view))
);
@@ -382,11 +386,11 @@ MidiStreamView::setup_rec_box ()
{
// cerr << _trackview.name() << " streamview SRB\n";
- if (_trackview.session().transport_rolling()) {
+ if (_trackview->session().transport_rolling()) {
if (!rec_active &&
- _trackview.session().record_status() == Session::Recording &&
- _trackview.get_diskstream()->record_enabled()) {
+ _trackview->session().record_status() == Session::Recording &&
+ _trackview->get_diskstream()->record_enabled()) {
if (use_rec_regions && rec_regions.size() == rec_rects.size()) {
@@ -400,7 +404,7 @@ MidiStreamView::setup_rec_box ()
rec_data_ready_connections.clear();
// FIXME
- boost::shared_ptr<MidiDiskstream> mds = boost::dynamic_pointer_cast<MidiDiskstream>(_trackview.get_diskstream());
+ boost::shared_ptr<MidiDiskstream> mds = boost::dynamic_pointer_cast<MidiDiskstream>(_trackview->get_diskstream());
assert(mds);
sources.push_back(mds->write_source());
@@ -411,14 +415,14 @@ MidiStreamView::setup_rec_box ()
jack_nframes_t start = 0;
if (rec_regions.size() > 0) {
- start = rec_regions.back().first->position() + _trackview.get_diskstream()->get_captured_frames(rec_regions.size()-1);
+ start = rec_regions.back().first->position() + _trackview->get_diskstream()->get_captured_frames(rec_regions.size()-1);
}
boost::shared_ptr<MidiRegion> region (boost::dynamic_pointer_cast<MidiRegion>
(RegionFactory::create (sources, start, 1 , "", 0, Region::DefaultFlags, false)));
assert(region);
region->block_property_changes ();
- region->set_position (_trackview.session().transport_frame(), this);
+ region->set_position (_trackview->session().transport_frame(), this);
rec_regions.push_back (make_pair(region, (RegionView*)0));
// rec regions are destroyed in setup_rec_box
@@ -428,14 +432,14 @@ MidiStreamView::setup_rec_box ()
/* start a new rec box */
- boost::shared_ptr<MidiTrack> mt = _trackview.midi_track(); /* we know what it is already */
+ boost::shared_ptr<MidiTrack> mt = _trackview->midi_track(); /* we know what it is already */
boost::shared_ptr<MidiDiskstream> ds = mt->midi_diskstream();
jack_nframes_t frame_pos = ds->current_capture_start ();
- gdouble xstart = _trackview.editor().frame_to_pixel (frame_pos);
+ gdouble xstart = _trackview->editor().frame_to_pixel (frame_pos);
gdouble xend;
uint32_t fill_color;
- assert(_trackview.midi_track()->mode() == Normal);
+ assert(_trackview->midi_track()->mode() == Normal);
xend = xstart;
fill_color = ARDOUR_UI::config()->canvasvar_RecordingRect.get();
@@ -444,14 +448,14 @@ MidiStreamView::setup_rec_box ()
rec_rect->property_x1() = xstart;
rec_rect->property_y1() = 1.0;
rec_rect->property_x2() = xend;
- rec_rect->property_y2() = (double) _trackview.current_height() - 1;
+ rec_rect->property_y2() = (double) _trackview->current_height() - 1;
rec_rect->property_outline_color_rgba() = ARDOUR_UI::config()->canvasvar_RecordingRect.get();
rec_rect->property_fill_color_rgba() = fill_color;
rec_rect->lower_to_bottom();
RecBoxInfo recbox;
recbox.rectangle = rec_rect;
- recbox.start = _trackview.session().transport_frame();
+ recbox.start = _trackview->session().transport_frame();
recbox.length = 0;
rec_rects.push_back (recbox);
@@ -462,8 +466,8 @@ MidiStreamView::setup_rec_box ()
rec_active = true;
} else if (rec_active &&
- (_trackview.session().record_status() != Session::Recording ||
- !_trackview.get_diskstream()->record_enabled())) {
+ (_trackview->session().record_status() != Session::Recording ||
+ !_trackview->get_diskstream()->record_enabled())) {
screen_update_connection.disconnect();
rec_active = false;
@@ -557,7 +561,7 @@ MidiStreamView::update_rec_regions (boost::shared_ptr<MidiModel> data, nframes_t
if (nlen != region->length()) {
region->freeze ();
- region->set_position (_trackview.get_diskstream()->get_capture_start_frame(n), this);
+ region->set_position (_trackview->get_diskstream()->get_capture_start_frame(n), this);
region->set_length (start + dur - region->position(), this);
region->thaw ("updated");
@@ -569,7 +573,7 @@ MidiStreamView::update_rec_regions (boost::shared_ptr<MidiModel> data, nframes_t
/* also update rect */
ArdourCanvas::SimpleRect * rect = rec_rects[n].rectangle;
- gdouble xend = _trackview.editor().frame_to_pixel (region->position() + region->length());
+ gdouble xend = _trackview->editor().frame_to_pixel (region->position() + region->length());
rect->property_x2() = xend;
/* draw events */
@@ -606,14 +610,14 @@ MidiStreamView::update_rec_regions (boost::shared_ptr<MidiModel> data, nframes_t
} else {
- nframes_t nlen = _trackview.get_diskstream()->get_captured_frames(n);
+ nframes_t nlen = _trackview->get_diskstream()->get_captured_frames(n);
if (nlen != region->length()) {
if (region->source_length(0) >= region->position() + nlen) {
region->freeze ();
- region->set_position (_trackview.get_diskstream()->get_capture_start_frame(n), this);
+ region->set_position (_trackview->get_diskstream()->get_capture_start_frame(n), this);
region->set_length (nlen, this);
region->thaw ("updated");
@@ -654,12 +658,12 @@ void
MidiStreamView::color_handler ()
{
//case cMidiTrackBase:
- if (_trackview.is_midi_track()) {
+ if (_trackview->is_midi_track()) {
//canvas_rect->property_fill_color_rgba() = ARDOUR_UI::config()->canvasvar_MidiTrackBase.get();
}
//case cMidiBusBase:
- if (!_trackview.is_midi_track()) {
+ if (!_trackview->is_midi_track()) {
//canvas_rect->property_fill_color_rgba() = ARDOUR_UI::config()->canvasvar_MidiBusBase.get();;
}
}