summaryrefslogtreecommitdiff
path: root/gtk2_ardour
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2006-08-29 21:21:48 +0000
committerDavid Robillard <d@drobilla.net>2006-08-29 21:21:48 +0000
commit82232f06ba3eea4a2b4342ad91fab552f4044402 (patch)
treed517cb47c017f51e2ecd9450624b86eb70d9f97b /gtk2_ardour
parent25d1670a61d19e795227b939a98be9cf5a050c67 (diff)
Merged with trunk R861
Possible new bugs - not very thoroughly tested, but at least functional at first glance git-svn-id: svn://localhost/ardour2/branches/midi@870 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour')
-rw-r--r--gtk2_ardour/SConscript4
-rw-r--r--gtk2_ardour/about.cc14
-rw-r--r--gtk2_ardour/analysis_window.cc8
-rw-r--r--gtk2_ardour/ardour_ui.cc6
-rw-r--r--gtk2_ardour/ardour_ui.h2
-rwxr-xr-xgtk2_ardour/arval2
-rw-r--r--gtk2_ardour/audio_region_editor.cc92
-rw-r--r--gtk2_ardour/audio_region_editor.h4
-rw-r--r--gtk2_ardour/audio_region_view.cc116
-rw-r--r--gtk2_ardour/audio_region_view.h88
-rw-r--r--gtk2_ardour/audio_streamview.cc57
-rw-r--r--gtk2_ardour/audio_streamview.h10
-rw-r--r--gtk2_ardour/automation_line.h4
-rw-r--r--gtk2_ardour/crossfade_edit.cc72
-rw-r--r--gtk2_ardour/crossfade_edit.h4
-rw-r--r--gtk2_ardour/crossfade_view.cc2
-rw-r--r--gtk2_ardour/editor.cc108
-rw-r--r--gtk2_ardour/editor.h52
-rw-r--r--gtk2_ardour/editor_audio_import.cc41
-rw-r--r--gtk2_ardour/editor_canvas.cc9
-rw-r--r--gtk2_ardour/editor_canvas_events.cc4
-rw-r--r--gtk2_ardour/editor_export_audio.cc51
-rw-r--r--gtk2_ardour/editor_keyboard.cc8
-rw-r--r--gtk2_ardour/editor_mixer.cc1
-rw-r--r--gtk2_ardour/editor_mouse.cc225
-rw-r--r--gtk2_ardour/editor_ops.cc328
-rw-r--r--gtk2_ardour/editor_region_list.cc80
-rw-r--r--gtk2_ardour/editor_timefx.cc12
-rw-r--r--gtk2_ardour/export_dialog.cc2
-rw-r--r--gtk2_ardour/export_region_dialog.cc5
-rw-r--r--gtk2_ardour/export_region_dialog.h4
-rw-r--r--gtk2_ardour/io_selector.cc6
-rw-r--r--gtk2_ardour/io_selector.h2
-rw-r--r--gtk2_ardour/location_ui.cc2
-rw-r--r--gtk2_ardour/meter_bridge.cc4
-rw-r--r--gtk2_ardour/midi_region_view.cc12
-rw-r--r--gtk2_ardour/midi_region_view.h20
-rw-r--r--gtk2_ardour/midi_streamview.cc47
-rw-r--r--gtk2_ardour/midi_streamview.h6
-rw-r--r--gtk2_ardour/mixer_ui.cc2
-rw-r--r--gtk2_ardour/playlist_selector.cc2
-rw-r--r--gtk2_ardour/plugin_selector.cc2
-rw-r--r--gtk2_ardour/plugin_ui.cc4
-rw-r--r--gtk2_ardour/plugin_ui.h2
-rw-r--r--gtk2_ardour/public_editor.h6
-rw-r--r--gtk2_ardour/region_gain_line.cc22
-rw-r--r--gtk2_ardour/region_selection.cc26
-rw-r--r--gtk2_ardour/region_view.cc79
-rw-r--r--gtk2_ardour/region_view.h54
-rw-r--r--gtk2_ardour/route_params_ui.cc23
-rw-r--r--gtk2_ardour/route_params_ui.h4
-rw-r--r--gtk2_ardour/route_time_axis.cc4
-rw-r--r--gtk2_ardour/route_time_axis.h2
-rw-r--r--gtk2_ardour/selection.cc2
-rw-r--r--gtk2_ardour/selection_templates.h24
-rw-r--r--gtk2_ardour/send_ui.cc8
-rw-r--r--gtk2_ardour/send_ui.h4
-rw-r--r--gtk2_ardour/sfdb_ui.cc24
-rw-r--r--gtk2_ardour/streamview.cc18
-rw-r--r--gtk2_ardour/streamview.h18
-rw-r--r--gtk2_ardour/tape_region_view.cc10
-rw-r--r--gtk2_ardour/tape_region_view.h2
-rw-r--r--gtk2_ardour/time_axis_view.h4
63 files changed, 910 insertions, 950 deletions
diff --git a/gtk2_ardour/SConscript b/gtk2_ardour/SConscript
index 9035666bbb..aaa686d246 100644
--- a/gtk2_ardour/SConscript
+++ b/gtk2_ardour/SConscript
@@ -212,6 +212,10 @@ itest_files=Split("""
itest.cc
""")
+stest_files=Split("""
+stest.cc
+""")
+
extra_sources = []
vst_files = [ 'vst_pluginui.cc' ]
diff --git a/gtk2_ardour/about.cc b/gtk2_ardour/about.cc
index 033b5c4604..e48e08f130 100644
--- a/gtk2_ardour/about.cc
+++ b/gtk2_ardour/about.cc
@@ -186,13 +186,13 @@ About::About ()
set_website (X_("http://ardour.org/"));
set_website_label (X_("ardour.org"));
set_version ((string_compose(_("%1\n(built with ardour/gtk %2.%3.%4 libardour: %5.%6.%7)"),
- VERSIONSTRING,
- gtk_ardour_major_version,
- gtk_ardour_minor_version,
- gtk_ardour_micro_version,
- libardour_major_version,
- libardour_minor_version,
- libardour_micro_version)));
+ VERSIONSTRING,
+ gtk_ardour_major_version,
+ gtk_ardour_minor_version,
+ gtk_ardour_micro_version,
+ libardour_major_version,
+ libardour_minor_version,
+ libardour_micro_version)));
#ifdef WITH_PAYMENT_OPTIONS
diff --git a/gtk2_ardour/analysis_window.cc b/gtk2_ardour/analysis_window.cc
index 24c6cc4fb8..d89c106831 100644
--- a/gtk2_ardour/analysis_window.cc
+++ b/gtk2_ardour/analysis_window.cc
@@ -292,15 +292,15 @@ AnalysisWindow::analyze_data (Gtk::Button *button)
jack_nframes_t i = 0;
int n;
- while ( i < arv->region().length() ) {
+ while ( i < arv->region()->length() ) {
// TODO: What about stereo+ channels? composite all to one, I guess
n = fft_graph.windowSize();
- if (i + n >= arv->region().length() ) {
- n = arv->region().length() - i;
+ if (i + n >= arv->region()->length() ) {
+ n = arv->region()->length() - i;
}
- n = arv->audio_region().read_at(buf, mixbuf, gain, arv->region().position() + i, n);
+ n = arv->audio_region()->read_at(buf, mixbuf, gain, arv->region()->position() + i, n);
if ( n < fft_graph.windowSize()) {
for (int j = n; j < fft_graph.windowSize(); j++) {
diff --git a/gtk2_ardour/ardour_ui.cc b/gtk2_ardour/ardour_ui.cc
index de117a1399..d0b9136bcb 100644
--- a/gtk2_ardour/ardour_ui.cc
+++ b/gtk2_ardour/ardour_ui.cc
@@ -2202,12 +2202,12 @@ ARDOUR_UI::halt_on_xrun_message ()
}
void
-ARDOUR_UI::delete_sources_in_the_right_thread (list<ARDOUR::Source*>* deletion_list)
+ARDOUR_UI::delete_sources_in_the_right_thread (list<boost::shared_ptr<ARDOUR::Source> >* deletion_list)
{
ENSURE_GUI_THREAD (bind (mem_fun(*this, &ARDOUR_UI::delete_sources_in_the_right_thread), deletion_list));
- for (list<Source*>::iterator i = deletion_list->begin(); i != deletion_list->end(); ++i) {
- delete *i;
+ for (list<boost::shared_ptr<Source> >::iterator i = deletion_list->begin(); i != deletion_list->end(); ++i) {
+ (*i)->drop_references ();
}
delete deletion_list;
diff --git a/gtk2_ardour/ardour_ui.h b/gtk2_ardour/ardour_ui.h
index 1f5277b5fe..821899c3af 100644
--- a/gtk2_ardour/ardour_ui.h
+++ b/gtk2_ardour/ardour_ui.h
@@ -645,7 +645,7 @@ class ARDOUR_UI : public Gtkmm2ext::UI
struct timeval last_peak_grab;
struct timeval last_shuttle_request;
- void delete_sources_in_the_right_thread (list<ARDOUR::Source*>*);
+ void delete_sources_in_the_right_thread (list<boost::shared_ptr<ARDOUR::Source> >*);
void editor_display_control_changed (Editing::DisplayControl c);
diff --git a/gtk2_ardour/arval b/gtk2_ardour/arval
index dcbef15a0f..cea6299d05 100755
--- a/gtk2_ardour/arval
+++ b/gtk2_ardour/arval
@@ -1,3 +1,3 @@
#!/bin/sh
source ardev_common.sh
-exec valgrind --num-callers=15 --tool=memcheck ./ardour.bin --novst $*
+exec valgrind --num-callers=50 --tool=memcheck gtk2_ardour/ardour.bin --novst $*
diff --git a/gtk2_ardour/audio_region_editor.cc b/gtk2_ardour/audio_region_editor.cc
index 194f358b42..3149a863ad 100644
--- a/gtk2_ardour/audio_region_editor.cc
+++ b/gtk2_ardour/audio_region_editor.cc
@@ -37,7 +37,7 @@ using namespace PBD;
using namespace sigc;
using namespace std;
-AudioRegionEditor::AudioRegionEditor (Session& s, AudioRegion& r, AudioRegionView& rv)
+AudioRegionEditor::AudioRegionEditor (Session& s, boost::shared_ptr<AudioRegion> r, AudioRegionView& rv)
: RegionEditor (s),
_region (r),
_region_view (rv),
@@ -262,7 +262,7 @@ AudioRegionEditor::AudioRegionEditor (Session& s, AudioRegion& r, AudioRegionVie
signal_delete_event().connect (bind (sigc::ptr_fun (just_hide_it), static_cast<Window *> (this)));
string title = _("ardour: region ");
- title += _region.name();
+ title += _region->name();
set_title (title);
show_all();
@@ -277,7 +277,7 @@ AudioRegionEditor::AudioRegionEditor (Session& s, AudioRegion& r, AudioRegionVie
fade_in_changed ();
fade_out_changed ();
- XMLNode *node = _region.extra_xml ("GUI");
+ XMLNode *node = _region->extra_xml ("GUI");
XMLProperty *prop = 0;
bool showing_envelope = false;
@@ -293,7 +293,7 @@ AudioRegionEditor::AudioRegionEditor (Session& s, AudioRegion& r, AudioRegionVie
envelope_view_button.set_active (false);
}
- _region.StateChanged.connect (mem_fun(*this, &AudioRegionEditor::region_changed));
+ _region->StateChanged.connect (mem_fun(*this, &AudioRegionEditor::region_changed));
spin_arrow_grab = false;
@@ -392,25 +392,25 @@ AudioRegionEditor::breleased (GdkEventButton* ev, Gtk::SpinButton* but, void (Au
void
AudioRegionEditor::start_editing_fade_in ()
{
- _region.freeze ();
+ _region->freeze ();
}
void
AudioRegionEditor::stop_editing_fade_in ()
{
- _region.thaw (_("fade in edit"));
+ _region->thaw (_("fade in edit"));
}
void
AudioRegionEditor::start_editing_fade_out ()
{
- _region.freeze ();
+ _region->freeze ();
}
void
AudioRegionEditor::stop_editing_fade_out ()
{
- _region.thaw (_("fade out edit"));
+ _region->thaw (_("fade out edit"));
}
void
@@ -453,24 +453,24 @@ AudioRegionEditor::connect_editor_events ()
void
AudioRegionEditor::start_clock_changed ()
{
- _region.set_position (start_clock.current_time(), this);
+ _region->set_position (start_clock.current_time(), this);
}
void
AudioRegionEditor::end_clock_changed ()
{
- _region.trim_end (end_clock.current_time(), this);
+ _region->trim_end (end_clock.current_time(), this);
- end_clock.set (_region.position() + _region.length(), true);
+ end_clock.set (_region->position() + _region->length(), true);
}
void
AudioRegionEditor::length_clock_changed ()
{
jack_nframes_t frames = length_clock.current_time();
- _region.trim_end (_region.position() + frames, this);
+ _region->trim_end (_region->position() + frames, this);
- length_clock.set (_region.length());
+ length_clock.set (_region->length());
}
gint
@@ -482,7 +482,7 @@ AudioRegionEditor::envelope_active_button_press(GdkEventButton *ev)
gint
AudioRegionEditor::envelope_active_button_release (GdkEventButton *ev)
{
- _region.set_envelope_active (!_region.envelope_active());
+ _region->set_envelope_active (!_region->envelope_active());
return stop_signal (envelope_active_button, "button_release_event");
}
@@ -507,42 +507,42 @@ AudioRegionEditor::audition_button_toggled ()
void
AudioRegionEditor::raise_button_clicked ()
{
- _region.raise ();
+ _region->raise ();
}
void
AudioRegionEditor::lower_button_clicked ()
{
- _region.lower ();
+ _region->lower ();
}
void
AudioRegionEditor::opaque_button_clicked ()
{
- bool ractive = _region.opaque();
+ bool ractive = _region->opaque();
if (opaque_button.get_active() != ractive) {
- _region.set_opaque (!ractive);
+ _region->set_opaque (!ractive);
}
}
void
AudioRegionEditor::mute_button_clicked ()
{
- bool ractive = _region.muted();
+ bool ractive = _region->muted();
if (mute_button.get_active() != ractive) {
- _region.set_muted (!ractive);
+ _region->set_muted (!ractive);
}
}
void
AudioRegionEditor::lock_button_clicked ()
{
- bool ractive = _region.locked();
+ bool ractive = _region->locked();
if (lock_button.get_active() != ractive) {
- _region.set_locked (!ractive);
+ _region->set_locked (!ractive);
}
}
@@ -550,15 +550,15 @@ void
AudioRegionEditor::layer_changed ()
{
char buf[8];
- snprintf (buf, sizeof(buf), "%d", (int) _region.layer() + 1);
+ snprintf (buf, sizeof(buf), "%d", (int) _region->layer() + 1);
layer_value_label.set_text (buf);
}
void
AudioRegionEditor::name_changed ()
{
- if (name_entry.get_text() != _region.name()) {
- name_entry.set_text (_region.name());
+ if (name_entry.get_text() != _region->name()) {
+ name_entry.set_text (_region->name());
}
}
@@ -567,7 +567,7 @@ AudioRegionEditor::lock_changed ()
{
bool yn;
- if ((yn = _region.locked()) != lock_button.get_active()) {
+ if ((yn = _region->locked()) != lock_button.get_active()) {
lock_button.set_active (yn);
}
@@ -581,7 +581,7 @@ AudioRegionEditor::envelope_active_changed ()
{
bool yn;
- if ((yn = _region.envelope_active()) != envelope_active_button.get_active()) {
+ if ((yn = _region->envelope_active()) != envelope_active_button.get_active()) {
envelope_active_button.set_active (yn);
}
}
@@ -590,7 +590,7 @@ void
AudioRegionEditor::opacity_changed ()
{
bool yn;
- if ((yn = _region.opaque()) != opaque_button.get_active()) {
+ if ((yn = _region->opaque()) != opaque_button.get_active()) {
opaque_button.set_active (yn);
}
}
@@ -599,7 +599,7 @@ void
AudioRegionEditor::mute_changed ()
{
bool yn;
- if ((yn = _region.muted()) != mute_button.get_active()) {
+ if ((yn = _region->muted()) != mute_button.get_active()) {
mute_button.set_active (yn);
}
}
@@ -608,9 +608,9 @@ void
AudioRegionEditor::bounds_changed (Change what_changed)
{
if (what_changed & Change ((PositionChanged|LengthChanged))) {
- start_clock.set (_region.position(), true);
- end_clock.set (_region.position() + _region.length(), true);
- length_clock.set (_region.length(), true);
+ start_clock.set (_region->position(), true);
+ end_clock.set (_region->position() + _region->length(), true);
+ length_clock.set (_region->length(), true);
}
}
@@ -623,8 +623,8 @@ AudioRegionEditor::activation ()
void
AudioRegionEditor::name_entry_changed ()
{
- if (name_entry.get_text() != _region.name()) {
- _region.set_name (name_entry.get_text());
+ if (name_entry.get_text() != _region->name()) {
+ _region->set_name (name_entry.get_text());
}
}
@@ -637,11 +637,11 @@ AudioRegionEditor::fade_in_changed ()
jack_nframes_t frames;
bool x;
- if (adj_frames != (frames = (jack_nframes_t) _region.fade_in().back()->when)) {
+ if (adj_frames != (frames = (jack_nframes_t) _region->fade_in().back()->when)) {
fade_in_length_adjustment.set_value ((frames * 1000.0f) / sr);
}
- if ((x = _region.fade_in_active()) != fade_in_active_button.get_active()) {
+ if ((x = _region->fade_in_active()) != fade_in_active_button.get_active()) {
fade_in_active_button.set_active (x);
}
}
@@ -654,11 +654,11 @@ AudioRegionEditor::fade_out_changed ()
jack_nframes_t adj_frames = (jack_nframes_t) floor (msecs * (sr/1000.0f));
jack_nframes_t frames;
bool x;
- if (adj_frames != (frames = (jack_nframes_t) _region.fade_out().back()->when)) {
+ if (adj_frames != (frames = (jack_nframes_t) _region->fade_out().back()->when)) {
fade_out_length_adjustment.set_value ((frames * 1000.0f) / sr);
}
- if ((x = _region.fade_out_active()) != fade_out_active_button.get_active()) {
+ if ((x = _region->fade_out_active()) != fade_out_active_button.get_active()) {
fade_out_active_button.set_active (x);
}
}
@@ -668,9 +668,9 @@ AudioRegionEditor::fade_in_length_adjustment_changed ()
{
jack_nframes_t fade_length = (jack_nframes_t) floor (fade_in_length_adjustment.get_value() * _session.frame_rate() * 0.001);
fade_length = max (fade_length, (jack_nframes_t) 64);
- fade_length = min (fade_length, _region.length());
+ fade_length = min (fade_length, _region->length());
- _region.set_fade_in_length (fade_length);
+ _region->set_fade_in_length (fade_length);
/* region is frozen, no worries */
fade_in_changed();
}
@@ -680,9 +680,9 @@ AudioRegionEditor::fade_out_length_adjustment_changed ()
{
jack_nframes_t fade_length = (jack_nframes_t) floor (fade_out_length_adjustment.get_value() * _session.frame_rate() * 0.001);
fade_length = max (fade_length, (jack_nframes_t) 64);
- fade_length = min (fade_length, _region.length());
+ fade_length = min (fade_length, _region->length());
- _region.set_fade_out_length (fade_length);
+ _region->set_fade_out_length (fade_length);
/* region is frozen, no worries */
fade_out_changed();
}
@@ -690,13 +690,13 @@ AudioRegionEditor::fade_out_length_adjustment_changed ()
void
AudioRegionEditor::fade_in_active_toggled ()
{
- _region.set_fade_in_active (fade_in_active_button.get_active());
+ _region->set_fade_in_active (fade_in_active_button.get_active());
}
void
AudioRegionEditor::fade_out_active_toggled ()
{
- _region.set_fade_out_active (fade_out_active_button.get_active());
+ _region->set_fade_out_active (fade_out_active_button.get_active());
}
void
@@ -704,7 +704,7 @@ AudioRegionEditor::fade_out_active_changed ()
{
bool x;
- if ((x = _region.fade_out_active()) != fade_out_active_button.get_active()) {
+ if ((x = _region->fade_out_active()) != fade_out_active_button.get_active()) {
fade_out_active_button.set_active (x);
}
}
@@ -714,7 +714,7 @@ AudioRegionEditor::fade_in_active_changed ()
{
bool x;
- if ((x = _region.fade_in_active()) != fade_in_active_button.get_active()) {
+ if ((x = _region->fade_in_active()) != fade_in_active_button.get_active()) {
fade_in_active_button.set_active (x);
}
}
diff --git a/gtk2_ardour/audio_region_editor.h b/gtk2_ardour/audio_region_editor.h
index 38cd920e5e..dbbc40f9ba 100644
--- a/gtk2_ardour/audio_region_editor.h
+++ b/gtk2_ardour/audio_region_editor.h
@@ -53,11 +53,11 @@ class AudioRegionView;
class AudioRegionEditor : public RegionEditor
{
public:
- AudioRegionEditor (ARDOUR::Session&, ARDOUR::AudioRegion&, AudioRegionView& rv);
+ AudioRegionEditor (ARDOUR::Session&, boost::shared_ptr<ARDOUR::AudioRegion>, AudioRegionView& rv);
~AudioRegionEditor ();
private:
- ARDOUR::AudioRegion& _region;
+ boost::shared_ptr<ARDOUR::AudioRegion> _region;
AudioRegionView& _region_view;
void connect_editor_events ();
diff --git a/gtk2_ardour/audio_region_view.cc b/gtk2_ardour/audio_region_view.cc
index 93af5b3ec0..41b95b0d42 100644
--- a/gtk2_ardour/audio_region_view.cc
+++ b/gtk2_ardour/audio_region_view.cc
@@ -55,7 +55,7 @@ using namespace ArdourCanvas;
static const int32_t sync_mark_width = 9;
-AudioRegionView::AudioRegionView (ArdourCanvas::Group *parent, RouteTimeAxisView &tv, AudioRegion& r, double spu,
+AudioRegionView::AudioRegionView (ArdourCanvas::Group *parent, RouteTimeAxisView &tv, boost::shared_ptr<AudioRegion> r, double spu,
Gdk::Color& basic_color)
: RegionView (parent, tv, r, spu, basic_color)
, sync_mark(0)
@@ -71,7 +71,7 @@ AudioRegionView::AudioRegionView (ArdourCanvas::Group *parent, RouteTimeAxisView
{
}
-AudioRegionView::AudioRegionView (ArdourCanvas::Group *parent, RouteTimeAxisView &tv, AudioRegion& r, double spu,
+AudioRegionView::AudioRegionView (ArdourCanvas::Group *parent, RouteTimeAxisView &tv, boost::shared_ptr<AudioRegion> r, double spu,
Gdk::Color& basic_color, TimeAxisViewItem::Visibility visibility)
: RegionView (parent, tv, r, spu, basic_color, visibility)
, sync_mark(0)
@@ -101,7 +101,7 @@ AudioRegionView::init (Gdk::Color& basic_color, bool wfd)
zero_line = 0;
_flags = 0;
- if ((node = _region.extra_xml ("GUI")) != 0) {
+ if ((node = _region->extra_xml ("GUI")) != 0) {
set_flags (node);
} else {
_flags = WaveformVisible;
@@ -147,11 +147,11 @@ AudioRegionView::init (Gdk::Color& basic_color, bool wfd)
fade_out_handle->set_data ("regionview", this);
}
- string foo = _region.name();
+ string foo = _region->name();
foo += ':';
foo += "gain";
- gain_line = new AudioRegionGainLine (foo, trackview.session(), *this, *group, audio_region().envelope());
+ gain_line = new AudioRegionGainLine (foo, trackview.session(), *this, *group, audio_region()->envelope());
if (!(_flags & EnvelopeVisible)) {
gain_line->hide ();
@@ -159,7 +159,7 @@ AudioRegionView::init (Gdk::Color& basic_color, bool wfd)
gain_line->show ();
}
- reset_width_dependent_items ((double) _region.length() / samples_per_unit);
+ reset_width_dependent_items ((double) _region->length() / samples_per_unit);
gain_line->reset ();
@@ -174,7 +174,7 @@ AudioRegionView::init (Gdk::Color& basic_color, bool wfd)
fade_in_active_changed ();
fade_out_active_changed ();
- _region.StateChanged.connect (mem_fun(*this, &AudioRegionView::region_changed));
+ _region->StateChanged.connect (mem_fun(*this, &AudioRegionView::region_changed));
fade_in_shape->signal_event().connect (bind (mem_fun (PublicEditor::instance(), &PublicEditor::canvas_fade_in_event), fade_in_shape, this));
fade_in_handle->signal_event().connect (bind (mem_fun (PublicEditor::instance(), &PublicEditor::canvas_fade_in_handle_event), fade_in_handle, this));
@@ -203,11 +203,11 @@ AudioRegionView::~AudioRegionView ()
}
}
-ARDOUR::AudioRegion&
+boost::shared_ptr<ARDOUR::AudioRegion>
AudioRegionView::audio_region() const
{
// "Guaranteed" to succeed...
- return dynamic_cast<AudioRegion&>(_region);
+ return boost::dynamic_pointer_cast<AudioRegion>(_region);
}
void
@@ -252,13 +252,13 @@ AudioRegionView::fade_out_changed ()
void
AudioRegionView::set_fade_in_active (bool yn)
{
- audio_region().set_fade_in_active (yn);
+ audio_region()->set_fade_in_active (yn);
}
void
AudioRegionView::set_fade_out_active (bool yn)
{
- audio_region().set_fade_out_active (yn);
+ audio_region()->set_fade_out_active (yn);
}
void
@@ -268,7 +268,7 @@ AudioRegionView::fade_in_active_changed ()
uint32_t col;
UINT_TO_RGBA(fade_color,&r,&g,&b,&a);
- if (audio_region().fade_in_active()) {
+ if (audio_region()->fade_in_active()) {
col = RGBA_TO_UINT(r,g,b,120);
fade_in_shape->property_fill_color_rgba() = col;
fade_in_shape->property_width_pixels() = 0;
@@ -288,7 +288,7 @@ AudioRegionView::fade_out_active_changed ()
uint32_t col;
UINT_TO_RGBA(fade_color,&r,&g,&b,&a);
- if (audio_region().fade_out_active()) {
+ if (audio_region()->fade_out_active()) {
col = RGBA_TO_UINT(r,g,b,120);
fade_out_shape->property_fill_color_rgba() = col;
fade_out_shape->property_width_pixels() = 0;
@@ -309,7 +309,7 @@ AudioRegionView::region_scale_amplitude_changed ()
for (uint32_t n = 0; n < waves.size(); ++n) {
// force a reload of the cache
- waves[n]->property_data_src() = &_region;
+ waves[n]->property_data_src() = _region.get();
}
}
@@ -320,20 +320,20 @@ AudioRegionView::region_renamed ()
string str;
- if (_region.locked()) {
+ if (_region->locked()) {
str += '>';
- str += _region.name();
+ str += _region->name();
str += '<';
} else {
- str = _region.name();
+ str = _region->name();
}
// ... because of this
- if (audio_region().speed_mismatch (trackview.session().frame_rate())) {
+ if (audio_region()->speed_mismatch (trackview.session().frame_rate())) {
str = string ("*") + str;
}
- if (_region.muted()) {
+ if (_region->muted()) {
str = string ("!") + str;
}
@@ -349,13 +349,13 @@ AudioRegionView::region_resized (Change what_changed)
if (what_changed & Change (StartChanged|LengthChanged)) {
for (uint32_t n = 0; n < waves.size(); ++n) {
- waves[n]->property_region_start() = _region.start();
+ waves[n]->property_region_start() = _region->start();
}
for (vector<GhostRegion*>::iterator i = ghosts.begin(); i != ghosts.end(); ++i) {
for (vector<WaveView*>::iterator w = (*i)->waves.begin(); w != (*i)->waves.end(); ++w) {
- (*w)->property_region_start() = _region.start();
+ (*w)->property_region_start() = _region->start();
}
}
}
@@ -395,7 +395,7 @@ AudioRegionView::region_muted ()
RegionView::region_muted();
for (uint32_t n=0; n < waves.size(); ++n) {
- if (_region.muted()) {
+ if (_region->muted()) {
waves[n]->property_wave_color() = color_map[cMutedWaveForm];
} else {
waves[n]->property_wave_color() = color_map[cWaveForm];
@@ -471,7 +471,7 @@ AudioRegionView::reset_fade_shapes ()
void
AudioRegionView::reset_fade_in_shape ()
{
- reset_fade_in_shape_width ((jack_nframes_t) audio_region().fade_in().back()->when);
+ reset_fade_in_shape_width ((jack_nframes_t) audio_region()->fade_in().back()->when);
}
void
@@ -516,7 +516,7 @@ AudioRegionView::reset_fade_in_shape_width (jack_nframes_t width)
fade_in_shape->show();
float curve[npoints];
- audio_region().fade_in().get_vector (0, audio_region().fade_in().back()->when, curve, npoints);
+ audio_region()->fade_in().get_vector (0, audio_region()->fade_in().back()->when, curve, npoints);
points = get_canvas_points ("fade in shape", npoints+3);
@@ -555,7 +555,7 @@ AudioRegionView::reset_fade_in_shape_width (jack_nframes_t width)
void
AudioRegionView::reset_fade_out_shape ()
{
- reset_fade_out_shape_width ((jack_nframes_t) audio_region().fade_out().back()->when);
+ reset_fade_out_shape_width ((jack_nframes_t) audio_region()->fade_out().back()->when);
}
void
@@ -581,7 +581,7 @@ AudioRegionView::reset_fade_out_shape_width (jack_nframes_t width)
}
double handle_center;
- handle_center = (_region.length() - width) / samples_per_unit;
+ handle_center = (_region->length() - width) / samples_per_unit;
if (handle_center > 7.0) {
handle_center -= 3.0;
@@ -602,7 +602,7 @@ AudioRegionView::reset_fade_out_shape_width (jack_nframes_t width)
fade_out_shape->show();
float curve[npoints];
- audio_region().fade_out().get_vector (0, audio_region().fade_out().back()->when, curve, npoints);
+ audio_region()->fade_out().get_vector (0, audio_region()->fade_out().back()->when, curve, npoints);
if (_height > NAME_HIGHLIGHT_THRESH) {
h = _height - NAME_HIGHLIGHT_SIZE;
@@ -680,11 +680,11 @@ AudioRegionView::set_colors ()
RegionView::set_colors();
if (gain_line) {
- gain_line->set_line_color (audio_region().envelope_active() ? color_map[cGainLine] : color_map[cGainLineInactive]);
+ gain_line->set_line_color (audio_region()->envelope_active() ? color_map[cGainLine] : color_map[cGainLineInactive]);
}
for (uint32_t n=0; n < waves.size(); ++n) {
- if (_region.muted()) {
+ if (_region->muted()) {
waves[n]->property_wave_color() = color_map[cMutedWaveForm];
} else {
waves[n]->property_wave_color() = color_map[cWaveForm];
@@ -776,14 +776,14 @@ AudioRegionView::create_waves ()
for (uint32_t n = 0; n < nchans; ++n) {
- if (n >= audio_region().n_channels()) {
+ if (n >= audio_region()->n_channels()) {
break;
}
wave_caches.push_back (WaveView::create_cache ());
if (wait_for_data) {
- if (audio_region().audio_source(n).peaks_ready (bind (mem_fun(*this, &AudioRegionView::peaks_ready_handler), n), data_ready_connection)) {
+ if (audio_region()->audio_source(n)->peaks_ready (bind (mem_fun(*this, &AudioRegionView::peaks_ready_handler), n), data_ready_connection)) {
create_one_wave (n, true);
} else {
create_zero_line = false;
@@ -796,7 +796,7 @@ AudioRegionView::create_waves ()
if (create_zero_line) {
zero_line = new ArdourCanvas::SimpleLine (*group);
zero_line->property_x1() = (gdouble) 1.0;
- zero_line->property_x2() = (gdouble) (_region.length() / samples_per_unit) - 1.0;
+ zero_line->property_x2() = (gdouble) (_region->length() / samples_per_unit) - 1.0;
zero_line->property_color_rgba() = (guint) color_map[cZeroLine];
manage_zero_line ();
}
@@ -808,7 +808,7 @@ AudioRegionView::create_one_wave (uint32_t which, bool direct)
RouteTimeAxisView& atv (*(dynamic_cast<RouteTimeAxisView*>(&trackview))); // ick
uint32_t nchans = atv.get_diskstream()->n_channels().get(DataType::AUDIO);
uint32_t n;
- uint32_t nwaves = std::min (nchans, audio_region().n_channels());
+ uint32_t nwaves = std::min (nchans, audio_region()->n_channels());
gdouble ht;
if (trackview.height < NAME_HIGHLIGHT_SIZE) {
@@ -821,7 +821,7 @@ AudioRegionView::create_one_wave (uint32_t which, bool direct)
WaveView *wave = new WaveView(*group);
- wave->property_data_src() = (gpointer) &_region;
+ wave->property_data_src() = (gpointer) _region.get();
wave->property_cache() = wave_caches[which];
wave->property_cache_updater() = true;
wave->property_channel() = which;
@@ -833,8 +833,8 @@ AudioRegionView::create_one_wave (uint32_t which, bool direct)
wave->property_height() = (double) ht;
wave->property_samples_per_unit() = samples_per_unit;
wave->property_amplitude_above_axis() = _amplitude_above_axis;
- wave->property_wave_color() = _region.muted() ? color_map[cMutedWaveForm] : color_map[cWaveForm];
- wave->property_region_start() = _region.start();
+ wave->property_wave_color() = _region->muted() ? color_map[cMutedWaveForm] : color_map[cWaveForm];
+ wave->property_region_start() = _region->start();
if (!(_flags & WaveformVisible)) {
wave->hide();
@@ -870,7 +870,7 @@ AudioRegionView::create_one_wave (uint32_t which, bool direct)
if (!zero_line) {
zero_line = new ArdourCanvas::SimpleLine (*group);
zero_line->property_x1() = (gdouble) 1.0;
- zero_line->property_x2() = (gdouble) (_region.length() / samples_per_unit) - 1.0;
+ zero_line->property_x2() = (gdouble) (_region->length() / samples_per_unit) - 1.0;
zero_line->property_color_rgba() = (guint) color_map[cZeroLine];
manage_zero_line ();
}
@@ -908,7 +908,7 @@ AudioRegionView::add_gain_point_event (ArdourCanvas::Item *item, GdkEvent *ev)
jack_nframes_t fx = trackview.editor.pixel_to_frame (x);
- if (fx > _region.length()) {
+ if (fx > _region->length()) {
return;
}
@@ -921,20 +921,20 @@ AudioRegionView::add_gain_point_event (ArdourCanvas::Item *item, GdkEvent *ev)
gain_line->view_to_model_y (y);
trackview.session().begin_reversible_command (_("add gain control point"));
- XMLNode &before = audio_region().envelope().get_state();
+ XMLNode &before = audio_region()->envelope().get_state();
- if (!audio_region().envelope_active()) {
- XMLNode &before = audio_region().get_state();
- audio_region().set_envelope_active(true);
- XMLNode &after = audio_region().get_state();
- trackview.session().add_command (new MementoCommand<AudioRegion>(audio_region(), &before, &after));
+ if (!audio_region()->envelope_active()) {
+ XMLNode &before = audio_region()->get_state();
+ audio_region()->set_envelope_active(true);
+ XMLNode &after = audio_region()->get_state();
+ trackview.session().add_command (new MementoCommand<AudioRegion>(*(audio_region().get()), &before, &after));
}
- audio_region().envelope().add (fx, y);
+ audio_region()->envelope().add (fx, y);
- XMLNode &after = audio_region().envelope().get_state();
- trackview.session().add_command (new MementoCommand<Curve>(audio_region().envelope(), &before, &after));
+ XMLNode &after = audio_region()->envelope().get_state();
+ trackview.session().add_command (new MementoCommand<Curve>(audio_region()->envelope(), &before, &after));
trackview.session().commit_reversible_command ();
}
@@ -942,7 +942,7 @@ void
AudioRegionView::remove_gain_point_event (ArdourCanvas::Item *item, GdkEvent *ev)
{
ControlPoint *cp = reinterpret_cast<ControlPoint *> (item->get_data ("control_point"));
- audio_region().envelope().erase (cp->model);
+ audio_region()->envelope().erase (cp->model);
}
void
@@ -953,7 +953,7 @@ AudioRegionView::store_flags()
node->add_property ("waveform-visible", (_flags & WaveformVisible) ? "yes" : "no");
node->add_property ("envelope-visible", (_flags & EnvelopeVisible) ? "yes" : "no");
- _region.add_extra_xml (*node);
+ _region->add_extra_xml (*node);
}
void
@@ -1020,7 +1020,7 @@ AudioRegionView::add_ghost (AutomationTimeAxisView& atv)
RouteTimeAxisView* rtv = dynamic_cast<RouteTimeAxisView*>(&trackview);
assert(rtv);
- double unit_position = _region.position () / samples_per_unit;
+ double unit_position = _region->position () / samples_per_unit;
GhostRegion* ghost = new GhostRegion (atv, unit_position);
uint32_t nchans;
@@ -1028,13 +1028,13 @@ AudioRegionView::add_ghost (AutomationTimeAxisView& atv)
for (uint32_t n = 0; n < nchans; ++n) {
- if (n >= audio_region().n_channels()) {
+ if (n >= audio_region()->n_channels()) {
break;
}
WaveView *wave = new WaveView(*ghost->group);
- wave->property_data_src() = &_region;
+ wave->property_data_src() = _region.get();
wave->property_cache() = wave_caches[n];
wave->property_cache_updater() = false;
wave->property_channel() = n;
@@ -1045,13 +1045,13 @@ AudioRegionView::add_ghost (AutomationTimeAxisView& atv)
wave->property_samples_per_unit() = samples_per_unit;
wave->property_amplitude_above_axis() = _amplitude_above_axis;
wave->property_wave_color() = color_map[cGhostTrackWave];
- wave->property_region_start() = _region.start();
+ wave->property_region_start() = _region->start();
ghost->waves.push_back(wave);
}
ghost->set_height ();
- ghost->set_duration (_region.length() / samples_per_unit);
+ ghost->set_duration (_region->length() / samples_per_unit);
ghosts.push_back (ghost);
ghost->GoingAway.connect (mem_fun(*this, &AudioRegionView::remove_ghost));
@@ -1097,7 +1097,7 @@ void
AudioRegionView::envelope_active_changed ()
{
if (gain_line) {
- gain_line->set_line_color (audio_region().envelope_active() ? color_map[cGainLine] : color_map[cGainLineInactive]);
+ gain_line->set_line_color (audio_region()->envelope_active() ? color_map[cGainLine] : color_map[cGainLineInactive]);
}
}
@@ -1105,11 +1105,11 @@ void
AudioRegionView::set_waveview_data_src()
{
- double unit_length= _region.length() / samples_per_unit;
+ double unit_length= _region->length() / samples_per_unit;
for (uint32_t n = 0; n < waves.size(); ++n) {
// TODO: something else to let it know the channel
- waves[n]->property_data_src() = &_region;
+ waves[n]->property_data_src() = _region.get();
}
for (vector<GhostRegion*>::iterator i = ghosts.begin(); i != ghosts.end(); ++i) {
@@ -1117,7 +1117,7 @@ AudioRegionView::set_waveview_data_src()
(*i)->set_duration (unit_length);
for (vector<WaveView*>::iterator w = (*i)->waves.begin(); w != (*i)->waves.end(); ++w) {
- (*w)->property_data_src() = &_region;
+ (*w)->property_data_src() = _region.get();
}
}
diff --git a/gtk2_ardour/audio_region_view.h b/gtk2_ardour/audio_region_view.h
index e9172dec97..21fd519606 100644
--- a/gtk2_ardour/audio_region_view.h
+++ b/gtk2_ardour/audio_region_view.h
@@ -51,7 +51,7 @@ class AudioRegionView : public RegionView
public:
AudioRegionView (ArdourCanvas::Group *,
RouteTimeAxisView&,
- ARDOUR::AudioRegion&,
+ boost::shared_ptr<ARDOUR::AudioRegion>,
double initial_samples_per_unit,
Gdk::Color& basic_color);
@@ -59,44 +59,44 @@ class AudioRegionView : public RegionView
virtual void init (Gdk::Color& base_color, bool wait_for_data = false);
- ARDOUR::AudioRegion& audio_region() const;
-
- void set_height (double);
- void set_samples_per_unit (double);
-
- void set_amplitude_above_axis (gdouble spp);
-
- void temporarily_hide_envelope (); ///< Dangerous!
- void unhide_envelope (); ///< Dangerous!
-
- void set_envelope_visible (bool);
- void set_waveform_visible (bool yn);
- void set_waveform_shape (WaveformShape);
-
- bool waveform_rectified() const { return _flags & WaveformRectified; }
- bool waveform_visible() const { return _flags & WaveformVisible; }
- bool envelope_visible() const { return _flags & EnvelopeVisible; }
-
- void show_region_editor ();
-
- void add_gain_point_event (ArdourCanvas::Item *item, GdkEvent *event);
- void remove_gain_point_event (ArdourCanvas::Item *item, GdkEvent *event);
-
- AudioRegionGainLine* get_gain_line() const { return gain_line; }
-
- void region_changed (ARDOUR::Change);
- void envelope_active_changed ();
-
- GhostRegion* add_ghost (AutomationTimeAxisView&);
-
- void reset_fade_in_shape_width (jack_nframes_t);
- void reset_fade_out_shape_width (jack_nframes_t);
- void set_fade_in_active (bool);
- void set_fade_out_active (bool);
-
- virtual void entered ();
- virtual void exited ();
-
+ boost::shared_ptr<ARDOUR::AudioRegion> audio_region() const;
+
+ void set_height (double);
+ void set_samples_per_unit (double);
+
+ void set_amplitude_above_axis (gdouble spp);
+
+ void temporarily_hide_envelope (); ///< Dangerous!
+ void unhide_envelope (); ///< Dangerous!
+
+ void set_envelope_visible (bool);
+ void set_waveform_visible (bool yn);
+ void set_waveform_shape (WaveformShape);
+
+ bool waveform_rectified() const { return _flags & WaveformRectified; }
+ bool waveform_visible() const { return _flags & WaveformVisible; }
+ bool envelope_visible() const { return _flags & EnvelopeVisible; }
+
+ void show_region_editor ();
+
+ void add_gain_point_event (ArdourCanvas::Item *item, GdkEvent *event);
+ void remove_gain_point_event (ArdourCanvas::Item *item, GdkEvent *event);
+
+ AudioRegionGainLine* get_gain_line() const { return gain_line; }
+
+ void region_changed (ARDOUR::Change);
+ void envelope_active_changed ();
+
+ GhostRegion* add_ghost (AutomationTimeAxisView&);
+
+ void reset_fade_in_shape_width (jack_nframes_t);
+ void reset_fade_out_shape_width (jack_nframes_t);
+ void set_fade_in_active (bool);
+ void set_fade_out_active (bool);
+
+ virtual void entered ();
+ virtual void exited ();
+
protected:
/* this constructor allows derived types
@@ -105,11 +105,11 @@ class AudioRegionView : public RegionView
*/
AudioRegionView (ArdourCanvas::Group *,
- RouteTimeAxisView&,
- ARDOUR::AudioRegion&,
- double samples_per_unit,
- Gdk::Color& basic_color,
- TimeAxisViewItem::Visibility);
+ RouteTimeAxisView&,
+ boost::shared_ptr<ARDOUR::AudioRegion>,
+ double samples_per_unit,
+ Gdk::Color& basic_color,
+ TimeAxisViewItem::Visibility);
enum Flags {
EnvelopeVisible = 0x1,
diff --git a/gtk2_ardour/audio_streamview.cc b/gtk2_ardour/audio_streamview.cc
index 83d1825ef5..2b9cd23567 100644
--- a/gtk2_ardour/audio_streamview.cc
+++ b/gtk2_ardour/audio_streamview.cc
@@ -25,11 +25,12 @@
#include <ardour/audioplaylist.h>
#include <ardour/audioregion.h>
-#include <ardour/audiosource.h>
+#include <ardour/audiofilesource.h>
#include <ardour/audio_diskstream.h>
#include <ardour/audio_track.h>
#include <ardour/playlist_templates.h>
#include <ardour/source.h>
+#include <ardour/region_factory.h>
#include "audio_streamview.h"
#include "audio_region_view.h"
@@ -123,11 +124,11 @@ AudioStreamView::set_amplitude_above_axis (gdouble app)
}
void
-AudioStreamView::add_region_view_internal (Region *r, bool wait_for_waves)
+AudioStreamView::add_region_view_internal (boost::shared_ptr<Region> r, bool wait_for_waves)
{
ENSURE_GUI_THREAD (bind (mem_fun (*this, &AudioStreamView::add_region_view), r));
- AudioRegion* region = dynamic_cast<AudioRegion*> (r);
+ boost::shared_ptr<AudioRegion> region = boost::dynamic_pointer_cast<AudioRegion> (r);
if (region == 0) {
return;
@@ -137,7 +138,7 @@ AudioStreamView::add_region_view_internal (Region *r, bool wait_for_waves)
list<RegionView *>::iterator i;
for (i = region_views.begin(); i != region_views.end(); ++i) {
- if (&(*i)->region() == r) {
+ if ((*i)->region() == r) {
/* great. we already have a AudioRegionView for this Region. use it again. */
@@ -148,11 +149,11 @@ AudioStreamView::add_region_view_internal (Region *r, bool wait_for_waves)
switch (_trackview.audio_track()->mode()) {
case Normal:
- region_view = new AudioRegionView (canvas_group, _trackview, *region,
+ region_view = new AudioRegionView (canvas_group, _trackview, region,
_samples_per_unit, region_color);
break;
case Destructive:
- region_view = new TapeAudioRegionView (canvas_group, _trackview, *region,
+ region_view = new TapeAudioRegionView (canvas_group, _trackview, region,
_samples_per_unit, region_color);
break;
}
@@ -167,13 +168,13 @@ AudioStreamView::add_region_view_internal (Region *r, bool wait_for_waves)
/* catch regionview going away */
- region->GoingAway.connect (mem_fun (*this, &AudioStreamView::remove_region_view));
+ region->GoingAway.connect (bind (mem_fun (*this, &AudioStreamView::remove_region_view), region));
RegionViewAdded (region_view);
}
void
-AudioStreamView::remove_region_view (Region *r)
+AudioStreamView::remove_region_view (boost::shared_ptr<Region> r)
{
ENSURE_GUI_THREAD (bind (mem_fun (*this, &AudioStreamView::remove_region_view), r));
@@ -183,8 +184,8 @@ AudioStreamView::remove_region_view (Region *r)
tmp = i;
++tmp;
- AudioRegion* ar = dynamic_cast<AudioRegion*>(r);
- if (ar && (*i)->crossfade.involves (*ar)) {
+ boost::shared_ptr<AudioRegion> ar = boost::dynamic_pointer_cast<AudioRegion>(r);
+ if (ar && (*i)->crossfade.involves (ar)) {
delete *i;
crossfade_views.erase (i);
}
@@ -262,10 +263,10 @@ AudioStreamView::add_crossfade (Crossfade *crossfade)
for (list<RegionView *>::iterator i = region_views.begin(); i != region_views.end(); ++i) {
AudioRegionView* arv = dynamic_cast<AudioRegionView*>(*i);
- if (!lview && arv && &(arv->region()) == &crossfade->out()) {
+ if (!lview && arv && (arv->region() == crossfade->out())) {
lview = arv;
}
- if (!rview && arv && &(arv->region()) == &crossfade->in()) {
+ if (!rview && arv && (arv->region() == crossfade->in())) {
rview = arv;
}
}
@@ -390,7 +391,7 @@ AudioStreamView::setup_rec_box ()
/* add a new region, but don't bother if they set use_rec_regions mid-record */
- AudioRegion::SourceList sources;
+ SourceList sources;
for (list<sigc::connection>::iterator prc = rec_data_ready_connections.begin(); prc != rec_data_ready_connections.end(); ++prc) {
(*prc).disconnect();
@@ -402,7 +403,7 @@ AudioStreamView::setup_rec_box ()
assert(ads);
for (uint32_t n=0; n < ads->n_channels().get(DataType::AUDIO); ++n) {
- AudioSource *src = (AudioSource *) ads->write_source (n);
+ boost::shared_ptr<AudioFileSource> src = boost::static_pointer_cast<AudioFileSource> (ads->write_source (n));
if (src) {
sources.push_back (src);
rec_data_ready_connections.push_back (src->PeakRangeReady.connect (bind (mem_fun (*this, &AudioStreamView::rec_peak_range_ready), src)));
@@ -416,11 +417,12 @@ AudioStreamView::setup_rec_box ()
start = rec_regions.back()->start() + _trackview.get_diskstream()->get_captured_frames(rec_regions.size()-1);
}
- AudioRegion * region = new AudioRegion(sources, start, 1 , "", 0, (Region::Flag)(Region::DefaultFlags | Region::DoNotSaveState), false);
+ boost::shared_ptr<AudioRegion> region (boost::dynamic_pointer_cast<AudioRegion>
+ (RegionFactory::create (sources, start, 1 , "", 0, (Region::Flag)(Region::DefaultFlags | Region::DoNotSaveState), false)));
region->set_position (_trackview.session().transport_frame(), this);
rec_regions.push_back (region);
/* catch it if it goes away */
- region->GoingAway.connect (mem_fun (*this, &AudioStreamView::remove_rec_region));
+ region->GoingAway.connect (bind (mem_fun (*this, &AudioStreamView::remove_rec_region), region));
/* we add the region later */
}
@@ -501,23 +503,10 @@ AudioStreamView::setup_rec_box ()
last_rec_data_frame = 0;
/* remove temp regions */
- for (list<Region*>::iterator iter=rec_regions.begin(); iter != rec_regions.end(); )
- {
- list<Region*>::iterator tmp;
-
- tmp = iter;
- ++tmp;
-
- /* this will trigger the remove_region_view */
- delete *iter;
-
- iter = tmp;
- }
rec_regions.clear();
// cerr << "\tclear " << rec_rects.size() << " rec rects\n";
-
/* transport stopped, clear boxes */
for (vector<RecBoxInfo>::iterator iter=rec_rects.begin(); iter != rec_rects.end(); ++iter) {
@@ -540,7 +529,7 @@ AudioStreamView::foreach_crossfadeview (void (CrossfadeView::*pmf)(void))
}
void
-AudioStreamView::rec_peak_range_ready (jack_nframes_t start, jack_nframes_t cnt, Source * src)
+AudioStreamView::rec_peak_range_ready (jack_nframes_t start, jack_nframes_t cnt, boost::shared_ptr<Source> src)
{
// this is called from the peak building thread
@@ -565,9 +554,9 @@ AudioStreamView::update_rec_regions ()
uint32_t n = 0;
- for (list<Region*>::iterator iter = rec_regions.begin(); iter != rec_regions.end(); n++) {
+ for (list<boost::shared_ptr<Region> >::iterator iter = rec_regions.begin(); iter != rec_regions.end(); n++) {
- list<Region*>::iterator tmp;
+ list<boost::shared_ptr<Region> >::iterator tmp;
tmp = iter;
++tmp;
@@ -579,7 +568,7 @@ AudioStreamView::update_rec_regions ()
}
// FIXME
- AudioRegion * region = dynamic_cast<AudioRegion*>(*iter);
+ boost::shared_ptr<AudioRegion> region = boost::dynamic_pointer_cast<AudioRegion>(*iter);
assert(region);
jack_nframes_t origlen = region->length();
@@ -615,7 +604,7 @@ AudioStreamView::update_rec_regions ()
if (nlen != region->length()) {
- if (region->source(0).length() >= region->start() + nlen) {
+ if (region->source(0)->length() >= region->start() + nlen) {
region->freeze ();
region->set_position (_trackview.get_diskstream()->get_capture_start_frame(n), this);
diff --git a/gtk2_ardour/audio_streamview.h b/gtk2_ardour/audio_streamview.h
index cf66637b9b..242b97f840 100644
--- a/gtk2_ardour/audio_streamview.h
+++ b/gtk2_ardour/audio_streamview.h
@@ -76,13 +76,13 @@ class AudioStreamView : public StreamView
private:
void setup_rec_box ();
- void rec_peak_range_ready (jack_nframes_t start, jack_nframes_t cnt, ARDOUR::Source* src);
+ void rec_peak_range_ready (jack_nframes_t start, jack_nframes_t cnt, boost::shared_ptr<ARDOUR::Source> src);
void update_rec_regions ();
- void add_region_view_internal (ARDOUR::Region*, bool wait_for_waves);
- void remove_region_view (ARDOUR::Region* );
- void remove_audio_region_view (ARDOUR::AudioRegion* );
- void remove_audio_rec_region (ARDOUR::AudioRegion*);
+ void add_region_view_internal (boost::shared_ptr<ARDOUR::Region>, bool wait_for_waves);
+ void remove_region_view (boost::shared_ptr<ARDOUR::Region> );
+ void remove_audio_region_view (boost::shared_ptr<ARDOUR::AudioRegion> );
+ void remove_audio_rec_region (boost::shared_ptr<ARDOUR::AudioRegion>);
void undisplay_diskstream ();
void redisplay_diskstream ();
diff --git a/gtk2_ardour/automation_line.h b/gtk2_ardour/automation_line.h
index ec86b7455f..f8262d2a2d 100644
--- a/gtk2_ardour/automation_line.h
+++ b/gtk2_ardour/automation_line.h
@@ -30,7 +30,9 @@
#include <sigc++/signal.h>
#include "canvas.h"
#include "simplerect.h"
+
#include <pbd/undo.h>
+#include <pbd/statefuldestructible.h>
#include <ardour/automation_event.h>
@@ -94,7 +96,7 @@ class ControlPoint
ShapeType _shape;
};
-class AutomationLine : public sigc::trackable, public Stateful
+class AutomationLine : public sigc::trackable, public PBD::StatefulDestructible
{
public:
AutomationLine (const string & name, TimeAxisView&, ArdourCanvas::Group&, ARDOUR::AutomationList&);
diff --git a/gtk2_ardour/crossfade_edit.cc b/gtk2_ardour/crossfade_edit.cc
index c56f51fcfa..888eecdba2 100644
--- a/gtk2_ardour/crossfade_edit.cc
+++ b/gtk2_ardour/crossfade_edit.cc
@@ -36,6 +36,7 @@
#include <ardour/audioplaylist.h>
#include <ardour/audiosource.h>
#include <ardour/playlist_templates.h>
+#include <ardour/region_factory.h>
#include <gtkmm2ext/gtk_ui.h>
@@ -590,7 +591,7 @@ CrossfadeEditor::canvas_allocation (Gtk::Allocation& alloc)
vector<ArdourCanvas::WaveView*>::iterator i;
uint32_t n;
- ht = canvas->get_allocation().get_height() / xfade.in().n_channels();
+ ht = canvas->get_allocation().get_height() / xfade.in()->n_channels();
for (n = 0, i = fade[In].waves.begin(); i != fade[In].waves.end(); ++i, ++n) {
double yoff;
@@ -602,7 +603,7 @@ CrossfadeEditor::canvas_allocation (Gtk::Allocation& alloc)
(*i)->property_samples_per_unit() = spu;
}
- ht = canvas->get_allocation().get_height() / xfade.out().n_channels();
+ ht = canvas->get_allocation().get_height() / xfade.out()->n_channels();
for (n = 0, i = fade[Out].waves.begin(); i != fade[Out].waves.end(); ++i, ++n) {
double yoff;
@@ -1015,10 +1016,10 @@ CrossfadeEditor::y_coordinate (double& yfract) const
}
void
-CrossfadeEditor::make_waves (AudioRegion& region, WhichFade which)
+CrossfadeEditor::make_waves (boost::shared_ptr<AudioRegion> region, WhichFade which)
{
gdouble ht;
- uint32_t nchans = region.n_channels();
+ uint32_t nchans = region->n_channels();
guint32 color;
double spu;
@@ -1035,11 +1036,10 @@ CrossfadeEditor::make_waves (AudioRegion& region, WhichFade which)
gdouble yoff = n * ht;
- if (region.audio_source(n).peaks_ready (bind (mem_fun(*this, &CrossfadeEditor::peaks_ready), &region, which), peaks_ready_connection)) {
-
+ if (region->audio_source(n)->peaks_ready (bind (mem_fun(*this, &CrossfadeEditor::peaks_ready), region, which), peaks_ready_connection)) {
WaveView* waveview = new WaveView (*(canvas->root()));
- waveview->property_data_src() = &region;
+ waveview->property_data_src() = region.get();
waveview->property_cache_updater() = true;
waveview->property_cache() = WaveView::create_cache();
waveview->property_channel() = n;
@@ -1064,14 +1064,14 @@ CrossfadeEditor::make_waves (AudioRegion& region, WhichFade which)
}
void
-CrossfadeEditor::peaks_ready (AudioRegion* r, WhichFade which)
+CrossfadeEditor::peaks_ready (boost::shared_ptr<AudioRegion> r, WhichFade which)
{
/* this should never be called, because the peak files for an xfade
will be ready by the time we want them. but our API forces us
to provide this, so ..
*/
peaks_ready_connection.disconnect ();
- make_waves (*r, which);
+ make_waves (r, which);
}
void
@@ -1097,29 +1097,29 @@ CrossfadeEditor::audition_both ()
postroll = 0;
}
- if ((left_start_offset = xfade.out().length() - xfade.length()) >= preroll) {
+ if ((left_start_offset = xfade.out()->length() - xfade.length()) >= preroll) {
left_start_offset -= preroll;
}
length = 0;
- if ((left_length = xfade.length()) < xfade.out().length() - left_start_offset) {
+ if ((left_length = xfade.length()) < xfade.out()->length() - left_start_offset) {
length += postroll;
}
right_length = xfade.length();
- if (xfade.in().length() - right_length < postroll) {
+ if (xfade.in()->length() - right_length < postroll) {
right_length += postroll;
}
- AudioRegion* left = new AudioRegion (xfade.out(), left_start_offset, left_length, "xfade out",
- 0, Region::DefaultFlags, false);
- AudioRegion* right = new AudioRegion (xfade.in(), 0, right_length, "xfade in",
- 0, Region::DefaultFlags, false);
+ boost::shared_ptr<AudioRegion> left (boost::dynamic_pointer_cast<AudioRegion> (RegionFactory::create (xfade.out(), left_start_offset, left_length, "xfade out",
+ 0, Region::DefaultFlags, false)));
+ boost::shared_ptr<AudioRegion> right (boost::dynamic_pointer_cast<AudioRegion> (RegionFactory::create (xfade.in(), 0, right_length, "xfade in",
+ 0, Region::DefaultFlags, false)));
- pl.add_region (*left, 0);
- pl.add_region (*right, 1+preroll);
+ pl.add_region (left, 0);
+ pl.add_region (right, 1+preroll);
/* there is only one ... */
@@ -1131,10 +1131,10 @@ CrossfadeEditor::audition_both ()
void
CrossfadeEditor::audition_left_dry ()
{
- AudioRegion* left = new AudioRegion (xfade.out(), xfade.out().length() - xfade.length(), xfade.length(), "xfade left",
- 0, Region::DefaultFlags, false);
+ boost::shared_ptr<AudioRegion> left (boost::dynamic_pointer_cast<AudioRegion> (RegionFactory::create (xfade.out(), xfade.out()->length() - xfade.length(), xfade.length(), "xfade left",
+ 0, Region::DefaultFlags, false)));
- session.audition_region (*left);
+ session.audition_region (left);
}
void
@@ -1142,13 +1142,13 @@ CrossfadeEditor::audition_left ()
{
AudioPlaylist& pl (session.the_auditioner()->prepare_playlist());
- AudioRegion* left = new AudioRegion (xfade.out(), xfade.out().length() - xfade.length(), xfade.length(), "xfade left",
- 0, Region::DefaultFlags, false);
- AudioRegion* right = new AudioRegion (xfade.in(), 0, xfade.length(), "xfade in",
- 0, Region::DefaultFlags, false);
+ boost::shared_ptr<AudioRegion> left (boost::dynamic_pointer_cast<AudioRegion> (RegionFactory::create (xfade.out(), xfade.out()->length() - xfade.length(), xfade.length(), "xfade left",
+ 0, Region::DefaultFlags, false)));
+ boost::shared_ptr<AudioRegion> right (boost::dynamic_pointer_cast<AudioRegion> (RegionFactory::create (xfade.in(), 0, xfade.length(), "xfade in",
+ 0, Region::DefaultFlags, false)));
- pl.add_region (*left, 0);
- pl.add_region (*right, 1);
+ pl.add_region (left, 0);
+ pl.add_region (right, 1);
right->set_muted (true);
@@ -1164,9 +1164,9 @@ CrossfadeEditor::audition_left ()
void
CrossfadeEditor::audition_right_dry ()
{
- AudioRegion* right = new AudioRegion (xfade.in(), 0, xfade.length(), "xfade in",
- 0, Region::DefaultFlags, false);
- session.audition_region (*right);
+ boost::shared_ptr<AudioRegion> right (boost::dynamic_pointer_cast<AudioRegion> (RegionFactory::create (xfade.in(), 0, xfade.length(), "xfade in",
+ 0, Region::DefaultFlags, false)));
+ session.audition_region (right);
}
void
@@ -1174,13 +1174,13 @@ CrossfadeEditor::audition_right ()
{
AudioPlaylist& pl (session.the_auditioner()->prepare_playlist());
- AudioRegion* left = new AudioRegion (xfade.out(), xfade.out().length() - xfade.length(), xfade.length(), "xfade out",
- 0, Region::DefaultFlags, false);
- AudioRegion* right = new AudioRegion (xfade.out(), 0, xfade.length(), "xfade out",
- 0, Region::DefaultFlags, false);
+ boost::shared_ptr<AudioRegion> left (boost::dynamic_pointer_cast<AudioRegion> (RegionFactory::create (xfade.out(), xfade.out()->length() - xfade.length(), xfade.length(), "xfade out",
+ 0, Region::DefaultFlags, false)));
+ boost::shared_ptr<AudioRegion> right (boost::dynamic_pointer_cast<AudioRegion> (RegionFactory::create (xfade.out(), 0, xfade.length(), "xfade out",
+ 0, Region::DefaultFlags, false)));
- pl.add_region (*left, 0);
- pl.add_region (*right, 1);
+ pl.add_region (left, 0);
+ pl.add_region (right, 1);
left->set_muted (true);
diff --git a/gtk2_ardour/crossfade_edit.h b/gtk2_ardour/crossfade_edit.h
index b156ee69fe..ad0661c036 100644
--- a/gtk2_ardour/crossfade_edit.h
+++ b/gtk2_ardour/crossfade_edit.h
@@ -162,8 +162,8 @@ class CrossfadeEditor : public ArdourDialog
sigc::connection peaks_ready_connection;
- void make_waves (ARDOUR::AudioRegion&, WhichFade);
- void peaks_ready (ARDOUR::AudioRegion* r, WhichFade);
+ void make_waves (boost::shared_ptr<ARDOUR::AudioRegion>, WhichFade);
+ void peaks_ready (boost::shared_ptr<ARDOUR::AudioRegion> r, WhichFade);
void _apply_to (ARDOUR::Crossfade* xf);
void setup (ARDOUR::Crossfade*);
diff --git a/gtk2_ardour/crossfade_view.cc b/gtk2_ardour/crossfade_view.cc
index 087af25e73..49fe40ca63 100644
--- a/gtk2_ardour/crossfade_view.cc
+++ b/gtk2_ardour/crossfade_view.cc
@@ -227,7 +227,7 @@ CrossfadeView::set_valid (bool yn)
AudioRegionView&
CrossfadeView::upper_regionview () const
{
- if (left_view.region().layer() > right_view.region().layer()) {
+ if (left_view.region()->layer() > right_view.region()->layer()) {
return left_view;
} else {
return right_view;
diff --git a/gtk2_ardour/editor.cc b/gtk2_ardour/editor.cc
index eceaf24d38..da248c828c 100644
--- a/gtk2_ardour/editor.cc
+++ b/gtk2_ardour/editor.cc
@@ -246,7 +246,6 @@ Editor::Editor (AudioEngine& eng)
latest_regionview = 0;
last_update_frame = 0;
drag_info.item = 0;
- last_audition_region = 0;
current_mixer_strip = 0;
current_bbt_points = 0;
@@ -1169,7 +1168,7 @@ Editor::connect_to_session (Session *t)
update_title ();
- session->going_away.connect (mem_fun(*this, &Editor::session_going_away));
+ session->GoingAway.connect (mem_fun(*this, &Editor::session_going_away));
/* These signals can all be emitted by a non-GUI thread. Therefore the
handlers for them must not attempt to directly interact with the GUI,
@@ -1399,13 +1398,14 @@ Editor::popup_fade_context_menu (int button, int32_t time, ArdourCanvas::Item* i
}
MenuList& items (fade_context_menu.items());
+ AudioRegion& ar (*arv->audio_region().get()); // FIXME
items.clear ();
switch (item_type) {
case FadeInItem:
case FadeInHandleItem:
- if (arv->audio_region().fade_in_active()) {
+ if (arv->audio_region()->fade_in_active()) {
items.push_back (MenuElem (_("Deactivate"), bind (mem_fun (*arv, &AudioRegionView::set_fade_in_active), false)));
} else {
items.push_back (MenuElem (_("Activate"), bind (mem_fun (*arv, &AudioRegionView::set_fade_in_active), true)));
@@ -1413,16 +1413,16 @@ Editor::popup_fade_context_menu (int button, int32_t time, ArdourCanvas::Item* i
items.push_back (SeparatorElem());
- items.push_back (MenuElem (_("Linear"), bind (mem_fun (arv->audio_region(), &AudioRegion::set_fade_in_shape), AudioRegion::Linear)));
- items.push_back (MenuElem (_("Slowest"), bind (mem_fun (arv->audio_region(), &AudioRegion::set_fade_in_shape), AudioRegion::LogB)));
- items.push_back (MenuElem (_("Slow"), bind (mem_fun (arv->audio_region(), &AudioRegion::set_fade_in_shape), AudioRegion::Fast)));
- items.push_back (MenuElem (_("Fast"), bind (mem_fun (arv->audio_region(), &AudioRegion::set_fade_in_shape), AudioRegion::LogA)));
- items.push_back (MenuElem (_("Fastest"), bind (mem_fun (arv->audio_region(), &AudioRegion::set_fade_in_shape), AudioRegion::Slow)));
+ items.push_back (MenuElem (_("Linear"), bind (mem_fun (ar, &AudioRegion::set_fade_in_shape), AudioRegion::Linear)));
+ items.push_back (MenuElem (_("Slowest"), bind (mem_fun (ar, &AudioRegion::set_fade_in_shape), AudioRegion::LogB)));
+ items.push_back (MenuElem (_("Slow"), bind (mem_fun (ar, &AudioRegion::set_fade_in_shape), AudioRegion::Fast)));
+ items.push_back (MenuElem (_("Fast"), bind (mem_fun (ar, &AudioRegion::set_fade_in_shape), AudioRegion::LogA)));
+ items.push_back (MenuElem (_("Fastest"), bind (mem_fun (ar, &AudioRegion::set_fade_in_shape), AudioRegion::Slow)));
break;
case FadeOutItem:
case FadeOutHandleItem:
- if (arv->audio_region().fade_out_active()) {
+ if (arv->audio_region()->fade_out_active()) {
items.push_back (MenuElem (_("Deactivate"), bind (mem_fun (*arv, &AudioRegionView::set_fade_out_active), false)));
} else {
items.push_back (MenuElem (_("Activate"), bind (mem_fun (*arv, &AudioRegionView::set_fade_out_active), true)));
@@ -1430,11 +1430,11 @@ Editor::popup_fade_context_menu (int button, int32_t time, ArdourCanvas::Item* i
items.push_back (SeparatorElem());
- items.push_back (MenuElem (_("Linear"), bind (mem_fun (arv->audio_region(), &AudioRegion::set_fade_out_shape), AudioRegion::Linear)));
- items.push_back (MenuElem (_("Slowest"), bind (mem_fun (arv->audio_region(), &AudioRegion::set_fade_out_shape), AudioRegion::Fast)));
- items.push_back (MenuElem (_("Slow"), bind (mem_fun (arv->audio_region(), &AudioRegion::set_fade_out_shape), AudioRegion::LogB)));
- items.push_back (MenuElem (_("Fast"), bind (mem_fun (arv->audio_region(), &AudioRegion::set_fade_out_shape), AudioRegion::LogA)));
- items.push_back (MenuElem (_("Fastest"), bind (mem_fun (arv->audio_region(), &AudioRegion::set_fade_out_shape), AudioRegion::Slow)));
+ items.push_back (MenuElem (_("Linear"), bind (mem_fun (ar, &AudioRegion::set_fade_out_shape), AudioRegion::Linear)));
+ items.push_back (MenuElem (_("Slowest"), bind (mem_fun (ar, &AudioRegion::set_fade_out_shape), AudioRegion::Fast)));
+ items.push_back (MenuElem (_("Slow"), bind (mem_fun (ar, &AudioRegion::set_fade_out_shape), AudioRegion::LogB)));
+ items.push_back (MenuElem (_("Fast"), bind (mem_fun (ar, &AudioRegion::set_fade_out_shape), AudioRegion::LogA)));
+ items.push_back (MenuElem (_("Fastest"), bind (mem_fun (ar, &AudioRegion::set_fade_out_shape), AudioRegion::Slow)));
break;
default:
@@ -1501,7 +1501,7 @@ Editor::popup_track_context_menu (int button, int32_t time, ItemType item_type,
case RegionViewNameHighlight:
if (!with_selection) {
if (region_edit_menu_split_item) {
- if (clicked_regionview && clicked_regionview->region().covers (edit_cursor->current_frame)) {
+ if (clicked_regionview && clicked_regionview->region()->covers (edit_cursor->current_frame)) {
ActionManager::set_sensitive (ActionManager::edit_cursor_in_region_sensitive_actions, true);
} else {
ActionManager::set_sensitive (ActionManager::edit_cursor_in_region_sensitive_actions, false);
@@ -1736,9 +1736,9 @@ Editor::add_crossfade_context_items (AudioStreamView* view, Crossfade* xfade, Me
}
if (many) {
- str = xfade->out().name();
+ str = xfade->out()->name();
str += "->";
- str += xfade->in().name();
+ str += xfade->in()->name();
} else {
str = _("Crossfade");
}
@@ -1764,17 +1764,17 @@ Editor::xfade_edit_right_region ()
}
void
-Editor::add_region_context_items (AudioStreamView* sv, Region* region, Menu_Helpers::MenuList& edit_items)
+Editor::add_region_context_items (AudioStreamView* sv, boost::shared_ptr<Region> region, Menu_Helpers::MenuList& edit_items)
{
using namespace Menu_Helpers;
Menu *region_menu = manage (new Menu);
MenuList& items = region_menu->items();
region_menu->set_name ("ArdourContextMenu");
- AudioRegion* ar = 0;
+ boost::shared_ptr<AudioRegion> ar;
if (region) {
- ar = dynamic_cast<AudioRegion*> (region);
+ ar = boost::dynamic_pointer_cast<AudioRegion> (region);
}
/* when this particular menu pops up, make the relevant region
@@ -3015,10 +3015,10 @@ Editor::mapover_tracks (slot<void,RouteTimeAxisView&,uint32_t> sl)
void
Editor::mapped_set_selected_regionview_from_click (RouteTimeAxisView& tv, uint32_t ignored,
- RegionView* basis, vector<RegionView*>* all_equivs)
+ RegionView* basis, vector<RegionView*>* all_equivs)
{
Playlist* pl;
- vector<Region*> results;
+ vector<boost::shared_ptr<Region> > results;
RegionView* marv;
boost::shared_ptr<Diskstream> ds;
@@ -3037,8 +3037,8 @@ Editor::mapped_set_selected_regionview_from_click (RouteTimeAxisView& tv, uint32
pl->get_equivalent_regions (basis->region(), results);
}
- for (vector<Region*>::iterator ir = results.begin(); ir != results.end(); ++ir) {
- if ((marv = tv.view()->find_view (**ir)) != 0) {
+ for (vector<boost::shared_ptr<Region> >::iterator ir = results.begin(); ir != results.end(); ++ir) {
+ if ((marv = tv.view()->find_view (*ir)) != 0) {
all_equivs->push_back (marv);
}
}
@@ -3138,55 +3138,55 @@ Editor::set_selected_regionview_from_click (bool press, Selection::Operation op,
for (RegionSelection::iterator x = selection->regions.begin(); x != selection->regions.end(); ++x) {
if (&(*x)->get_time_axis_view() == &clicked_regionview->get_time_axis_view()) {
- if ((*x)->region().last_frame() > last_frame) {
- last_frame = (*x)->region().last_frame();
+ if ((*x)->region()->last_frame() > last_frame) {
+ last_frame = (*x)->region()->last_frame();
}
- if ((*x)->region().first_frame() < first_frame) {
- first_frame = (*x)->region().first_frame();
+ if ((*x)->region()->first_frame() < first_frame) {
+ first_frame = (*x)->region()->first_frame();
}
}
}
/* 2. figure out the boundaries for our search for new objects */
- switch (clicked_regionview->region().coverage (first_frame, last_frame)) {
+ switch (clicked_regionview->region()->coverage (first_frame, last_frame)) {
case OverlapNone:
cerr << "no overlap, first = " << first_frame << " last = " << last_frame << " region = "
- << clicked_regionview->region().first_frame() << " .. " << clicked_regionview->region().last_frame() << endl;
+ << clicked_regionview->region()->first_frame() << " .. " << clicked_regionview->region()->last_frame() << endl;
- if (last_frame < clicked_regionview->region().first_frame()) {
+ if (last_frame < clicked_regionview->region()->first_frame()) {
first_frame = last_frame;
- last_frame = clicked_regionview->region().last_frame();
+ last_frame = clicked_regionview->region()->last_frame();
} else {
last_frame = first_frame;
- first_frame = clicked_regionview->region().first_frame();
+ first_frame = clicked_regionview->region()->first_frame();
}
break;
case OverlapExternal:
cerr << "external overlap, first = " << first_frame << " last = " << last_frame << " region = "
- << clicked_regionview->region().first_frame() << " .. " << clicked_regionview->region().last_frame() << endl;
+ << clicked_regionview->region()->first_frame() << " .. " << clicked_regionview->region()->last_frame() << endl;
- if (last_frame < clicked_regionview->region().first_frame()) {
+ if (last_frame < clicked_regionview->region()->first_frame()) {
first_frame = last_frame;
- last_frame = clicked_regionview->region().last_frame();
+ last_frame = clicked_regionview->region()->last_frame();
} else {
last_frame = first_frame;
- first_frame = clicked_regionview->region().first_frame();
+ first_frame = clicked_regionview->region()->first_frame();
}
break;
case OverlapInternal:
cerr << "internal overlap, first = " << first_frame << " last = " << last_frame << " region = "
- << clicked_regionview->region().first_frame() << " .. " << clicked_regionview->region().last_frame() << endl;
+ << clicked_regionview->region()->first_frame() << " .. " << clicked_regionview->region()->last_frame() << endl;
- if (last_frame < clicked_regionview->region().first_frame()) {
+ if (last_frame < clicked_regionview->region()->first_frame()) {
first_frame = last_frame;
- last_frame = clicked_regionview->region().last_frame();
+ last_frame = clicked_regionview->region()->last_frame();
} else {
last_frame = first_frame;
- first_frame = clicked_regionview->region().first_frame();
+ first_frame = clicked_regionview->region()->first_frame();
}
break;
@@ -3233,7 +3233,7 @@ Editor::set_selected_regionview_from_click (bool press, Selection::Operation op,
}
void
-Editor::set_selected_regionview_from_region_list (Region& region, Selection::Operation op)
+Editor::set_selected_regionview_from_region_list (boost::shared_ptr<Region> region, Selection::Operation op)
{
vector<RegionView*> all_equivalent_regions;
@@ -3244,7 +3244,7 @@ Editor::set_selected_regionview_from_region_list (Region& region, Selection::Ope
if ((tatv = dynamic_cast<RouteTimeAxisView*> (*i)) != 0) {
Playlist* pl;
- vector<Region*> results;
+ vector<boost::shared_ptr<Region> > results;
RegionView* marv;
boost::shared_ptr<Diskstream> ds;
@@ -3257,8 +3257,8 @@ Editor::set_selected_regionview_from_region_list (Region& region, Selection::Ope
pl->get_region_list_equivalent_regions (region, results);
}
- for (vector<Region*>::iterator ir = results.begin(); ir != results.end(); ++ir) {
- if ((marv = tatv->view()->find_view (**ir)) != 0) {
+ for (vector<boost::shared_ptr<Region> >::iterator ir = results.begin(); ir != results.end(); ++ir) {
+ if ((marv = tatv->view()->find_view (*ir)) != 0) {
all_equivalent_regions.push_back (marv);
}
}
@@ -3285,17 +3285,17 @@ Editor::set_selected_regionview_from_region_list (Region& region, Selection::Ope
}
bool
-Editor::set_selected_regionview_from_map_event (GdkEventAny* ev, StreamView* sv, Region* r)
+Editor::set_selected_regionview_from_map_event (GdkEventAny* ev, StreamView* sv, boost::shared_ptr<Region> r)
{
RegionView* rv;
- Region* ar;
+ boost::shared_ptr<AudioRegion> ar;
- if ((ar = dynamic_cast<Region*> (r)) == 0) {
- return TRUE;
+ if ((ar = boost::dynamic_pointer_cast<AudioRegion> (r)) == 0) {
+ return true;
}
- if ((rv = sv->find_view (*ar)) == 0) {
- return TRUE;
+ if ((rv = sv->find_view (ar)) == 0) {
+ return true;
}
/* don't reset the selection if its something other than
@@ -3303,7 +3303,7 @@ Editor::set_selected_regionview_from_map_event (GdkEventAny* ev, StreamView* sv,
*/
if (selection->regions.size() > 1) {
- return TRUE;
+ return true;
}
begin_reversible_command (_("set selected regions"));
@@ -3312,7 +3312,7 @@ Editor::set_selected_regionview_from_map_event (GdkEventAny* ev, StreamView* sv,
commit_reversible_command () ;
- return TRUE;
+ return true;
}
void
@@ -3962,7 +3962,7 @@ bool
Editor::audio_region_selection_covers (jack_nframes_t where)
{
for (RegionSelection::iterator a = selection->regions.begin(); a != selection->regions.end(); ++a) {
- if ((*a)->region().covers (where)) {
+ if ((*a)->region()->covers (where)) {
return true;
}
}
diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h
index 970acdc3a9..34b3462228 100644
--- a/gtk2_ardour/editor.h
+++ b/gtk2_ardour/editor.h
@@ -155,9 +155,9 @@ class Editor : public PublicEditor
void scroll_timeaxis_to_imageframe_item(const TimeAxisViewItem* item) ;
TimeAxisView* get_named_time_axis(const string & name) ;
- void consider_auditioning (ARDOUR::Region&);
- void hide_a_region (ARDOUR::Region&);
- void remove_a_region (ARDOUR::Region&);
+ void consider_auditioning (boost::shared_ptr<ARDOUR::Region>);
+ void hide_a_region (boost::shared_ptr<ARDOUR::Region>);
+ void remove_a_region (boost::shared_ptr<ARDOUR::Region>);
/* option editor-access */
@@ -439,8 +439,8 @@ class Editor : public PublicEditor
bool set_selected_track_from_click (bool press, Selection::Operation op = Selection::Set, bool with_undo = true, bool no_remove=false);
bool set_selected_regionview_from_click (bool press, Selection::Operation op = Selection::Set, bool no_track_remove=false);
- void set_selected_regionview_from_region_list (ARDOUR::Region& region, Selection::Operation op = Selection::Set);
- bool set_selected_regionview_from_map_event (GdkEventAny*, StreamView*, ARDOUR::Region*);
+ void set_selected_regionview_from_region_list (boost::shared_ptr<ARDOUR::Region> region, Selection::Operation op = Selection::Set);
+ bool set_selected_regionview_from_map_event (GdkEventAny*, StreamView*, boost::shared_ptr<ARDOUR::Region>);
void collect_new_region_view (RegionView *);
Gtk::Menu track_context_menu;
@@ -462,7 +462,7 @@ class Editor : public PublicEditor
Gtk::Menu* build_track_selection_context_menu (jack_nframes_t);
void add_dstream_context_items (Gtk::Menu_Helpers::MenuList&);
void add_bus_context_items (Gtk::Menu_Helpers::MenuList&);
- void add_region_context_items (AudioStreamView*, ARDOUR::Region*, Gtk::Menu_Helpers::MenuList&);
+ void add_region_context_items (AudioStreamView*, boost::shared_ptr<ARDOUR::Region>, Gtk::Menu_Helpers::MenuList&);
void add_crossfade_context_items (AudioStreamView*, ARDOUR::Crossfade*, Gtk::Menu_Helpers::MenuList&, bool many);
void add_selection_context_items (Gtk::Menu_Helpers::MenuList&);
@@ -630,7 +630,7 @@ class Editor : public PublicEditor
void select_all_selectables_using_cursor (Cursor *, bool);
void select_all_selectables_between_cursors (Cursor *, Cursor *);
- ARDOUR::Region* find_next_region (jack_nframes_t, ARDOUR::RegionPoint, int32_t dir, TrackViewList&, TimeAxisView ** = 0);
+ boost::shared_ptr<ARDOUR::Region> find_next_region (jack_nframes_t, ARDOUR::RegionPoint, int32_t dir, TrackViewList&, TimeAxisView ** = 0);
vector<jack_nframes_t> region_boundary_cache;
void build_region_boundary_cache ();
@@ -698,7 +698,7 @@ class Editor : public PublicEditor
add (color_);
}
Gtk::TreeModelColumn<Glib::ustring> name;
- Gtk::TreeModelColumn<ARDOUR::Region*> region;
+ Gtk::TreeModelColumn<boost::shared_ptr<ARDOUR::Region> > region;
Gtk::TreeModelColumn<Gdk::Color> color_;
};
@@ -720,7 +720,7 @@ class Editor : public PublicEditor
bool region_list_display_button_press (GdkEventButton *);
bool region_list_display_button_release (GdkEventButton *);
void region_list_clear ();
- void region_list_selection_mapover (sigc::slot<void,ARDOUR::Region&>);
+ void region_list_selection_mapover (sigc::slot<void,boost::shared_ptr<ARDOUR::Region> >);
void build_region_list_menu ();
void show_region_list_display_context_menu (int button, int time);
@@ -832,14 +832,14 @@ class Editor : public PublicEditor
int ensure_cursor (jack_nframes_t* pos);
- void handle_new_region (ARDOUR::Region *);
- void handle_region_removed (ARDOUR::Region *);
- void add_region_to_region_display (ARDOUR::Region *);
- void region_hidden (ARDOUR::Region*);
+ void handle_new_region (boost::shared_ptr<ARDOUR::Region>);
+ void handle_region_removed (boost::shared_ptr<ARDOUR::Region>);
+ void add_region_to_region_display (boost::shared_ptr<ARDOUR::Region>);
+ void region_hidden (boost::shared_ptr<ARDOUR::Region>);
void redisplay_regions ();
- void insert_into_tmp_regionlist(ARDOUR::Region *);
+ void insert_into_tmp_regionlist(boost::shared_ptr<ARDOUR::Region>);
- list<ARDOUR::Region *> tmp_region_list;
+ list<boost::shared_ptr<ARDOUR::Region> > tmp_region_list;
void cut_copy (Editing::CutCopyOp);
void cut_copy_points (Editing::CutCopyOp);
@@ -862,13 +862,13 @@ class Editor : public PublicEditor
void split_region_at (jack_nframes_t);
void split_regions_at (jack_nframes_t, RegionSelection&);
void crop_region_to_selection ();
- void set_a_regions_sync_position (ARDOUR::Region&, jack_nframes_t);
+ void set_a_regions_sync_position (boost::shared_ptr<ARDOUR::Region>, jack_nframes_t);
void set_region_sync_from_edit_cursor ();
void remove_region_sync();
void align_selection (ARDOUR::RegionPoint, jack_nframes_t position);
void align_selection_relative (ARDOUR::RegionPoint point, jack_nframes_t position);
- void align_region (ARDOUR::Region&, ARDOUR::RegionPoint point, jack_nframes_t position);
- void align_region_internal (ARDOUR::Region&, ARDOUR::RegionPoint point, jack_nframes_t position);
+ void align_region (boost::shared_ptr<ARDOUR::Region>, ARDOUR::RegionPoint point, jack_nframes_t position);
+ void align_region_internal (boost::shared_ptr<ARDOUR::Region>, ARDOUR::RegionPoint point, jack_nframes_t position);
void remove_some_regions ();
void remove_clicked_region ();
void destroy_clicked_region ();
@@ -878,8 +878,8 @@ class Editor : public PublicEditor
void region_fill_selection ();
void region_fill_track ();
- void audition_playlist_region_standalone (ARDOUR::Region&);
- void audition_playlist_region_via_route (ARDOUR::Region&, ARDOUR::Route&);
+ void audition_playlist_region_standalone (boost::shared_ptr<ARDOUR::Region>);
+ void audition_playlist_region_via_route (boost::shared_ptr<ARDOUR::Region>, ARDOUR::Route&);
void split_multichannel_region();
void reverse_region ();
void normalize_region ();
@@ -906,7 +906,7 @@ class Editor : public PublicEditor
void keyboard_insert_region_list_selection ();
void region_from_selection ();
- void create_region_from_selection (std::vector<ARDOUR::AudioRegion*>&);
+ void create_region_from_selection (std::vector<boost::shared_ptr<ARDOUR::AudioRegion> >&);
bool region_renamed;
void rename_region ();
@@ -932,7 +932,7 @@ class Editor : public PublicEditor
void amplitude_zoom (gdouble scale);
void amplitude_zoom_step (bool in);
- void insert_region_list_drag (ARDOUR::AudioRegion&, int x, int y);
+ void insert_region_list_drag (boost::shared_ptr<ARDOUR::Region>, int x, int y);
void insert_region_list_selection (float times);
void add_external_audio_action (Editing::ImportMode);
@@ -943,7 +943,7 @@ class Editor : public PublicEditor
int import_sndfile (Glib::ustring path, Editing::ImportMode mode, ARDOUR::AudioTrack* track, jack_nframes_t& pos);
int embed_sndfile (Glib::ustring path, bool split, bool multiple_files, bool& check_sample_rate, Editing::ImportMode mode,
ARDOUR::AudioTrack* track, jack_nframes_t& pos, bool prompt);
- int finish_bringing_in_audio (ARDOUR::AudioRegion& region, uint32_t, uint32_t, ARDOUR::AudioTrack* track, jack_nframes_t& pos, Editing::ImportMode mode);
+ int finish_bringing_in_audio (boost::shared_ptr<ARDOUR::AudioRegion> region, uint32_t, uint32_t, ARDOUR::AudioTrack* track, jack_nframes_t& pos, Editing::ImportMode mode);
/* generic interthread progress window */
@@ -1026,7 +1026,7 @@ class Editor : public PublicEditor
bool have_pending_keyboard_selection;
jack_nframes_t pending_keyboard_selection_start;
- ARDOUR::Region* select_region_for_operation (int dir, TimeAxisView **tv);
+ boost::shared_ptr<ARDOUR::Region> select_region_for_operation (int dir, TimeAxisView **tv);
void extend_selection_to_end_of_region (bool next);
void extend_selection_to_start_of_region (bool previous);
@@ -1585,7 +1585,7 @@ class Editor : public PublicEditor
void export_range_markers ();
int write_region_selection(RegionSelection&);
- bool write_region (string path, ARDOUR::AudioRegion&);
+ bool write_region (string path, boost::shared_ptr<ARDOUR::AudioRegion>);
void export_region ();
void bounce_region_selection ();
void bounce_range_selection ();
@@ -1629,7 +1629,7 @@ class Editor : public PublicEditor
void instant_save ();
- ARDOUR::AudioRegion* last_audition_region;
+ boost::shared_ptr<ARDOUR::AudioRegion> last_audition_region;
/* freeze operations */
diff --git a/gtk2_ardour/editor_audio_import.cc b/gtk2_ardour/editor_audio_import.cc
index 2b704e7372..8efdca2dd4 100644
--- a/gtk2_ardour/editor_audio_import.cc
+++ b/gtk2_ardour/editor_audio_import.cc
@@ -31,6 +31,8 @@
#include <ardour/audio_track.h>
#include <ardour/audioplaylist.h>
#include <ardour/audiofilesource.h>
+#include <ardour/region_factory.h>
+#include <ardour/source_factory.h>
#include <pbd/memento_command.h>
#include "ardour_ui.h"
@@ -176,9 +178,8 @@ Editor::import_sndfile (Glib::ustring path, ImportMode mode, AudioTrack* track,
/* import thread finished - see if we should build a new track */
if (!import_status.new_regions.empty()) {
- AudioRegion* const aregion = dynamic_cast<AudioRegion*>(import_status.new_regions.front());
- assert(aregion);
- finish_bringing_in_audio (*aregion, aregion->n_channels(), aregion->n_channels(), track, pos, mode);
+ boost::shared_ptr<AudioRegion> region = boost::dynamic_pointer_cast<AudioRegion>(import_status.new_regions.front());
+ finish_bringing_in_audio (region, region->n_channels(), region->n_channels(), track, pos, mode);
}
track_canvas.get_window()->set_cursor (*current_canvas_cursor);
@@ -189,9 +190,9 @@ int
Editor::embed_sndfile (Glib::ustring path, bool split, bool multiple_files, bool& check_sample_rate, ImportMode mode,
AudioTrack* track, jack_nframes_t& pos, bool prompt)
{
- AudioFileSource *source = 0; /* keep g++ quiet */
- AudioRegion::SourceList sources;
- AudioRegion* region;
+ boost::shared_ptr<AudioFileSource> source;
+ SourceList sources;
+ boost::shared_ptr<AudioRegion> region;
string idspec;
string linked_path;
SoundFileInfo finfo;
@@ -269,7 +270,7 @@ Editor::embed_sndfile (Glib::ustring path, bool split, bool multiple_files, bool
idspec += string_compose(":%1", n);
try {
- source = AudioFileSource::create (idspec.c_str(), (mode == ImportAsTrack ? AudioFileSource::Destructive : AudioFileSource::Flag (0)));
+ source = boost::dynamic_pointer_cast<AudioFileSource> (SourceFactory::createReadable (DataType::AUDIO, idspec, (mode == ImportAsTrack ? AudioFileSource::Destructive : AudioFileSource::Flag (0))));
sources.push_back(source);
}
@@ -288,18 +289,18 @@ Editor::embed_sndfile (Glib::ustring path, bool split, bool multiple_files, bool
region_name = PBD::basename_nosuffix (path);
region_name += "-0";
- region = new AudioRegion (sources, 0, sources[0]->length(), region_name, 0,
- Region::Flag (Region::DefaultFlags|Region::WholeFile|Region::External));
+ region = boost::dynamic_pointer_cast<AudioRegion> (RegionFactory::create (sources, 0, sources[0]->length(), region_name, 0,
+ Region::Flag (Region::DefaultFlags|Region::WholeFile|Region::External)));
input_chan = finfo.channels;
-
+
if (session->get_output_auto_connect() & Session::AutoConnectMaster) {
output_chan = (session->master_out() ? session->master_out()->n_inputs().get(DataType::AUDIO) : input_chan);
} else {
output_chan = input_chan;
}
- finish_bringing_in_audio (*region, input_chan, output_chan, track, pos, mode);
+ finish_bringing_in_audio (region, input_chan, output_chan, track, pos, mode);
out:
track_canvas.get_window()->set_cursor (*current_canvas_cursor);
@@ -307,10 +308,8 @@ Editor::embed_sndfile (Glib::ustring path, bool split, bool multiple_files, bool
}
int
-Editor::finish_bringing_in_audio (AudioRegion& region, uint32_t in_chans, uint32_t out_chans, AudioTrack* track, jack_nframes_t& pos, ImportMode mode)
+Editor::finish_bringing_in_audio (boost::shared_ptr<AudioRegion> region, uint32_t in_chans, uint32_t out_chans, AudioTrack* track, jack_nframes_t& pos, ImportMode mode)
{
- AudioRegion* copy;
-
switch (mode) {
case ImportAsRegion:
/* relax, its been done */
@@ -320,14 +319,14 @@ Editor::finish_bringing_in_audio (AudioRegion& region, uint32_t in_chans, uint32
if (track) {
Playlist* playlist = track->diskstream()->playlist();
- AudioRegion* copy = new AudioRegion (region);
+ boost::shared_ptr<AudioRegion> copy (boost::dynamic_pointer_cast<AudioRegion> (RegionFactory::create (region)));
begin_reversible_command (_("insert sndfile"));
XMLNode &before = playlist->get_state();
- playlist->add_region (*copy, pos);
+ playlist->add_region (copy, pos);
session->add_command (new MementoCommand<Playlist>(*playlist, &before, &playlist->get_state()));
commit_reversible_command ();
- pos += region.length();
+ pos += region->length();
}
break;
@@ -335,8 +334,8 @@ Editor::finish_bringing_in_audio (AudioRegion& region, uint32_t in_chans, uint32
{
list<boost::shared_ptr<AudioTrack> > at (session->new_audio_track (in_chans, out_chans, Normal, 1));
if (!at.empty()) {
- copy = new AudioRegion (region);
- at.front()->diskstream()->playlist()->add_region (*copy, pos);
+ boost::shared_ptr<AudioRegion> copy (boost::dynamic_pointer_cast<AudioRegion> (RegionFactory::create (region)));
+ at.front()->diskstream()->playlist()->add_region (copy, pos);
}
break;
}
@@ -345,8 +344,8 @@ Editor::finish_bringing_in_audio (AudioRegion& region, uint32_t in_chans, uint32
{
list<boost::shared_ptr<AudioTrack> > at (session->new_audio_track (in_chans, out_chans, Destructive));
if (!at.empty()) {
- copy = new AudioRegion (region);
- at.front()->diskstream()->playlist()->add_region (*copy, pos);
+ boost::shared_ptr<AudioRegion> copy (boost::dynamic_pointer_cast<AudioRegion> (RegionFactory::create (region)));
+ at.front()->diskstream()->playlist()->add_region (copy, pos);
}
break;
}
diff --git a/gtk2_ardour/editor_canvas.cc b/gtk2_ardour/editor_canvas.cc
index 2f3aab1eb6..34ea808821 100644
--- a/gtk2_ardour/editor_canvas.cc
+++ b/gtk2_ardour/editor_canvas.cc
@@ -485,12 +485,9 @@ Editor::drop_regions (const RefPtr<Gdk::DragContext>& context,
for (uint32_t i = 0; i < sr->cnt; ++i) {
- Region* r = reinterpret_cast<Region*> (sr->ptr[i]);
-
- AudioRegion* ar = dynamic_cast<AudioRegion*>(r);
- if (ar) {
- insert_region_list_drag (*ar, x, y);
- }
+ boost::shared_ptr<Region> r (reinterpret_cast<Region*> (sr->ptr[i]));
+
+ insert_region_list_drag (r, x, y);
}
context->drag_finish (true, false, time);
diff --git a/gtk2_ardour/editor_canvas_events.cc b/gtk2_ardour/editor_canvas_events.cc
index c6b5d1e1c5..58f9deebbd 100644
--- a/gtk2_ardour/editor_canvas_events.cc
+++ b/gtk2_ardour/editor_canvas_events.cc
@@ -468,7 +468,7 @@ Editor::canvas_fade_out_handle_event (GdkEvent *event, ArdourCanvas::Item* item,
}
struct DescendingRegionLayerSorter {
- bool operator()(Region* a, Region* b) {
+ bool operator()(boost::shared_ptr<Region> a, boost::shared_ptr<Region> b) {
return a->layer() > b->layer();
}
};
@@ -522,7 +522,7 @@ Editor::canvas_crossfade_view_event (GdkEvent* event, ArdourCanvas::Item* item,
DescendingRegionLayerSorter cmp;
rl->sort (cmp);
- RegionView* rv = atv->view()->find_view (*rl->front());
+ RegionView* rv = atv->view()->find_view (rl->front());
/* proxy */
diff --git a/gtk2_ardour/editor_export_audio.cc b/gtk2_ardour/editor_export_audio.cc
index ec4727ad04..6c67a8fb0e 100644
--- a/gtk2_ardour/editor_export_audio.cc
+++ b/gtk2_ardour/editor_export_audio.cc
@@ -42,6 +42,8 @@
#include <ardour/audioregion.h>
#include <ardour/audioplaylist.h>
#include <ardour/chan_count.h>
+#include <ardour/source_factory.h>
+#include <ardour/audiofilesource.h>
#include "i18n.h"
@@ -93,12 +95,12 @@ Editor::export_region ()
return;
}
- ExportDialog* dialog = new ExportRegionDialog (*this, &clicked_regionview->region());
+ ExportDialog* dialog = new ExportRegionDialog (*this, clicked_regionview->region());
dialog->connect_to_session (session);
dialog->set_range (
- clicked_regionview->region().first_frame(),
- clicked_regionview->region().last_frame());
+ clicked_regionview->region()->first_frame(),
+ clicked_regionview->region()->last_frame());
dialog->start_export();
}
@@ -142,7 +144,7 @@ Editor::bounce_region_selection ()
{
for (RegionSelection::iterator i = selection->regions.begin(); i != selection->regions.end(); ++i) {
- Region& region ((*i)->region());
+ boost::shared_ptr<Region> region ((*i)->region());
RouteTimeAxisView* rtv = dynamic_cast<RouteTimeAxisView*>(&(*i)->get_time_axis_view());
Track* track = dynamic_cast<Track*>(rtv->route().get());
@@ -152,14 +154,14 @@ Editor::bounce_region_selection ()
itt.cancel = false;
itt.progress = 0.0f;
- track->bounce_range (region.position(), region.position() + region.length(), itt);
+ track->bounce_range (region->position(), region->position() + region->length(), itt);
}
}
bool
-Editor::write_region (string path, AudioRegion& region)
+Editor::write_region (string path, boost::shared_ptr<AudioRegion> region)
{
- AudioFileSource* fs;
+ boost::shared_ptr<AudioFileSource> fs;
const jack_nframes_t chunk_size = 4096;
jack_nframes_t to_read;
Sample buf[chunk_size];
@@ -167,14 +169,14 @@ Editor::write_region (string path, AudioRegion& region)
jack_nframes_t pos;
char s[PATH_MAX+1];
uint32_t cnt;
- vector<AudioFileSource *> sources;
+ vector<boost::shared_ptr<AudioFileSource> > sources;
uint32_t nchans;
- nchans = region.n_channels();
+ nchans = region->n_channels();
/* don't do duplicate of the entire source if that's what is going on here */
- if (region.start() == 0 && region.length() == region.source().length()) {
+ if (region->start() == 0 && region->length() == region->source()->length()) {
/* XXX should link(2) to create a new inode with "path" */
return true;
}
@@ -186,11 +188,11 @@ Editor::write_region (string path, AudioRegion& region)
for (cnt = 0; cnt < 999999; ++cnt) {
if (nchans == 1) {
snprintf (s, sizeof(s), "%s/%s_%" PRIu32 ".wav", session->sound_dir().c_str(),
- legalize_for_path(region.name()).c_str(), cnt);
+ legalize_for_path(region->name()).c_str(), cnt);
}
else {
snprintf (s, sizeof(s), "%s/%s_%" PRIu32 "-%" PRId32 ".wav", session->sound_dir().c_str(),
- legalize_for_path(region.name()).c_str(), cnt, n);
+ legalize_for_path(region->name()).c_str(), cnt, n);
}
path = s;
@@ -208,7 +210,7 @@ Editor::write_region (string path, AudioRegion& region)
try {
- fs = AudioFileSource::create (path);
+ fs = boost::dynamic_pointer_cast<AudioFileSource> (SourceFactory::createReadable (DataType::AUDIO, path, AudioFileSource::Flag (0)));
}
catch (failed_constructor& err) {
@@ -223,19 +225,19 @@ Editor::write_region (string path, AudioRegion& region)
}
- to_read = region.length();
- pos = region.position();
+ to_read = region->length();
+ pos = region->position();
while (to_read) {
jack_nframes_t this_time;
this_time = min (to_read, chunk_size);
- for (vector<AudioFileSource *>::iterator src=sources.begin(); src != sources.end(); ++src) {
+ for (vector<boost::shared_ptr<AudioFileSource> >::iterator src=sources.begin(); src != sources.end(); ++src) {
fs = (*src);
- if (region.read_at (buf, buf, gain_buffer, pos, this_time) != this_time) {
+ if (region->read_at (buf, buf, gain_buffer, pos, this_time) != this_time) {
break;
}
@@ -254,7 +256,7 @@ Editor::write_region (string path, AudioRegion& region)
time (&tnow);
now = localtime (&tnow);
- for (vector<AudioFileSource *>::iterator src = sources.begin(); src != sources.end(); ++src) {
+ for (vector<boost::shared_ptr<AudioFileSource> >::iterator src = sources.begin(); src != sources.end(); ++src) {
(*src)->update_header (0, *now, tnow);
}
@@ -262,10 +264,8 @@ Editor::write_region (string path, AudioRegion& region)
error_out:
- for (vector<AudioFileSource*>::iterator i = sources.begin(); i != sources.end(); ++i) {
-
+ for (vector<boost::shared_ptr<AudioFileSource> >::iterator i = sources.begin(); i != sources.end(); ++i) {
(*i)->mark_for_remove ();
- delete (*i);
}
return 0;
@@ -305,7 +305,7 @@ Editor::write_audio_selection (TimeSelection& ts)
bool
Editor::write_audio_range (AudioPlaylist& playlist, const ChanCount& count, list<AudioRange>& range)
{
- AudioFileSource* fs;
+ boost::shared_ptr<AudioFileSource> fs;
const jack_nframes_t chunk_size = 4096;
jack_nframes_t nframes;
Sample buf[chunk_size];
@@ -314,7 +314,7 @@ Editor::write_audio_range (AudioPlaylist& playlist, const ChanCount& count, list
char s[PATH_MAX+1];
uint32_t cnt;
string path;
- vector<AudioFileSource *> sources;
+ vector<boost::shared_ptr<AudioFileSource> > sources;
uint32_t channels = count.get(DataType::AUDIO);
@@ -343,7 +343,7 @@ Editor::write_audio_range (AudioPlaylist& playlist, const ChanCount& count, list
path = s;
try {
- fs = AudioFileSource::create (path);
+ fs = boost::dynamic_pointer_cast<AudioFileSource> (SourceFactory::createReadable (DataType::AUDIO, path, AudioFileSource::Flag (0)));
}
catch (failed_constructor& err) {
@@ -426,9 +426,8 @@ Editor::write_audio_range (AudioPlaylist& playlist, const ChanCount& count, list
error_out:
/* unref created files */
- for (vector<AudioFileSource*>::iterator i = sources.begin(); i != sources.end(); ++i) {
+ for (vector<boost::shared_ptr<AudioFileSource> >::iterator i = sources.begin(); i != sources.end(); ++i) {
(*i)->mark_for_remove ();
- delete *i;
}
return false;
diff --git a/gtk2_ardour/editor_keyboard.cc b/gtk2_ardour/editor_keyboard.cc
index 95289c7f5a..e9ccd26f46 100644
--- a/gtk2_ardour/editor_keyboard.cc
+++ b/gtk2_ardour/editor_keyboard.cc
@@ -103,12 +103,12 @@ Editor::kbd_mute_unmute_region ()
{
if (entered_regionview) {
begin_reversible_command (_("mute region"));
- XMLNode &before = entered_regionview->region().playlist()->get_state();
+ XMLNode &before = entered_regionview->region()->playlist()->get_state();
- entered_regionview->region().set_muted (!entered_regionview->region().muted());
+ entered_regionview->region()->set_muted (!entered_regionview->region()->muted());
- XMLNode &after = entered_regionview->region().playlist()->get_state();
- session->add_command (new MementoCommand<ARDOUR::Playlist>(*(entered_regionview->region().playlist()), &before, &after));
+ XMLNode &after = entered_regionview->region()->playlist()->get_state();
+ session->add_command (new MementoCommand<ARDOUR::Playlist>(*(entered_regionview->region()->playlist()), &before, &after));
commit_reversible_command();
}
}
diff --git a/gtk2_ardour/editor_mixer.cc b/gtk2_ardour/editor_mixer.cc
index 0e50df2137..f9ce22ed4b 100644
--- a/gtk2_ardour/editor_mixer.cc
+++ b/gtk2_ardour/editor_mixer.cc
@@ -266,7 +266,6 @@ Editor::session_going_away ()
latest_regionview = 0;
last_update_frame = 0;
drag_info.item = 0;
- last_audition_region = 0;
last_canvas_frame = 0;
/* hide all tracks */
diff --git a/gtk2_ardour/editor_mouse.cc b/gtk2_ardour/editor_mouse.cc
index df2c1d101c..4a8853e320 100644
--- a/gtk2_ardour/editor_mouse.cc
+++ b/gtk2_ardour/editor_mouse.cc
@@ -1752,7 +1752,7 @@ Editor::start_fade_in_grab (ArdourCanvas::Item* item, GdkEvent* event)
AudioRegionView* arv = static_cast<AudioRegionView*>(drag_info.data);
- drag_info.pointer_frame_offset = drag_info.grab_frame - ((jack_nframes_t) arv->audio_region().fade_in().back()->when + arv->region().position());
+ drag_info.pointer_frame_offset = drag_info.grab_frame - ((jack_nframes_t) arv->audio_region()->fade_in().back()->when + arv->region()->position());
}
void
@@ -1773,17 +1773,17 @@ Editor::fade_in_drag_motion_callback (ArdourCanvas::Item* item, GdkEvent* event)
snap_to (pos);
}
- if (pos < (arv->region().position() + 64)) {
+ if (pos < (arv->region()->position() + 64)) {
fade_length = 64; // this should be a minimum defined somewhere
- } else if (pos > arv->region().last_frame()) {
- fade_length = arv->region().length();
+ } else if (pos > arv->region()->last_frame()) {
+ fade_length = arv->region()->length();
} else {
- fade_length = pos - arv->region().position();
+ fade_length = pos - arv->region()->position();
}
arv->reset_fade_in_shape_width (fade_length);
- show_verbose_duration_cursor (arv->region().position(), arv->region().position() + fade_length, 10);
+ show_verbose_duration_cursor (arv->region()->position(), arv->region()->position() + fade_length, 10);
drag_info.first_move = false;
}
@@ -1808,25 +1808,23 @@ Editor::fade_in_drag_finished_callback (ArdourCanvas::Item* item, GdkEvent* even
snap_to (pos);
}
- if (pos < (arv->region().position() + 64)) {
+ if (pos < (arv->region()->position() + 64)) {
fade_length = 64; // this should be a minimum defined somewhere
}
- else if (pos > arv->region().last_frame()) {
- fade_length = arv->region().length();
+ else if (pos > arv->region()->last_frame()) {
+ fade_length = arv->region()->length();
}
else {
- fade_length = pos - arv->region().position();
+ fade_length = pos - arv->region()->position();
}
begin_reversible_command (_("change fade in length"));
- XMLNode &before = arv->audio_region().get_state();
+ XMLNode &before = arv->audio_region()->get_state();
- arv->audio_region().set_fade_in_length (fade_length);
+ arv->audio_region()->set_fade_in_length (fade_length);
- XMLNode &after = arv->audio_region().get_state();
- session->add_command(new MementoCommand<ARDOUR::AudioRegion>(arv->audio_region(),
- &before,
- &after));
+ XMLNode &after = arv->audio_region()->get_state();
+ session->add_command(new MementoCommand<ARDOUR::AudioRegion>(*arv->audio_region().get(), &before, &after));
commit_reversible_command ();
fade_in_drag_motion_callback (item, event);
}
@@ -1847,7 +1845,7 @@ Editor::start_fade_out_grab (ArdourCanvas::Item* item, GdkEvent* event)
AudioRegionView* arv = static_cast<AudioRegionView*>(drag_info.data);
- drag_info.pointer_frame_offset = drag_info.grab_frame - (arv->region().length() - (jack_nframes_t) arv->audio_region().fade_out().back()->when + arv->region().position());
+ drag_info.pointer_frame_offset = drag_info.grab_frame - (arv->region()->length() - (jack_nframes_t) arv->audio_region()->fade_out().back()->when + arv->region()->position());
}
void
@@ -1868,19 +1866,19 @@ Editor::fade_out_drag_motion_callback (ArdourCanvas::Item* item, GdkEvent* event
snap_to (pos);
}
- if (pos > (arv->region().last_frame() - 64)) {
+ if (pos > (arv->region()->last_frame() - 64)) {
fade_length = 64; // this should really be a minimum fade defined somewhere
}
- else if (pos < arv->region().position()) {
- fade_length = arv->region().length();
+ else if (pos < arv->region()->position()) {
+ fade_length = arv->region()->length();
}
else {
- fade_length = arv->region().last_frame() - pos;
+ fade_length = arv->region()->last_frame() - pos;
}
arv->reset_fade_out_shape_width (fade_length);
- show_verbose_duration_cursor (arv->region().last_frame() - fade_length, arv->region().last_frame(), 10);
+ show_verbose_duration_cursor (arv->region()->last_frame() - fade_length, arv->region()->last_frame(), 10);
drag_info.first_move = false;
}
@@ -1905,23 +1903,23 @@ Editor::fade_out_drag_finished_callback (ArdourCanvas::Item* item, GdkEvent* eve
snap_to (pos);
}
- if (pos > (arv->region().last_frame() - 64)) {
+ if (pos > (arv->region()->last_frame() - 64)) {
fade_length = 64; // this should really be a minimum fade defined somewhere
}
- else if (pos < arv->region().position()) {
- fade_length = arv->region().length();
+ else if (pos < arv->region()->position()) {
+ fade_length = arv->region()->length();
}
else {
- fade_length = arv->region().last_frame() - pos;
+ fade_length = arv->region()->last_frame() - pos;
}
begin_reversible_command (_("change fade out length"));
- XMLNode &before = arv->region().get_state();
+ XMLNode &before = arv->region()->get_state();
- arv->audio_region().set_fade_out_length (fade_length);
+ arv->audio_region()->set_fade_out_length (fade_length);
- XMLNode &after = arv->region().get_state();
- session->add_command(new MementoCommand<ARDOUR::Region>(arv->region(), &before, &after));
+ XMLNode &after = arv->region()->get_state();
+ session->add_command(new MementoCommand<ARDOUR::Region>(*arv->region().get(), &before, &after));
commit_reversible_command ();
fade_out_drag_motion_callback (item, event);
@@ -2686,7 +2684,7 @@ Editor::start_region_grab (ArdourCanvas::Item* item, GdkEvent* event)
speed = tv->get_diskstream()->speed();
}
- drag_info.last_frame_position = (jack_nframes_t) (clicked_regionview->region().position() / speed);
+ drag_info.last_frame_position = (jack_nframes_t) (clicked_regionview->region()->position() / speed);
drag_info.pointer_frame_offset = drag_info.grab_frame - drag_info.last_frame_position;
drag_info.last_trackview = &clicked_regionview->get_time_axis_view();
// we want a move threshold
@@ -2719,7 +2717,7 @@ Editor::start_region_copy_grab (ArdourCanvas::Item* item, GdkEvent* event)
}
drag_info.last_trackview = &clicked_regionview->get_time_axis_view();
- drag_info.last_frame_position = (jack_nframes_t) (clicked_regionview->region().position() / speed);
+ drag_info.last_frame_position = (jack_nframes_t) (clicked_regionview->region()->position() / speed);
drag_info.pointer_frame_offset = drag_info.grab_frame - drag_info.last_frame_position;
// we want a move threshold
drag_info.want_move_threshold = true;
@@ -2750,7 +2748,7 @@ Editor::start_region_brush_grab (ArdourCanvas::Item* item, GdkEvent* event)
speed = tv->get_diskstream()->speed();
}
- drag_info.last_frame_position = (jack_nframes_t) (clicked_regionview->region().position() / speed);
+ drag_info.last_frame_position = (jack_nframes_t) (clicked_regionview->region()->position() / speed);
drag_info.pointer_frame_offset = drag_info.grab_frame - drag_info.last_frame_position;
drag_info.last_trackview = &clicked_regionview->get_time_axis_view();
// we want a move threshold
@@ -2795,7 +2793,7 @@ Editor::region_drag_motion_callback (ArdourCanvas::Item* item, GdkEvent* event)
rv = (*i);
- Playlist* to_playlist = rv->region().playlist();
+ Playlist* to_playlist = rv->region()->playlist();
RouteTimeAxisView* rtv = dynamic_cast<RouteTimeAxisView*>(&rv->get_time_axis_view());
insert_result = affected_playlists.insert (to_playlist);
@@ -2809,19 +2807,16 @@ Editor::region_drag_motion_callback (ArdourCanvas::Item* item, GdkEvent* event)
/* create a new region with the same name. */
- // FIXME: ew. need a (virtual) Region::duplicate() or something?
- Region* newregion = NULL;
- if (dynamic_cast<AudioRegion*>(&rv->region()))
- newregion = new AudioRegion (dynamic_cast<AudioRegion&>(rv->region()));
- else if (dynamic_cast<MidiRegion*>(&rv->region()))
- newregion = new MidiRegion (dynamic_cast<MidiRegion&>(rv->region()));
- assert(newregion);
+ boost::shared_ptr<Region> newregion;
+
+ newregion = RegionFactory::create (rv->region());
+ assert(newregion != 0);
/* if the original region was locked, we don't care */
newregion->set_locked (false);
- to_playlist->add_region (*newregion, (jack_nframes_t) (rv->region().position() * rtv->get_diskstream()->speed()));
+ to_playlist->add_region (newregion, (jack_nframes_t) (rv->region()->position() * rtv->get_diskstream()->speed()));
c.disconnect ();
@@ -3036,8 +3031,8 @@ Editor::region_drag_motion_callback (ArdourCanvas::Item* item, GdkEvent* event)
pending_region_position = drag_info.current_pointer_frame - drag_info.pointer_frame_offset;
- sync_offset = rv->region().sync_offset (sync_dir);
- sync_frame = rv->region().adjust_to_sync (pending_region_position);
+ sync_offset = rv->region()->sync_offset (sync_dir);
+ sync_frame = rv->region()->adjust_to_sync (pending_region_position);
/* we snap if the snap modifier is not enabled.
*/
@@ -3056,7 +3051,7 @@ Editor::region_drag_motion_callback (ArdourCanvas::Item* item, GdkEvent* event)
pending_region_position = 0;
}
- if (pending_region_position > max_frames - rv->region().length()) {
+ if (pending_region_position > max_frames - rv->region()->length()) {
pending_region_position = drag_info.last_frame_position;
}
@@ -3205,8 +3200,8 @@ Editor::region_drag_motion_callback (ArdourCanvas::Item* item, GdkEvent* event)
if (-x_delta > ix1) {
x_delta = -ix1;
}
- } else if ((x_delta > 0) &&(rv->region().last_frame() > max_frames - x_delta)) {
- x_delta = max_frames - rv->region().last_frame();
+ } else if ((x_delta > 0) &&(rv->region()->last_frame() > max_frames - x_delta)) {
+ x_delta = max_frames - rv->region()->last_frame();
}
if (drag_info.first_move) {
@@ -3305,7 +3300,7 @@ Editor::region_drag_finished_callback (ArdourCanvas::Item* item, GdkEvent* event
speed = atv->get_diskstream()->speed();
}
- regionview_x_movement = (drag_info.last_frame_position != (jack_nframes_t) (rv->region().position()/speed));
+ regionview_x_movement = (drag_info.last_frame_position != (jack_nframes_t) (rv->region()->position()/speed));
regionview_y_movement = (drag_info.last_trackview != &rv->get_time_axis_view());
//printf ("last_frame: %s position is %lu %g\n", rv->get_time_axis_view().name().c_str(), drag_info.last_frame_position, speed);
@@ -3350,7 +3345,7 @@ Editor::region_drag_finished_callback (ArdourCanvas::Item* item, GdkEvent* event
TimeAxisView* tvp2 = trackview_by_y_position (iy1);
RouteTimeAxisView* atv2 = dynamic_cast<RouteTimeAxisView*>(tvp2);
- from_playlist = (*i)->region().playlist();
+ from_playlist = (*i)->region()->playlist();
to_playlist = atv2->playlist();
/* the from_playlist was frozen in the "first_move" case
@@ -3385,20 +3380,20 @@ Editor::region_drag_finished_callback (ArdourCanvas::Item* item, GdkEvent* event
TimeAxisView* tvp2 = trackview_by_y_position (iy1);
RouteTimeAxisView* atv2 = dynamic_cast<RouteTimeAxisView*>(tvp2);
- from_playlist = (*i)->region().playlist();
+ from_playlist = (*i)->region()->playlist();
to_playlist = atv2->playlist();
latest_regionview = 0;
where = (jack_nframes_t) (unit_to_frame (ix1) * speed);
- Region* new_region = createRegion ((*i)->region());
+ boost::shared_ptr<Region> new_region (RegionFactory::create ((*i)->region()));
- from_playlist->remove_region (&((*i)->region()));
-
+ from_playlist->remove_region (((*i)->region()));
+
sigc::connection c = atv2->view()->RegionViewAdded.connect (mem_fun(*this, &Editor::collect_new_region_view));
- to_playlist->add_region (*new_region, where);
+ to_playlist->add_region (new_region, where);
c.disconnect ();
-
+
if (latest_regionview) {
selection->add (latest_regionview);
}
@@ -3412,7 +3407,7 @@ Editor::region_drag_finished_callback (ArdourCanvas::Item* item, GdkEvent* event
rv = (*i);
- if (rv->region().locked()) {
+ if (rv->region()->locked()) {
continue;
}
@@ -3434,14 +3429,14 @@ Editor::region_drag_finished_callback (ArdourCanvas::Item* item, GdkEvent* event
} else {
- where = rv->region().position();
+ where = rv->region()->position();
}
rv->get_time_axis_view().reveal_dependent_views (*rv);
/* no need to add an undo here, we did that when we added this playlist to motion_frozen playlists */
- rv->region().set_position (where, (void *) this);
+ rv->region()->set_position (where, (void *) this);
}
}
@@ -3614,7 +3609,7 @@ Editor::start_selection_grab (ArdourCanvas::Item* item, GdkEvent* event)
/* lets try to create new Region for the selection */
- vector<AudioRegion*> new_regions;
+ vector<boost::shared_ptr<AudioRegion> > new_regions;
create_region_from_selection (new_regions);
if (new_regions.empty()) {
@@ -3623,7 +3618,7 @@ Editor::start_selection_grab (ArdourCanvas::Item* item, GdkEvent* event)
/* XXX fix me one day to use all new regions */
- Region* region = new_regions.front();
+ boost::shared_ptr<Region> region (new_regions.front());
/* add it to the current stream/playlist.
@@ -3643,9 +3638,9 @@ Editor::start_selection_grab (ArdourCanvas::Item* item, GdkEvent* event)
Playlist* playlist = clicked_axisview->playlist();
- XMLNode *before = &(playlist->get_state());
- clicked_axisview->playlist()->add_region (*region, selection->time[clicked_selection].start);
- XMLNode *after = &(playlist->get_state());
+ XMLNode *before = &(playlist->get_state());
+ clicked_routeview->playlist()->add_region (region, selection->time[clicked_selection].start);
+ XMLNode *after = &(playlist->get_state());
session->add_command(new MementoCommand<Playlist>(*playlist, before, after));
commit_reversible_command ();
@@ -3669,7 +3664,7 @@ Editor::start_selection_grab (ArdourCanvas::Item* item, GdkEvent* event)
start_grab (event);
drag_info.last_trackview = clicked_axisview;
- drag_info.last_frame_position = latest_regionview->region().position();
+ drag_info.last_frame_position = latest_regionview->region()->position();
drag_info.pointer_frame_offset = drag_info.grab_frame - drag_info.last_frame_position;
show_verbose_time_cursor (drag_info.last_frame_position, 10);
@@ -3910,9 +3905,9 @@ Editor::start_trim (ArdourCanvas::Item* item, GdkEvent* event)
speed = tv->get_diskstream()->speed();
}
- jack_nframes_t region_start = (jack_nframes_t) (clicked_regionview->region().position() / speed);
- jack_nframes_t region_end = (jack_nframes_t) (clicked_regionview->region().last_frame() / speed);
- jack_nframes_t region_length = (jack_nframes_t) (clicked_regionview->region().length() / speed);
+ jack_nframes_t region_start = (jack_nframes_t) (clicked_regionview->region()->position() / speed);
+ jack_nframes_t region_end = (jack_nframes_t) (clicked_regionview->region()->last_frame() / speed);
+ jack_nframes_t region_length = (jack_nframes_t) (clicked_regionview->region()->length() / speed);
motion_frozen_playlists.clear();
@@ -4004,13 +3999,13 @@ Editor::trim_motion_callback (ArdourCanvas::Item* item, GdkEvent* event)
begin_reversible_command (trim_type);
for (list<RegionView*>::const_iterator i = selection->regions.by_layer().begin(); i != selection->regions.by_layer().end(); ++i) {
- (*i)->region().freeze ();
+ (*i)->region()->freeze ();
AudioRegionView* const arv = dynamic_cast<AudioRegionView*>(*i);
if (arv)
arv->temporarily_hide_envelope ();
- Playlist * pl = (*i)->region().playlist();
+ Playlist * pl = (*i)->region()->playlist();
insert_result = motion_frozen_playlists.insert (pl);
if (insert_result.second) {
session->add_command(new MementoCommand<Playlist>(*pl, &pl->get_state(), 0));
@@ -4026,7 +4021,7 @@ Editor::trim_motion_callback (ArdourCanvas::Item* item, GdkEvent* event)
switch (trim_op) {
case StartTrim:
- if ((left_direction == false) && (drag_info.current_pointer_frame <= rv->region().first_frame()/speed)) {
+ if ((left_direction == false) && (drag_info.current_pointer_frame <= rv->region()->first_frame()/speed)) {
break;
} else {
for (list<RegionView*>::const_iterator i = selection->regions.by_layer().begin(); i != selection->regions.by_layer().end(); ++i) {
@@ -4036,7 +4031,7 @@ Editor::trim_motion_callback (ArdourCanvas::Item* item, GdkEvent* event)
}
case EndTrim:
- if ((left_direction == true) && (drag_info.current_pointer_frame > (jack_nframes_t) (rv->region().last_frame()/speed))) {
+ if ((left_direction == true) && (drag_info.current_pointer_frame > (jack_nframes_t) (rv->region()->last_frame()/speed))) {
break;
} else {
for (list<RegionView*>::const_iterator i = selection->regions.by_layer().begin(); i != selection->regions.by_layer().end(); ++i) {
@@ -4064,10 +4059,10 @@ Editor::trim_motion_callback (ArdourCanvas::Item* item, GdkEvent* event)
switch (trim_op) {
case StartTrim:
- show_verbose_time_cursor((jack_nframes_t) (rv->region().position()/speed), 10);
+ show_verbose_time_cursor((jack_nframes_t) (rv->region()->position()/speed), 10);
break;
case EndTrim:
- show_verbose_time_cursor((jack_nframes_t) (rv->region().last_frame()/speed), 10);
+ show_verbose_time_cursor((jack_nframes_t) (rv->region()->last_frame()/speed), 10);
break;
case ContentsTrim:
show_verbose_time_cursor(drag_info.current_pointer_frame, 10);
@@ -4081,9 +4076,9 @@ Editor::trim_motion_callback (ArdourCanvas::Item* item, GdkEvent* event)
void
Editor::single_contents_trim (RegionView& rv, jack_nframes_t frame_delta, bool left_direction, bool swap_direction, bool obey_snap)
{
- Region& region (rv.region());
+ boost::shared_ptr<Region> region (rv.region());
- if (region.locked()) {
+ if (region->locked()) {
return;
}
@@ -4099,31 +4094,31 @@ Editor::single_contents_trim (RegionView& rv, jack_nframes_t frame_delta, bool l
if (left_direction) {
if (swap_direction) {
- new_bound = (jack_nframes_t) (region.position()/speed) + frame_delta;
+ new_bound = (jack_nframes_t) (region->position()/speed) + frame_delta;
} else {
- new_bound = (jack_nframes_t) (region.position()/speed) - frame_delta;
+ new_bound = (jack_nframes_t) (region->position()/speed) - frame_delta;
}
} else {
if (swap_direction) {
- new_bound = (jack_nframes_t) (region.position()/speed) - frame_delta;
+ new_bound = (jack_nframes_t) (region->position()/speed) - frame_delta;
} else {
- new_bound = (jack_nframes_t) (region.position()/speed) + frame_delta;
+ new_bound = (jack_nframes_t) (region->position()/speed) + frame_delta;
}
}
if (obey_snap) {
snap_to (new_bound);
}
- region.trim_start ((jack_nframes_t) (new_bound * speed), this);
+ region->trim_start ((jack_nframes_t) (new_bound * speed), this);
rv.region_changed (StartChanged);
}
void
Editor::single_start_trim (RegionView& rv, jack_nframes_t frame_delta, bool left_direction, bool obey_snap)
{
- Region& region (rv.region());
+ boost::shared_ptr<Region> region (rv.region());
- if (region.locked()) {
+ if (region->locked()) {
return;
}
@@ -4138,16 +4133,16 @@ Editor::single_start_trim (RegionView& rv, jack_nframes_t frame_delta, bool left
}
if (left_direction) {
- new_bound = (jack_nframes_t) (region.position()/speed) - frame_delta;
+ new_bound = (jack_nframes_t) (region->position()/speed) - frame_delta;
} else {
- new_bound = (jack_nframes_t) (region.position()/speed) + frame_delta;
+ new_bound = (jack_nframes_t) (region->position()/speed) + frame_delta;
}
if (obey_snap) {
snap_to (new_bound, (left_direction ? 0 : 1));
}
- region.trim_front ((jack_nframes_t) (new_bound * speed), this);
+ region->trim_front ((jack_nframes_t) (new_bound * speed), this);
rv.region_changed (Change (LengthChanged|PositionChanged|StartChanged));
}
@@ -4155,9 +4150,9 @@ Editor::single_start_trim (RegionView& rv, jack_nframes_t frame_delta, bool left
void
Editor::single_end_trim (RegionView& rv, jack_nframes_t frame_delta, bool left_direction, bool obey_snap)
{
- Region& region (rv.region());
+ boost::shared_ptr<Region> region (rv.region());
- if (region.locked()) {
+ if (region->locked()) {
return;
}
@@ -4172,15 +4167,15 @@ Editor::single_end_trim (RegionView& rv, jack_nframes_t frame_delta, bool left_d
}
if (left_direction) {
- new_bound = (jack_nframes_t) ((region.last_frame() + 1)/speed) - frame_delta;
+ new_bound = (jack_nframes_t) ((region->last_frame() + 1)/speed) - frame_delta;
} else {
- new_bound = (jack_nframes_t) ((region.last_frame() + 1)/speed) + frame_delta;
+ new_bound = (jack_nframes_t) ((region->last_frame() + 1)/speed) + frame_delta;
}
if (obey_snap) {
snap_to (new_bound);
}
- region.trim_end ((jack_nframes_t) (new_bound * speed), this);
+ region->trim_end ((jack_nframes_t) (new_bound * speed), this);
rv.region_changed (LengthChanged);
}
@@ -4236,10 +4231,10 @@ Editor::point_trim (GdkEvent* event)
for (list<RegionView*>::const_iterator i = selection->regions.by_layer().begin();
i != selection->regions.by_layer().end(); ++i)
{
- if (!(*i)->region().locked()) {
- Playlist *pl = (*i)->region().playlist();
+ if (!(*i)->region()->locked()) {
+ Playlist *pl = (*i)->region()->playlist();
XMLNode &before = pl->get_state();
- (*i)->region().trim_front (new_bound, this);
+ (*i)->region()->trim_front (new_bound, this);
XMLNode &after = pl->get_state();
session->add_command(new MementoCommand<Playlist>(*pl, &before, &after));
}
@@ -4247,10 +4242,10 @@ Editor::point_trim (GdkEvent* event)
} else {
- if (!rv->region().locked()) {
- Playlist *pl = rv->region().playlist();
+ if (!rv->region()->locked()) {
+ Playlist *pl = rv->region()->playlist();
XMLNode &before = pl->get_state();
- rv->region().trim_front (new_bound, this);
+ rv->region()->trim_front (new_bound, this);
XMLNode &after = pl->get_state();
session->add_command(new MementoCommand<Playlist>(*pl, &before, &after));
}
@@ -4267,10 +4262,10 @@ Editor::point_trim (GdkEvent* event)
for (list<RegionView*>::const_iterator i = selection->regions.by_layer().begin(); i != selection->regions.by_layer().end(); ++i)
{
- if (!(*i)->region().locked()) {
- Playlist *pl = (*i)->region().playlist();
+ if (!(*i)->region()->locked()) {
+ Playlist *pl = (*i)->region()->playlist();
XMLNode &before = pl->get_state();
- (*i)->region().trim_end (new_bound, this);
+ (*i)->region()->trim_end (new_bound, this);
XMLNode &after = pl->get_state();
session->add_command(new MementoCommand<Playlist>(*pl, &before, &after));
}
@@ -4278,10 +4273,10 @@ Editor::point_trim (GdkEvent* event)
} else {
- if (!rv->region().locked()) {
- Playlist *pl = rv->region().playlist();
+ if (!rv->region()->locked()) {
+ Playlist *pl = rv->region()->playlist();
XMLNode &before = pl->get_state();
- rv->region().trim_end (new_bound, this);
+ rv->region()->trim_end (new_bound, this);
XMLNode &after = pl->get_state();
session->add_command (new MementoCommand<Playlist>(*pl, &before, &after));
}
@@ -4298,15 +4293,15 @@ Editor::point_trim (GdkEvent* event)
void
Editor::thaw_region_after_trim (RegionView& rv)
{
- Region& region (rv.region());
+ boost::shared_ptr<Region> region (rv.region());
- if (region.locked()) {
+ if (region->locked()) {
return;
}
- region.thaw (_("trimmed region"));
- XMLNode &after = region.playlist()->get_state();
- session->add_command (new MementoCommand<Playlist>(*(region.playlist()), 0, &after));
+ region->thaw (_("trimmed region"));
+ XMLNode &after = region->playlist()->get_state();
+ session->add_command (new MementoCommand<Playlist>(*(region->playlist()), 0, &after));
AudioRegionView* arv = dynamic_cast<AudioRegionView*>(&rv);
if (arv)
@@ -4720,7 +4715,7 @@ Editor::mouse_rename_region (ArdourCanvas::Item* item, GdkEvent* event)
ArdourPrompter prompter (false);
prompter.set_prompt (_("Name for region:"));
- prompter.set_initial_text (clicked_regionview->region().name());
+ prompter.set_initial_text (clicked_regionview->region()->name());
prompter.add_button (_("Rename"), Gtk::RESPONSE_ACCEPT);
prompter.set_response_sensitive (Gtk::RESPONSE_ACCEPT, false);
prompter.show_all ();
@@ -4729,7 +4724,7 @@ Editor::mouse_rename_region (ArdourCanvas::Item* item, GdkEvent* event)
string str;
prompter.get_result(str);
if (str.length()) {
- clicked_regionview->region().set_name (str);
+ clicked_regionview->region()->set_name (str);
}
break;
}
@@ -4761,8 +4756,8 @@ Editor::time_fx_motion (ArdourCanvas::Item *item, GdkEvent* event)
return;
}
- if (drag_info.current_pointer_frame > rv->region().position()) {
- rv->get_time_axis_view().show_timestretch (rv->region().position(), drag_info.current_pointer_frame);
+ if (drag_info.current_pointer_frame > rv->region()->position()) {
+ rv->get_time_axis_view().show_timestretch (rv->region()->position(), drag_info.current_pointer_frame);
}
drag_info.last_pointer_frame = drag_info.current_pointer_frame;
@@ -4780,8 +4775,8 @@ Editor::end_time_fx (ArdourCanvas::Item* item, GdkEvent* event)
return;
}
- jack_nframes_t newlen = drag_info.last_pointer_frame - clicked_regionview->region().position();
- float percentage = (float) ((double) newlen - (double) clicked_regionview->region().length()) / ((double) newlen) * 100.0f;
+ jack_nframes_t newlen = drag_info.last_pointer_frame - clicked_regionview->region()->position();
+ float percentage = (float) ((double) newlen - (double) clicked_regionview->region()->length()) / ((double) newlen) * 100.0f;
begin_reversible_command (_("timestretch"));
@@ -4818,7 +4813,7 @@ Editor::mouse_brush_insert_region (RegionView* rv, jack_nframes_t pos)
/* don't brush a copy over the original */
- if (pos == rv->region().position()) {
+ if (pos == rv->region()->position()) {
return;
}
@@ -4832,7 +4827,7 @@ Editor::mouse_brush_insert_region (RegionView* rv, jack_nframes_t pos)
double speed = atv->get_diskstream()->speed();
XMLNode &before = playlist->get_state();
- playlist->add_region (*(new AudioRegion (arv->audio_region())), (jack_nframes_t) (pos * speed));
+ playlist->add_region (boost::dynamic_pointer_cast<AudioRegion> (RegionFactory::create (arv->audio_region())), (jack_nframes_t) (pos * speed));
XMLNode &after = playlist->get_state();
session->add_command(new MementoCommand<Playlist>(*playlist, &before, &after));
diff --git a/gtk2_ardour/editor_ops.cc b/gtk2_ardour/editor_ops.cc
index 2532222c0d..22eefabea8 100644
--- a/gtk2_ardour/editor_ops.cc
+++ b/gtk2_ardour/editor_ops.cc
@@ -203,7 +203,7 @@ Editor::split_regions_at (jack_nframes_t where, RegionSelection& regions)
tmp = a;
++tmp;
- Playlist* pl = (*a)->region().playlist();
+ Playlist* pl = (*a)->region()->playlist();
AudioRegionView* const arv = dynamic_cast<AudioRegionView*>(*a);
if (arv)
@@ -234,7 +234,7 @@ Editor::remove_clicked_region ()
begin_reversible_command (_("remove region"));
XMLNode &before = playlist->get_state();
- playlist->remove_region (&clicked_regionview->region());
+ playlist->remove_region (clicked_regionview->region());
XMLNode &after = playlist->get_state();
session->add_command(new MementoCommand<Playlist>(*playlist, &before, &after));
commit_reversible_command ();
@@ -273,24 +273,24 @@ Do you really want to destroy %1 ?"),
}
if (selected > 0) {
- list<Region*> r;
+ list<boost::shared_ptr<Region> > r;
for (RegionSelection::iterator i = selection->regions.begin(); i != selection->regions.end(); ++i) {
- r.push_back (&(*i)->region());
+ r.push_back ((*i)->region());
}
session->destroy_regions (r);
} else if (clicked_regionview) {
- session->destroy_region (&clicked_regionview->region());
+ session->destroy_region (clicked_regionview->region());
}
}
-Region *
+boost::shared_ptr<Region>
Editor::select_region_for_operation (int dir, TimeAxisView **tv)
{
RegionView* rv;
- Region *region;
+ boost::shared_ptr<Region> region;
jack_nframes_t start = 0;
if (selection->time.start () == selection->time.end_frame ()) {
@@ -298,18 +298,16 @@ Editor::select_region_for_operation (int dir, TimeAxisView **tv)
/* no current selection-> is there a selected regionview? */
if (selection->regions.empty()) {
- return 0;
+ return region;
}
}
- region = 0;
-
if (!selection->regions.empty()) {
rv = *(selection->regions.begin());
(*tv) = &rv->get_time_axis_view();
- region = &rv->region();
+ region = rv->region();
} else if (!selection->tracks.empty()) {
@@ -321,7 +319,7 @@ Editor::select_region_for_operation (int dir, TimeAxisView **tv)
Playlist *pl;
if ((pl = rtv->playlist()) == 0) {
- return 0;
+ return region;
}
region = pl->top_region_at (start);
@@ -335,7 +333,7 @@ void
Editor::extend_selection_to_end_of_region (bool next)
{
TimeAxisView *tv;
- Region *region;
+ boost::shared_ptr<Region> region;
jack_nframes_t start;
if ((region = select_region_for_operation (next ? 1 : 0, &tv)) == 0) {
@@ -363,7 +361,7 @@ void
Editor::extend_selection_to_start_of_region (bool previous)
{
TimeAxisView *tv;
- Region *region;
+ boost::shared_ptr<Region> region;
jack_nframes_t end;
if ((region = select_region_for_operation (previous ? -1 : 0, &tv)) == 0) {
@@ -401,18 +399,18 @@ Editor::nudge_forward (bool next)
begin_reversible_command (_("nudge forward"));
for (RegionSelection::iterator i = selection->regions.begin(); i != selection->regions.end(); ++i) {
- Region& r ((*i)->region());
+ boost::shared_ptr<Region> r ((*i)->region());
- distance = get_nudge_distance (r.position(), next_distance);
+ distance = get_nudge_distance (r->position(), next_distance);
if (next) {
distance = next_distance;
}
- XMLNode &before = r.playlist()->get_state();
- r.set_position (r.position() + distance, this);
- XMLNode &after = r.playlist()->get_state();
- session->add_command (new MementoCommand<Playlist>(*(r.playlist()), &before, &after));
+ XMLNode &before = r->playlist()->get_state();
+ r->set_position (r->position() + distance, this);
+ XMLNode &after = r->playlist()->get_state();
+ session->add_command (new MementoCommand<Playlist>(*(r->playlist()), &before, &after));
}
commit_reversible_command ();
@@ -436,23 +434,23 @@ Editor::nudge_backward (bool next)
begin_reversible_command (_("nudge forward"));
for (RegionSelection::iterator i = selection->regions.begin(); i != selection->regions.end(); ++i) {
- Region& r ((*i)->region());
+ boost::shared_ptr<Region> r ((*i)->region());
- distance = get_nudge_distance (r.position(), next_distance);
+ distance = get_nudge_distance (r->position(), next_distance);
if (next) {
distance = next_distance;
}
- XMLNode &before = r.playlist()->get_state();
+ XMLNode &before = r->playlist()->get_state();
- if (r.position() > distance) {
- r.set_position (r.position() - distance, this);
+ if (r->position() > distance) {
+ r->set_position (r->position() - distance, this);
} else {
- r.set_position (0, this);
+ r->set_position (0, this);
}
- XMLNode &after = r.playlist()->get_state();
- session->add_command(new MementoCommand<Playlist>(*(r.playlist()), &before, &after));
+ XMLNode &after = r->playlist()->get_state();
+ session->add_command(new MementoCommand<Playlist>(*(r->playlist()), &before, &after));
}
commit_reversible_command ();
@@ -483,12 +481,12 @@ Editor::nudge_forward_capture_offset ()
distance = session->worst_output_latency();
for (RegionSelection::iterator i = selection->regions.begin(); i != selection->regions.end(); ++i) {
- Region& r ((*i)->region());
+ boost::shared_ptr<Region> r ((*i)->region());
- XMLNode &before = r.playlist()->get_state();
- r.set_position (r.position() + distance, this);
- XMLNode &after = r.playlist()->get_state();
- session->add_command(new MementoCommand<Playlist>(*(r.playlist()), &before, &after));
+ XMLNode &before = r->playlist()->get_state();
+ r->set_position (r->position() + distance, this);
+ XMLNode &after = r->playlist()->get_state();
+ session->add_command(new MementoCommand<Playlist>(*(r->playlist()), &before, &after));
}
commit_reversible_command ();
@@ -510,17 +508,17 @@ Editor::nudge_backward_capture_offset ()
distance = session->worst_output_latency();
for (RegionSelection::iterator i = selection->regions.begin(); i != selection->regions.end(); ++i) {
- Region& r ((*i)->region());
+ boost::shared_ptr<Region> r ((*i)->region());
- XMLNode &before = r.playlist()->get_state();
+ XMLNode &before = r->playlist()->get_state();
- if (r.position() > distance) {
- r.set_position (r.position() - distance, this);
+ if (r->position() > distance) {
+ r->set_position (r->position() - distance, this);
} else {
- r.set_position (0, this);
+ r->set_position (0, this);
}
- XMLNode &after = r.playlist()->get_state();
- session->add_command(new MementoCommand<Playlist>(*(r.playlist()), &before, &after));
+ XMLNode &after = r->playlist()->get_state();
+ session->add_command(new MementoCommand<Playlist>(*(r->playlist()), &before, &after));
}
commit_reversible_command ();
@@ -547,7 +545,7 @@ Editor::build_region_boundary_cache ()
{
jack_nframes_t pos = 0;
RegionPoint point;
- Region *r;
+ boost::shared_ptr<Region> r;
TrackViewList tracks;
region_boundary_cache.clear ();
@@ -643,12 +641,12 @@ Editor::build_region_boundary_cache ()
}
}
-Region*
+boost::shared_ptr<Region>
Editor::find_next_region (jack_nframes_t frame, RegionPoint point, int32_t dir, TrackViewList& tracks, TimeAxisView **ontrack)
{
TrackViewList::iterator i;
jack_nframes_t closest = max_frames;
- Region* ret = 0;
+ boost::shared_ptr<Region> ret;
jack_nframes_t rpos = 0;
float track_speed;
@@ -658,8 +656,8 @@ Editor::find_next_region (jack_nframes_t frame, RegionPoint point, int32_t dir,
for (i = tracks.begin(); i != tracks.end(); ++i) {
jack_nframes_t distance;
- Region* r;
-
+ boost::shared_ptr<Region> r;
+
track_speed = 1.0f;
if ( (atav = dynamic_cast<AudioTimeAxisView*>(*i)) != 0 ) {
if (atav->get_diskstream()!=0)
@@ -708,7 +706,7 @@ Editor::find_next_region (jack_nframes_t frame, RegionPoint point, int32_t dir,
void
Editor::cursor_to_region_point (Cursor* cursor, RegionPoint point, int32_t dir)
{
- Region* r;
+ boost::shared_ptr<Region> r;
jack_nframes_t pos = cursor->current_frame;
if (!session) {
@@ -1326,9 +1324,9 @@ Editor::add_location_from_audio_region ()
}
RegionView* rv = *(selection->regions.begin());
- Region& region = rv->region();
+ boost::shared_ptr<Region> region = rv->region();
- Location *location = new Location (region.position(), region.last_frame(), region.name());
+ Location *location = new Location (region->position(), region->last_frame(), region->name());
session->begin_reversible_command (_("add marker"));
XMLNode &before = session->locations()->get_state();
session->locations()->add (location, true);
@@ -1459,10 +1457,10 @@ Editor::set_selection_from_audio_region ()
}
RegionView* rv = *(selection->regions.begin());
- Region& region = rv->region();
+ boost::shared_ptr<Region> region = rv->region();
begin_reversible_command (_("set selection from region"));
- selection->set (0, region.position(), region.last_frame());
+ selection->set (0, region->position(), region->last_frame());
commit_reversible_command ();
set_mouse_mode (Editing::MouseRange, false);
@@ -1793,7 +1791,7 @@ Editor::clear_locations ()
/* INSERT/REPLACE */
void
-Editor::insert_region_list_drag (AudioRegion& region, int x, int y)
+Editor::insert_region_list_drag (boost::shared_ptr<Region> region, int x, int y)
{
double wx, wy;
double cx, cy;
@@ -1834,7 +1832,7 @@ Editor::insert_region_list_drag (AudioRegion& region, int x, int y)
begin_reversible_command (_("insert dragged region"));
XMLNode &before = playlist->get_state();
- playlist->add_region (*(new AudioRegion (region)), where, 1.0);
+ playlist->add_region (RegionFactory::create (region), where, 1.0);
session->add_command(new MementoCommand<Playlist>(*playlist, &before, &playlist->get_state()));
commit_reversible_command ();
}
@@ -1866,11 +1864,11 @@ Editor::insert_region_list_selection (float times)
}
TreeModel::iterator i = region_list_display.get_selection()->get_selected();
- Region* region = (*i)[region_list_columns.region];
+ boost::shared_ptr<Region> region = (*i)[region_list_columns.region];
begin_reversible_command (_("insert region"));
XMLNode &before = playlist->get_state();
- playlist->add_region (*(createRegion (*region)), edit_cursor->current_frame, times);
+ playlist->add_region ((RegionFactory::create (region)), edit_cursor->current_frame, times);
session->add_command(new MementoCommand<Playlist>(*playlist, &before, &playlist->get_state()));
commit_reversible_command ();
}
@@ -1946,7 +1944,7 @@ Editor::play_selected_region ()
if (!selection->regions.empty()) {
RegionView *rv = *(selection->regions.begin());
- session->request_bounded_roll (rv->region().position(), rv->region().last_frame());
+ session->request_bounded_roll (rv->region()->position(), rv->region()->last_frame());
}
}
@@ -1959,7 +1957,7 @@ Editor::loop_selected_region ()
if ((tll = transport_loop_location()) != 0) {
- tll->set (rv->region().position(), rv->region().last_frame());
+ tll->set (rv->region()->position(), rv->region()->last_frame());
// enable looping, reposition and start rolling
@@ -2002,9 +2000,9 @@ void
Editor::toggle_region_mute ()
{
if (clicked_regionview) {
- clicked_regionview->region().set_muted (!clicked_regionview->region().muted());
+ clicked_regionview->region()->set_muted (!clicked_regionview->region()->muted());
} else if (!selection->regions.empty()) {
- bool yn = ! (*selection->regions.begin())->region().muted();
+ bool yn = ! (*selection->regions.begin())->region()->muted();
selection->foreach_region (&Region::set_muted, yn);
}
}
@@ -2013,9 +2011,9 @@ void
Editor::toggle_region_opaque ()
{
if (clicked_regionview) {
- clicked_regionview->region().set_opaque (!clicked_regionview->region().opaque());
+ clicked_regionview->region()->set_opaque (!clicked_regionview->region()->opaque());
} else if (!selection->regions.empty()) {
- bool yn = ! (*selection->regions.begin())->region().opaque();
+ bool yn = ! (*selection->regions.begin())->region()->opaque();
selection->foreach_region (&Region::set_opaque, yn);
}
}
@@ -2093,7 +2091,7 @@ Editor::rename_region ()
Main::run ();
if (region_renamed) {
- (*selection->regions.begin())->region().set_name (entry.get_text());
+ (*selection->regions.begin())->region()->set_name (entry.get_text());
redisplay_regions ();
}
}
@@ -2107,7 +2105,7 @@ Editor::rename_region_finished (bool status)
}
void
-Editor::audition_playlist_region_via_route (Region& region, Route& route)
+Editor::audition_playlist_region_via_route (boost::shared_ptr<Region> region, Route& route)
{
if (session->is_auditioning()) {
session->cancel_audition ();
@@ -2120,7 +2118,7 @@ Editor::audition_playlist_region_via_route (Region& region, Route& route)
route.set_solo (true, this);
- session->request_bounded_roll (region.position(), region.position() + region.length());
+ session->request_bounded_roll (region->position(), region->position() + region->length());
/* XXX how to unset the solo state ? */
}
@@ -2135,7 +2133,7 @@ Editor::audition_selected_region ()
}
void
-Editor::audition_playlist_region_standalone (Region& region)
+Editor::audition_playlist_region_standalone (boost::shared_ptr<Region> region)
{
session->audition_region (region);
}
@@ -2185,10 +2183,8 @@ Editor::region_from_selection ()
jack_nframes_t selection_cnt = end - start + 1;
for (TrackSelection::iterator i = selection->tracks.begin(); i != selection->tracks.end(); ++i) {
-
- AudioRegion *region;
- AudioRegion *current;
- Region* current_r;
+ boost::shared_ptr<AudioRegion> current;
+ boost::shared_ptr<Region> current_r;
Playlist *pl;
jack_nframes_t internal_start;
@@ -2202,18 +2198,18 @@ Editor::region_from_selection ()
continue;
}
- current = dynamic_cast<AudioRegion*> (current_r);
+ current = boost::dynamic_pointer_cast<AudioRegion> (current_r);
assert(current); // FIXME
if (current != 0) {
internal_start = start - current->position();
session->region_name (new_name, current->name(), true);
- region = new AudioRegion (*current, internal_start, selection_cnt, new_name);
+ boost::shared_ptr<Region> region (RegionFactory::create (current, internal_start, selection_cnt, new_name));
}
}
}
void
-Editor::create_region_from_selection (vector<AudioRegion *>& new_regions)
+Editor::create_region_from_selection (vector<boost::shared_ptr<AudioRegion> >& new_regions)
{
if (selection->time.empty() || selection->tracks.empty()) {
return;
@@ -2224,8 +2220,8 @@ Editor::create_region_from_selection (vector<AudioRegion *>& new_regions)
for (TrackSelection::iterator i = selection->tracks.begin(); i != selection->tracks.end(); ++i) {
- AudioRegion* current;
- Region* current_r;
+ boost::shared_ptr<AudioRegion> current;
+ boost::shared_ptr<Region> current_r;
Playlist* playlist;
jack_nframes_t internal_start;
string new_name;
@@ -2238,14 +2234,14 @@ Editor::create_region_from_selection (vector<AudioRegion *>& new_regions)
continue;
}
- if ((current = dynamic_cast<AudioRegion*>(current_r)) == 0) {
+ if ((current = boost::dynamic_pointer_cast<AudioRegion>(current_r)) == 0) {
continue;
}
internal_start = start - current->position();
session->region_name (new_name, current->name(), true);
- new_regions.push_back (new AudioRegion (*current, internal_start, end - start + 1, new_name));
+ new_regions.push_back (boost::dynamic_pointer_cast<AudioRegion> (RegionFactory::create (current, internal_start, end - start + 1, new_name)));
}
}
@@ -2256,11 +2252,11 @@ Editor::split_multichannel_region ()
AudioRegionView* clicked_arv = dynamic_cast<AudioRegionView*>(clicked_regionview);
- if (!clicked_arv || clicked_arv->audio_region().n_channels() < 2) {
+ if (!clicked_arv || clicked_arv->audio_region()->n_channels() < 2) {
return;
}
- clicked_arv->audio_region().separate_by_channel (*session, v);
+ clicked_arv->audio_region()->separate_by_channel (*session, v);
/* nothing else to do, really */
}
@@ -2416,7 +2412,7 @@ Editor::crop_region_to_selection ()
for (vector<Playlist*>::iterator i = playlists.begin(); i != playlists.end(); ++i) {
- Region *region;
+ boost::shared_ptr<Region> region;
start = selection->time.start();
@@ -2457,26 +2453,26 @@ Editor::region_fill_track ()
for (RegionSelection::iterator i = selection->regions.begin(); i != selection->regions.end(); ++i) {
- Region& region ((*i)->region());
+ boost::shared_ptr<Region> region ((*i)->region());
// FIXME
- AudioRegion* const ar = dynamic_cast<AudioRegion*>(&region);
+ boost::shared_ptr<AudioRegion> ar = boost::dynamic_pointer_cast<AudioRegion>(region);
assert(ar);
- Playlist* pl = region.playlist();
+ Playlist* pl = region->playlist();
- if (end <= region.last_frame()) {
+ if (end <= region->last_frame()) {
return;
}
- double times = (double) (end - region.last_frame()) / (double) region.length();
+ double times = (double) (end - region->last_frame()) / (double) region->length();
if (times == 0) {
return;
}
XMLNode &before = pl->get_state();
- pl->add_region (*(new AudioRegion (*ar)), ar->last_frame(), times);
+ pl->add_region (RegionFactory::create (ar), ar->last_frame(), times);
session->add_command (new MementoCommand<Playlist>(*pl, &before, &pl->get_state()));
}
@@ -2494,7 +2490,6 @@ Editor::region_fill_selection ()
return;
}
- Region *region;
Glib::RefPtr<TreeSelection> selected = region_list_display.get_selection();
@@ -2503,7 +2498,7 @@ Editor::region_fill_selection ()
}
TreeModel::iterator i = region_list_display.get_selection()->get_selected();
- region = (*i)[region_list_columns.region];
+ boost::shared_ptr<Region> region = (*i)[region_list_columns.region];
jack_nframes_t start = selection->time[clicked_selection].start;
jack_nframes_t end = selection->time[clicked_selection].end;
@@ -2526,7 +2521,7 @@ Editor::region_fill_selection ()
}
XMLNode &before = playlist->get_state();
- playlist->add_region (*(createRegion (*region)), start, times);
+ playlist->add_region (RegionFactory::create (region), start, times);
session->add_command (new MementoCommand<Playlist>(*playlist, &before, &playlist->get_state()));
}
@@ -2534,18 +2529,18 @@ Editor::region_fill_selection ()
}
void
-Editor::set_a_regions_sync_position (Region& region, jack_nframes_t position)
+Editor::set_a_regions_sync_position (boost::shared_ptr<Region> region, jack_nframes_t position)
{
- if (!region.covers (position)) {
+ if (!region->covers (position)) {
error << _("Programming error. that region doesn't cover that position") << __FILE__ << " +" << __LINE__ << endmsg;
return;
}
begin_reversible_command (_("set region sync position"));
- XMLNode &before = region.playlist()->get_state();
- region.set_sync_position (position);
- XMLNode &after = region.playlist()->get_state();
- session->add_command(new MementoCommand<Playlist>(*(region.playlist()), &before, &after));
+ XMLNode &before = region->playlist()->get_state();
+ region->set_sync_position (position);
+ XMLNode &after = region->playlist()->get_state();
+ session->add_command(new MementoCommand<Playlist>(*(region->playlist()), &before, &after));
commit_reversible_command ();
}
@@ -2556,17 +2551,17 @@ Editor::set_region_sync_from_edit_cursor ()
return;
}
- if (!clicked_regionview->region().covers (edit_cursor->current_frame)) {
+ if (!clicked_regionview->region()->covers (edit_cursor->current_frame)) {
error << _("Place the edit cursor at the desired sync point") << endmsg;
return;
}
- Region& region (clicked_regionview->region());
+ boost::shared_ptr<Region> region (clicked_regionview->region());
begin_reversible_command (_("set sync from edit cursor"));
- XMLNode &before = region.playlist()->get_state();
- region.set_sync_position (edit_cursor->current_frame);
- XMLNode &after = region.playlist()->get_state();
- session->add_command(new MementoCommand<Playlist>(*(region.playlist()), &before, &after));
+ XMLNode &before = region->playlist()->get_state();
+ region->set_sync_position (edit_cursor->current_frame);
+ XMLNode &after = region->playlist()->get_state();
+ session->add_command(new MementoCommand<Playlist>(*(region->playlist()), &before, &after));
commit_reversible_command ();
}
@@ -2574,12 +2569,12 @@ void
Editor::remove_region_sync ()
{
if (clicked_regionview) {
- Region& region (clicked_regionview->region());
+ boost::shared_ptr<Region> region (clicked_regionview->region());
begin_reversible_command (_("remove sync"));
- XMLNode &before = region.playlist()->get_state();
- region.clear_sync_position ();
- XMLNode &after = region.playlist()->get_state();
- session->add_command(new MementoCommand<Playlist>(*(region.playlist()), &before, &after));
+ XMLNode &before = region->playlist()->get_state();
+ region->clear_sync_position ();
+ XMLNode &after = region->playlist()->get_state();
+ session->add_command(new MementoCommand<Playlist>(*(region->playlist()), &before, &after));
commit_reversible_command ();
}
}
@@ -2592,10 +2587,10 @@ Editor::naturalize ()
}
begin_reversible_command (_("naturalize"));
for (RegionSelection::iterator i = selection->regions.begin(); i != selection->regions.end(); ++i) {
- XMLNode &before = (*i)->region().get_state();
- (*i)->region().move_to_natural_position (this);
- XMLNode &after = (*i)->region().get_state();
- session->add_command (new MementoCommand<Region>((*i)->region(), &before, &after));
+ XMLNode &before = (*i)->region()->get_state();
+ (*i)->region()->move_to_natural_position (this);
+ XMLNode &after = (*i)->region()->get_state();
+ session->add_command (new MementoCommand<Region>(*((*i)->region().get()), &before, &after));
}
commit_reversible_command ();
}
@@ -2614,7 +2609,7 @@ Editor::align_relative (RegionPoint what)
struct RegionSortByTime {
bool operator() (const RegionView* a, const RegionView* b) {
- return a->region().position() < b->region().position();
+ return a->region()->position() < b->region()->position();
}
};
@@ -2631,19 +2626,19 @@ Editor::align_selection_relative (RegionPoint point, jack_nframes_t position)
list<RegionView*> sorted;
selection->regions.by_position (sorted);
- Region& r ((*sorted.begin())->region());
+ boost::shared_ptr<Region> r ((*sorted.begin())->region());
switch (point) {
case Start:
- pos = r.first_frame ();
+ pos = r->first_frame ();
break;
case End:
- pos = r.last_frame();
+ pos = r->last_frame();
break;
case SyncPoint:
- pos = r.adjust_to_sync (r.first_frame());
+ pos = r->adjust_to_sync (r->first_frame());
break;
}
@@ -2659,18 +2654,18 @@ Editor::align_selection_relative (RegionPoint point, jack_nframes_t position)
for (RegionSelection::iterator i = selection->regions.begin(); i != selection->regions.end(); ++i) {
- Region& region ((*i)->region());
+ boost::shared_ptr<Region> region ((*i)->region());
- XMLNode &before = region.playlist()->get_state();
+ XMLNode &before = region->playlist()->get_state();
if (dir > 0) {
- region.set_position (region.position() + distance, this);
+ region->set_position (region->position() + distance, this);
} else {
- region.set_position (region.position() - distance, this);
+ region->set_position (region->position() - distance, this);
}
- XMLNode &after = region.playlist()->get_state();
- session->add_command(new MementoCommand<Playlist>(*(region.playlist()), &before, &after));
+ XMLNode &after = region->playlist()->get_state();
+ session->add_command(new MementoCommand<Playlist>(*(region->playlist()), &before, &after));
}
@@ -2694,7 +2689,7 @@ Editor::align_selection (RegionPoint point, jack_nframes_t position)
}
void
-Editor::align_region (Region& region, RegionPoint point, jack_nframes_t position)
+Editor::align_region (boost::shared_ptr<Region> region, RegionPoint point, jack_nframes_t position)
{
begin_reversible_command (_("align region"));
align_region_internal (region, point, position);
@@ -2702,28 +2697,28 @@ Editor::align_region (Region& region, RegionPoint point, jack_nframes_t position
}
void
-Editor::align_region_internal (Region& region, RegionPoint point, jack_nframes_t position)
+Editor::align_region_internal (boost::shared_ptr<Region> region, RegionPoint point, jack_nframes_t position)
{
- XMLNode &before = region.playlist()->get_state();
+ XMLNode &before = region->playlist()->get_state();
switch (point) {
case SyncPoint:
- region.set_position (region.adjust_to_sync (position), this);
+ region->set_position (region->adjust_to_sync (position), this);
break;
case End:
- if (position > region.length()) {
- region.set_position (position - region.length(), this);
+ if (position > region->length()) {
+ region->set_position (position - region->length(), this);
}
break;
case Start:
- region.set_position (position, this);
+ region->set_position (position, this);
break;
}
- XMLNode &after = region.playlist()->get_state();
- session->add_command(new MementoCommand<Playlist>(*(region.playlist()), &before, &after));
+ XMLNode &after = region->playlist()->get_state();
+ session->add_command(new MementoCommand<Playlist>(*(region->playlist()), &before, &after));
}
void
@@ -2733,7 +2728,7 @@ Editor::trim_region_to_edit_cursor ()
return;
}
- Region& region (clicked_regionview->region());
+ boost::shared_ptr<Region> region (clicked_regionview->region());
float speed = 1.0f;
AudioTimeAxisView *atav;
@@ -2745,10 +2740,10 @@ Editor::trim_region_to_edit_cursor ()
}
begin_reversible_command (_("trim to edit"));
- XMLNode &before = region.playlist()->get_state();
- region.trim_end( session_frame_to_track_frame(edit_cursor->current_frame, speed), this);
- XMLNode &after = region.playlist()->get_state();
- session->add_command(new MementoCommand<Playlist>(*(region.playlist()), &before, &after));
+ XMLNode &before = region->playlist()->get_state();
+ region->trim_end( session_frame_to_track_frame(edit_cursor->current_frame, speed), this);
+ XMLNode &after = region->playlist()->get_state();
+ session->add_command(new MementoCommand<Playlist>(*(region->playlist()), &before, &after));
commit_reversible_command ();
}
@@ -2759,7 +2754,7 @@ Editor::trim_region_from_edit_cursor ()
return;
}
- Region& region (clicked_regionview->region());
+ boost::shared_ptr<Region> region (clicked_regionview->region());
float speed = 1.0f;
AudioTimeAxisView *atav;
@@ -2771,10 +2766,10 @@ Editor::trim_region_from_edit_cursor ()
}
begin_reversible_command (_("trim to edit"));
- XMLNode &before = region.playlist()->get_state();
- region.trim_front ( session_frame_to_track_frame(edit_cursor->current_frame, speed), this);
- XMLNode &after = region.playlist()->get_state();
- session->add_command(new MementoCommand<Playlist>(*(region.playlist()), &before, &after));
+ XMLNode &before = region->playlist()->get_state();
+ region->trim_front ( session_frame_to_track_frame(edit_cursor->current_frame, speed), this);
+ XMLNode &after = region->playlist()->get_state();
+ session->add_command(new MementoCommand<Playlist>(*(region->playlist()), &before, &after));
commit_reversible_command ();
}
@@ -2999,10 +2994,10 @@ Editor::cut_copy_regions (CutCopyOp op)
pair<set<Playlist*>::iterator,bool> insert_result;
for (RegionSelection::iterator x = selection->regions.begin(); x != selection->regions.end(); ++x) {
- first_position = min ((*x)->region().position(), first_position);
+ first_position = min ((*x)->region()->position(), first_position);
if (op == Cut || op == Clear) {
- AudioPlaylist *pl = dynamic_cast<AudioPlaylist*>((*x)->region().playlist());
+ AudioPlaylist *pl = dynamic_cast<AudioPlaylist*>((*x)->region()->playlist());
if (pl) {
insert_result = freezelist.insert (pl);
if (insert_result.second) {
@@ -3015,7 +3010,7 @@ Editor::cut_copy_regions (CutCopyOp op)
for (RegionSelection::iterator x = selection->regions.begin(); x != selection->regions.end(); ) {
- AudioPlaylist *pl = dynamic_cast<AudioPlaylist*>((*x)->region().playlist());
+ AudioPlaylist *pl = dynamic_cast<AudioPlaylist*>((*x)->region()->playlist());
AudioPlaylist* npl;
RegionSelection::iterator tmp;
@@ -3035,23 +3030,23 @@ Editor::cut_copy_regions (CutCopyOp op)
}
// FIXME
- AudioRegion* const ar = dynamic_cast<AudioRegion*>(&(*x)->region());
+ boost::shared_ptr<AudioRegion> ar = boost::dynamic_pointer_cast<AudioRegion>((*x)->region());
switch (op) {
case Cut:
if (!ar) break;
- npl->add_region (*(new AudioRegion (*ar)), (*x)->region().position() - first_position);
- pl->remove_region (&((*x)->region()));
+ npl->add_region (RegionFactory::create (ar), (*x)->region()->position() - first_position);
+ pl->remove_region (((*x)->region()));
break;
case Copy:
if (!ar) break;
- npl->add_region (*(new AudioRegion (*ar)), (*x)->region().position() - first_position);
+ npl->add_region (RegionFactory::create (ar), (*x)->region()->position() - first_position);
break;
case Clear:
- pl->remove_region (&((*x)->region()));
+ pl->remove_region (((*x)->region()));
break;
}
}
@@ -3208,15 +3203,15 @@ Editor::duplicate_some_regions (RegionSelection& regions, float times)
for (RegionSelection::iterator i = sel.begin(); i != sel.end(); ++i) {
- Region& r ((*i)->region());
+ boost::shared_ptr<Region> r ((*i)->region());
TimeAxisView& tv = (*i)->get_time_axis_view();
AudioTimeAxisView* atv = dynamic_cast<AudioTimeAxisView*> (&tv);
sigc::connection c = atv->view()->RegionViewAdded.connect (mem_fun(*this, &Editor::collect_new_region_view));
- playlist = (*i)->region().playlist();
+ playlist = (*i)->region()->playlist();
XMLNode &before = playlist->get_state();
- playlist->duplicate (r, r.last_frame(), times);
+ playlist->duplicate (r, r->last_frame(), times);
session->add_command(new MementoCommand<Playlist>(*playlist, &before, &playlist->get_state()));
c.disconnect ();
@@ -3238,8 +3233,8 @@ Editor::duplicate_selection (float times)
}
Playlist *playlist;
- vector<AudioRegion*> new_regions;
- vector<AudioRegion*>::iterator ri;
+ vector<boost::shared_ptr<AudioRegion> > new_regions;
+ vector<boost::shared_ptr<AudioRegion> >::iterator ri;
create_region_from_selection (new_regions);
@@ -3256,7 +3251,7 @@ Editor::duplicate_selection (float times)
continue;
}
XMLNode &before = playlist->get_state();
- playlist->duplicate (**ri, selection->time[clicked_selection].end, times);
+ playlist->duplicate (*ri, selection->time[clicked_selection].end, times);
XMLNode &after = playlist->get_state();
session->add_command (new MementoCommand<Playlist>(*playlist, &before, &after));
@@ -3400,9 +3395,9 @@ Editor::normalize_region ()
AudioRegionView* const arv = dynamic_cast<AudioRegionView*>(*r);
if (!arv)
continue;
- XMLNode &before = arv->region().get_state();
- arv->audio_region().normalize_to (0.0f);
- session->add_command (new MementoCommand<Region>(arv->region(), &before, &arv->region().get_state()));
+ XMLNode &before = arv->region()->get_state();
+ arv->audio_region()->normalize_to (0.0f);
+ session->add_command (new MementoCommand<Region>(*(arv->region().get()), &before, &arv->region()->get_state()));
}
commit_reversible_command ();
@@ -3427,9 +3422,9 @@ Editor::denormalize_region ()
AudioRegionView* const arv = dynamic_cast<AudioRegionView*>(*r);
if (!arv)
continue;
- XMLNode &before = arv->region().get_state();
- arv->audio_region().set_scale_amplitude (1.0f);
- session->add_command (new MementoCommand<Region>(arv->region(), &before, &arv->region().get_state()));
+ XMLNode &before = arv->region()->get_state();
+ arv->audio_region()->set_scale_amplitude (1.0f);
+ session->add_command (new MementoCommand<Region>(*(arv->region().get()), &before, &arv->region()->get_state()));
}
commit_reversible_command ();
@@ -3464,17 +3459,17 @@ Editor::apply_filter (AudioFilter& filter, string command)
if (!arv)
continue;
- Playlist* playlist = arv->region().playlist();
+ Playlist* playlist = arv->region()->playlist();
RegionSelection::iterator tmp;
tmp = r;
++tmp;
- if (arv->audio_region().apply (filter) == 0) {
+ if (arv->audio_region()->apply (filter) == 0) {
XMLNode &before = playlist->get_state();
- playlist->replace_region (arv->region(), *(filter.results.front()), arv->region().position());
+ playlist->replace_region (arv->region(), filter.results.front(), arv->region()->position());
XMLNode &after = playlist->get_state();
session->add_command(new MementoCommand<Playlist>(*playlist, &before, &after));
} else {
@@ -3495,7 +3490,8 @@ void
Editor::region_selection_op (void (Region::*pmf)(void))
{
for (RegionSelection::iterator i = selection->regions.begin(); i != selection->regions.end(); ++i) {
- ((*i)->region().*pmf)();
+ Region* region = (*i)->region().get();
+ (region->*pmf)();
}
}
@@ -3504,7 +3500,8 @@ void
Editor::region_selection_op (void (Region::*pmf)(void*), void *arg)
{
for (RegionSelection::iterator i = selection->regions.begin(); i != selection->regions.end(); ++i) {
- ((*i)->region().*pmf)(arg);
+ Region* region = (*i)->region().get();
+ (region->*pmf)(arg);
}
}
@@ -3512,7 +3509,8 @@ void
Editor::region_selection_op (void (Region::*pmf)(bool), bool yn)
{
for (RegionSelection::iterator i = selection->regions.begin(); i != selection->regions.end(); ++i) {
- ((*i)->region().*pmf)(yn);
+ Region* region = (*i)->region().get();
+ (region->*pmf)(yn);
}
}
@@ -3563,6 +3561,6 @@ Editor::toggle_gain_envelope_active ()
for (RegionSelection::iterator i = selection->regions.begin(); i != selection->regions.end(); ++i) {
AudioRegionView* const arv = dynamic_cast<AudioRegionView*>(*i);
if (arv)
- arv->audio_region().set_envelope_active (true);
+ arv->audio_region()->set_envelope_active (true);
}
}
diff --git a/gtk2_ardour/editor_region_list.cc b/gtk2_ardour/editor_region_list.cc
index 7df91cfa4f..ccfa1c378a 100644
--- a/gtk2_ardour/editor_region_list.cc
+++ b/gtk2_ardour/editor_region_list.cc
@@ -48,14 +48,14 @@ using namespace Glib;
using namespace Editing;
void
-Editor::handle_region_removed (Region* region)
+Editor::handle_region_removed (boost::shared_ptr<Region> region)
{
ENSURE_GUI_THREAD (bind (mem_fun (*this, &Editor::handle_region_removed), region));
redisplay_regions ();
}
void
-Editor::handle_new_region (Region *region)
+Editor::handle_new_region (boost::shared_ptr<Region> region)
{
ENSURE_GUI_THREAD (bind (mem_fun (*this, &Editor::handle_new_region), region));
@@ -67,7 +67,7 @@ Editor::handle_new_region (Region *region)
}
void
-Editor::region_hidden (Region* r)
+Editor::region_hidden (boost::shared_ptr<Region> r)
{
ENSURE_GUI_THREAD(bind (mem_fun(*this, &Editor::region_hidden), r));
@@ -75,7 +75,7 @@ Editor::region_hidden (Region* r)
}
void
-Editor::add_region_to_region_display (Region *region)
+Editor::add_region_to_region_display (boost::shared_ptr<Region> region)
{
string str;
TreeModel::Row row;
@@ -96,7 +96,7 @@ Editor::add_region_to_region_display (Region *region)
parent = *(region_list_model->append());
parent[region_list_columns.name] = _("Hidden");
- parent[region_list_columns.region] = 0;
+ /// XXX FIX ME parent[region_list_columns.region]->reset ();
} else {
@@ -104,7 +104,7 @@ Editor::add_region_to_region_display (Region *region)
parent = *(region_list_model->insert(iter));
parent[region_list_columns.name] = _("Hidden");
- parent[region_list_columns.region] = 0;
+ /// XXX FIX ME parent[region_list_columns.region]->reset ();
} else {
parent = *iter;
@@ -120,11 +120,11 @@ Editor::add_region_to_region_display (Region *region)
set_color(c, rgba_from_style ("RegionListWholeFile", 0xff, 0, 0, 0, "fg", Gtk::STATE_NORMAL, false ));
row[region_list_columns.color_] = c;
- if (region->source().name()[0] == '/') { // external file
+ if (region->source()->name()[0] == '/') { // external file
if (region->whole_file()) {
str = ".../";
- str += PBD::basename_nosuffix (region->source().name());
+ str += PBD::basename_nosuffix (region->source()->name());
} else {
str = region->name();
@@ -151,11 +151,11 @@ Editor::add_region_to_region_display (Region *region)
for (i = rows.begin(); i != rows.end(); ++i) {
- Region* rr = (*i)[region_list_columns.region];
- AudioRegion* r = dynamic_cast<AudioRegion*>(rr);
+ boost::shared_ptr<Region> rr = (*i)[region_list_columns.region];
+ boost::shared_ptr<AudioRegion> r = boost::dynamic_pointer_cast<AudioRegion>(rr);
if (r && r->whole_file()) {
- if (region->source_equivalent (*r)) {
+ if (region->source_equivalent (r)) {
row = *(region_list_model->append ((*i).children()));
found_parent = true;
break;
@@ -200,13 +200,13 @@ Editor::region_list_selection_changed()
*/
if ((iter = region_list_model->get_iter (*i))) {
- set_selected_regionview_from_region_list (*((*iter)[region_list_columns.region]), Selection::Set);
+ set_selected_regionview_from_region_list (((*iter)[region_list_columns.region]), Selection::Set);
}
}
}
void
-Editor::insert_into_tmp_regionlist(Region* region)
+Editor::insert_into_tmp_regionlist(boost::shared_ptr<Region> region)
{
/* keep all whole files at the beginning */
@@ -232,7 +232,7 @@ Editor::redisplay_regions ()
tmp_region_list.clear();
session->foreach_region (this, &Editor::insert_into_tmp_regionlist);
- for (list<Region*>::iterator r = tmp_region_list.begin(); r != tmp_region_list.end(); ++r) {
+ for (list<boost::shared_ptr<Region> >::iterator r = tmp_region_list.begin(); r != tmp_region_list.end(); ++r) {
add_region_to_region_display (*r);
}
@@ -323,7 +323,7 @@ Editor::region_list_display_key_release (GdkEventKey* ev)
bool
Editor::region_list_display_button_press (GdkEventButton *ev)
{
- Region* region;
+ boost::shared_ptr<Region> region;
TreeIter iter;
TreeModel::Path path;
TreeViewColumn* column;
@@ -341,7 +341,7 @@ Editor::region_list_display_button_press (GdkEventButton *ev)
}
if (Keyboard::is_delete_event (ev)) {
- session->remove_region_from_region_list (*region);
+ session->remove_region_from_region_list (region);
return true;
}
@@ -354,7 +354,7 @@ Editor::region_list_display_button_press (GdkEventButton *ev)
case 1:
/* audition on double click */
if (ev->type == GDK_2BUTTON_PRESS) {
- consider_auditioning (*region);
+ consider_auditioning (region);
return true;
}
return false;
@@ -362,7 +362,7 @@ Editor::region_list_display_button_press (GdkEventButton *ev)
case 2:
if (!Keyboard::modifier_state_equals (ev->state, Keyboard::Control)) {
- consider_auditioning (*region);
+ consider_auditioning (region);
}
return true;
break;
@@ -382,7 +382,7 @@ Editor::region_list_display_button_release (GdkEventButton *ev)
TreeViewColumn* column;
int cellx;
int celly;
- Region* region = 0;
+ boost::shared_ptr<Region> region;
if (region_list_display.get_path_at_pos ((int)ev->x, (int)ev->y, path, column, cellx, celly)) {
if ((iter = region_list_model->get_iter (path))) {
@@ -391,7 +391,7 @@ Editor::region_list_display_button_release (GdkEventButton *ev)
}
if (region && Keyboard::is_delete_event (ev)) {
- session->remove_region_from_region_list (*region);
+ session->remove_region_from_region_list (region);
return true;
}
@@ -399,9 +399,9 @@ Editor::region_list_display_button_release (GdkEventButton *ev)
}
void
-Editor::consider_auditioning (Region& region)
+Editor::consider_auditioning (boost::shared_ptr<Region> region)
{
- AudioRegion* r = dynamic_cast<AudioRegion*> (&region);
+ boost::shared_ptr<AudioRegion> r = boost::dynamic_pointer_cast<AudioRegion> (region);
if (r == 0) {
session->cancel_audition ();
@@ -415,7 +415,7 @@ Editor::consider_auditioning (Region& region)
}
}
- session->audition_region (*r);
+ session->audition_region (r);
last_audition_region = r;
}
@@ -424,8 +424,8 @@ Editor::region_list_sorter (TreeModel::iterator a, TreeModel::iterator b)
{
int cmp = 0;
- Region* r1 = (*a)[region_list_columns.region];
- Region* r2 = (*b)[region_list_columns.region];
+ boost::shared_ptr<Region> r1 = (*a)[region_list_columns.region];
+ boost::shared_ptr<Region> r2 = (*b)[region_list_columns.region];
/* handle rows without regions, like "Hidden" */
@@ -437,8 +437,8 @@ Editor::region_list_sorter (TreeModel::iterator a, TreeModel::iterator b)
return 1;
}
- AudioRegion* region1 = dynamic_cast<AudioRegion*> (r1);
- AudioRegion* region2 = dynamic_cast<AudioRegion*> (r2);
+ boost::shared_ptr<AudioRegion> region1 = boost::dynamic_pointer_cast<AudioRegion> (r1);
+ boost::shared_ptr<AudioRegion> region2 = boost::dynamic_pointer_cast<AudioRegion> (r2);
if (region1 == 0 || region2 == 0) {
Glib::ustring s1;
@@ -467,7 +467,7 @@ Editor::region_list_sorter (TreeModel::iterator a, TreeModel::iterator b)
break;
case ByTimestamp:
- cmp = region1->source().timestamp() - region2->source().timestamp();
+ cmp = region1->source()->timestamp() - region2->source()->timestamp();
break;
case ByStartInFile:
@@ -479,22 +479,22 @@ Editor::region_list_sorter (TreeModel::iterator a, TreeModel::iterator b)
break;
case BySourceFileName:
- cmp = strcasecmp (region1->source().name().c_str(), region2->source().name().c_str());
+ cmp = strcasecmp (region1->source()->name().c_str(), region2->source()->name().c_str());
break;
case BySourceFileLength:
- cmp = region1->source().length() - region2->source().length();
+ cmp = region1->source()->length() - region2->source()->length();
break;
case BySourceFileCreationDate:
- cmp = region1->source().timestamp() - region2->source().timestamp();
+ cmp = region1->source()->timestamp() - region2->source()->timestamp();
break;
case BySourceFileFS:
- if (region1->source().name() == region2->source().name()) {
+ if (region1->source()->name() == region2->source()->name()) {
cmp = strcasecmp (region1->name().c_str(), region2->name().c_str());
} else {
- cmp = strcasecmp (region1->source().name().c_str(), region2->source().name().c_str());
+ cmp = strcasecmp (region1->source()->name().c_str(), region2->source()->name().c_str());
}
break;
}
@@ -524,7 +524,7 @@ Editor::reset_region_list_sort_direction (bool up)
}
void
-Editor::region_list_selection_mapover (slot<void,Region&> sl)
+Editor::region_list_selection_mapover (slot<void,boost::shared_ptr<Region> > sl)
{
Glib::RefPtr<TreeSelection> selection = region_list_display.get_selection();
TreeView::Selection::ListHandle_Path rows = selection->get_selected_rows ();
@@ -538,19 +538,19 @@ Editor::region_list_selection_mapover (slot<void,Region&> sl)
TreeIter iter;
if ((iter = region_list_model->get_iter (*i))) {
- sl (*((*iter)[region_list_columns.region]));
+ sl (((*iter)[region_list_columns.region]));
}
}
}
void
-Editor::hide_a_region (Region& r)
+Editor::hide_a_region (boost::shared_ptr<Region> r)
{
- r.set_hidden (true);
+ r->set_hidden (true);
}
void
-Editor::remove_a_region (Region& r)
+Editor::remove_a_region (boost::shared_ptr<Region> r)
{
session->remove_region_from_region_list (r);
}
@@ -593,5 +593,7 @@ Editor::region_list_selection_filter (const RefPtr<TreeModel>& model, const Tree
{
/* not possible to select rows that do not represent regions, like "Hidden" */
- return (*(model->get_iter (path)))[region_list_columns.region] != 0;
+ /// XXXX FIXME boost::shared_ptr<Region> r = ((model->get_iter (path)))[region_list_columns.region];
+ /// return r != 0;
+ return true;
}
diff --git a/gtk2_ardour/editor_timefx.cc b/gtk2_ardour/editor_timefx.cc
index caa9698b8c..188960c962 100644
--- a/gtk2_ardour/editor_timefx.cc
+++ b/gtk2_ardour/editor_timefx.cc
@@ -160,21 +160,18 @@ Editor::do_timestretch (TimeStretchDialog& dialog)
{
Track* t;
Playlist* playlist;
- Region* new_region;
-
+ boost::shared_ptr<Region> new_region;
for (RegionSelection::iterator i = dialog.regions.begin(); i != dialog.regions.end(); ) {
AudioRegionView* arv = dynamic_cast<AudioRegionView*>(*i);
if (!arv)
continue;
- AudioRegion& region (arv->audio_region());
+ boost::shared_ptr<AudioRegion> region (arv->audio_region());
TimeAxisView* tv = &(arv->get_time_axis_view());
RouteTimeAxisView* rtv;
RegionSelection::iterator tmp;
- cerr << "stretch " << region.name() << endl;
-
tmp = i;
++tmp;
@@ -193,7 +190,7 @@ Editor::do_timestretch (TimeStretchDialog& dialog)
continue;
}
- dialog.request.region = &region;
+ dialog.request.region = region;
if (!dialog.request.running) {
/* we were cancelled */
@@ -208,7 +205,7 @@ Editor::do_timestretch (TimeStretchDialog& dialog)
}
XMLNode &before = playlist->get_state();
- playlist->replace_region (region, *new_region, region.position());
+ playlist->replace_region (region, new_region, region->position());
XMLNode &after = playlist->get_state();
session->add_command (new MementoCommand<Playlist>(*playlist, &before, &after));
@@ -217,6 +214,7 @@ Editor::do_timestretch (TimeStretchDialog& dialog)
dialog.status = 0;
dialog.request.running = false;
+ dialog.request.region.reset ();
}
void*
diff --git a/gtk2_ardour/export_dialog.cc b/gtk2_ardour/export_dialog.cc
index bf7873914d..730da46673 100644
--- a/gtk2_ardour/export_dialog.cc
+++ b/gtk2_ardour/export_dialog.cc
@@ -392,7 +392,7 @@ void
ExportDialog::connect_to_session (Session *s)
{
session = s;
- session->going_away.connect (mem_fun(*this, &Window::hide_all));
+ session->GoingAway.connect (mem_fun(*this, &Window::hide_all));
switch (session->frame_rate()) {
case 22050:
diff --git a/gtk2_ardour/export_region_dialog.cc b/gtk2_ardour/export_region_dialog.cc
index 1964fabbfe..3ed282761d 100644
--- a/gtk2_ardour/export_region_dialog.cc
+++ b/gtk2_ardour/export_region_dialog.cc
@@ -28,11 +28,10 @@
#include "i18n.h"
-ExportRegionDialog::ExportRegionDialog (PublicEditor& editor, ARDOUR::Region* region)
+ExportRegionDialog::ExportRegionDialog (PublicEditor& editor, boost::shared_ptr<ARDOUR::Region> region)
: ExportDialog(editor)
{
- // FIXME
- ARDOUR::AudioRegion* audio_region = dynamic_cast<ARDOUR::AudioRegion*>(region);
+ boost::shared_ptr<ARDOUR::AudioRegion> audio_region = boost::dynamic_pointer_cast<ARDOUR::AudioRegion>(region);
assert(audio_region);
do_not_allow_track_and_master_selection();
diff --git a/gtk2_ardour/export_region_dialog.h b/gtk2_ardour/export_region_dialog.h
index e8afe97d6b..a0457b7331 100644
--- a/gtk2_ardour/export_region_dialog.h
+++ b/gtk2_ardour/export_region_dialog.h
@@ -27,7 +27,7 @@
class ExportRegionDialog : public ExportDialog
{
public:
- ExportRegionDialog (PublicEditor&, ARDOUR::Region*);
+ ExportRegionDialog (PublicEditor&, boost::shared_ptr<ARDOUR::Region>);
static void* _export_region_thread (void *);
void export_region ();
@@ -36,7 +36,7 @@ class ExportRegionDialog : public ExportDialog
void export_audio_data();
private:
- ARDOUR::AudioRegion* audio_region;
+ boost::shared_ptr<ARDOUR::AudioRegion> audio_region;
};
diff --git a/gtk2_ardour/io_selector.cc b/gtk2_ardour/io_selector.cc
index f9082c3ef0..e53bd2fb02 100644
--- a/gtk2_ardour/io_selector.cc
+++ b/gtk2_ardour/io_selector.cc
@@ -21,6 +21,8 @@
#include <map>
#include <vector>
+#include <sigc++/bind.h>
+
#include <gtkmm/messagedialog.h>
#include <glibmm/thread.h>
@@ -839,9 +841,9 @@ PortInsertWindow::PortInsertWindow (Session& sess, boost::shared_ptr<PortInsert>
}
void
-PortInsertWindow::plugin_going_away (ARDOUR::Redirect* ignored)
+PortInsertWindow::plugin_going_away ()
{
- ENSURE_GUI_THREAD(bind (mem_fun(*this, &PortInsertWindow::plugin_going_away), ignored));
+ ENSURE_GUI_THREAD(mem_fun(*this, &PortInsertWindow::plugin_going_away));
delete_when_idle (this);
}
diff --git a/gtk2_ardour/io_selector.h b/gtk2_ardour/io_selector.h
index 993d4aa1ad..b0175644a4 100644
--- a/gtk2_ardour/io_selector.h
+++ b/gtk2_ardour/io_selector.h
@@ -198,7 +198,7 @@ class PortInsertWindow : public ArdourDialog
void cancel ();
void accept ();
- void plugin_going_away (ARDOUR::Redirect*);
+ void plugin_going_away ();
};
diff --git a/gtk2_ardour/location_ui.cc b/gtk2_ardour/location_ui.cc
index 12e7079de2..125ed8df5d 100644
--- a/gtk2_ardour/location_ui.cc
+++ b/gtk2_ardour/location_ui.cc
@@ -836,7 +836,7 @@ LocationUI::set_session(ARDOUR::Session* sess)
session->locations()->StateChanged.connect (mem_fun(*this, &LocationUI::refresh_location_list_s));
session->locations()->added.connect (mem_fun(*this, &LocationUI::location_added));
session->locations()->removed.connect (mem_fun(*this, &LocationUI::location_removed));
- session->going_away.connect (mem_fun(*this, &LocationUI::session_gone));
+ session->GoingAway.connect (mem_fun(*this, &LocationUI::session_gone));
}
refresh_location_list ();
}
diff --git a/gtk2_ardour/meter_bridge.cc b/gtk2_ardour/meter_bridge.cc
index 65434d5e82..b871561563 100644
--- a/gtk2_ardour/meter_bridge.cc
+++ b/gtk2_ardour/meter_bridge.cc
@@ -101,7 +101,7 @@ MeterBridge::set_session (Session *s)
// (refs vs. ptrs)
// session->foreach_route (this, &MeterBridge::add_route);
session->RouteAdded.connect (mem_fun(*this, &MeterBridge::add_route));
- session->going_away.connect (mem_fun(*this, &MeterBridge::session_gone));
+ session->GoingAway.connect (mem_fun(*this, &MeterBridge::session_gone));
start_metering ();
}
}
@@ -171,7 +171,7 @@ MeterBridge::add_route (ARDOUR::Route* route)
meter->set_meter_on(true);
- session->going_away.connect (mem_fun(*this, &MeterBridge::session_gone));
+ session->GoingAway.connect (mem_fun(*this, &MeterBridge::session_gone));
}
void
diff --git a/gtk2_ardour/midi_region_view.cc b/gtk2_ardour/midi_region_view.cc
index 2e102b4f70..c225295f13 100644
--- a/gtk2_ardour/midi_region_view.cc
+++ b/gtk2_ardour/midi_region_view.cc
@@ -50,13 +50,13 @@ using namespace PBD;
using namespace Editing;
using namespace ArdourCanvas;
-MidiRegionView::MidiRegionView (ArdourCanvas::Group *parent, RouteTimeAxisView &tv, MidiRegion& r, double spu,
+MidiRegionView::MidiRegionView (ArdourCanvas::Group *parent, RouteTimeAxisView &tv, boost::shared_ptr<MidiRegion> r, double spu,
Gdk::Color& basic_color)
: RegionView (parent, tv, r, spu, basic_color)
{
}
-MidiRegionView::MidiRegionView (ArdourCanvas::Group *parent, RouteTimeAxisView &tv, MidiRegion& r, double spu,
+MidiRegionView::MidiRegionView (ArdourCanvas::Group *parent, RouteTimeAxisView &tv, boost::shared_ptr<MidiRegion> r, double spu,
Gdk::Color& basic_color, TimeAxisViewItem::Visibility visibility)
: RegionView (parent, tv, r, spu, basic_color, visibility)
{
@@ -73,7 +73,7 @@ MidiRegionView::init (Gdk::Color& basic_color, bool wfd)
compute_colors (basic_color);
- reset_width_dependent_items ((double) _region.length() / samples_per_unit);
+ reset_width_dependent_items ((double) _region->length() / samples_per_unit);
set_height (trackview.height);
@@ -81,7 +81,7 @@ MidiRegionView::init (Gdk::Color& basic_color, bool wfd)
region_resized (BoundsChanged);
region_locked ();
- _region.StateChanged.connect (mem_fun(*this, &MidiRegionView::region_changed));
+ _region->StateChanged.connect (mem_fun(*this, &MidiRegionView::region_changed));
set_colors ();
}
@@ -93,11 +93,11 @@ MidiRegionView::~MidiRegionView ()
RegionViewGoingAway (this); /* EMIT_SIGNAL */
}
-ARDOUR::MidiRegion&
+boost::shared_ptr<ARDOUR::MidiRegion>
MidiRegionView::midi_region() const
{
// "Guaranteed" to succeed...
- return dynamic_cast<MidiRegion&>(_region);
+ return boost::dynamic_pointer_cast<MidiRegion>(_region);
}
void
diff --git a/gtk2_ardour/midi_region_view.h b/gtk2_ardour/midi_region_view.h
index 3161d0eb05..03bd0b1cf7 100644
--- a/gtk2_ardour/midi_region_view.h
+++ b/gtk2_ardour/midi_region_view.h
@@ -46,16 +46,16 @@ class MidiRegionView : public RegionView
{
public:
MidiRegionView (ArdourCanvas::Group *,
- RouteTimeAxisView&,
- ARDOUR::MidiRegion&,
- double initial_samples_per_unit,
- Gdk::Color& basic_color);
+ RouteTimeAxisView&,
+ boost::shared_ptr<ARDOUR::MidiRegion>,
+ double initial_samples_per_unit,
+ Gdk::Color& basic_color);
~MidiRegionView ();
virtual void init (Gdk::Color& base_color, bool wait_for_data = false);
- ARDOUR::MidiRegion& midi_region() const;
+ boost::shared_ptr<ARDOUR::MidiRegion> midi_region() const;
void show_region_editor ();
@@ -69,11 +69,11 @@ class MidiRegionView : public RegionView
*/
MidiRegionView (ArdourCanvas::Group *,
- RouteTimeAxisView&,
- ARDOUR::MidiRegion&,
- double samples_per_unit,
- Gdk::Color& basic_color,
- TimeAxisViewItem::Visibility);
+ RouteTimeAxisView&,
+ boost::shared_ptr<ARDOUR::MidiRegion>,
+ double samples_per_unit,
+ Gdk::Color& basic_color,
+ TimeAxisViewItem::Visibility);
void region_moved (void *);
diff --git a/gtk2_ardour/midi_streamview.cc b/gtk2_ardour/midi_streamview.cc
index 47148446eb..94d2a397cf 100644
--- a/gtk2_ardour/midi_streamview.cc
+++ b/gtk2_ardour/midi_streamview.cc
@@ -28,8 +28,8 @@
#include <ardour/midi_source.h>
#include <ardour/midi_diskstream.h>
#include <ardour/midi_track.h>
-//#include <ardour/playlist_templates.h>
-#include <ardour/midi_source.h>
+#include <ardour/smf_source.h>
+#include <ardour/region_factory.h>
#include "midi_streamview.h"
#include "region_view.h"
@@ -70,11 +70,11 @@ MidiStreamView::~MidiStreamView ()
void
-MidiStreamView::add_region_view_internal (Region *r, bool wait_for_waves)
+MidiStreamView::add_region_view_internal (boost::shared_ptr<Region> r, bool wait_for_waves)
{
ENSURE_GUI_THREAD (bind (mem_fun (*this, &MidiStreamView::add_region_view), r));
- MidiRegion* region = dynamic_cast<MidiRegion*> (r);
+ boost::shared_ptr<MidiRegion> region = boost::dynamic_pointer_cast<MidiRegion> (r);
if (region == 0) {
return;
@@ -84,7 +84,7 @@ MidiStreamView::add_region_view_internal (Region *r, bool wait_for_waves)
list<RegionView *>::iterator i;
for (i = region_views.begin(); i != region_views.end(); ++i) {
- if (&(*i)->region() == r) {
+ if ((*i)->region() == r) {
/* great. we already have a MidiRegionView for this Region. use it again. */
@@ -96,7 +96,7 @@ MidiStreamView::add_region_view_internal (Region *r, bool wait_for_waves)
// can't we all just get along?
assert(_trackview.midi_track()->mode() != Destructive);
- region_view = new MidiRegionView (canvas_group, _trackview, *region,
+ region_view = new MidiRegionView (canvas_group, _trackview, region,
_samples_per_unit, region_color);
region_view->init (region_color, wait_for_waves);
@@ -109,7 +109,7 @@ MidiStreamView::add_region_view_internal (Region *r, bool wait_for_waves)
/* catch regionview going away */
- region->GoingAway.connect (mem_fun (*this, &MidiStreamView::remove_region_view));
+ region->GoingAway.connect (bind (mem_fun (*this, &MidiStreamView::remove_region_view), region));
RegionViewAdded (region_view);
}
@@ -167,7 +167,7 @@ MidiStreamView::setup_rec_box ()
boost::shared_ptr<MidiDiskstream> mds = boost::dynamic_pointer_cast<MidiDiskstream>(_trackview.get_diskstream());
assert(mds);
- sources.push_back((Source*)mds->write_source());
+ sources.push_back(mds->write_source());
rec_data_ready_connections.push_back (mds->write_source()->ViewDataRangeReady.connect (bind (mem_fun (*this, &MidiStreamView::rec_data_range_ready), mds->write_source())));
@@ -178,11 +178,13 @@ MidiStreamView::setup_rec_box ()
start = rec_regions.back()->start() + _trackview.get_diskstream()->get_captured_frames(rec_regions.size()-1);
}
- MidiRegion * region = new MidiRegion(sources, start, 1 , "", 0, (Region::Flag)(Region::DefaultFlags | Region::DoNotSaveState), false);
+ boost::shared_ptr<MidiRegion> region (boost::dynamic_pointer_cast<MidiRegion>
+ (RegionFactory::create (sources, start, 1 , "", 0, (Region::Flag)(Region::DefaultFlags | Region::DoNotSaveState), false)));
+ assert(region);
region->set_position (_trackview.session().transport_frame(), this);
rec_regions.push_back (region);
/* catch it if it goes away */
- region->GoingAway.connect (mem_fun (*this, &MidiStreamView::remove_rec_region));
+ region->GoingAway.connect (bind (mem_fun (*this, &MidiStreamView::remove_rec_region), region));
/* we add the region later */
}
@@ -250,23 +252,9 @@ MidiStreamView::setup_rec_box ()
last_rec_data_frame = 0;
/* remove temp regions */
- for (list<Region*>::iterator iter=rec_regions.begin(); iter != rec_regions.end(); )
- {
- list<Region*>::iterator tmp;
-
- tmp = iter;
- ++tmp;
-
- /* this will trigger the remove_region_view */
- delete *iter;
-
- iter = tmp;
- }
-
rec_regions.clear();
// cerr << "\tclear " << rec_rects.size() << " rec rects\n";
-
/* transport stopped, clear boxes */
for (vector<RecBoxInfo>::iterator iter=rec_rects.begin(); iter != rec_rects.end(); ++iter) {
@@ -288,9 +276,9 @@ MidiStreamView::update_rec_regions ()
uint32_t n = 0;
- for (list<Region*>::iterator iter = rec_regions.begin(); iter != rec_regions.end(); n++) {
+ for (list<boost::shared_ptr<Region> >::iterator iter = rec_regions.begin(); iter != rec_regions.end(); n++) {
- list<Region*>::iterator tmp;
+ list<boost::shared_ptr<Region> >::iterator tmp;
tmp = iter;
++tmp;
@@ -301,8 +289,7 @@ MidiStreamView::update_rec_regions ()
continue;
}
- // FIXME?
- MidiRegion * region = dynamic_cast<MidiRegion*>(*iter);
+ boost::shared_ptr<MidiRegion> region = boost::dynamic_pointer_cast<MidiRegion>(*iter);
assert(region);
jack_nframes_t origlen = region->length();
@@ -338,7 +325,7 @@ MidiStreamView::update_rec_regions ()
if (nlen != region->length()) {
- if (region->source(0).length() >= region->start() + nlen) {
+ if (region->source(0)->length() >= region->start() + nlen) {
region->freeze ();
region->set_position (_trackview.get_diskstream()->get_capture_start_frame(n), this);
@@ -364,7 +351,7 @@ MidiStreamView::update_rec_regions ()
}
void
-MidiStreamView::rec_data_range_ready (jack_nframes_t start, jack_nframes_t cnt, Source * src)
+MidiStreamView::rec_data_range_ready (jack_nframes_t start, jack_nframes_t cnt, boost::shared_ptr<Source> src)
{
// this is called from the butler thread for now
// yeah we need a "peak" building thread or something, though there's not really any
diff --git a/gtk2_ardour/midi_streamview.h b/gtk2_ardour/midi_streamview.h
index 107a804db8..39ae510ed8 100644
--- a/gtk2_ardour/midi_streamview.h
+++ b/gtk2_ardour/midi_streamview.h
@@ -62,12 +62,10 @@ class MidiStreamView : public StreamView
private:
void setup_rec_box ();
- void rec_data_range_ready (jack_nframes_t start, jack_nframes_t cnt, ARDOUR::Source* src);
+ void rec_data_range_ready (jack_nframes_t start, jack_nframes_t cnt, boost::shared_ptr<ARDOUR::Source> src);
void update_rec_regions ();
- void add_region_view_internal (ARDOUR::Region*, bool wait_for_waves);
- void remove_midi_region_view (ARDOUR::MidiRegion* );
- void remove_midi_rec_region (ARDOUR::MidiRegion*);
+ void add_region_view_internal (boost::shared_ptr<ARDOUR::Region>, bool wait_for_waves);
void redisplay_diskstream ();
diff --git a/gtk2_ardour/mixer_ui.cc b/gtk2_ardour/mixer_ui.cc
index 84fade5472..9bc5f3d1a0 100644
--- a/gtk2_ardour/mixer_ui.cc
+++ b/gtk2_ardour/mixer_ui.cc
@@ -353,7 +353,7 @@ Mixer_UI::connect_to_session (Session* sess)
initial_track_display ();
- session->going_away.connect (mem_fun(*this, &Mixer_UI::disconnect_from_session));
+ session->GoingAway.connect (mem_fun(*this, &Mixer_UI::disconnect_from_session));
session->RouteAdded.connect (mem_fun(*this, &Mixer_UI::add_strip));
session->mix_group_added.connect (mem_fun(*this, &Mixer_UI::add_mix_group));
session->mix_group_removed.connect (mem_fun(*this, &Mixer_UI::mix_groups_changed));
diff --git a/gtk2_ardour/playlist_selector.cc b/gtk2_ardour/playlist_selector.cc
index 68227d193c..ffeaf8f5e9 100644
--- a/gtk2_ardour/playlist_selector.cc
+++ b/gtk2_ardour/playlist_selector.cc
@@ -205,7 +205,7 @@ PlaylistSelector::set_session (Session* s)
session = s;
if (session) {
- session->going_away.connect (bind (mem_fun(*this, &PlaylistSelector::set_session), static_cast<Session*> (0)));
+ session->GoingAway.connect (bind (mem_fun(*this, &PlaylistSelector::set_session), static_cast<Session*> (0)));
}
}
diff --git a/gtk2_ardour/plugin_selector.cc b/gtk2_ardour/plugin_selector.cc
index 6c72767b11..69f6f56690 100644
--- a/gtk2_ardour/plugin_selector.cc
+++ b/gtk2_ardour/plugin_selector.cc
@@ -244,7 +244,7 @@ PluginSelector::set_session (Session* s)
session = s;
if (session) {
- session->going_away.connect (bind (mem_fun(*this, &PluginSelector::set_session), static_cast<Session*> (0)));
+ session->GoingAway.connect (bind (mem_fun(*this, &PluginSelector::set_session), static_cast<Session*> (0)));
}
}
diff --git a/gtk2_ardour/plugin_ui.cc b/gtk2_ardour/plugin_ui.cc
index 4619d50359..b19a9f74eb 100644
--- a/gtk2_ardour/plugin_ui.cc
+++ b/gtk2_ardour/plugin_ui.cc
@@ -131,9 +131,9 @@ PluginUIWindow::on_key_release_event (GdkEventKey* event)
}
void
-PluginUIWindow::plugin_going_away (ARDOUR::Redirect* ignored)
+PluginUIWindow::plugin_going_away ()
{
- ENSURE_GUI_THREAD(bind (mem_fun(*this, &PluginUIWindow::plugin_going_away), ignored));
+ ENSURE_GUI_THREAD(mem_fun(*this, &PluginUIWindow::plugin_going_away));
_pluginui->stop_updating(0);
delete_when_idle (this);
diff --git a/gtk2_ardour/plugin_ui.h b/gtk2_ardour/plugin_ui.h
index fd5516cee1..c1d538b3d1 100644
--- a/gtk2_ardour/plugin_ui.h
+++ b/gtk2_ardour/plugin_ui.h
@@ -207,7 +207,7 @@ class PluginUIWindow : public ArdourDialog
private:
PlugUIBase* _pluginui;
- void plugin_going_away (ARDOUR::Redirect*);
+ void plugin_going_away ();
};
#ifdef VST_SUPPORT
diff --git a/gtk2_ardour/public_editor.h b/gtk2_ardour/public_editor.h
index cb3d62f625..a37e33bede 100644
--- a/gtk2_ardour/public_editor.h
+++ b/gtk2_ardour/public_editor.h
@@ -11,6 +11,8 @@
#include <jack/types.h>
#include <sigc++/signal.h>
+#include <pbd/statefuldestructible.h>
+
#include "editing.h"
#include "keyboard_target.h"
#include "canvas.h"
@@ -52,7 +54,7 @@ class ImageFrameView;
class ImageFrameTimeAxis;
class MarkerView;
-class PublicEditor : public Gtk::Window, public Stateful {
+class PublicEditor : public Gtk::Window, public PBD::StatefulDestructible {
public:
PublicEditor();
virtual ~PublicEditor();
@@ -76,7 +78,7 @@ class PublicEditor : public Gtk::Window, public Stateful {
virtual void connect_to_image_compositor() = 0;
virtual void scroll_timeaxis_to_imageframe_item(const TimeAxisViewItem* item) = 0;
virtual TimeAxisView* get_named_time_axis(const string & name) = 0;
- virtual void consider_auditioning (ARDOUR::Region&) = 0;
+ virtual void consider_auditioning (boost::shared_ptr<ARDOUR::Region>) = 0;
virtual void set_show_waveforms (bool yn) = 0;
virtual bool show_waveforms() const = 0;
virtual void set_show_waveforms_recording (bool yn) = 0;
diff --git a/gtk2_ardour/region_gain_line.cc b/gtk2_ardour/region_gain_line.cc
index e2b1d6c826..467f24bd94 100644
--- a/gtk2_ardour/region_gain_line.cc
+++ b/gtk2_ardour/region_gain_line.cc
@@ -47,9 +47,9 @@ void
AudioRegionGainLine::start_drag (ControlPoint* cp, float fraction)
{
AutomationLine::start_drag(cp,fraction);
- if (!rv.audio_region().envelope_active()) {
- trackview.session().add_command(new MementoCommand<AudioRegion>(rv.audio_region(), &rv.audio_region().get_state(), 0));
- rv.audio_region().set_envelope_active(false);
+ if (!rv.audio_region()->envelope_active()) {
+ trackview.session().add_command(new MementoCommand<AudioRegion>(*(rv.audio_region().get()), &rv.audio_region()->get_state(), 0));
+ rv.audio_region()->set_envelope_active(false);
}
}
@@ -64,11 +64,11 @@ AudioRegionGainLine::remove_point (ControlPoint& cp)
trackview.editor.current_session()->begin_reversible_command (_("remove control point"));
XMLNode &before = get_state();
- if (!rv.audio_region().envelope_active()) {
- XMLNode &before = rv.audio_region().get_state();
- rv.audio_region().set_envelope_active(true);
- XMLNode &after = rv.audio_region().get_state();
- trackview.session().add_command(new MementoCommand<AudioRegion>(rv.audio_region(), &before, &after));
+ if (!rv.audio_region()->envelope_active()) {
+ XMLNode &before = rv.audio_region()->get_state();
+ rv.audio_region()->set_envelope_active(true);
+ XMLNode &after = rv.audio_region()->get_state();
+ trackview.session().add_command(new MementoCommand<AudioRegion>(*(rv.audio_region().get()), &before, &after));
}
alist.erase (mr.start, mr.end);
@@ -81,9 +81,9 @@ AudioRegionGainLine::remove_point (ControlPoint& cp)
void
AudioRegionGainLine::end_drag (ControlPoint* cp)
{
- if (!rv.audio_region().envelope_active()) {
- rv.audio_region().set_envelope_active(true);
- trackview.session().add_command(new MementoCommand<AudioRegion>(rv.audio_region(), 0, &rv.audio_region().get_state()));
+ if (!rv.audio_region()->envelope_active()) {
+ rv.audio_region()->set_envelope_active(true);
+ trackview.session().add_command(new MementoCommand<AudioRegion>(*(rv.audio_region().get()), 0, &rv.audio_region()->get_state()));
}
AutomationLine::end_drag(cp);
}
diff --git a/gtk2_ardour/region_selection.cc b/gtk2_ardour/region_selection.cc
index f8c9f384a9..7f7148d2b1 100644
--- a/gtk2_ardour/region_selection.cc
+++ b/gtk2_ardour/region_selection.cc
@@ -102,12 +102,12 @@ RegionSelection::add (RegionView* rv, bool dosort)
rv->RegionViewGoingAway.connect (mem_fun(*this, &RegionSelection::remove_it));
- if (rv->region().first_frame() < _current_start || empty()) {
- _current_start = rv->region().first_frame();
+ if (rv->region()->first_frame() < _current_start || empty()) {
+ _current_start = rv->region()->first_frame();
}
- if (rv->region().last_frame() > _current_end || empty()) {
- _current_end = rv->region().last_frame();
+ if (rv->region()->last_frame() > _current_end || empty()) {
+ _current_end = rv->region()->last_frame();
}
insert (rv);
@@ -142,17 +142,17 @@ RegionSelection::remove (RegionView* rv)
} else {
- Region& region ((*i)->region());
+ boost::shared_ptr<Region> region ((*i)->region());
- if (region.first_frame() == _current_start) {
+ if (region->first_frame() == _current_start) {
/* reset current start */
jack_nframes_t ref = max_frames;
for (i = begin (); i != end(); ++i) {
- if (region.first_frame() < ref) {
- ref = region.first_frame();
+ if (region->first_frame() < ref) {
+ ref = region->first_frame();
}
}
@@ -160,15 +160,15 @@ RegionSelection::remove (RegionView* rv)
}
- if (region.last_frame() == _current_end) {
+ if (region->last_frame() == _current_end) {
/* reset current end */
jack_nframes_t ref = 0;
for (i = begin (); i != end(); ++i) {
- if (region.first_frame() > ref) {
- ref = region.first_frame();
+ if (region->first_frame() > ref) {
+ ref = region->first_frame();
}
}
@@ -191,7 +191,7 @@ RegionSelection::add_to_layer (RegionView * rv)
for (i = _bylayer.begin(); i != _bylayer.end(); ++i)
{
- if (rv->region().layer() < (*i)->region().layer()) {
+ if (rv->region()->layer() < (*i)->region()->layer()) {
_bylayer.insert(i, rv);
return;
}
@@ -203,7 +203,7 @@ RegionSelection::add_to_layer (RegionView * rv)
struct RegionSortByTime {
bool operator() (const RegionView* a, const RegionView* b) {
- return a->region().position() < b->region().position();
+ return a->region()->position() < b->region()->position();
}
};
diff --git a/gtk2_ardour/region_view.cc b/gtk2_ardour/region_view.cc
index 68676fe85c..702c328ecd 100644
--- a/gtk2_ardour/region_view.cc
+++ b/gtk2_ardour/region_view.cc
@@ -59,33 +59,33 @@ sigc::signal<void,RegionView*> RegionView::RegionViewGoingAway;
RegionView::RegionView (ArdourCanvas::Group* parent,
TimeAxisView& tv,
- ARDOUR::Region& r,
+ boost::shared_ptr<ARDOUR::Region> r,
double spu,
Gdk::Color& basic_color)
- : TimeAxisViewItem (r.name(), *parent, tv, spu, basic_color, r.position(), r.length(),
- TimeAxisViewItem::Visibility (TimeAxisViewItem::ShowNameText|
- TimeAxisViewItem::ShowNameHighlight|
- TimeAxisViewItem::ShowFrame))
- , _region (r)
- , sync_mark(0)
- , no_wave_msg(0)
- , editor(0)
- , current_visible_sync_position(0.0)
- , valid(false)
- , _pixel_width(1.0)
- , _height(1.0)
- , in_destructor(false)
- , wait_for_data(false)
+ : TimeAxisViewItem (r->name(), *parent, tv, spu, basic_color, r->position(), r->length(),
+ TimeAxisViewItem::Visibility (TimeAxisViewItem::ShowNameText|
+ TimeAxisViewItem::ShowNameHighlight|
+ TimeAxisViewItem::ShowFrame))
+ , _region (r)
+ , sync_mark(0)
+ , no_wave_msg(0)
+ , editor(0)
+ , current_visible_sync_position(0.0)
+ , valid(false)
+ , _pixel_width(1.0)
+ , _height(1.0)
+ , in_destructor(false)
+ , wait_for_data(false)
{
}
RegionView::RegionView (ArdourCanvas::Group* parent,
TimeAxisView& tv,
- ARDOUR::Region& r,
+ boost::shared_ptr<ARDOUR::Region> r,
double spu,
Gdk::Color& basic_color,
TimeAxisViewItem::Visibility visibility)
- : TimeAxisViewItem (r.name(), *parent, tv, spu, basic_color, r.position(), r.length(), visibility)
+ : TimeAxisViewItem (r->name(), *parent, tv, spu, basic_color, r->position(), r->length(), visibility)
, _region (r)
, sync_mark(0)
, no_wave_msg(0)
@@ -129,7 +129,7 @@ RegionView::init (Gdk::Color& basic_color, bool wfd)
sync_mark->property_fill_color_rgba() = fill_color;
sync_mark->hide();
- reset_width_dependent_items ((double) _region.length() / samples_per_unit);
+ reset_width_dependent_items ((double) _region->length() / samples_per_unit);
set_height (trackview.height);
@@ -138,7 +138,7 @@ RegionView::init (Gdk::Color& basic_color, bool wfd)
region_resized (BoundsChanged);
region_locked ();
- _region.StateChanged.connect (mem_fun(*this, &RegionView::region_changed));
+ _region->StateChanged.connect (mem_fun(*this, &RegionView::region_changed));
group->signal_event().connect (bind (mem_fun (PublicEditor::instance(), &PublicEditor::canvas_region_view_event), group, this));
name_highlight->signal_event().connect (bind (mem_fun (PublicEditor::instance(), &PublicEditor::canvas_region_view_name_highlight_event), name_highlight, this));
@@ -182,7 +182,7 @@ RegionView::_lock_toggle (ArdourCanvas::Item* item, GdkEvent* ev, void* arg)
void
RegionView::lock_toggle ()
{
- _region.set_locked (!_region.locked());
+ _region->set_locked (!_region->locked());
}
void
@@ -227,14 +227,14 @@ RegionView::region_resized (Change what_changed)
double unit_length;
if (what_changed & ARDOUR::PositionChanged) {
- set_position (_region.position(), 0);
+ set_position (_region->position(), 0);
}
if (what_changed & Change (StartChanged|LengthChanged)) {
- set_duration (_region.length(), 0);
+ set_duration (_region->length(), 0);
- unit_length = _region.length() / samples_per_unit;
+ unit_length = _region->length() / samples_per_unit;
reset_width_dependent_items (unit_length);
@@ -285,25 +285,25 @@ RegionView::region_opacity ()
void
RegionView::raise ()
{
- _region.raise ();
+ _region->raise ();
}
void
RegionView::raise_to_top ()
{
- _region.raise_to_top ();
+ _region->raise_to_top ();
}
void
RegionView::lower ()
{
- _region.lower ();
+ _region->lower ();
}
void
RegionView::lower_to_bottom ()
{
- _region.lower_to_bottom ();
+ _region->lower_to_bottom ();
}
bool
@@ -336,7 +336,7 @@ RegionView::set_samples_per_unit (gdouble spu)
for (vector<GhostRegion*>::iterator i = ghosts.begin(); i != ghosts.end(); ++i) {
(*i)->set_samples_per_unit (spu);
- (*i)->set_duration (_region.length() / samples_per_unit);
+ (*i)->set_duration (_region->length() / samples_per_unit);
}
region_sync_changed ();
@@ -350,7 +350,7 @@ RegionView::set_duration (jack_nframes_t frames, void *src)
}
for (vector<GhostRegion*>::iterator i = ghosts.begin(); i != ghosts.end(); ++i) {
- (*i)->set_duration (_region.length() / samples_per_unit);
+ (*i)->set_duration (_region->length() / samples_per_unit);
}
return true;
@@ -375,7 +375,7 @@ RegionView::set_colors ()
void
RegionView::set_frame_color ()
{
- if (_region.opaque()) {
+ if (_region->opaque()) {
fill_opacity = 180;
} else {
fill_opacity = 100;
@@ -397,15 +397,18 @@ RegionView::region_renamed ()
{
string str;
- if (_region.locked()) {
+ if (_region->locked()) {
str += '>';
- str += _region.name();
+ str += _region->name();
str += '<';
} else {
- str = _region.name();
+ str = _region->name();
}
- if (_region.muted()) {
+ // speed mismatch handled in audio_region_view.cc
+ // FIXME: come up with more elegant solution for this
+
+ if (_region->muted()) {
str = string ("!") + str;
}
@@ -423,10 +426,10 @@ RegionView::region_sync_changed ()
int sync_dir;
jack_nframes_t sync_offset;
- sync_offset = _region.sync_offset (sync_dir);
+ sync_offset = _region->sync_offset (sync_dir);
/* this has to handle both a genuine change of position, a change of samples_per_unit,
- and a change in the bounds of the _region.
+ and a change in the bounds of the _region->
*/
if (sync_offset == 0) {
@@ -437,7 +440,7 @@ RegionView::region_sync_changed ()
} else {
- if ((sync_dir < 0) || ((sync_dir > 0) && (sync_offset > _region.length()))) {
+ if ((sync_dir < 0) || ((sync_dir > 0) && (sync_offset > _region->length()))) {
/* no sync mark - its out of the bounds of the region */
@@ -466,7 +469,7 @@ RegionView::region_sync_changed ()
void
RegionView::move (double x_delta, double y_delta)
{
- if (_region.locked() || (x_delta == 0 && y_delta == 0)) {
+ if (_region->locked() || (x_delta == 0 && y_delta == 0)) {
return;
}
diff --git a/gtk2_ardour/region_view.h b/gtk2_ardour/region_view.h
index beb4f10d54..c7d113d17d 100644
--- a/gtk2_ardour/region_view.h
+++ b/gtk2_ardour/region_view.h
@@ -43,7 +43,7 @@ class RegionView : public TimeAxisViewItem
public:
RegionView (ArdourCanvas::Group* parent,
TimeAxisView& time_view,
- ARDOUR::Region& region,
+ boost::shared_ptr<ARDOUR::Region> region,
double samples_per_unit,
Gdk::Color& basic_color);
@@ -51,7 +51,7 @@ class RegionView : public TimeAxisViewItem
virtual void init (Gdk::Color& base_color, bool wait_for_data);
- ARDOUR::Region& region() const { return _region; }
+ boost::shared_ptr<ARDOUR::Region> region() const { return _region; }
bool is_valid() const { return valid; }
void set_valid (bool yn) { valid = yn; }
@@ -91,30 +91,12 @@ class RegionView : public TimeAxisViewItem
* to the TimeAxisViewItem parent class
*/
RegionView (ArdourCanvas::Group *,
- TimeAxisView&,
- ARDOUR::Region&,
- double samples_per_unit,
- Gdk::Color& basic_color,
- TimeAxisViewItem::Visibility);
+ TimeAxisView&,
+ boost::shared_ptr<ARDOUR::Region>,
+ double samples_per_unit,
+ Gdk::Color& basic_color,
+ TimeAxisViewItem::Visibility);
- ARDOUR::Region& _region;
-
- ArdourCanvas::Polygon* sync_mark; ///< polgyon for sync position
- ArdourCanvas::Text* no_wave_msg;
-
- RegionEditor *editor;
-
- vector<ControlPoint *> control_points;
- double current_visible_sync_position;
-
- bool valid; ///< see StreamView::redisplay_diskstream()
- double _pixel_width;
- double _height;
- bool in_destructor;
-
- bool wait_for_data;
- sigc::connection data_ready_connection;
-
virtual void region_resized (ARDOUR::Change);
void region_moved (void *);
virtual void region_muted ();
@@ -132,9 +114,27 @@ class RegionView : public TimeAxisViewItem
virtual void set_frame_color ();
virtual void reset_width_dependent_items (double pixel_width);
- vector<GhostRegion*> ghosts;
-
virtual void color_handler (ColorID, uint32_t) {}
+
+ boost::shared_ptr<ARDOUR::Region> _region;
+
+ ArdourCanvas::Polygon* sync_mark; ///< polgyon for sync position
+ ArdourCanvas::Text* no_wave_msg;
+
+ RegionEditor* editor;
+
+ vector<ControlPoint *> control_points;
+ double current_visible_sync_position;
+
+ bool valid; ///< see StreamView::redisplay_diskstream()
+ double _pixel_width;
+ double _height;
+ bool in_destructor;
+
+ bool wait_for_data;
+ sigc::connection data_ready_connection;
+
+ vector<GhostRegion*> ghosts;
};
#endif /* __gtk_ardour_region_view_h__ */
diff --git a/gtk2_ardour/route_params_ui.cc b/gtk2_ardour/route_params_ui.cc
index c23ed272e1..5f61b0528c 100644
--- a/gtk2_ardour/route_params_ui.cc
+++ b/gtk2_ardour/route_params_ui.cc
@@ -361,7 +361,7 @@ RouteParams_UI::set_session (Session *sess)
if (session) {
boost::shared_ptr<Session::RouteList> r = session->get_routes();
add_routes (*r);
- session->going_away.connect (mem_fun(*this, &ArdourDialog::session_gone));
+ session->GoingAway.connect (mem_fun(*this, &ArdourDialog::session_gone));
session->RouteAdded.connect (mem_fun(*this, &RouteParams_UI::add_routes));
start_updating ();
} else {
@@ -537,7 +537,7 @@ RouteParams_UI::redirect_selected (boost::shared_ptr<ARDOUR::Redirect> redirect,
if (place == PreFader) {
cleanup_pre_view();
- _pre_plugin_conn = send->GoingAway.connect (mem_fun(*this, &RouteParams_UI::redirect_going_away));
+ _pre_plugin_conn = send->GoingAway.connect (bind (mem_fun(*this, &RouteParams_UI::redirect_going_away), redirect));
_active_pre_view = send_ui;
pre_redir_hpane.add2 (*_active_pre_view);
@@ -545,7 +545,7 @@ RouteParams_UI::redirect_selected (boost::shared_ptr<ARDOUR::Redirect> redirect,
}
else {
cleanup_post_view();
- _post_plugin_conn = send->GoingAway.connect (mem_fun(*this, &RouteParams_UI::redirect_going_away));
+ _post_plugin_conn = send->GoingAway.connect (bind (mem_fun(*this, &RouteParams_UI::redirect_going_away), redirect));
_active_post_view = send_ui;
post_redir_hpane.add2 (*_active_post_view);
@@ -586,7 +586,7 @@ RouteParams_UI::redirect_selected (boost::shared_ptr<ARDOUR::Redirect> redirect,
if (place == PreFader) {
cleanup_pre_view();
- _pre_plugin_conn = port_insert->GoingAway.connect (mem_fun(*this, &RouteParams_UI::redirect_going_away));
+ _pre_plugin_conn = port_insert->GoingAway.connect (bind (mem_fun(*this, &RouteParams_UI::redirect_going_away), redirect));
_active_pre_view = portinsert_ui;
pre_redir_hpane.pack2 (*_active_pre_view);
portinsert_ui->redisplay();
@@ -594,7 +594,7 @@ RouteParams_UI::redirect_selected (boost::shared_ptr<ARDOUR::Redirect> redirect,
}
else {
cleanup_post_view();
- _post_plugin_conn = port_insert->GoingAway.connect (mem_fun(*this, &RouteParams_UI::redirect_going_away));
+ _post_plugin_conn = port_insert->GoingAway.connect (bind (mem_fun(*this, &RouteParams_UI::redirect_going_away), redirect));
_active_post_view = portinsert_ui;
post_redir_hpane.pack2 (*_active_post_view);
portinsert_ui->redisplay();
@@ -615,9 +615,9 @@ RouteParams_UI::redirect_selected (boost::shared_ptr<ARDOUR::Redirect> redirect,
}
void
-RouteParams_UI::plugin_going_away (Plugin *plugin, Placement place)
+RouteParams_UI::plugin_going_away (Placement place)
{
- ENSURE_GUI_THREAD(bind (mem_fun(*this, &RouteParams_UI::plugin_going_away), plugin, place));
+ ENSURE_GUI_THREAD(bind (mem_fun(*this, &RouteParams_UI::plugin_going_away), place));
// delete the current view without calling finish
@@ -632,18 +632,17 @@ RouteParams_UI::plugin_going_away (Plugin *plugin, Placement place)
}
void
-RouteParams_UI::redirect_going_away (ARDOUR::Redirect *plugin)
+RouteParams_UI::redirect_going_away (boost::shared_ptr<ARDOUR::Redirect> redirect)
{
- ENSURE_GUI_THREAD(bind (mem_fun(*this, &RouteParams_UI::redirect_going_away), plugin));
+ ENSURE_GUI_THREAD(bind (mem_fun(*this, &RouteParams_UI::redirect_going_away), redirect));
printf ("redirect going away\n");
// delete the current view without calling finish
- if (plugin == _pre_redirect.get()) {
+ if (redirect == _pre_redirect) {
cleanup_pre_view (false);
_pre_redirect.reset ((Redirect*) 0);
- }
- else if (plugin == _post_redirect.get()) {
+ } else if (redirect == _post_redirect) {
cleanup_post_view (false);
_post_redirect.reset ((Redirect*) 0);
}
diff --git a/gtk2_ardour/route_params_ui.h b/gtk2_ardour/route_params_ui.h
index eff31023f7..394383de6b 100644
--- a/gtk2_ardour/route_params_ui.h
+++ b/gtk2_ardour/route_params_ui.h
@@ -182,8 +182,8 @@ class RouteParams_UI : public ArdourDialog
void redirect_selected (boost::shared_ptr<ARDOUR::Redirect>, ARDOUR::Placement);
- void plugin_going_away (ARDOUR::Plugin *foo, ARDOUR::Placement);
- void redirect_going_away (ARDOUR::Redirect *foo);
+ void plugin_going_away (ARDOUR::Placement);
+ void redirect_going_away (boost::shared_ptr<ARDOUR::Redirect>);
gint edit_input_configuration (GdkEventButton *ev);
gint edit_output_configuration (GdkEventButton *ev);
diff --git a/gtk2_ardour/route_time_axis.cc b/gtk2_ardour/route_time_axis.cc
index e7a6df2f27..27d1739fd4 100644
--- a/gtk2_ardour/route_time_axis.cc
+++ b/gtk2_ardour/route_time_axis.cc
@@ -1010,7 +1010,7 @@ RouteTimeAxisView::hide_click ()
editor.hide_track_in_display (*this);
}
-Region*
+boost::shared_ptr<Region>
RouteTimeAxisView::find_next_region (jack_nframes_t pos, RegionPoint point, int32_t dir)
{
boost::shared_ptr<Diskstream> stream;
@@ -1020,7 +1020,7 @@ RouteTimeAxisView::find_next_region (jack_nframes_t pos, RegionPoint point, int3
return playlist->find_next_region (pos, point, dir);
}
- return 0;
+ return boost::shared_ptr<Region> ();
}
bool
diff --git a/gtk2_ardour/route_time_axis.h b/gtk2_ardour/route_time_axis.h
index d305fd390c..f3643de68b 100644
--- a/gtk2_ardour/route_time_axis.h
+++ b/gtk2_ardour/route_time_axis.h
@@ -81,7 +81,7 @@ public:
void get_selectables (jack_nframes_t start, jack_nframes_t end, double top, double bot, list<Selectable *>&);
void get_inverted_selectables (Selection&, list<Selectable*>&);
- ARDOUR::Region* find_next_region (jack_nframes_t pos, ARDOUR::RegionPoint, int32_t dir);
+ boost::shared_ptr<ARDOUR::Region> find_next_region (jack_nframes_t pos, ARDOUR::RegionPoint, int32_t dir);
/* Editing operations */
bool cut_copy_clear (Selection&, Editing::CutCopyOp);
diff --git a/gtk2_ardour/selection.cc b/gtk2_ardour/selection.cc
index aa7fdbe30f..9d171e484d 100644
--- a/gtk2_ardour/selection.cc
+++ b/gtk2_ardour/selection.cc
@@ -84,7 +84,7 @@ Selection::dump_region_layers()
{
cerr << "region selection layer dump" << endl;
for (RegionSelection::iterator i = regions.begin(); i != regions.end(); ++i) {
- cerr << "layer: " << (int)(*i)->region().layer() << endl;
+ cerr << "layer: " << (int)(*i)->region()->layer() << endl;
}
}
diff --git a/gtk2_ardour/selection_templates.h b/gtk2_ardour/selection_templates.h
index 9511db7d61..5440112ad6 100644
--- a/gtk2_ardour/selection_templates.h
+++ b/gtk2_ardour/selection_templates.h
@@ -34,33 +34,17 @@
inline void
Selection::foreach_region (void (ARDOUR::Region::*method)(void)) {
for (RegionSelection::iterator i = regions.begin(); i != regions.end(); ++i) {
- ((*i)->region().*(method))();
+ ARDOUR::Region* region = (*i)->region().get();
+ (region->*(method))();
}
}
template<class A> inline void
Selection::foreach_region (void (ARDOUR::Region::*method)(A), A arg) {
for (RegionSelection::iterator i = regions.begin(); i != regions.end(); ++i) {
- ((*i)->region().*(method))(arg);
+ ARDOUR::Region* region = (*i)->region().get();
+ (region->*(method))(arg);
}
}
-#if 0
-
-template<class A> inline void
-Selection::foreach_route (void (ARDOUR::Route::*method)(A), A arg) {
- for (list<ARDOUR::Route*>::iterator i = routes.begin(); i != routes.end(); ++i) {
- ((*i)->region().*(method))(arg);
- }
-}
-
-template<class A1, class A2> inline void
-Selection::foreach_route (void (ARDOUR::Route::*method)(A1,A2), A1 arg1, A2 arg2) {
- for (list<ARDOUR::Route*>::iterator i = routes.begin(); i != routes.end(); ++i) {
- ((*i)->region().*(method))(arg1, arg2);
- }
-}
-
-#endif
-
#endif /* __ardour_gtk_selection_templates_h__ */
diff --git a/gtk2_ardour/send_ui.cc b/gtk2_ardour/send_ui.cc
index 9925ff51d4..897f5f3847 100644
--- a/gtk2_ardour/send_ui.cc
+++ b/gtk2_ardour/send_ui.cc
@@ -98,9 +98,9 @@ SendUI::outs_changed (IOChange change, void* ignored)
}
void
-SendUI::send_going_away (Redirect *ignored)
+SendUI::send_going_away ()
{
- ENSURE_GUI_THREAD (bind (mem_fun (*this, &SendUI::send_going_away), ignored));
+ ENSURE_GUI_THREAD (mem_fun (*this, &SendUI::send_going_away))
delete this;
}
@@ -143,9 +143,9 @@ SendUIWindow::~SendUIWindow ()
}
void
-SendUIWindow::send_going_away (Redirect *ignored)
+SendUIWindow::send_going_away ()
{
- ENSURE_GUI_THREAD(bind (mem_fun (*this, &SendUIWindow::send_going_away), ignored));
+ ENSURE_GUI_THREAD (mem_fun (*this, &SendUIWindow::send_going_away));
delete this;
}
diff --git a/gtk2_ardour/send_ui.h b/gtk2_ardour/send_ui.h
index 1d5a74e102..c8576cab9e 100644
--- a/gtk2_ardour/send_ui.h
+++ b/gtk2_ardour/send_ui.h
@@ -54,7 +54,7 @@ class SendUI : public Gtk::HBox
sigc::connection screen_update_connection;
sigc::connection fast_screen_update_connection;
- void send_going_away (ARDOUR::Redirect*);
+ void send_going_away ();
void ins_changed (ARDOUR::IOChange, void*);
void outs_changed (ARDOUR::IOChange, void*);
};
@@ -71,7 +71,7 @@ class SendUIWindow : public Gtk::Window
Gtk::VBox vpacker;
Gtk::HBox hpacker;
- void send_going_away (ARDOUR::Redirect*);
+ void send_going_away ();
};
#endif /* __ardour_gtk_send_ui_h__ */
diff --git a/gtk2_ardour/sfdb_ui.cc b/gtk2_ardour/sfdb_ui.cc
index d9ded04d2b..6858b8442d 100644
--- a/gtk2_ardour/sfdb_ui.cc
+++ b/gtk2_ardour/sfdb_ui.cc
@@ -32,6 +32,8 @@
#include <ardour/audio_library.h>
#include <ardour/audioregion.h>
#include <ardour/audiofilesource.h>
+#include <ardour/region_factory.h>
+#include <ardour/source_factory.h>
#include "ardour_ui.h"
#include "gui_thread.h"
@@ -187,15 +189,15 @@ SoundFileBox::play_btn_clicked ()
return;
}
- static std::map<string, AudioRegion*> region_cache;
+ static std::map<string, boost::shared_ptr<AudioRegion> > region_cache;
if (region_cache.find (path) == region_cache.end()) {
- AudioRegion::SourceList srclist;
- AudioFileSource* afs;
-
+ SourceList srclist;
+ boost::shared_ptr<AudioFileSource> afs;
+
for (int n = 0; n < sf_info.channels; ++n) {
try {
- afs = AudioFileSource::create (path+":"+string_compose("%1", n));
+ afs = boost::dynamic_pointer_cast<AudioFileSource> (SourceFactory::createReadable (DataType::AUDIO, path+":"+string_compose("%1", n), AudioFileSource::Flag (0)));
srclist.push_back(afs);
} catch (failed_constructor& err) {
@@ -208,16 +210,18 @@ SoundFileBox::play_btn_clicked ()
return;
}
- string result;
- _session->region_name (result, Glib::path_get_basename(srclist[0]->name()), false);
- AudioRegion* a_region = new AudioRegion(srclist, 0, srclist[0]->length(), result, 0, Region::DefaultFlags, false);
- region_cache[path] = a_region;
+ pair<string,boost::shared_ptr<AudioRegion> > newpair;
+
+ _session->region_name (newpair.first, Glib::path_get_basename(srclist[0]->name()), false);
+ newpair.second = boost::dynamic_pointer_cast<AudioRegion> (RegionFactory::create (srclist, 0, srclist[0]->length(), newpair.first, 0, Region::DefaultFlags, false));
+
+ region_cache.insert (newpair);
}
play_btn.hide();
stop_btn.show();
- _session->audition_region(*region_cache[path]);
+ _session->audition_region(region_cache[path]);
}
void
diff --git a/gtk2_ardour/streamview.cc b/gtk2_ardour/streamview.cc
index ff51ca4b9f..3a1237f882 100644
--- a/gtk2_ardour/streamview.cc
+++ b/gtk2_ardour/streamview.cc
@@ -159,18 +159,18 @@ StreamView::set_samples_per_unit (gdouble spp)
}
void
-StreamView::add_region_view (Region *r)
+StreamView::add_region_view (boost::shared_ptr<Region> r)
{
add_region_view_internal (r, true);
}
void
-StreamView::remove_region_view (Region *r)
+StreamView::remove_region_view (boost::shared_ptr<Region> r)
{
ENSURE_GUI_THREAD (bind (mem_fun (*this, &StreamView::remove_region_view), r));
for (list<RegionView *>::iterator i = region_views.begin(); i != region_views.end(); ++i) {
- if (&((*i)->region()) == r) {
+ if (((*i)->region()) == r) {
delete *i;
region_views.erase (i);
break;
@@ -179,7 +179,7 @@ StreamView::remove_region_view (Region *r)
}
void
-StreamView::remove_rec_region (Region *r)
+StreamView::remove_rec_region (boost::shared_ptr<Region> r)
{
ENSURE_GUI_THREAD(bind (mem_fun (*this, &StreamView::remove_rec_region), r));
@@ -188,7 +188,7 @@ StreamView::remove_rec_region (Region *r)
/*NOTREACHED*/
}
- for (list<Region *>::iterator i = rec_regions.begin(); i != rec_regions.end(); ++i) {
+ for (list<boost::shared_ptr<Region> >::iterator i = rec_regions.begin(); i != rec_regions.end(); ++i) {
if (*i == r) {
rec_regions.erase (i);
break;
@@ -304,7 +304,7 @@ StreamView::region_layered (RegionView* rv)
/* this used to be + 1, but regions to the left ended up below
..something.. and couldn't receive events. why? good question.
*/
- rv->get_canvas_group()->raise (rv->region().layer() + 2);
+ rv->get_canvas_group()->raise (rv->region()->layer() + 2);
}
void
@@ -355,11 +355,11 @@ StreamView::update_rec_box ()
}
RegionView*
-StreamView::find_view (const Region& region)
+StreamView::find_view (boost::shared_ptr<const Region> region)
{
for (list<RegionView*>::iterator i = region_views.begin(); i != region_views.end(); ++i) {
- if (&(*i)->region() == &region) {
+ if ((*i)->region() == region) {
return *i;
}
}
@@ -399,7 +399,7 @@ void
StreamView::get_selectables (jack_nframes_t start, jack_nframes_t end, list<Selectable*>& results)
{
for (list<RegionView*>::iterator i = region_views.begin(); i != region_views.end(); ++i) {
- if ((*i)->region().coverage(start, end) != OverlapNone) {
+ if ((*i)->region()->coverage(start, end) != OverlapNone) {
results.push_back (*i);
}
}
diff --git a/gtk2_ardour/streamview.h b/gtk2_ardour/streamview.h
index fb49433cce..6f5e37869a 100644
--- a/gtk2_ardour/streamview.h
+++ b/gtk2_ardour/streamview.h
@@ -83,14 +83,14 @@ public:
Gdk::Color get_region_color () const { return region_color; }
void apply_color (Gdk::Color&, ColorTarget t);
- RegionView* find_view (const ARDOUR::Region&);
+ RegionView* find_view (boost::shared_ptr<const ARDOUR::Region>);
void foreach_regionview (sigc::slot<void,RegionView*> slot);
void set_selected_regionviews (RegionSelection&);
void get_selectables (jack_nframes_t start, jack_nframes_t end, list<Selectable* >&);
void get_inverted_selectables (Selection&, list<Selectable* >& results);
- void add_region_view (ARDOUR::Region*);
+ void add_region_view (boost::shared_ptr<ARDOUR::Region>);
void region_layered (RegionView*);
sigc::signal<void,RegionView*> RegionViewAdded;
@@ -107,9 +107,9 @@ protected:
void update_rec_box ();
virtual void update_rec_regions () = 0;
- virtual void add_region_view_internal (ARDOUR::Region*, bool wait_for_waves) = 0;
- virtual void remove_region_view (ARDOUR::Region* );
- void remove_rec_region (ARDOUR::Region*);
+ virtual void add_region_view_internal (boost::shared_ptr<ARDOUR::Region>, bool wait_for_waves) = 0;
+ virtual void remove_region_view (boost::shared_ptr<ARDOUR::Region> );
+ void remove_rec_region (boost::shared_ptr<ARDOUR::Region>);
void display_diskstream (boost::shared_ptr<ARDOUR::Diskstream>);
virtual void undisplay_diskstream ();
@@ -134,7 +134,7 @@ protected:
sigc::connection screen_update_connection;
vector<RecBoxInfo> rec_rects;
- list<ARDOUR::Region* > rec_regions;
+ list<boost::shared_ptr<ARDOUR::Region> > rec_regions;
bool rec_updating;
bool rec_active;
bool use_rec_regions;
@@ -145,9 +145,9 @@ protected:
vector<sigc::connection> playlist_connections;
sigc::connection playlist_change_connection;
- list<sigc::connection> rec_data_ready_connections;
- jack_nframes_t last_rec_data_frame;
- map<ARDOUR::Source*, bool> rec_data_ready_map;
+ list<sigc::connection> rec_data_ready_connections;
+ jack_nframes_t last_rec_data_frame;
+ map<boost::shared_ptr<ARDOUR::Source>, bool> rec_data_ready_map;
};
#endif /* __ardour_streamview_h__ */
diff --git a/gtk2_ardour/tape_region_view.cc b/gtk2_ardour/tape_region_view.cc
index 4110ad7d98..e697afddb9 100644
--- a/gtk2_ardour/tape_region_view.cc
+++ b/gtk2_ardour/tape_region_view.cc
@@ -50,12 +50,12 @@ const TimeAxisViewItem::Visibility TapeAudioRegionView::default_tape_visibility
TimeAxisViewItem::FullWidthNameHighlight);
TapeAudioRegionView::TapeAudioRegionView (ArdourCanvas::Group *parent, RouteTimeAxisView &tv,
- AudioRegion& r,
+ boost::shared_ptr<AudioRegion> r,
double spu,
Gdk::Color& basic_color)
: AudioRegionView (parent, tv, r, spu, basic_color,
- TimeAxisViewItem::Visibility ((r.position() != 0) ? default_tape_visibility :
+ TimeAxisViewItem::Visibility ((r->position() != 0) ? default_tape_visibility :
TimeAxisViewItem::Visibility (default_tape_visibility|TimeAxisViewItem::HideFrameLeft)))
{
}
@@ -67,8 +67,8 @@ TapeAudioRegionView::init (Gdk::Color& basic_color, bool wfw)
/* every time the wave data changes and peaks are ready, redraw */
- for (uint32_t n = 0; n < audio_region().n_channels(); ++n) {
- audio_region().audio_source(n).PeaksReady.connect (bind (mem_fun(*this, &TapeAudioRegionView::update), n));
+ for (uint32_t n = 0; n < audio_region()->n_channels(); ++n) {
+ audio_region()->audio_source(n)->PeaksReady.connect (bind (mem_fun(*this, &TapeAudioRegionView::update), n));
}
}
@@ -90,7 +90,7 @@ TapeAudioRegionView::update (uint32_t n)
/* this triggers a cache invalidation and redraw in the waveview */
- waves[n]->property_data_src() = &_region;
+ waves[n]->property_data_src() = _region.get();
}
void
diff --git a/gtk2_ardour/tape_region_view.h b/gtk2_ardour/tape_region_view.h
index ed3852e3a9..fbedf19ebc 100644
--- a/gtk2_ardour/tape_region_view.h
+++ b/gtk2_ardour/tape_region_view.h
@@ -30,7 +30,7 @@ class TapeAudioRegionView : public AudioRegionView
public:
TapeAudioRegionView (ArdourCanvas::Group *,
RouteTimeAxisView&,
- ARDOUR::AudioRegion&,
+ boost::shared_ptr<ARDOUR::AudioRegion>,
double initial_samples_per_unit,
Gdk::Color& base_color);
~TapeAudioRegionView ();
diff --git a/gtk2_ardour/time_axis_view.h b/gtk2_ardour/time_axis_view.h
index 3eae76a802..eff2e5fb6a 100644
--- a/gtk2_ardour/time_axis_view.h
+++ b/gtk2_ardour/time_axis_view.h
@@ -180,8 +180,8 @@ class TimeAxisView : public virtual AxisView
virtual void set_selected_regionviews (RegionSelection&) {}
virtual void set_selected_points (PointSelection&) {}
- virtual ARDOUR::Region* find_next_region (jack_nframes_t pos, ARDOUR::RegionPoint, int32_t dir) {
- return 0;
+ virtual boost::shared_ptr<ARDOUR::Region> find_next_region (jack_nframes_t pos, ARDOUR::RegionPoint, int32_t dir) {
+ return boost::shared_ptr<ARDOUR::Region> ();
}
void order_selection_trims (ArdourCanvas::Item *item, bool put_start_on_top);