summaryrefslogtreecommitdiff
path: root/gtk2_ardour
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2006-08-24 07:37:17 +0000
committerDavid Robillard <d@drobilla.net>2006-08-24 07:37:17 +0000
commit25d1670a61d19e795227b939a98be9cf5a050c67 (patch)
treef288677bdbc2a2ff85763e59e5a9f801ca8f8489 /gtk2_ardour
parentea71de278461b2bc0240515b82bb56ef68f5eee3 (diff)
Merged with trunk R846
Removed some overly verbose debug printing git-svn-id: svn://localhost/ardour2/branches/midi@847 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour')
-rwxr-xr-xgtk2_ardour/ardbg5
-rwxr-xr-xgtk2_ardour/ardev5
-rwxr-xr-xgtk2_ardour/ardev_common.sh6
-rw-r--r--gtk2_ardour/ardour_ui.cc104
-rw-r--r--gtk2_ardour/ardour_ui.h22
-rw-r--r--gtk2_ardour/ardour_ui_dialogs.cc5
-rw-r--r--gtk2_ardour/ardour_ui_ed.cc10
-rw-r--r--gtk2_ardour/audio_region_view.cc4
-rw-r--r--gtk2_ardour/audio_streamview.cc8
-rw-r--r--gtk2_ardour/audio_streamview.h2
-rw-r--r--gtk2_ardour/automation_line.cc11
-rw-r--r--gtk2_ardour/automation_time_axis.cc12
-rw-r--r--gtk2_ardour/axis_view.h2
-rw-r--r--gtk2_ardour/editor.cc20
-rw-r--r--gtk2_ardour/editor.h2
-rw-r--r--gtk2_ardour/editor_audio_import.cc20
-rw-r--r--gtk2_ardour/editor_keyboard.cc2
-rw-r--r--gtk2_ardour/editor_markers.cc14
-rw-r--r--gtk2_ardour/editor_mouse.cc48
-rw-r--r--gtk2_ardour/editor_ops.cc76
-rw-r--r--gtk2_ardour/editor_route_list.cc136
-rw-r--r--gtk2_ardour/editor_tempodisplay.cc12
-rw-r--r--gtk2_ardour/editor_timefx.cc4
-rw-r--r--gtk2_ardour/gain_automation_time_axis.cc2
-rw-r--r--gtk2_ardour/location_ui.cc6
-rw-r--r--gtk2_ardour/midi_streamview.cc7
-rw-r--r--gtk2_ardour/mixer_ui.cc62
-rw-r--r--gtk2_ardour/mixer_ui.h2
-rw-r--r--gtk2_ardour/pan_automation_time_axis.cc2
-rw-r--r--gtk2_ardour/playlist_selector.cc6
-rw-r--r--gtk2_ardour/redirect_automation_time_axis.cc2
-rw-r--r--gtk2_ardour/region_gain_line.cc8
-rw-r--r--gtk2_ardour/route_params_ui.cc35
-rw-r--r--gtk2_ardour/route_params_ui.h2
-rw-r--r--gtk2_ardour/route_time_axis.cc23
-rw-r--r--gtk2_ardour/route_ui.cc15
-rw-r--r--gtk2_ardour/route_ui.h2
-rw-r--r--gtk2_ardour/selection.cc9
-rw-r--r--gtk2_ardour/streamview.cc8
-rw-r--r--gtk2_ardour/streamview.h4
40 files changed, 378 insertions, 347 deletions
diff --git a/gtk2_ardour/ardbg b/gtk2_ardour/ardbg
index 9d3f5bf6c7..115db85f59 100755
--- a/gtk2_ardour/ardbg
+++ b/gtk2_ardour/ardbg
@@ -1,3 +1,4 @@
#!/bin/sh
-source ardev_common.sh
-exec gdb ./ardour.bin "$*"
+dir=`dirname "$0"`
+source $dir/ardev_common.sh
+exec gdb gtk2_ardour/ardour.bin $*
diff --git a/gtk2_ardour/ardev b/gtk2_ardour/ardev
index 017a7e337d..751557d634 100755
--- a/gtk2_ardour/ardev
+++ b/gtk2_ardour/ardev
@@ -1,4 +1,3 @@
#!/bin/sh
-
-source ardev_common.sh
-exec ./ardour.bin --novst $*
+source `dirname "$0"`/ardev_common.sh
+exec gtk2_ardour/ardour.bin --novst "$*"
diff --git a/gtk2_ardour/ardev_common.sh b/gtk2_ardour/ardev_common.sh
index bf644f3e84..df4bb025c0 100755
--- a/gtk2_ardour/ardev_common.sh
+++ b/gtk2_ardour/ardev_common.sh
@@ -1,8 +1,10 @@
+cd `dirname "$0"`/..
+
#export G_DEBUG=fatal_criticals
-export ARDOUR_PATH=./glade:./pixmaps:.
+export ARDOUR_PATH=gtk2_ardour/glade:gtk2_ardour/pixmaps:gtk2_ardour
-export LD_LIBRARY_PATH=../libs/surfaces/control_protocol:../libs/ardour:../libs/midi++2:../libs/pbd:../libs/soundtouch:../libs/gtkmm2ext:../libs/sigc++2:../libs/glibmm2:../libs/gtkmm2/atk:../libs/gtkmm2/pango:../libs/gtkmm2/gdk:../libs/gtkmm2/gtk:../libs/libgnomecanvasmm:../libs/libsndfile:../libs/appleutility:$LD_LIBRARY_PATH
+export LD_LIBRARY_PATH=libs/surfaces/control_protocol:libs/ardour:libs/midi++2:libs/pbd:libs/soundtouch:libs/gtkmm2ext:libs/sigc++2:libs/glibmm2:libs/gtkmm2/atk:libs/gtkmm2/pango:libs/gtkmm2/gdk:libs/gtkmm2/gtk:libs/libgnomecanvasmm:libs/libsndfile:libs/appleutility:$LD_LIBRARY_PATH
# DYLD_LIBRARY_PATH is for darwin.
export DYLD_LIBRARY_PATH=$LD_LIBRARY_PATH
diff --git a/gtk2_ardour/ardour_ui.cc b/gtk2_ardour/ardour_ui.cc
index 34718dfb1c..de117a1399 100644
--- a/gtk2_ardour/ardour_ui.cc
+++ b/gtk2_ardour/ardour_ui.cc
@@ -546,7 +546,7 @@ void
ARDOUR_UI::count_recenabled_diskstreams (Route& route)
{
Track* track = dynamic_cast<Track*>(&route);
- if (track && track->diskstream().record_enabled()) {
+ if (track && track->diskstream()->record_enabled()) {
rec_enabled_diskstreams++;
}
}
@@ -869,9 +869,9 @@ ARDOUR_UI::open_session ()
void
-ARDOUR_UI::session_add_midi_route (bool disk)
+ARDOUR_UI::session_add_midi_route (bool disk, uint32_t how_many)
{
- boost::shared_ptr<Route> route;
+ list<boost::shared_ptr<MidiTrack> > tracks;
if (session == 0) {
warning << _("You cannot add a track without a session already loaded.") << endmsg;
@@ -880,14 +880,21 @@ ARDOUR_UI::session_add_midi_route (bool disk)
try {
if (disk) {
- if ((route = session->new_midi_track (/*mode*/)) == 0) {
- error << _("could not create new midi track") << endmsg;
+
+ tracks = session->new_midi_track (ARDOUR::Normal, how_many);
+
+ if (tracks.size() != how_many) {
+ if (how_many == 1) {
+ error << _("could not create a new midi track") << endmsg;
+ } else {
+ error << string_compose (_("could not create %1 new midi tracks"), how_many) << endmsg;
+ }
}
- } else {
+ } /*else {
if ((route = session->new_midi_route ()) == 0) {
error << _("could not create new midi bus") << endmsg;
}
- }
+ }*/
}
catch (...) {
@@ -902,23 +909,38 @@ restart JACK with more ports."));
void
-ARDOUR_UI::session_add_audio_route (bool disk, int32_t input_channels, int32_t output_channels, ARDOUR::TrackMode mode)
+ARDOUR_UI::session_add_audio_route (bool track, int32_t input_channels, int32_t output_channels, ARDOUR::TrackMode mode, uint32_t how_many)
{
- boost::shared_ptr<Route> route;
+ list<boost::shared_ptr<AudioTrack> > tracks;
+ Session::RouteList routes;
if (session == 0) {
- warning << _("You cannot add a track without a session already loaded.") << endmsg;
+ warning << _("You cannot add a track or bus without a session already loaded.") << endmsg;
return;
}
try {
- if (disk) {
- if ((route = session->new_audio_track (input_channels, output_channels, mode)) == 0) {
- error << _("could not create new audio track") << endmsg;
+ if (track) {
+ tracks = session->new_audio_track (input_channels, output_channels, mode, how_many);
+
+ if (tracks.size() != how_many) {
+ if (how_many == 1) {
+ error << _("could not create a new audio track") << endmsg;
+ } else {
+ error << string_compose (_("could not create %1 new audio tracks"), how_many) << endmsg;
+ }
}
+
} else {
- if ((route = session->new_audio_route (input_channels, output_channels)) == 0) {
- error << _("could not create new audio bus") << endmsg;
+
+ routes = session->new_audio_route (input_channels, output_channels, how_many);
+
+ if (routes.size() != how_many) {
+ if (how_many == 1) {
+ error << _("could not create a new audio track") << endmsg;
+ } else {
+ error << string_compose (_("could not create %1 new audio tracks"), how_many) << endmsg;
+ }
}
}
@@ -946,11 +968,6 @@ restart JACK with more ports."));
}
void
-ARDOUR_UI::diskstream_added (Diskstream* ds)
-{
-}
-
-void
ARDOUR_UI::do_transport_locate (jack_nframes_t new_position)
{
jack_nframes_t _preroll;
@@ -1200,7 +1217,7 @@ ARDOUR_UI::toggle_record_enable (uint32_t dstream)
Track* t;
if ((t = dynamic_cast<Track*>(r.get())) != 0) {
- t->diskstream().set_record_enabled (!t->diskstream().record_enabled());
+ t->diskstream()->set_record_enabled (!t->diskstream()->record_enabled());
}
}
if (session == 0) {
@@ -1326,7 +1343,6 @@ ARDOUR_UI::start_engine ()
settings for a new session
*/
session->save_state ("");
- session->save_history ("");
}
/* there is too much going on, in too many threads, for us to
@@ -1500,7 +1516,6 @@ ARDOUR_UI::save_state_canfail (string name)
}
if ((ret = session->save_state (name)) != 0) {
- session->save_history (name);
return ret;
}
}
@@ -2080,15 +2095,15 @@ ARDOUR_UI::add_route ()
}
ResponseType r = (ResponseType) add_route_dialog->run ();
-
+
add_route_dialog->hide();
switch (r) {
- case RESPONSE_ACCEPT:
- break;
- default:
- return;
- break;
+ case RESPONSE_ACCEPT:
+ break;
+ default:
+ return;
+ break;
}
if ((count = add_route_dialog->count()) <= 0) {
@@ -2110,25 +2125,20 @@ ARDOUR_UI::add_route ()
/* XXX do something with name template */
- while (count) {
- if (add_route_dialog->type() == ARDOUR::DataType::MIDI) {
- if (track) {
- session_add_midi_track();
- } else {
- MessageDialog msg (*editor,
- _("Sorry, MIDI Busses are not supported at this time."));
- msg.run ();
- //session_add_midi_bus();
- }
- } else if (track) {
- session_add_audio_track (input_chan, output_chan, add_route_dialog->mode());
- } else {
- session_add_audio_bus (input_chan, output_chan);
+ if (add_route_dialog->type() == ARDOUR::DataType::MIDI) {
+ if (track) {
+ session_add_midi_track(count);
+ } else {
+ MessageDialog msg (*editor,
+ _("Sorry, MIDI Busses are not supported at this time."));
+ msg.run ();
+ //session_add_midi_bus();
}
- --count;
-
- while (Main::events_pending()) {
- Main::iteration ();
+ } else {
+ if (track) {
+ session_add_audio_track (input_chan, output_chan, add_route_dialog->mode(), count);
+ } else {
+ session_add_audio_bus (input_chan, output_chan, count);
}
}
}
diff --git a/gtk2_ardour/ardour_ui.h b/gtk2_ardour/ardour_ui.h
index 0af88eec18..1f5277b5fe 100644
--- a/gtk2_ardour/ardour_ui.h
+++ b/gtk2_ardour/ardour_ui.h
@@ -189,21 +189,21 @@ class ARDOUR_UI : public Gtkmm2ext::UI
void add_route ();
- void session_add_audio_track (int input_channels, int32_t output_channels, ARDOUR::TrackMode mode) {
- session_add_audio_route (true, input_channels, output_channels, mode);
+ void session_add_audio_track (int input_channels, int32_t output_channels, ARDOUR::TrackMode mode, uint32_t how_many) {
+ session_add_audio_route (true, input_channels, output_channels, mode, how_many);
}
- void session_add_audio_bus (int input_channels, int32_t output_channels) {
- session_add_audio_route (false, input_channels, output_channels, ARDOUR::Normal);
+ void session_add_audio_bus (int input_channels, int32_t output_channels, uint32_t how_many) {
+ session_add_audio_route (false, input_channels, output_channels, ARDOUR::Normal, how_many);
}
- void session_add_midi_track () {
- session_add_midi_route (true);
+ void session_add_midi_track (uint32_t how_many) {
+ session_add_midi_route (true, how_many);
}
- void session_add_midi_bus () {
+ /*void session_add_midi_bus () {
session_add_midi_route (false);
- }
+ }*/
void set_engine (ARDOUR::AudioEngine&);
@@ -526,8 +526,6 @@ class ARDOUR_UI : public Gtkmm2ext::UI
sigc::connection point_one_second_connection;
sigc::connection point_zero_one_second_connection;
- void diskstream_added (ARDOUR::Diskstream*);
-
gint session_menu (GdkEventButton *);
bool _will_create_new_session_automatically;
@@ -540,8 +538,8 @@ class ARDOUR_UI : public Gtkmm2ext::UI
void save_template ();
- void session_add_audio_route (bool disk, int32_t input_channels, int32_t output_channels, ARDOUR::TrackMode mode);
- void session_add_midi_route (bool disk);
+ void session_add_audio_route (bool disk, int32_t input_channels, int32_t output_channels, ARDOUR::TrackMode mode, uint32_t how_many);
+ void session_add_midi_route (bool disk, uint32_t how_many);
void set_transport_sensitivity (bool);
diff --git a/gtk2_ardour/ardour_ui_dialogs.cc b/gtk2_ardour/ardour_ui_dialogs.cc
index 5a1ec87462..c90480c1dd 100644
--- a/gtk2_ardour/ardour_ui_dialogs.cc
+++ b/gtk2_ardour/ardour_ui_dialogs.cc
@@ -76,10 +76,6 @@ ARDOUR_UI::connect_to_session (Session *s)
rec_button.set_sensitive (true);
shuttle_box.set_sensitive (true);
- if (session->n_diskstreams() == 0) {
- session->DiskstreamAdded.connect (mem_fun(*this, &ARDOUR_UI::diskstream_added));
- }
-
if (connection_editor) {
connection_editor->set_session (s);
}
@@ -156,7 +152,6 @@ ARDOUR_UI::unload_session ()
case 1:
session->save_state ("");
- session->save_history ("");
break;
}
}
diff --git a/gtk2_ardour/ardour_ui_ed.cc b/gtk2_ardour/ardour_ui_ed.cc
index fc5ffb6e9c..2fe34127dc 100644
--- a/gtk2_ardour/ardour_ui_ed.cc
+++ b/gtk2_ardour/ardour_ui_ed.cc
@@ -194,14 +194,14 @@ ARDOUR_UI::install_actions ()
act = ActionManager::register_action (common_actions, X_("About"), _("About"), mem_fun(*this, &ARDOUR_UI::show_splash));
act = ActionManager::register_toggle_action (common_actions, X_("ToggleColorManager"), _("Colors"), mem_fun(*this, &ARDOUR_UI::toggle_color_manager));
ActionManager::session_sensitive_actions.push_back (act);
- act = ActionManager::register_action (common_actions, X_("AddAudioTrack"), _("Add Audio Track"), bind (mem_fun(*this, &ARDOUR_UI::session_add_audio_track), 1, 1, ARDOUR::Normal));
+ act = ActionManager::register_action (common_actions, X_("AddAudioTrack"), _("Add Audio Track"), bind (mem_fun(*this, &ARDOUR_UI::session_add_audio_track), 1, 1, ARDOUR::Normal, 1));
ActionManager::session_sensitive_actions.push_back (act);
- act = ActionManager::register_action (common_actions, X_("AddAudioBus"), _("Add Audio Bus"), bind (mem_fun(*this, &ARDOUR_UI::session_add_audio_bus), 1, 1));
+ act = ActionManager::register_action (common_actions, X_("AddAudioBus"), _("Add Audio Bus"), bind (mem_fun(*this, &ARDOUR_UI::session_add_audio_bus), 1, 1, 1));
ActionManager::session_sensitive_actions.push_back (act);
- act = ActionManager::register_action (common_actions, X_("AddMIDITrack"), _("Add MIDI Track"), (mem_fun(*this, &ARDOUR_UI::session_add_midi_track)));
- ActionManager::session_sensitive_actions.push_back (act);
- act = ActionManager::register_action (common_actions, X_("AddMidiBus"), _("Add Midi Bus"), mem_fun(*this, &ARDOUR_UI::session_add_midi_bus));
+ act = ActionManager::register_action (common_actions, X_("AddMIDITrack"), _("Add MIDI Track"), bind (mem_fun(*this, &ARDOUR_UI::session_add_midi_track), 1));
ActionManager::session_sensitive_actions.push_back (act);
+ //act = ActionManager::register_action (common_actions, X_("AddMidiBus"), _("Add Midi Bus"), mem_fun(*this, &ARDOUR_UI::session_add_midi_bus));
+ //ActionManager::session_sensitive_actions.push_back (act);
act = ActionManager::register_action (common_actions, X_("Save"), _("Save"), bind (mem_fun(*this, &ARDOUR_UI::save_state), string("")));
ActionManager::session_sensitive_actions.push_back (act);
act = ActionManager::register_action (common_actions, X_("RemoveLastCapture"), _("Remove Last Capture"), mem_fun(*this, &ARDOUR_UI::remove_last_capture));
diff --git a/gtk2_ardour/audio_region_view.cc b/gtk2_ardour/audio_region_view.cc
index acde408c6b..93af5b3ec0 100644
--- a/gtk2_ardour/audio_region_view.cc
+++ b/gtk2_ardour/audio_region_view.cc
@@ -928,13 +928,13 @@ AudioRegionView::add_gain_point_event (ArdourCanvas::Item *item, GdkEvent *ev)
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));
+ trackview.session().add_command (new MementoCommand<AudioRegion>(audio_region(), &before, &after));
}
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));
+ trackview.session().add_command (new MementoCommand<Curve>(audio_region().envelope(), &before, &after));
trackview.session().commit_reversible_command ();
}
diff --git a/gtk2_ardour/audio_streamview.cc b/gtk2_ardour/audio_streamview.cc
index 523395c503..83d1825ef5 100644
--- a/gtk2_ardour/audio_streamview.cc
+++ b/gtk2_ardour/audio_streamview.cc
@@ -224,7 +224,7 @@ AudioStreamView::playlist_modified ()
}
void
-AudioStreamView::playlist_changed (Diskstream *ds)
+AudioStreamView::playlist_changed (boost::shared_ptr<Diskstream> ds)
{
ENSURE_GUI_THREAD (bind (mem_fun (*this, &AudioStreamView::playlist_changed), ds));
@@ -398,7 +398,7 @@ AudioStreamView::setup_rec_box ()
rec_data_ready_connections.clear();
// FIXME
- AudioDiskstream* ads = dynamic_cast<AudioDiskstream*>(_trackview.get_diskstream());
+ boost::shared_ptr<AudioDiskstream> ads = boost::dynamic_pointer_cast<AudioDiskstream>(_trackview.get_diskstream());
assert(ads);
for (uint32_t n=0; n < ads->n_channels().get(DataType::AUDIO); ++n) {
@@ -430,8 +430,8 @@ AudioStreamView::setup_rec_box ()
AudioTrack* at;
at = _trackview.audio_track(); /* we know what it is already */
- AudioDiskstream& ds = at->audio_diskstream();
- jack_nframes_t frame_pos = ds.current_capture_start ();
+ boost::shared_ptr<AudioDiskstream> ds = at->audio_diskstream();
+ jack_nframes_t frame_pos = ds->current_capture_start ();
gdouble xstart = _trackview.editor.frame_to_pixel (frame_pos);
gdouble xend;
uint32_t fill_color;
diff --git a/gtk2_ardour/audio_streamview.h b/gtk2_ardour/audio_streamview.h
index 979240bd50..cf66637b9b 100644
--- a/gtk2_ardour/audio_streamview.h
+++ b/gtk2_ardour/audio_streamview.h
@@ -87,7 +87,7 @@ class AudioStreamView : public StreamView
void undisplay_diskstream ();
void redisplay_diskstream ();
void playlist_modified ();
- void playlist_changed (ARDOUR::Diskstream *ds);
+ void playlist_changed (boost::shared_ptr<ARDOUR::Diskstream>);
void add_crossfade (ARDOUR::Crossfade*);
void remove_crossfade (ARDOUR::Crossfade*);
diff --git a/gtk2_ardour/automation_line.cc b/gtk2_ardour/automation_line.cc
index f3e30c4523..c0ba957af8 100644
--- a/gtk2_ardour/automation_line.cc
+++ b/gtk2_ardour/automation_line.cc
@@ -244,6 +244,9 @@ AutomationLine::AutomationLine (const string & name, TimeAxisView& tv, ArdourCan
line->signal_event().connect (mem_fun (*this, &AutomationLine::event_handler));
alist.StateChanged.connect (mem_fun(*this, &AutomationLine::list_changed));
+
+ trackview.session().register_with_memento_command_factory(_id, this);
+
}
AutomationLine::~AutomationLine ()
@@ -888,7 +891,7 @@ AutomationLine::start_drag (ControlPoint* cp, float fraction)
}
trackview.editor.current_session()->begin_reversible_command (str);
- trackview.editor.current_session()->add_command (new MementoUndoCommand<AutomationLine>(*this, get_state()));
+ trackview.editor.current_session()->add_command (new MementoCommand<AutomationLine>(*this, &get_state(), 0));
first_drag_fraction = fraction;
last_drag_fraction = fraction;
@@ -937,7 +940,7 @@ AutomationLine::end_drag (ControlPoint* cp)
update_pending = false;
- trackview.editor.current_session()->add_command (new MementoRedoCommand<AutomationLine>(*this, get_state()));
+ trackview.editor.current_session()->add_command (new MementoCommand<AutomationLine>(*this, 0, &get_state()));
trackview.editor.current_session()->commit_reversible_command ();
trackview.editor.current_session()->set_dirty ();
}
@@ -1018,7 +1021,7 @@ AutomationLine::remove_point (ControlPoint& cp)
alist.erase (mr.start, mr.end);
- trackview.editor.current_session()->add_command(new MementoCommand<AutomationLine>(*this, before, get_state()));
+ trackview.editor.current_session()->add_command(new MementoCommand<AutomationLine>(*this, &before, &get_state()));
trackview.editor.current_session()->commit_reversible_command ();
trackview.editor.current_session()->set_dirty ();
}
@@ -1228,7 +1231,7 @@ AutomationLine::clear ()
/* parent must create command */
XMLNode &before = get_state();
alist.clear();
- trackview.editor.current_session()->add_command (new MementoCommand<AutomationLine>(*this, before, get_state()));
+ trackview.editor.current_session()->add_command (new MementoCommand<AutomationLine>(*this, &before, &get_state()));
trackview.editor.current_session()->commit_reversible_command ();
trackview.editor.current_session()->set_dirty ();
}
diff --git a/gtk2_ardour/automation_time_axis.cc b/gtk2_ardour/automation_time_axis.cc
index 7025a11178..80ed2acd16 100644
--- a/gtk2_ardour/automation_time_axis.cc
+++ b/gtk2_ardour/automation_time_axis.cc
@@ -482,7 +482,7 @@ AutomationTimeAxisView::cut_copy_clear_one (AutomationLine& line, Selection& sel
case Cut:
if ((what_we_got = alist.cut (selection.time.front().start, selection.time.front().end)) != 0) {
editor.get_cut_buffer().add (what_we_got);
- _session.add_command(new MementoCommand<AutomationList>(alist, before, alist.get_state()));
+ _session.add_command(new MementoCommand<AutomationList>(alist, &before, &alist.get_state()));
ret = true;
}
break;
@@ -494,7 +494,7 @@ AutomationTimeAxisView::cut_copy_clear_one (AutomationLine& line, Selection& sel
case Clear:
if ((what_we_got = alist.cut (selection.time.front().start, selection.time.front().end)) != 0) {
- _session.add_command(new MementoCommand<AutomationList>(alist, before, alist.get_state()));
+ _session.add_command(new MementoCommand<AutomationList>(alist, &before, &alist.get_state()));
delete what_we_got;
what_we_got = 0;
ret = true;
@@ -526,7 +526,7 @@ AutomationTimeAxisView::reset_objects_one (AutomationLine& line, PointSelection&
{
AutomationList& alist (line.the_list());
- _session.add_command (new MementoUndoCommand<AutomationList>(alist, alist.get_state()));
+ _session.add_command (new MementoCommand<AutomationList>(alist, &alist.get_state(), 0));
for (PointSelection::iterator i = selection.begin(); i != selection.end(); ++i) {
@@ -569,7 +569,7 @@ AutomationTimeAxisView::cut_copy_clear_objects_one (AutomationLine& line, PointS
case Cut:
if ((what_we_got = alist.cut ((*i).start, (*i).end)) != 0) {
editor.get_cut_buffer().add (what_we_got);
- _session.add_command (new MementoCommand<AutomationList>(alist, before, alist.get_state()));
+ _session.add_command (new MementoCommand<AutomationList>(alist, &before, &alist.get_state()));
ret = true;
}
break;
@@ -581,7 +581,7 @@ AutomationTimeAxisView::cut_copy_clear_objects_one (AutomationLine& line, PointS
case Clear:
if ((what_we_got = alist.cut ((*i).start, (*i).end)) != 0) {
- _session.add_command (new MementoCommand<AutomationList>(alist, before, alist.get_state()));
+ _session.add_command (new MementoCommand<AutomationList>(alist, &before, &alist.get_state()));
delete what_we_got;
what_we_got = 0;
ret = true;
@@ -640,7 +640,7 @@ AutomationTimeAxisView::paste_one (AutomationLine& line, jack_nframes_t pos, flo
XMLNode &before = alist.get_state();
alist.paste (copy, pos, times);
- _session.add_command (new MementoCommand<AutomationList>(alist, before, alist.get_state()));
+ _session.add_command (new MementoCommand<AutomationList>(alist, &before, &alist.get_state()));
return true;
}
diff --git a/gtk2_ardour/axis_view.h b/gtk2_ardour/axis_view.h
index 12b7d32188..4ae8f8d46e 100644
--- a/gtk2_ardour/axis_view.h
+++ b/gtk2_ardour/axis_view.h
@@ -84,8 +84,6 @@ class AxisView : public virtual Selectable
Gtk::Label name_label;
- bool _selected;
-
bool _marked_for_display;
}; /* class AxisView */
diff --git a/gtk2_ardour/editor.cc b/gtk2_ardour/editor.cc
index 5c3847730c..eceaf24d38 100644
--- a/gtk2_ardour/editor.cc
+++ b/gtk2_ardour/editor.cc
@@ -705,6 +705,7 @@ Editor::Editor (AudioEngine& eng)
ControlProtocol::ScrollTimeline.connect (mem_fun (*this, &Editor::control_scroll));
constructed = true;
instant_save ();
+
}
Editor::~Editor()
@@ -1339,6 +1340,9 @@ Editor::connect_to_session (Session *t)
no_route_list_redisplay = false;
redisplay_route_list ();
}
+
+ /* register for undo history */
+ session->register_with_memento_command_factory(_id, this);
}
void
@@ -1592,7 +1596,7 @@ Editor::build_track_region_context_menu (jack_nframes_t frame)
AudioTimeAxisView* atv = dynamic_cast<AudioTimeAxisView*> (clicked_axisview);
if (atv) {
- Diskstream* ds;
+ boost::shared_ptr<Diskstream> ds;
Playlist* pl;
if ((ds = atv->get_diskstream()) && ((pl = ds->playlist()))) {
@@ -1619,7 +1623,7 @@ Editor::build_track_crossfade_context_menu (jack_nframes_t frame)
AudioTimeAxisView* atv = dynamic_cast<AudioTimeAxisView*> (clicked_axisview);
if (atv) {
- Diskstream* ds;
+ boost::shared_ptr<Diskstream> ds;
Playlist* pl;
AudioPlaylist* apl;
@@ -2888,7 +2892,7 @@ void
Editor::commit_reversible_command ()
{
if (session) {
- session->commit_reversible_command (new MementoCommand<Editor>(*this, *before, get_state()));
+ session->commit_reversible_command (new MementoCommand<Editor>(*this, before, &get_state()));
}
}
@@ -3016,7 +3020,7 @@ Editor::mapped_set_selected_regionview_from_click (RouteTimeAxisView& tv, uint32
Playlist* pl;
vector<Region*> results;
RegionView* marv;
- Diskstream* ds;
+ boost::shared_ptr<Diskstream> ds;
if ((ds = tv.get_diskstream()) == 0) {
/* bus */
@@ -3242,7 +3246,7 @@ Editor::set_selected_regionview_from_region_list (Region& region, Selection::Ope
Playlist* pl;
vector<Region*> results;
RegionView* marv;
- Diskstream* ds;
+ boost::shared_ptr<Diskstream> ds;
if ((ds = tatv->get_diskstream()) == 0) {
/* bus */
@@ -3750,10 +3754,12 @@ Editor::get_valid_views (TimeAxisView* track, RouteGroup* group)
void
Editor::set_zoom_focus (ZoomFocus f)
{
+ vector<string> txt = internationalize (zoom_focus_strings);
+ zoom_focus_selector.set_active_text (txt[(int)f]);
+
if (zoom_focus != f) {
zoom_focus = f;
- vector<string> txt = internationalize (zoom_focus_strings);
- zoom_focus_selector.set_active_text (txt[(int)f]);
+
ZoomFocusChanged (); /* EMIT_SIGNAL */
instant_save ();
diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h
index 40ece795b1..970acdc3a9 100644
--- a/gtk2_ardour/editor.h
+++ b/gtk2_ardour/editor.h
@@ -466,7 +466,7 @@ class Editor : public PublicEditor
void add_crossfade_context_items (AudioStreamView*, ARDOUR::Crossfade*, Gtk::Menu_Helpers::MenuList&, bool many);
void add_selection_context_items (Gtk::Menu_Helpers::MenuList&);
- void handle_new_route (boost::shared_ptr<ARDOUR::Route>);
+ void handle_new_route (ARDOUR::Session::RouteList&);
void remove_route (TimeAxisView *);
bool route_removal;
diff --git a/gtk2_ardour/editor_audio_import.cc b/gtk2_ardour/editor_audio_import.cc
index de256ce0e6..2b704e7372 100644
--- a/gtk2_ardour/editor_audio_import.cc
+++ b/gtk2_ardour/editor_audio_import.cc
@@ -318,13 +318,13 @@ Editor::finish_bringing_in_audio (AudioRegion& region, uint32_t in_chans, uint32
case ImportToTrack:
if (track) {
- Playlist* playlist = track->diskstream().playlist();
+ Playlist* playlist = track->diskstream()->playlist();
AudioRegion* copy = new AudioRegion (region);
begin_reversible_command (_("insert sndfile"));
XMLNode &before = playlist->get_state();
playlist->add_region (*copy, pos);
- session->add_command (new MementoCommand<Playlist>(*playlist, before, playlist->get_state()));
+ session->add_command (new MementoCommand<Playlist>(*playlist, &before, &playlist->get_state()));
commit_reversible_command ();
pos += region.length();
@@ -333,17 +333,21 @@ Editor::finish_bringing_in_audio (AudioRegion& region, uint32_t in_chans, uint32
case ImportAsTrack:
{
- boost::shared_ptr<AudioTrack> at (session->new_audio_track (in_chans, out_chans, Normal));
- copy = new AudioRegion (region);
- at->diskstream().playlist()->add_region (*copy, pos);
+ 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);
+ }
break;
}
case ImportAsTapeTrack:
{
- boost::shared_ptr<AudioTrack> at (session->new_audio_track (in_chans, out_chans, Destructive));
- copy = new AudioRegion (region);
- at->diskstream().playlist()->add_region (*copy, pos);
+ 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);
+ }
break;
}
}
diff --git a/gtk2_ardour/editor_keyboard.cc b/gtk2_ardour/editor_keyboard.cc
index f48d860d15..95289c7f5a 100644
--- a/gtk2_ardour/editor_keyboard.cc
+++ b/gtk2_ardour/editor_keyboard.cc
@@ -108,7 +108,7 @@ Editor::kbd_mute_unmute_region ()
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));
+ session->add_command (new MementoCommand<ARDOUR::Playlist>(*(entered_regionview->region().playlist()), &before, &after));
commit_reversible_command();
}
}
diff --git a/gtk2_ardour/editor_markers.cc b/gtk2_ardour/editor_markers.cc
index ccc1415888..40f00c2e10 100644
--- a/gtk2_ardour/editor_markers.cc
+++ b/gtk2_ardour/editor_markers.cc
@@ -294,7 +294,7 @@ Editor::mouse_add_new_marker (jack_nframes_t where)
XMLNode &before = session->locations()->get_state();
session->locations()->add (location, true);
XMLNode &after = session->locations()->get_state();
- session->add_command (new MementoCommand<Locations>(*(session->locations()), before, after));
+ session->add_command (new MementoCommand<Locations>(*(session->locations()), &before, &after));
session->commit_reversible_command ();
}
}
@@ -334,7 +334,7 @@ Editor::really_remove_marker (Location* loc)
XMLNode &before = session->locations()->get_state();
session->locations()->remove (loc);
XMLNode &after = session->locations()->get_state();
- session->add_command (new MementoCommand<Locations>(*(session->locations()), before, after));
+ session->add_command (new MementoCommand<Locations>(*(session->locations()), &before, &after));
session->commit_reversible_command ();
return FALSE;
}
@@ -847,7 +847,7 @@ Editor::marker_menu_rename ()
loc->set_name (txt);
XMLNode &after = session->locations()->get_state();
- session->add_command (new MementoCommand<Locations>(*(session->locations()), before, after));
+ session->add_command (new MementoCommand<Locations>(*(session->locations()), &before, &after));
commit_reversible_command ();
}
@@ -876,14 +876,14 @@ Editor::new_transport_marker_menu_set_loop ()
session->locations()->add (loc, true);
session->set_auto_loop_location (loc);
XMLNode &after = session->locations()->get_state();
- session->add_command (new MementoCommand<Locations>(*(session->locations()), before, after));
+ session->add_command (new MementoCommand<Locations>(*(session->locations()), &before, &after));
}
else {
XMLNode &before = tll->get_state();
tll->set_hidden (false, this);
tll->set (temp_location->start(), temp_location->end());
XMLNode &after = tll->get_state();
- session->add_command (new MementoCommand<Location>(*tll, before, after));
+ session->add_command (new MementoCommand<Location>(*tll, &before, &after));
}
commit_reversible_command ();
@@ -904,13 +904,13 @@ Editor::new_transport_marker_menu_set_punch ()
session->locations()->add (tpl, true);
session->set_auto_punch_location (tpl);
XMLNode &after = session->locations()->get_state();
- session->add_command (new MementoCommand<Locations>(*(session->locations()), before, after));
+ session->add_command (new MementoCommand<Locations>(*(session->locations()), &before, &after));
} else {
XMLNode &before = tpl->get_state();
tpl->set_hidden(false, this);
tpl->set(temp_location->start(), temp_location->end());
XMLNode &after = tpl->get_state();
- session->add_command (new MementoCommand<Location>(*tpl, before, after));
+ session->add_command (new MementoCommand<Location>(*tpl, &before, &after));
}
commit_reversible_command ();
diff --git a/gtk2_ardour/editor_mouse.cc b/gtk2_ardour/editor_mouse.cc
index eb0bd432e3..df2c1d101c 100644
--- a/gtk2_ardour/editor_mouse.cc
+++ b/gtk2_ardour/editor_mouse.cc
@@ -1825,8 +1825,8 @@ Editor::fade_in_drag_finished_callback (ArdourCanvas::Item* item, GdkEvent* even
XMLNode &after = arv->audio_region().get_state();
session->add_command(new MementoCommand<ARDOUR::AudioRegion>(arv->audio_region(),
- before,
- after));
+ &before,
+ &after));
commit_reversible_command ();
fade_in_drag_motion_callback (item, event);
}
@@ -1921,7 +1921,7 @@ Editor::fade_out_drag_finished_callback (ArdourCanvas::Item* item, GdkEvent* eve
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));
+ session->add_command(new MementoCommand<ARDOUR::Region>(arv->region(), &before, &after));
commit_reversible_command ();
fade_out_drag_motion_callback (item, event);
@@ -2176,7 +2176,7 @@ Editor::marker_drag_finished_callback (ArdourCanvas::Item* item, GdkEvent* event
}
XMLNode &after = session->locations()->get_state();
- session->add_command(new MementoCommand<Locations>(*(session->locations()), before, after));
+ session->add_command(new MementoCommand<Locations>(*(session->locations()), &before, &after));
commit_reversible_command ();
marker_drag_line->hide();
@@ -2293,7 +2293,7 @@ Editor::meter_marker_drag_finished_callback (ArdourCanvas::Item* item, GdkEvent*
XMLNode &before = map.get_state();
map.add_meter (marker->meter(), when);
XMLNode &after = map.get_state();
- session->add_command(new MementoCommand<TempoMap>(map, before, after));
+ session->add_command(new MementoCommand<TempoMap>(map, &before, &after));
commit_reversible_command ();
// delete the dummy marker we used for visual representation of copying.
@@ -2304,7 +2304,7 @@ Editor::meter_marker_drag_finished_callback (ArdourCanvas::Item* item, GdkEvent*
XMLNode &before = map.get_state();
map.move_meter (marker->meter(), when);
XMLNode &after = map.get_state();
- session->add_command(new MementoCommand<TempoMap>(map, before, after));
+ session->add_command(new MementoCommand<TempoMap>(map, &before, &after));
commit_reversible_command ();
}
}
@@ -2425,7 +2425,7 @@ Editor::tempo_marker_drag_finished_callback (ArdourCanvas::Item* item, GdkEvent*
XMLNode &before = map.get_state();
map.add_tempo (marker->tempo(), when);
XMLNode &after = map.get_state();
- session->add_command (new MementoCommand<TempoMap>(map, before, after));
+ session->add_command (new MementoCommand<TempoMap>(map, &before, &after));
commit_reversible_command ();
// delete the dummy marker we used for visual representation of copying.
@@ -2436,7 +2436,7 @@ Editor::tempo_marker_drag_finished_callback (ArdourCanvas::Item* item, GdkEvent*
XMLNode &before = map.get_state();
map.move_tempo (marker->tempo(), when);
XMLNode &after = map.get_state();
- session->add_command (new MementoCommand<TempoMap>(map, before, after));
+ session->add_command (new MementoCommand<TempoMap>(map, &before, &after));
commit_reversible_command ();
}
}
@@ -2800,7 +2800,7 @@ Editor::region_drag_motion_callback (ArdourCanvas::Item* item, GdkEvent* event)
insert_result = affected_playlists.insert (to_playlist);
if (insert_result.second) {
- session->add_command (new MementoUndoCommand<Playlist>(*to_playlist, to_playlist->get_state()));
+ session->add_command (new MementoCommand<Playlist>(*to_playlist, &to_playlist->get_state(), 0));
}
latest_regionview = 0;
@@ -3238,7 +3238,7 @@ Editor::region_drag_motion_callback (ArdourCanvas::Item* item, GdkEvent* event)
insert_result = motion_frozen_playlists.insert (pl);
if (insert_result.second) {
pl->freeze();
- session->add_command(new MementoUndoCommand<Playlist>(*pl, pl->get_state()));
+ session->add_command(new MementoCommand<Playlist>(*pl, &pl->get_state(), 0));
}
}
}
@@ -3366,7 +3366,7 @@ Editor::region_drag_finished_callback (ArdourCanvas::Item* item, GdkEvent* event
insert_result = motion_frozen_playlists.insert(to_playlist);
if (insert_result.second) {
to_playlist->freeze();
- session->add_command(new MementoUndoCommand<Playlist>(*to_playlist, to_playlist->get_state()));
+ session->add_command(new MementoCommand<Playlist>(*to_playlist, &to_playlist->get_state(), 0));
}
}
@@ -3448,7 +3448,7 @@ Editor::region_drag_finished_callback (ArdourCanvas::Item* item, GdkEvent* event
out:
for (set<Playlist*>::iterator p = motion_frozen_playlists.begin(); p != motion_frozen_playlists.end(); ++p) {
(*p)->thaw ();
- session->add_command (new MementoRedoCommand<Playlist>(*(*p), (*p)->get_state()));
+ session->add_command (new MementoCommand<Playlist>(*(*p), 0, & (*p)->get_state()));
}
motion_frozen_playlists.clear ();
@@ -3643,10 +3643,10 @@ Editor::start_selection_grab (ArdourCanvas::Item* item, GdkEvent* event)
Playlist* playlist = clicked_axisview->playlist();
- before = &(playlist->get_state());
+ XMLNode *before = &(playlist->get_state());
clicked_axisview->playlist()->add_region (*region, selection->time[clicked_selection].start);
- XMLNode &after = playlist->get_state();
- session->add_command(new MementoCommand<Playlist>(*playlist, *before, after));
+ XMLNode *after = &(playlist->get_state());
+ session->add_command(new MementoCommand<Playlist>(*playlist, before, after));
commit_reversible_command ();
@@ -4013,7 +4013,7 @@ Editor::trim_motion_callback (ArdourCanvas::Item* item, GdkEvent* event)
Playlist * pl = (*i)->region().playlist();
insert_result = motion_frozen_playlists.insert (pl);
if (insert_result.second) {
- session->add_command(new MementoUndoCommand<Playlist>(*pl, pl->get_state()));
+ session->add_command(new MementoCommand<Playlist>(*pl, &pl->get_state(), 0));
}
}
}
@@ -4203,7 +4203,7 @@ Editor::trim_finished_callback (ArdourCanvas::Item* item, GdkEvent* event)
for (set<Playlist*>::iterator p = motion_frozen_playlists.begin(); p != motion_frozen_playlists.end(); ++p) {
//(*p)->thaw ();
- session->add_command (new MementoRedoCommand<Playlist>(*(*p), (*p)->get_state()));
+ session->add_command (new MementoCommand<Playlist>(*(*p), 0, &(*p)->get_state()));
}
motion_frozen_playlists.clear ();
@@ -4241,7 +4241,7 @@ Editor::point_trim (GdkEvent* event)
XMLNode &before = pl->get_state();
(*i)->region().trim_front (new_bound, this);
XMLNode &after = pl->get_state();
- session->add_command(new MementoCommand<Playlist>(*pl, before, after));
+ session->add_command(new MementoCommand<Playlist>(*pl, &before, &after));
}
}
@@ -4252,7 +4252,7 @@ Editor::point_trim (GdkEvent* event)
XMLNode &before = pl->get_state();
rv->region().trim_front (new_bound, this);
XMLNode &after = pl->get_state();
- session->add_command(new MementoCommand<Playlist>(*pl, before, after));
+ session->add_command(new MementoCommand<Playlist>(*pl, &before, &after));
}
}
@@ -4272,7 +4272,7 @@ Editor::point_trim (GdkEvent* event)
XMLNode &before = pl->get_state();
(*i)->region().trim_end (new_bound, this);
XMLNode &after = pl->get_state();
- session->add_command(new MementoCommand<Playlist>(*pl, before, after));
+ session->add_command(new MementoCommand<Playlist>(*pl, &before, &after));
}
}
@@ -4283,7 +4283,7 @@ Editor::point_trim (GdkEvent* event)
XMLNode &before = pl->get_state();
rv->region().trim_end (new_bound, this);
XMLNode &after = pl->get_state();
- session->add_command (new MementoCommand<Playlist>(*pl, before, after));
+ session->add_command (new MementoCommand<Playlist>(*pl, &before, &after));
}
}
@@ -4306,7 +4306,7 @@ Editor::thaw_region_after_trim (RegionView& rv)
region.thaw (_("trimmed region"));
XMLNode &after = region.playlist()->get_state();
- session->add_command (new MementoRedoCommand<Playlist>(*(region.playlist()), after));
+ session->add_command (new MementoCommand<Playlist>(*(region.playlist()), 0, &after));
AudioRegionView* arv = dynamic_cast<AudioRegionView*>(&rv);
if (arv)
@@ -4451,7 +4451,7 @@ Editor::end_range_markerbar_op (ArdourCanvas::Item* item, GdkEvent* event)
newloc = new Location(temp_location->start(), temp_location->end(), "unnamed", Location::IsRangeMarker);
session->locations()->add (newloc, true);
XMLNode &after = session->locations()->get_state();
- session->add_command(new MementoCommand<Locations>(*(session->locations()), before, after));
+ session->add_command(new MementoCommand<Locations>(*(session->locations()), &before, &after));
commit_reversible_command ();
range_bar_drag_rect->hide();
@@ -4834,7 +4834,7 @@ Editor::mouse_brush_insert_region (RegionView* rv, jack_nframes_t pos)
XMLNode &before = playlist->get_state();
playlist->add_region (*(new AudioRegion (arv->audio_region())), (jack_nframes_t) (pos * speed));
XMLNode &after = playlist->get_state();
- session->add_command(new MementoCommand<Playlist>(*playlist, before, after));
+ session->add_command(new MementoCommand<Playlist>(*playlist, &before, &after));
// playlist is frozen, so we have to update manually
diff --git a/gtk2_ardour/editor_ops.cc b/gtk2_ardour/editor_ops.cc
index 7115bfe634..2532222c0d 100644
--- a/gtk2_ardour/editor_ops.cc
+++ b/gtk2_ardour/editor_ops.cc
@@ -213,7 +213,7 @@ Editor::split_regions_at (jack_nframes_t where, RegionSelection& regions)
XMLNode &before = pl->get_state();
pl->split_region ((*a)->region(), where);
XMLNode &after = pl->get_state();
- session->add_command(new MementoCommand<Playlist>(*pl, before, after));
+ session->add_command(new MementoCommand<Playlist>(*pl, &before, &after));
}
a = tmp;
@@ -236,7 +236,7 @@ Editor::remove_clicked_region ()
XMLNode &before = playlist->get_state();
playlist->remove_region (&clicked_regionview->region());
XMLNode &after = playlist->get_state();
- session->add_command(new MementoCommand<Playlist>(*playlist, before, after));
+ session->add_command(new MementoCommand<Playlist>(*playlist, &before, &after));
commit_reversible_command ();
}
@@ -412,7 +412,7 @@ Editor::nudge_forward (bool next)
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));
+ session->add_command (new MementoCommand<Playlist>(*(r.playlist()), &before, &after));
}
commit_reversible_command ();
@@ -452,7 +452,7 @@ Editor::nudge_backward (bool next)
r.set_position (0, this);
}
XMLNode &after = r.playlist()->get_state();
- session->add_command(new MementoCommand<Playlist>(*(r.playlist()), before, after));
+ session->add_command(new MementoCommand<Playlist>(*(r.playlist()), &before, &after));
}
commit_reversible_command ();
@@ -488,7 +488,7 @@ Editor::nudge_forward_capture_offset ()
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));
+ session->add_command(new MementoCommand<Playlist>(*(r.playlist()), &before, &after));
}
commit_reversible_command ();
@@ -520,7 +520,7 @@ Editor::nudge_backward_capture_offset ()
r.set_position (0, this);
}
XMLNode &after = r.playlist()->get_state();
- session->add_command(new MementoCommand<Playlist>(*(r.playlist()), before, after));
+ session->add_command(new MementoCommand<Playlist>(*(r.playlist()), &before, &after));
}
commit_reversible_command ();
@@ -1300,7 +1300,7 @@ Editor::add_location_from_selection ()
XMLNode &before = session->locations()->get_state();
session->locations()->add (location, true);
XMLNode &after = session->locations()->get_state();
- session->add_command(new MementoCommand<Locations>(*(session->locations()), before, after));
+ session->add_command(new MementoCommand<Locations>(*(session->locations()), &before, &after));
session->commit_reversible_command ();
}
@@ -1314,7 +1314,7 @@ Editor::add_location_from_playhead_cursor ()
XMLNode &before = session->locations()->get_state();
session->locations()->add (location, true);
XMLNode &after = session->locations()->get_state();
- session->add_command(new MementoCommand<Locations>(*(session->locations()), before, after));
+ session->add_command(new MementoCommand<Locations>(*(session->locations()), &before, &after));
session->commit_reversible_command ();
}
@@ -1333,7 +1333,7 @@ Editor::add_location_from_audio_region ()
XMLNode &before = session->locations()->get_state();
session->locations()->add (location, true);
XMLNode &after = session->locations()->get_state();
- session->add_command(new MementoCommand<Locations>(*(session->locations()), before, after));
+ session->add_command(new MementoCommand<Locations>(*(session->locations()), &before, &after));
session->commit_reversible_command ();
}
@@ -1752,7 +1752,7 @@ Editor::clear_markers ()
XMLNode &before = session->locations()->get_state();
session->locations()->clear_markers ();
XMLNode &after = session->locations()->get_state();
- session->add_command(new MementoCommand<Locations>(*(session->locations()), before, after));
+ session->add_command(new MementoCommand<Locations>(*(session->locations()), &before, &after));
session->commit_reversible_command ();
}
}
@@ -1773,7 +1773,7 @@ Editor::clear_ranges ()
if (punchloc) session->locations()->add (punchloc);
XMLNode &after = session->locations()->get_state();
- session->add_command(new MementoCommand<Locations>(*(session->locations()), before, after));
+ session->add_command(new MementoCommand<Locations>(*(session->locations()), &before, &after));
session->commit_reversible_command ();
}
}
@@ -1785,7 +1785,7 @@ Editor::clear_locations ()
XMLNode &before = session->locations()->get_state();
session->locations()->clear ();
XMLNode &after = session->locations()->get_state();
- session->add_command(new MementoCommand<Locations>(*(session->locations()), before, after));
+ session->add_command(new MementoCommand<Locations>(*(session->locations()), &before, &after));
session->commit_reversible_command ();
session->locations()->clear ();
}
@@ -1835,7 +1835,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);
- session->add_command(new MementoCommand<Playlist>(*playlist, before, playlist->get_state()));
+ session->add_command(new MementoCommand<Playlist>(*playlist, &before, &playlist->get_state()));
commit_reversible_command ();
}
@@ -1871,7 +1871,7 @@ Editor::insert_region_list_selection (float times)
begin_reversible_command (_("insert region"));
XMLNode &before = playlist->get_state();
playlist->add_region (*(createRegion (*region)), edit_cursor->current_frame, times);
- session->add_command(new MementoCommand<Playlist>(*playlist, before, playlist->get_state()));
+ session->add_command(new MementoCommand<Playlist>(*playlist, &before, &playlist->get_state()));
commit_reversible_command ();
}
@@ -2311,7 +2311,7 @@ Editor::separate_region_from_selection ()
}
if (doing_undo)
- session->add_command(new MementoCommand<Playlist>(*playlist, *before, playlist->get_state()));
+ session->add_command(new MementoCommand<Playlist>(*playlist, before, &playlist->get_state()));
}
}
}
@@ -2364,7 +2364,7 @@ Editor::separate_regions_using_location (Location& loc)
playlist->partition ((jack_nframes_t)(loc.start() * speed), (jack_nframes_t)(loc.end() * speed), true);
if (doing_undo)
- session->add_command(new MementoCommand<Playlist>(*playlist, *before, playlist->get_state()));
+ session->add_command(new MementoCommand<Playlist>(*playlist, before, &playlist->get_state()));
}
}
}
@@ -2435,7 +2435,7 @@ Editor::crop_region_to_selection ()
XMLNode &before = (*i)->get_state();
region->trim_to (start, cnt, this);
XMLNode &after = (*i)->get_state();
- session->add_command (new MementoCommand<Playlist>(*(*i), before, after));
+ session->add_command (new MementoCommand<Playlist>(*(*i), &before, &after));
}
commit_reversible_command ();
@@ -2477,7 +2477,7 @@ Editor::region_fill_track ()
XMLNode &before = pl->get_state();
pl->add_region (*(new AudioRegion (*ar)), ar->last_frame(), times);
- session->add_command (new MementoCommand<Playlist>(*pl, before, pl->get_state()));
+ session->add_command (new MementoCommand<Playlist>(*pl, &before, &pl->get_state()));
}
commit_reversible_command ();
@@ -2527,7 +2527,7 @@ Editor::region_fill_selection ()
XMLNode &before = playlist->get_state();
playlist->add_region (*(createRegion (*region)), start, times);
- session->add_command (new MementoCommand<Playlist>(*playlist, before, playlist->get_state()));
+ session->add_command (new MementoCommand<Playlist>(*playlist, &before, &playlist->get_state()));
}
commit_reversible_command ();
@@ -2545,7 +2545,7 @@ Editor::set_a_regions_sync_position (Region& region, jack_nframes_t 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));
+ session->add_command(new MementoCommand<Playlist>(*(region.playlist()), &before, &after));
commit_reversible_command ();
}
@@ -2566,7 +2566,7 @@ Editor::set_region_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));
+ session->add_command(new MementoCommand<Playlist>(*(region.playlist()), &before, &after));
commit_reversible_command ();
}
@@ -2579,7 +2579,7 @@ Editor::remove_region_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));
+ session->add_command(new MementoCommand<Playlist>(*(region.playlist()), &before, &after));
commit_reversible_command ();
}
}
@@ -2595,7 +2595,7 @@ Editor::naturalize ()
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));
+ session->add_command (new MementoCommand<Region>((*i)->region(), &before, &after));
}
commit_reversible_command ();
}
@@ -2670,7 +2670,7 @@ Editor::align_selection_relative (RegionPoint point, jack_nframes_t position)
}
XMLNode &after = region.playlist()->get_state();
- session->add_command(new MementoCommand<Playlist>(*(region.playlist()), before, after));
+ session->add_command(new MementoCommand<Playlist>(*(region.playlist()), &before, &after));
}
@@ -2723,7 +2723,7 @@ Editor::align_region_internal (Region& region, RegionPoint point, jack_nframes_t
}
XMLNode &after = region.playlist()->get_state();
- session->add_command(new MementoCommand<Playlist>(*(region.playlist()), before, after));
+ session->add_command(new MementoCommand<Playlist>(*(region.playlist()), &before, &after));
}
void
@@ -2748,7 +2748,7 @@ Editor::trim_region_to_edit_cursor ()
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));
+ session->add_command(new MementoCommand<Playlist>(*(region.playlist()), &before, &after));
commit_reversible_command ();
}
@@ -2774,7 +2774,7 @@ Editor::trim_region_from_edit_cursor ()
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));
+ session->add_command(new MementoCommand<Playlist>(*(region.playlist()), &before, &after));
commit_reversible_command ();
}
@@ -2889,7 +2889,7 @@ Editor::bounce_range_selection ()
XMLNode &before = playlist->get_state();
atv->audio_track()->bounce_range (start, cnt, itt);
XMLNode &after = playlist->get_state();
- session->add_command (new MementoCommand<Playlist> (*playlist, before, after));
+ session->add_command (new MementoCommand<Playlist> (*playlist, &before, &after));
}
commit_reversible_command ();
@@ -3007,7 +3007,7 @@ Editor::cut_copy_regions (CutCopyOp op)
insert_result = freezelist.insert (pl);
if (insert_result.second) {
pl->freeze ();
- session->add_command (new MementoUndoCommand<Playlist>(*pl, pl->get_state()));
+ session->add_command (new MementoCommand<Playlist>(*pl, &pl->get_state(), 0));
}
}
}
@@ -3071,7 +3071,7 @@ Editor::cut_copy_regions (CutCopyOp op)
for (set<Playlist*>::iterator pl = freezelist.begin(); pl != freezelist.end(); ++pl) {
(*pl)->thaw ();
- session->add_command (new MementoRedoCommand<Playlist>(*(*pl), (*pl)->get_state()));
+ session->add_command (new MementoCommand<Playlist>(*(*pl), 0, &(*pl)->get_state()));
}
}
@@ -3186,7 +3186,7 @@ Editor::paste_named_selection (float times)
XMLNode &before = apl->get_state();
apl->paste (**chunk, edit_cursor->current_frame, times);
- session->add_command(new MementoCommand<AudioPlaylist>(*apl, before, apl->get_state()));
+ session->add_command(new MementoCommand<AudioPlaylist>(*apl, &before, &apl->get_state()));
if (tmp != ns->playlists.end()) {
chunk = tmp;
@@ -3217,7 +3217,7 @@ Editor::duplicate_some_regions (RegionSelection& regions, float times)
playlist = (*i)->region().playlist();
XMLNode &before = playlist->get_state();
playlist->duplicate (r, r.last_frame(), times);
- session->add_command(new MementoCommand<Playlist>(*playlist, before, playlist->get_state()));
+ session->add_command(new MementoCommand<Playlist>(*playlist, &before, &playlist->get_state()));
c.disconnect ();
@@ -3258,7 +3258,7 @@ Editor::duplicate_selection (float times)
XMLNode &before = playlist->get_state();
playlist->duplicate (**ri, selection->time[clicked_selection].end, times);
XMLNode &after = playlist->get_state();
- session->add_command (new MementoCommand<Playlist>(*playlist, before, after));
+ session->add_command (new MementoCommand<Playlist>(*playlist, &before, &after));
++ri;
if (ri == new_regions.end()) {
@@ -3309,7 +3309,7 @@ Editor::clear_playlist (Playlist& playlist)
XMLNode &before = playlist.get_state();
playlist.clear ();
XMLNode &after = playlist.get_state();
- session->add_command (new MementoCommand<Playlist>(playlist, before, after));
+ session->add_command (new MementoCommand<Playlist>(playlist, &before, &after));
commit_reversible_command ();
}
@@ -3346,7 +3346,7 @@ Editor::nudge_track (bool use_edit_cursor, bool forwards)
XMLNode &before = playlist->get_state();
playlist->nudge_after (start, distance, forwards);
XMLNode &after = playlist->get_state();
- session->add_command (new MementoCommand<Playlist>(*playlist, before, after));
+ session->add_command (new MementoCommand<Playlist>(*playlist, &before, &after));
}
commit_reversible_command ();
@@ -3402,7 +3402,7 @@ Editor::normalize_region ()
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()));
+ session->add_command (new MementoCommand<Region>(arv->region(), &before, &arv->region().get_state()));
}
commit_reversible_command ();
@@ -3429,7 +3429,7 @@ Editor::denormalize_region ()
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()));
+ session->add_command (new MementoCommand<Region>(arv->region(), &before, &arv->region().get_state()));
}
commit_reversible_command ();
@@ -3476,7 +3476,7 @@ Editor::apply_filter (AudioFilter& filter, string command)
XMLNode &before = playlist->get_state();
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));
+ session->add_command(new MementoCommand<Playlist>(*playlist, &before, &after));
} else {
goto out;
}
diff --git a/gtk2_ardour/editor_route_list.cc b/gtk2_ardour/editor_route_list.cc
index bb38953038..512e2ecef1 100644
--- a/gtk2_ardour/editor_route_list.cc
+++ b/gtk2_ardour/editor_route_list.cc
@@ -30,6 +30,8 @@
#include "mixer_strip.h"
#include "gui_thread.h"
+#include <pbd/unknown_type.h>
+
#include <ardour/route.h>
#include "i18n.h"
@@ -41,79 +43,81 @@ using namespace Gtk;
void
-Editor::handle_new_route (boost::shared_ptr<Route> route)
+Editor::handle_new_route (Session::RouteList& routes)
{
- ENSURE_GUI_THREAD(bind (mem_fun(*this, &Editor::handle_new_route), route));
-
+ ENSURE_GUI_THREAD(bind (mem_fun(*this, &Editor::handle_new_route), routes));
+
TimeAxisView *tv;
+ RouteTimeAxisView *rtv;
TreeModel::Row parent;
TreeModel::Row row;
- if (route->hidden()) {
- return;
- }
+ for (Session::RouteList::iterator x = routes.begin(); x != routes.end(); ++x) {
+ boost::shared_ptr<Route> route = (*x);
- // FIXME
- DataType type = route->default_type();
- assert(type == ARDOUR::DataType::AUDIO || type == ARDOUR::DataType::MIDI);
-
- if (type == ARDOUR::DataType::AUDIO)
- tv = new AudioTimeAxisView (*this, *session, route, track_canvas);
- else
- tv = new MidiTimeAxisView (*this, *session, route, track_canvas);
-
+ if (route->hidden()) {
+ return;
+ }
+
+ if (route->default_type() == ARDOUR::DataType::AUDIO)
+ tv = new AudioTimeAxisView (*this, *session, route, track_canvas);
+ else if (route->default_type() == ARDOUR::DataType::MIDI)
+ tv = new MidiTimeAxisView (*this, *session, route, track_canvas);
+ else
+ throw unknown_type();
+
#if 0
- if (route_display_model->children().size() == 0) {
+ if (route_display_model->children().size() == 0) {
+
+ /* set up basic entries */
+
+ TreeModel::Row row;
+
+ row = *(route_display_model->append()); // path = "0"
+ row[route_display_columns.text] = _("Busses");
+ row[route_display_columns.tv] = 0;
+ row = *(route_display_model->append()); // path = "1"
+ row[route_display_columns.text] = _("Tracks");
+ row[route_display_columns.tv] = 0;
+
+ }
- /* set up basic entries */
-
- TreeModel::Row row;
+ if (dynamic_cast<AudioTrack*>(route.get()) != 0) {
+ TreeModel::iterator iter = route_display_model->get_iter ("1"); // audio tracks
+ parent = *iter;
+ } else {
+ TreeModel::iterator iter = route_display_model->get_iter ("0"); // busses
+ parent = *iter;
+ }
- row = *(route_display_model->append()); // path = "0"
- row[route_display_columns.text] = _("Busses");
- row[route_display_columns.tv] = 0;
- row = *(route_display_model->append()); // path = "1"
- row[route_display_columns.text] = _("Tracks");
- row[route_display_columns.tv] = 0;
-
- }
-
- if (dynamic_cast<AudioTrack*>(route.get()) != 0) {
- TreeModel::iterator iter = route_display_model->get_iter ("1"); // audio tracks
- parent = *iter;
- } else {
- TreeModel::iterator iter = route_display_model->get_iter ("0"); // busses
- parent = *iter;
- }
-
-
- row = *(route_display_model->append (parent.children()));
+
+ row = *(route_display_model->append (parent.children()));
#else
- row = *(route_display_model->append ());
+ row = *(route_display_model->append ());
#endif
-
- row[route_display_columns.text] = route->name();
- row[route_display_columns.visible] = tv->marked_for_display();
- row[route_display_columns.tv] = tv;
-
- track_views.push_back (tv);
-
- ignore_route_list_reorder = true;
-
- RouteTimeAxisView* rtv = NULL;
- if ((rtv = dynamic_cast<RouteTimeAxisView*> (tv)) != 0) {
- /* added a new fresh one at the end */
- if (rtv->route()->order_key(N_("editor")) == -1) {
- rtv->route()->set_order_key (N_("editor"), route_display_model->children().size()-1);
+
+ row[route_display_columns.text] = route->name();
+ row[route_display_columns.visible] = tv->marked_for_display();
+ row[route_display_columns.tv] = tv;
+
+ track_views.push_back (tv);
+
+ ignore_route_list_reorder = true;
+
+ if ((rtv = dynamic_cast<RouteTimeAxisView*> (tv)) != 0) {
+ /* added a new fresh one at the end */
+ if (rtv->route()->order_key(N_("editor")) == -1) {
+ rtv->route()->set_order_key (N_("editor"), route_display_model->children().size()-1);
+ }
}
+
+ ignore_route_list_reorder = false;
+
+ route->gui_changed.connect (mem_fun(*this, &Editor::handle_gui_changes));
+
+ tv->GoingAway.connect (bind (mem_fun(*this, &Editor::remove_route), tv));
}
- ignore_route_list_reorder = false;
-
- route->gui_changed.connect (mem_fun(*this, &Editor::handle_gui_changes));
-
- tv->GoingAway.connect (bind (mem_fun(*this, &Editor::remove_route), tv));
-
editor_mixer_button.set_sensitive(true);
}
@@ -190,9 +194,9 @@ Editor::hide_track_in_display (TimeAxisView& tv)
}
}
- AudioTimeAxisView* atv = dynamic_cast<AudioTimeAxisView*> (&tv);
+ RouteTimeAxisView* rtv = dynamic_cast<RouteTimeAxisView*> (&tv);
- if (atv && current_mixer_strip && (atv->route() == current_mixer_strip->route())) {
+ if (rtv && current_mixer_strip && (rtv->route() == current_mixer_strip->route())) {
// this will hide the mixer strip
set_selected_mixer_strip (tv);
}
@@ -234,7 +238,7 @@ Editor::redisplay_route_list ()
for (n = 0, order = 0, position = 0, i = rows.begin(); i != rows.end(); ++i) {
TimeAxisView *tv = (*i)[route_display_columns.tv];
- AudioTimeAxisView* at;
+ RouteTimeAxisView* rt;
if (tv == 0) {
// just a "title" row
@@ -247,8 +251,8 @@ Editor::redisplay_route_list ()
to tracks.
*/
- if ((at = dynamic_cast<AudioTimeAxisView*> (tv)) != 0) {
- at->route()->set_order_key (N_("editor"), order);
+ if ((rt = dynamic_cast<RouteTimeAxisView*> (tv)) != 0) {
+ rt->route()->set_order_key (N_("editor"), order);
++order;
}
}
@@ -500,9 +504,7 @@ Editor::initial_route_list_display ()
route_display_model->clear ();
- for (Session::RouteList::iterator i = r.begin(); i != r.end(); ++i) {
- handle_new_route (*i);
- }
+ handle_new_route (r);
no_route_list_redisplay = false;
diff --git a/gtk2_ardour/editor_tempodisplay.cc b/gtk2_ardour/editor_tempodisplay.cc
index ff99c76351..e5b1a67cf3 100644
--- a/gtk2_ardour/editor_tempodisplay.cc
+++ b/gtk2_ardour/editor_tempodisplay.cc
@@ -278,7 +278,7 @@ Editor::mouse_add_new_tempo_event (jack_nframes_t frame)
XMLNode &before = map.get_state();
map.add_tempo (Tempo (bpm), requested);
XMLNode &after = map.get_state();
- session->add_command(new MementoCommand<TempoMap>(map, before, after));
+ session->add_command(new MementoCommand<TempoMap>(map, &before, &after));
commit_reversible_command ();
map.dump (cerr);
@@ -318,7 +318,7 @@ Editor::mouse_add_new_meter_event (jack_nframes_t frame)
begin_reversible_command (_("add meter mark"));
XMLNode &before = map.get_state();
map.add_meter (Meter (bpb, note_type), requested);
- session->add_command(new MementoCommand<TempoMap>(map, before, map.get_state()));
+ session->add_command(new MementoCommand<TempoMap>(map, &before, &map.get_state()));
commit_reversible_command ();
map.dump (cerr);
@@ -370,7 +370,7 @@ Editor::edit_meter_section (MeterSection* section)
XMLNode &before = session->tempo_map().get_state();
session->tempo_map().replace_meter (*section, Meter (bpb, note_type));
XMLNode &after = session->tempo_map().get_state();
- session->add_command(new MementoCommand<TempoMap>(session->tempo_map(), before, after));
+ session->add_command(new MementoCommand<TempoMap>(session->tempo_map(), &before, &after));
commit_reversible_command ();
}
@@ -400,7 +400,7 @@ Editor::edit_tempo_section (TempoSection* section)
session->tempo_map().replace_tempo (*section, Tempo (bpm));
session->tempo_map().move_tempo (*section, when);
XMLNode &after = session->tempo_map().get_state();
- session->add_command (new MementoCommand<TempoMap>(session->tempo_map(), before, after));
+ session->add_command (new MementoCommand<TempoMap>(session->tempo_map(), &before, &after));
commit_reversible_command ();
}
@@ -449,7 +449,7 @@ Editor::real_remove_tempo_marker (TempoSection *section)
XMLNode &before = session->tempo_map().get_state();
session->tempo_map().remove_tempo (*section);
XMLNode &after = session->tempo_map().get_state();
- session->add_command(new MementoCommand<TempoMap>(session->tempo_map(), before, after));
+ session->add_command(new MementoCommand<TempoMap>(session->tempo_map(), &before, &after));
commit_reversible_command ();
return FALSE;
@@ -483,7 +483,7 @@ Editor::real_remove_meter_marker (MeterSection *section)
XMLNode &before = session->tempo_map().get_state();
session->tempo_map().remove_meter (*section);
XMLNode &after = session->tempo_map().get_state();
- session->add_command(new MementoCommand<TempoMap>(session->tempo_map(), before, after));
+ session->add_command(new MementoCommand<TempoMap>(session->tempo_map(), &before, &after));
commit_reversible_command ();
return FALSE;
}
diff --git a/gtk2_ardour/editor_timefx.cc b/gtk2_ardour/editor_timefx.cc
index 3fe0023d07..caa9698b8c 100644
--- a/gtk2_ardour/editor_timefx.cc
+++ b/gtk2_ardour/editor_timefx.cc
@@ -188,7 +188,7 @@ Editor::do_timestretch (TimeStretchDialog& dialog)
continue;
}
- if ((playlist = t->diskstream().playlist()) == 0) {
+ if ((playlist = t->diskstream()->playlist()) == 0) {
i = tmp;
continue;
}
@@ -210,7 +210,7 @@ Editor::do_timestretch (TimeStretchDialog& dialog)
XMLNode &before = playlist->get_state();
playlist->replace_region (region, *new_region, region.position());
XMLNode &after = playlist->get_state();
- session->add_command (new MementoCommand<Playlist>(*playlist, before, after));
+ session->add_command (new MementoCommand<Playlist>(*playlist, &before, &after));
i = tmp;
}
diff --git a/gtk2_ardour/gain_automation_time_axis.cc b/gtk2_ardour/gain_automation_time_axis.cc
index c86c1390f3..47657e3292 100644
--- a/gtk2_ardour/gain_automation_time_axis.cc
+++ b/gtk2_ardour/gain_automation_time_axis.cc
@@ -67,7 +67,7 @@ GainAutomationTimeAxisView::add_automation_event (ArdourCanvas::Item* item, GdkE
XMLNode &before = curve.get_state();
curve.add (when, y);
XMLNode &after = curve.get_state();
- _session.add_command(new MementoCommand<ARDOUR::Curve>(curve, before, after));
+ _session.add_command(new MementoCommand<ARDOUR::Curve>(curve, &before, &after));
_session.commit_reversible_command ();
_session.set_dirty ();
}
diff --git a/gtk2_ardour/location_ui.cc b/gtk2_ardour/location_ui.cc
index deb4c1da36..12e7079de2 100644
--- a/gtk2_ardour/location_ui.cc
+++ b/gtk2_ardour/location_ui.cc
@@ -658,7 +658,7 @@ gint LocationUI::do_location_remove (ARDOUR::Location *loc)
XMLNode &before = session->locations()->get_state();
session->locations()->remove (loc);
XMLNode &after = session->locations()->get_state();
- session->add_command(new MementoCommand<Locations>(*(session->locations()), before, after));
+ session->add_command(new MementoCommand<Locations>(*(session->locations()), &before, &after));
session->commit_reversible_command ();
return FALSE;
@@ -777,7 +777,7 @@ LocationUI::add_new_location()
XMLNode &before = session->locations()->get_state();
session->locations()->add (location, true);
XMLNode &after = session->locations()->get_state();
- session->add_command (new MementoCommand<Locations>(*(session->locations()), before, after));
+ session->add_command (new MementoCommand<Locations>(*(session->locations()), &before, &after));
session->commit_reversible_command ();
}
@@ -794,7 +794,7 @@ LocationUI::add_new_range()
XMLNode &before = session->locations()->get_state();
session->locations()->add (location, true);
XMLNode &after = session->locations()->get_state();
- session->add_command (new MementoCommand<Locations>(*(session->locations()), before, after));
+ session->add_command (new MementoCommand<Locations>(*(session->locations()), &before, &after));
session->commit_reversible_command ();
}
}
diff --git a/gtk2_ardour/midi_streamview.cc b/gtk2_ardour/midi_streamview.cc
index f422005a5d..47148446eb 100644
--- a/gtk2_ardour/midi_streamview.cc
+++ b/gtk2_ardour/midi_streamview.cc
@@ -163,7 +163,8 @@ MidiStreamView::setup_rec_box ()
MidiRegion::SourceList sources;
- MidiDiskstream* mds = dynamic_cast<MidiDiskstream*>(_trackview.get_diskstream());
+ // FIXME
+ boost::shared_ptr<MidiDiskstream> mds = boost::dynamic_pointer_cast<MidiDiskstream>(_trackview.get_diskstream());
assert(mds);
sources.push_back((Source*)mds->write_source());
@@ -189,8 +190,8 @@ MidiStreamView::setup_rec_box ()
/* start a new rec box */
MidiTrack* mt = _trackview.midi_track(); /* we know what it is already */
- MidiDiskstream& ds = mt->midi_diskstream();
- jack_nframes_t frame_pos = ds.current_capture_start ();
+ boost::shared_ptr<MidiDiskstream> ds = mt->midi_diskstream();
+ jack_nframes_t frame_pos = ds->current_capture_start ();
gdouble xstart = _trackview.editor.frame_to_pixel (frame_pos);
gdouble xend;
uint32_t fill_color;
diff --git a/gtk2_ardour/mixer_ui.cc b/gtk2_ardour/mixer_ui.cc
index c2eb588b2f..84fade5472 100644
--- a/gtk2_ardour/mixer_ui.cc
+++ b/gtk2_ardour/mixer_ui.cc
@@ -251,38 +251,42 @@ Mixer_UI::show_window ()
}
void
-Mixer_UI::add_strip (boost::shared_ptr<Route> route)
+Mixer_UI::add_strip (Session::RouteList& routes)
{
- ENSURE_GUI_THREAD(bind (mem_fun(*this, &Mixer_UI::add_strip), route));
+ ENSURE_GUI_THREAD(bind (mem_fun(*this, &Mixer_UI::add_strip), routes));
MixerStrip* strip;
- if (route->hidden()) {
- return;
- }
-
- strip = new MixerStrip (*this, *session, route);
- strips.push_back (strip);
-
- strip->set_width (_strip_width);
- show_strip (strip);
-
- no_track_list_redisplay = true;
-
- TreeModel::Row row = *(track_model->append());
- row[track_columns.text] = route->name();
-
- row[track_columns.visible] = true;
- row[track_columns.route] = route;
- row[track_columns.strip] = strip;
-
- no_track_list_redisplay = false;
- redisplay_track_list ();
-
- route->name_changed.connect (bind (mem_fun(*this, &Mixer_UI::strip_name_changed), strip));
- strip->GoingAway.connect (bind (mem_fun(*this, &Mixer_UI::remove_strip), strip));
+ for (Session::RouteList::iterator x = routes.begin(); x != routes.end(); ++x) {
+ boost::shared_ptr<Route> route = (*x);
- strip->signal_button_release_event().connect (bind (mem_fun(*this, &Mixer_UI::strip_button_release_event), strip));
+ if (route->hidden()) {
+ return;
+ }
+
+ strip = new MixerStrip (*this, *session, route);
+ strips.push_back (strip);
+
+ strip->set_width (_strip_width);
+ show_strip (strip);
+
+ no_track_list_redisplay = true;
+
+ TreeModel::Row row = *(track_model->append());
+ row[track_columns.text] = route->name();
+
+ row[track_columns.visible] = true;
+ row[track_columns.route] = route;
+ row[track_columns.strip] = strip;
+
+ no_track_list_redisplay = false;
+ redisplay_track_list ();
+
+ route->name_changed.connect (bind (mem_fun(*this, &Mixer_UI::strip_name_changed), strip));
+ strip->GoingAway.connect (bind (mem_fun(*this, &Mixer_UI::remove_strip), strip));
+
+ strip->signal_button_release_event().connect (bind (mem_fun(*this, &Mixer_UI::strip_button_release_event), strip));
+ }
}
void
@@ -623,9 +627,7 @@ Mixer_UI::initial_track_display ()
track_model->clear ();
- for (Session::RouteList::iterator i = copy.begin(); i != copy.end(); ++i) {
- add_strip (*i);
- }
+ add_strip (copy);
no_track_list_redisplay = false;
diff --git a/gtk2_ardour/mixer_ui.h b/gtk2_ardour/mixer_ui.h
index 6fe4120427..77021dc8fe 100644
--- a/gtk2_ardour/mixer_ui.h
+++ b/gtk2_ardour/mixer_ui.h
@@ -111,7 +111,7 @@ class Mixer_UI : public Gtk::Window
bool strip_scroller_button_release (GdkEventButton*);
- void add_strip (boost::shared_ptr<ARDOUR::Route>);
+ void add_strip (ARDOUR::Session::RouteList&);
void remove_strip (MixerStrip *);
void hide_all_strips (bool with_select);
diff --git a/gtk2_ardour/pan_automation_time_axis.cc b/gtk2_ardour/pan_automation_time_axis.cc
index ec884151b5..bbd4b3b06c 100644
--- a/gtk2_ardour/pan_automation_time_axis.cc
+++ b/gtk2_ardour/pan_automation_time_axis.cc
@@ -92,7 +92,7 @@ PanAutomationTimeAxisView::add_automation_event (ArdourCanvas::Item* item, GdkEv
XMLNode &before = alist.get_state();
alist.add (when, y);
XMLNode &after = alist.get_state();
- _session.add_command(new MementoCommand<AutomationList>(alist, before, after));
+ _session.add_command(new MementoCommand<AutomationList>(alist, &before, &after));
_session.commit_reversible_command ();
_session.set_dirty ();
}
diff --git a/gtk2_ardour/playlist_selector.cc b/gtk2_ardour/playlist_selector.cc
index 8eaac7cb9d..68227d193c 100644
--- a/gtk2_ardour/playlist_selector.cc
+++ b/gtk2_ardour/playlist_selector.cc
@@ -90,7 +90,7 @@ void
PlaylistSelector::show_for (RouteUI* ruix)
{
vector<const char*> item;
- Diskstream* this_ds;
+ boost::shared_ptr<Diskstream> this_ds;
string str;
rui = ruix;
@@ -116,7 +116,7 @@ PlaylistSelector::show_for (RouteUI* ruix)
for (DSPL_Map::iterator x = dspl_map.begin(); x != dspl_map.end(); ++x) {
- Diskstream* ds = session->diskstream_by_id (x->first);
+ boost::shared_ptr<Diskstream> ds = session->diskstream_by_id (x->first);
if (ds == 0) {
continue;
@@ -243,7 +243,7 @@ PlaylistSelector::selection_changed ()
return;
}
- at->diskstream().use_playlist (apl);
+ at->diskstream()->use_playlist (apl);
hide ();
}
diff --git a/gtk2_ardour/redirect_automation_time_axis.cc b/gtk2_ardour/redirect_automation_time_axis.cc
index e527fd1d5e..f1e8eae9eb 100644
--- a/gtk2_ardour/redirect_automation_time_axis.cc
+++ b/gtk2_ardour/redirect_automation_time_axis.cc
@@ -102,7 +102,7 @@ RedirectAutomationTimeAxisView::add_automation_event (ArdourCanvas::Item* item,
XMLNode &before = alist.get_state();
alist.add (when, y);
XMLNode &after = alist.get_state();
- _session.add_command(new MementoCommand<AutomationList>(alist, before, after));
+ _session.add_command(new MementoCommand<AutomationList>(alist, &before, &after));
_session.commit_reversible_command ();
_session.set_dirty ();
}
diff --git a/gtk2_ardour/region_gain_line.cc b/gtk2_ardour/region_gain_line.cc
index 0a4a3d29ea..e2b1d6c826 100644
--- a/gtk2_ardour/region_gain_line.cc
+++ b/gtk2_ardour/region_gain_line.cc
@@ -48,7 +48,7 @@ AudioRegionGainLine::start_drag (ControlPoint* cp, float fraction)
{
AutomationLine::start_drag(cp,fraction);
if (!rv.audio_region().envelope_active()) {
- trackview.session().add_command(new MementoUndoCommand<AudioRegion>(rv.audio_region(), rv.audio_region().get_state()));
+ trackview.session().add_command(new MementoCommand<AudioRegion>(rv.audio_region(), &rv.audio_region().get_state(), 0));
rv.audio_region().set_envelope_active(false);
}
}
@@ -68,12 +68,12 @@ AudioRegionGainLine::remove_point (ControlPoint& cp)
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));
+ trackview.session().add_command(new MementoCommand<AudioRegion>(rv.audio_region(), &before, &after));
}
alist.erase (mr.start, mr.end);
- trackview.editor.current_session()->add_command (new MementoCommand<AudioRegionGainLine>(*this, before, get_state()));
+ trackview.editor.current_session()->add_command (new MementoCommand<AudioRegionGainLine>(*this, &before, &get_state()));
trackview.editor.current_session()->commit_reversible_command ();
trackview.editor.current_session()->set_dirty ();
}
@@ -83,7 +83,7 @@ AudioRegionGainLine::end_drag (ControlPoint* cp)
{
if (!rv.audio_region().envelope_active()) {
rv.audio_region().set_envelope_active(true);
- trackview.session().add_command(new MementoRedoCommand<AudioRegion>(rv.audio_region(), rv.audio_region().get_state()));
+ trackview.session().add_command(new MementoCommand<AudioRegion>(rv.audio_region(), 0, &rv.audio_region().get_state()));
}
AutomationLine::end_drag(cp);
}
diff --git a/gtk2_ardour/route_params_ui.cc b/gtk2_ardour/route_params_ui.cc
index 8d8efad8a2..c23ed272e1 100644
--- a/gtk2_ardour/route_params_ui.cc
+++ b/gtk2_ardour/route_params_ui.cc
@@ -159,22 +159,26 @@ RouteParams_UI::~RouteParams_UI ()
}
void
-RouteParams_UI::add_route (boost::shared_ptr<Route> route)
+RouteParams_UI::add_routes (Session::RouteList& routes)
{
- ENSURE_GUI_THREAD(bind (mem_fun(*this, &RouteParams_UI::add_route), route));
+ ENSURE_GUI_THREAD(bind (mem_fun(*this, &RouteParams_UI::add_routes), routes));
- if (route->hidden()) {
- return;
- }
-
- TreeModel::Row row = *(route_display_model->append());
- row[route_display_columns.text] = route->name();
- row[route_display_columns.route] = route;
+ for (Session::RouteList::iterator x = routes.begin(); x != routes.end(); ++x) {
+ boost::shared_ptr<Route> route = (*x);
- //route_select_list.rows().back().select ();
-
- route->name_changed.connect (bind (mem_fun(*this, &RouteParams_UI::route_name_changed), route));
- route->GoingAway.connect (bind (mem_fun(*this, &RouteParams_UI::route_removed), route));
+ if (route->hidden()) {
+ return;
+ }
+
+ TreeModel::Row row = *(route_display_model->append());
+ row[route_display_columns.text] = route->name();
+ row[route_display_columns.route] = route;
+
+ //route_select_list.rows().back().select ();
+
+ route->name_changed.connect (bind (mem_fun(*this, &RouteParams_UI::route_name_changed), route));
+ route->GoingAway.connect (bind (mem_fun(*this, &RouteParams_UI::route_removed), route));
+ }
}
@@ -355,9 +359,10 @@ RouteParams_UI::set_session (Session *sess)
route_display_model->clear();
if (session) {
- session->foreach_route (this, &RouteParams_UI::add_route);
+ boost::shared_ptr<Session::RouteList> r = session->get_routes();
+ add_routes (*r);
session->going_away.connect (mem_fun(*this, &ArdourDialog::session_gone));
- session->RouteAdded.connect (mem_fun(*this, &RouteParams_UI::add_route));
+ session->RouteAdded.connect (mem_fun(*this, &RouteParams_UI::add_routes));
start_updating ();
} else {
stop_updating ();
diff --git a/gtk2_ardour/route_params_ui.h b/gtk2_ardour/route_params_ui.h
index 5f487d6e5c..eff31023f7 100644
--- a/gtk2_ardour/route_params_ui.h
+++ b/gtk2_ardour/route_params_ui.h
@@ -159,7 +159,7 @@ class RouteParams_UI : public ArdourDialog
Glib::RefPtr<Gtk::ListStore> route_display_model;
- void add_route (boost::shared_ptr<ARDOUR::Route>);
+ void add_routes (ARDOUR::Session::RouteList&);
void route_name_changed (void *src, boost::shared_ptr<ARDOUR::Route> route);
void route_removed (boost::shared_ptr<ARDOUR::Route> route);
diff --git a/gtk2_ardour/route_time_axis.cc b/gtk2_ardour/route_time_axis.cc
index e2e1fb2149..e7a6df2f27 100644
--- a/gtk2_ardour/route_time_axis.cc
+++ b/gtk2_ardour/route_time_axis.cc
@@ -728,7 +728,7 @@ RouteTimeAxisView::rename_current_playlist ()
ArdourPrompter prompter (true);
string name;
- Diskstream *const ds = get_diskstream();
+ boost::shared_ptr<Diskstream> ds = get_diskstream();
if (!ds || ds->destructive())
return;
@@ -759,7 +759,7 @@ RouteTimeAxisView::use_copy_playlist (bool prompt)
{
string name;
- Diskstream *const ds = get_diskstream();
+ boost::shared_ptr<Diskstream> ds = get_diskstream();
if (!ds || ds->destructive())
return;
@@ -800,7 +800,7 @@ RouteTimeAxisView::use_new_playlist (bool prompt)
{
string name;
- Diskstream *const ds = get_diskstream();
+ boost::shared_ptr<Diskstream> ds = get_diskstream();
if (!ds || ds->destructive())
return;
@@ -838,7 +838,7 @@ RouteTimeAxisView::use_new_playlist (bool prompt)
void
RouteTimeAxisView::clear_playlist ()
{
- Diskstream *const ds = get_diskstream();
+ boost::shared_ptr<Diskstream> ds = get_diskstream();
if (!ds || ds->destructive())
return;
@@ -878,8 +878,7 @@ RouteTimeAxisView::selection_click (GdkEventButton* ev)
switch (Keyboard::selection_type (ev->state)) {
case Selection::Toggle:
- /* XXX this is not right */
- editor.get_selection().add (*tracks);
+ editor.get_selection().toggle (*tracks);
break;
case Selection::Set:
@@ -964,7 +963,7 @@ RouteTimeAxisView::name() const
Playlist *
RouteTimeAxisView::playlist () const
{
- Diskstream *ds;
+ boost::shared_ptr<Diskstream> ds;
if ((ds = get_diskstream()) != 0) {
return ds->playlist();
@@ -1014,7 +1013,7 @@ RouteTimeAxisView::hide_click ()
Region*
RouteTimeAxisView::find_next_region (jack_nframes_t pos, RegionPoint point, int32_t dir)
{
- Diskstream *stream;
+ boost::shared_ptr<Diskstream> stream;
Playlist *playlist;
if ((stream = get_diskstream()) != 0 && (playlist = stream->playlist()) != 0) {
@@ -1028,7 +1027,7 @@ bool
RouteTimeAxisView::cut_copy_clear (Selection& selection, CutCopyOp op)
{
Playlist* what_we_got;
- Diskstream* ds = get_diskstream();
+ boost::shared_ptr<Diskstream> ds = get_diskstream();
Playlist* playlist;
bool ret = false;
@@ -1054,7 +1053,7 @@ RouteTimeAxisView::cut_copy_clear (Selection& selection, CutCopyOp op)
case Cut:
if ((what_we_got = playlist->cut (time)) != 0) {
editor.get_cut_buffer().add (what_we_got);
- _session.add_command( new MementoCommand<Playlist>(*playlist, before, playlist->get_state()));
+ _session.add_command( new MementoCommand<Playlist>(*playlist, &before, &playlist->get_state()));
ret = true;
}
break;
@@ -1066,7 +1065,7 @@ RouteTimeAxisView::cut_copy_clear (Selection& selection, CutCopyOp op)
case Clear:
if ((what_we_got = playlist->cut (time)) != 0) {
- _session.add_command( new MementoCommand<Playlist>(*playlist, before, playlist->get_state()));
+ _session.add_command( new MementoCommand<Playlist>(*playlist, &before, &playlist->get_state()));
what_we_got->unref ();
ret = true;
}
@@ -1097,7 +1096,7 @@ RouteTimeAxisView::paste (jack_nframes_t pos, float times, Selection& selection,
XMLNode &before = playlist->get_state();
playlist->paste (**p, pos, times);
- _session.add_command( new MementoCommand<Playlist>(*playlist, before, playlist->get_state()));
+ _session.add_command( new MementoCommand<Playlist>(*playlist, &before, &playlist->get_state()));
return true;
}
diff --git a/gtk2_ardour/route_ui.cc b/gtk2_ardour/route_ui.cc
index 6b3c2a820c..3ede0bc1c7 100644
--- a/gtk2_ardour/route_ui.cc
+++ b/gtk2_ardour/route_ui.cc
@@ -76,7 +76,7 @@ RouteUI::RouteUI (boost::shared_ptr<ARDOUR::Route> rt, ARDOUR::Session& sess, co
if (is_track()) {
boost::shared_ptr<Track> t = boost::dynamic_pointer_cast<Track>(_route);
- t->diskstream().RecordEnableChanged.connect (mem_fun (*this, &RouteUI::route_rec_enable_changed));
+ t->diskstream()->RecordEnableChanged.connect (mem_fun (*this, &RouteUI::route_rec_enable_changed));
_session.RecordStateChanged.connect (mem_fun (*this, &RouteUI::session_rec_enable_changed));
@@ -577,7 +577,7 @@ RouteUI::reversibly_apply_route_boolean (string name, void (Route::*func)(bool,
XMLNode &before = _route->get_state();
bind(mem_fun(*_route, func), yn, arg)();
XMLNode &after = _route->get_state();
- _session.add_command (new MementoCommand<Route>(*_route, before, after));
+ _session.add_command (new MementoCommand<Route>(*_route, &before, &after));
_session.commit_reversible_command ();
}
@@ -588,7 +588,7 @@ RouteUI::reversibly_apply_audio_track_boolean (string name, void (AudioTrack::*f
XMLNode &before = audio_track()->get_state();
bind (mem_fun (*audio_track(), func), yn, arg)();
XMLNode &after = audio_track()->get_state();
- _session.add_command (new MementoCommand<AudioTrack>(*audio_track(), before, after));
+ _session.add_command (new MementoCommand<AudioTrack>(*audio_track(), &before, &after));
_session.commit_reversible_command ();
}
@@ -599,7 +599,7 @@ RouteUI::reversibly_apply_track_boolean (string name, void (Track::*func)(bool,
XMLNode &before = track()->get_state();
bind (mem_fun (*track(), func), yn, arg)();
XMLNode &after = track()->get_state();
- _session.add_command (new MementoCommand<Track>(*track(), before, after));
+ _session.add_command (new MementoCommand<Track>(*track(), &before, &after));
_session.commit_reversible_command ();
}
@@ -746,7 +746,6 @@ void
RouteUI::route_removed ()
{
ENSURE_GUI_THREAD(mem_fun (*this, &RouteUI::route_removed));
-
delete this;
}
@@ -930,15 +929,15 @@ RouteUI::midi_track() const
return dynamic_cast<MidiTrack*>(_route.get());
}
-Diskstream*
+boost::shared_ptr<Diskstream>
RouteUI::get_diskstream () const
{
boost::shared_ptr<Track> t;
if ((t = boost::dynamic_pointer_cast<Track>(_route)) != 0) {
- return &t->diskstream();
+ return t->diskstream();
} else {
- return 0;
+ return boost::shared_ptr<Diskstream> ((Diskstream*) 0);
}
}
diff --git a/gtk2_ardour/route_ui.h b/gtk2_ardour/route_ui.h
index 156063a8e5..b01d7d41cb 100644
--- a/gtk2_ardour/route_ui.h
+++ b/gtk2_ardour/route_ui.h
@@ -60,7 +60,7 @@ class RouteUI : public virtual AxisView
ARDOUR::AudioTrack* audio_track() const;
ARDOUR::MidiTrack* midi_track() const;
- ARDOUR::Diskstream* get_diskstream() const;
+ boost::shared_ptr<ARDOUR::Diskstream> get_diskstream() const;
string name() const;
diff --git a/gtk2_ardour/selection.cc b/gtk2_ardour/selection.cc
index 086d878994..aa7fdbe30f 100644
--- a/gtk2_ardour/selection.cc
+++ b/gtk2_ardour/selection.cc
@@ -180,6 +180,14 @@ Selection::toggle (Playlist* pl)
}
void
+Selection::toggle (const list<TimeAxisView*>& track_list)
+{
+ for (list<TimeAxisView*>::const_iterator i = track_list.begin(); i != track_list.end(); ++i) {
+ toggle ( (*i) );
+ }
+}
+
+void
Selection::toggle (TimeAxisView* track)
{
TrackSelection::iterator i;
@@ -616,6 +624,7 @@ Selection::set (list<Selectable*>& selectables)
add (selectables);
}
+
void
Selection::add (list<Selectable*>& selectables)
{
diff --git a/gtk2_ardour/streamview.cc b/gtk2_ardour/streamview.cc
index 82f941f9bd..ff51ca4b9f 100644
--- a/gtk2_ardour/streamview.cc
+++ b/gtk2_ardour/streamview.cc
@@ -207,7 +207,7 @@ StreamView::undisplay_diskstream ()
}
void
-StreamView::display_diskstream (Diskstream *ds)
+StreamView::display_diskstream (boost::shared_ptr<Diskstream> ds)
{
playlist_change_connection.disconnect();
playlist_changed (ds);
@@ -225,7 +225,7 @@ StreamView::playlist_modified ()
}
void
-StreamView::playlist_changed (Diskstream *ds)
+StreamView::playlist_changed (boost::shared_ptr<Diskstream> ds)
{
ENSURE_GUI_THREAD (bind (mem_fun (*this, &StreamView::playlist_changed), ds));
@@ -264,9 +264,7 @@ StreamView::diskstream_changed ()
Track *t;
if ((t = _trackview.track()) != 0) {
- Diskstream& ds = t->diskstream();
- /* XXX grrr: when will SigC++ allow me to bind references? */
- Gtkmm2ext::UI::instance()->call_slot (bind (mem_fun (*this, &StreamView::display_diskstream), &ds));
+ Gtkmm2ext::UI::instance()->call_slot (bind (mem_fun (*this, &StreamView::display_diskstream), t->diskstream()));
} else {
Gtkmm2ext::UI::instance()->call_slot (mem_fun (*this, &StreamView::undisplay_diskstream));
}
diff --git a/gtk2_ardour/streamview.h b/gtk2_ardour/streamview.h
index bee51e8835..fb49433cce 100644
--- a/gtk2_ardour/streamview.h
+++ b/gtk2_ardour/streamview.h
@@ -111,13 +111,13 @@ protected:
virtual void remove_region_view (ARDOUR::Region* );
void remove_rec_region (ARDOUR::Region*);
- void display_diskstream (ARDOUR::Diskstream* );
+ void display_diskstream (boost::shared_ptr<ARDOUR::Diskstream>);
virtual void undisplay_diskstream ();
virtual void redisplay_diskstream () = 0;
void diskstream_changed ();
void playlist_state_changed (ARDOUR::Change);
- virtual void playlist_changed (ARDOUR::Diskstream* );
+ virtual void playlist_changed (boost::shared_ptr<ARDOUR::Diskstream>);
virtual void playlist_modified ();
virtual void color_handler (ColorID, uint32_t) = 0;