diff options
author | David Robillard <d@drobilla.net> | 2006-08-24 07:37:17 +0000 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2006-08-24 07:37:17 +0000 |
commit | 25d1670a61d19e795227b939a98be9cf5a050c67 (patch) | |
tree | f288677bdbc2a2ff85763e59e5a9f801ca8f8489 /gtk2_ardour | |
parent | ea71de278461b2bc0240515b82bb56ef68f5eee3 (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')
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; |