X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Feditor.cc;h=57d1ef092220f2d70594b1a60660452788fc9e23;hb=aae367b63c9b619db1e40f27dc334c6987219481;hp=21135fc2dc815f749964dbe352f6d89c792fe4af;hpb=b49830d1a04a3e50fa8a666e2e7c25e81c1cf2f6;p=ardour.git diff --git a/gtk2_ardour/editor.cc b/gtk2_ardour/editor.cc index 21135fc2dc..57d1ef0922 100644 --- a/gtk2_ardour/editor.cc +++ b/gtk2_ardour/editor.cc @@ -28,6 +28,13 @@ #include #include +#include "ardour_ui.h" +/* + * ardour_ui.h include was moved to the top of the list + * due to a conflicting definition of 'Style' between + * Apple's MacTypes.h and BarController. + */ + #include #include @@ -65,10 +72,10 @@ #include "ardour/session_state_utils.h" #include "ardour/tempo.h" #include "ardour/utils.h" +#include "ardour/session_playlists.h" #include "control_protocol/control_protocol.h" -#include "ardour_ui.h" #include "editor.h" #include "keyboard.h" #include "marker.h" @@ -81,6 +88,7 @@ #include "audio_time_axis.h" #include "utils.h" #include "crossfade_view.h" +#include "canvas-noevent-text.h" #include "editing.h" #include "public_editor.h" #include "crossfade_edit.h" @@ -103,6 +111,7 @@ #include "mixer_strip.h" #include "editor_route_groups.h" #include "editor_regions.h" +#include "editor_locations.h" #include "editor_snapshots.h" #include "i18n.h" @@ -112,7 +121,6 @@ #endif using namespace std; -using namespace sigc; using namespace ARDOUR; using namespace PBD; using namespace Gtk; @@ -122,6 +130,7 @@ using namespace Editing; using PBD::internationalize; using PBD::atoi; +using Gtkmm2ext::Keyboard; const double Editor::timebar_height = 15.0; @@ -169,7 +178,7 @@ static const gchar *_zoom_focus_strings[] = { N_("Center"), N_("Playhead"), N_("Mouse"), - N_("Active Mark"), + N_("Edit point"), 0 }; @@ -233,8 +242,7 @@ Editor::Editor () /* tool bar related */ - , edit_point_clock (X_("editpoint"), false, X_("EditPointClock"), true) - , zoom_range_clock (X_("zoomrange"), false, X_("ZoomRangeClock"), true, true) + , zoom_range_clock (X_("zoomrange"), false, X_("ZoomRangeClock"), true, false, true) , toolbar_selection_clock_table (2,3) @@ -249,7 +257,7 @@ Editor::Editor () /* nudge */ - , nudge_clock (X_("nudge"), false, X_("NudgeClock"), true, true) + , nudge_clock (X_("nudge"), false, X_("NudgeClock"), true, false, true) , meters_running(false) , _pending_locate_request (false) @@ -260,7 +268,6 @@ Editor::Editor () PublicEditor::_instance = this; - session = 0; _have_idled = false; selection = new Selection (this); @@ -336,7 +343,6 @@ Editor::Editor () button_release_can_deselect = true; _dragging_playhead = false; _dragging_edit_point = false; - _dragging_hscrollbar = false; select_new_marker = false; rhythm_ferret = 0; _bundle_manager = 0; @@ -362,11 +368,10 @@ Editor::Editor () current_canvas_cursor = 0; frames_per_unit = 2048; /* too early to use reset_zoom () */ - reset_hscrollbar_stepping (); zoom_focus = ZoomFocusLeft; set_zoom_focus (ZoomFocusLeft); - zoom_range_clock.ValueChanged.connect (mem_fun(*this, &Editor::zoom_adjustment_changed)); + zoom_range_clock.ValueChanged.connect (sigc::mem_fun(*this, &Editor::zoom_adjustment_changed)); bbt_label.set_name ("EditorTimeButton"); bbt_label.set_size_request (-1, (int)timebar_height); @@ -431,19 +436,19 @@ Editor::Editor () transport_mark_label.set_no_show_all(); initialize_rulers (); - _summary = new EditorSummary (this); initialize_canvas (); + _summary = new EditorSummary (this); - selection->TimeChanged.connect (mem_fun(*this, &Editor::time_selection_changed)); - selection->TracksChanged.connect (mem_fun(*this, &Editor::track_selection_changed)); - editor_regions_selection_changed_connection = selection->RegionsChanged.connect (mem_fun(*this, &Editor::region_selection_changed)); - selection->PointsChanged.connect (mem_fun(*this, &Editor::point_selection_changed)); - selection->MarkersChanged.connect (mem_fun(*this, &Editor::marker_selection_changed)); + selection->TimeChanged.connect (sigc::mem_fun(*this, &Editor::time_selection_changed)); + selection->TracksChanged.connect (sigc::mem_fun(*this, &Editor::track_selection_changed)); + editor_regions_selection_changed_connection = selection->RegionsChanged.connect (sigc::mem_fun(*this, &Editor::region_selection_changed)); + selection->PointsChanged.connect (sigc::mem_fun(*this, &Editor::point_selection_changed)); + selection->MarkersChanged.connect (sigc::mem_fun(*this, &Editor::marker_selection_changed)); edit_controls_vbox.set_spacing (0); - horizontal_adjustment.signal_value_changed().connect (mem_fun(*this, &Editor::scroll_canvas_horizontally), false); - vertical_adjustment.signal_value_changed().connect (mem_fun(*this, &Editor::tie_vertical_scrolling), true); - track_canvas->signal_map_event().connect (mem_fun (*this, &Editor::track_canvas_map_handler)); + horizontal_adjustment.signal_value_changed().connect (sigc::mem_fun(*this, &Editor::scroll_canvas_horizontally), false); + vertical_adjustment.signal_value_changed().connect (sigc::mem_fun(*this, &Editor::tie_vertical_scrolling), true); + track_canvas->signal_map_event().connect (sigc::mem_fun (*this, &Editor::track_canvas_map_handler)); HBox* h = manage (new HBox); _group_tabs = new EditorGroupTabs (this); @@ -451,27 +456,18 @@ Editor::Editor () h->pack_start (edit_controls_vbox); controls_layout.add (*h); + ARDOUR_UI::instance()->tooltips().set_tip (*_group_tabs, _("Groups: context-click for possible operations")); + controls_layout.set_name ("EditControlsBase"); controls_layout.add_events (Gdk::SCROLL_MASK); - controls_layout.signal_scroll_event().connect (mem_fun(*this, &Editor::control_layout_scroll), false); + controls_layout.signal_scroll_event().connect (sigc::mem_fun(*this, &Editor::control_layout_scroll), false); controls_layout.add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::ENTER_NOTIFY_MASK|Gdk::LEAVE_NOTIFY_MASK); - controls_layout.signal_button_release_event().connect (mem_fun(*this, &Editor::edit_controls_button_release)); - controls_layout_size_request_connection = controls_layout.signal_size_request().connect (mem_fun (*this, &Editor::controls_layout_size_request)); - - edit_vscrollbar.set_adjustment (vertical_adjustment); - edit_hscrollbar.set_adjustment (horizontal_adjustment); - - edit_hscrollbar.signal_button_press_event().connect (mem_fun(*this, &Editor::hscrollbar_button_press), false); - edit_hscrollbar.signal_button_release_event().connect (mem_fun(*this, &Editor::hscrollbar_button_release), false); - edit_hscrollbar.signal_size_allocate().connect (mem_fun(*this, &Editor::hscrollbar_allocate)); - - edit_hscrollbar.set_name ("EditorHScrollbar"); + controls_layout.signal_button_release_event().connect (sigc::mem_fun(*this, &Editor::edit_controls_button_release)); + controls_layout_size_request_connection = controls_layout.signal_size_request().connect (sigc::mem_fun (*this, &Editor::controls_layout_size_request)); build_cursors (); - edit_point_clock.ValueChanged.connect (mem_fun(*this, &Editor::edit_point_clock_changed)); - ArdourCanvas::Canvas* time_pad = manage(new ArdourCanvas::Canvas()); ArdourCanvas::SimpleLine* pad_line_1 = manage(new ArdourCanvas::SimpleLine(*time_pad->root(), 0.0, 1.0, 100.0, 1.0)); @@ -484,11 +480,11 @@ Editor::Editor () ruler_label_event_box.add (ruler_label_vbox); ruler_label_event_box.set_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK); - ruler_label_event_box.signal_button_release_event().connect (mem_fun(*this, &Editor::ruler_label_button_release)); + ruler_label_event_box.signal_button_release_event().connect (sigc::mem_fun(*this, &Editor::ruler_label_button_release)); time_button_event_box.add (time_button_vbox); time_button_event_box.set_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK); - time_button_event_box.signal_button_release_event().connect (mem_fun(*this, &Editor::ruler_label_button_release)); + time_button_event_box.signal_button_release_event().connect (sigc::mem_fun(*this, &Editor::ruler_label_button_release)); /* these enable us to have a dedicated window (for cursor setting, etc.) for the canvas areas. @@ -524,22 +520,7 @@ Editor::Editor () _routes = new EditorRoutes (this); _regions = new EditorRegions (this); _snapshots = new EditorSnapshots (this); - - named_selection_scroller.add (named_selection_display); - named_selection_scroller.set_policy (POLICY_NEVER, POLICY_AUTOMATIC); - - named_selection_model = TreeStore::create (named_selection_columns); - named_selection_display.set_model (named_selection_model); - named_selection_display.append_column (_("Chunks"), named_selection_columns.text); - named_selection_display.set_headers_visible (false); - named_selection_display.set_size_request (100, -1); - named_selection_display.set_name ("NamedSelectionDisplay"); - - named_selection_display.get_selection()->set_mode (SELECTION_SINGLE); - named_selection_display.set_size_request (100, -1); - named_selection_display.signal_button_release_event().connect (mem_fun(*this, &Editor::named_selection_display_button_release), false); - named_selection_display.signal_key_release_event().connect (mem_fun(*this, &Editor::named_selection_display_key_release), false); - named_selection_display.get_selection()->signal_changed().connect (mem_fun (*this, &Editor::named_selection_display_selection_changed)); + _locations = new EditorLocations (this); Gtk::Label* nlabel; @@ -555,30 +536,58 @@ Editor::Editor () nlabel = manage (new Label (_("Route Groups"))); nlabel->set_angle (-90); the_notebook.append_page (_route_groups->widget (), *nlabel); - - if (!Profile->get_sae()) { - nlabel = manage (new Label (_("Chunks"))); - nlabel->set_angle (-90); - the_notebook.append_page (named_selection_scroller, *nlabel); - } + nlabel = manage (new Label (_("Ranges & Marks"))); + nlabel->set_angle (-90); + the_notebook.append_page (_locations->widget (), *nlabel); the_notebook.set_show_tabs (true); the_notebook.set_scrollable (true); - the_notebook.popup_enable (); + the_notebook.popup_disable (); the_notebook.set_tab_pos (Gtk::POS_RIGHT); the_notebook.show_all (); - + post_maximal_editor_width = 0; post_maximal_pane_position = 0; VPaned *editor_summary_pane = manage(new VPaned()); editor_summary_pane->pack1(edit_packer); - editor_summary_pane->pack2(*_summary); + + Button* summary_arrows_left_left = manage (new Button); + summary_arrows_left_left->add (*manage (new Arrow (ARROW_LEFT, SHADOW_NONE))); + summary_arrows_left_left->signal_clicked().connect (sigc::mem_fun (*this, &Editor::horizontal_scroll_left)); + Button* summary_arrows_left_right = manage (new Button); + summary_arrows_left_right->add (*manage (new Arrow (ARROW_RIGHT, SHADOW_NONE))); + summary_arrows_left_right->signal_clicked().connect (sigc::mem_fun (*this, &Editor::horizontal_scroll_right)); + VBox* summary_arrows_left = manage (new VBox); + summary_arrows_left->pack_start (*summary_arrows_left_left); + summary_arrows_left->pack_start (*summary_arrows_left_right); + + Button* summary_arrows_right_left = manage (new Button); + summary_arrows_right_left->add (*manage (new Arrow (ARROW_LEFT, SHADOW_NONE))); + summary_arrows_right_left->signal_clicked().connect (sigc::mem_fun (*this, &Editor::horizontal_scroll_left)); + Button* summary_arrows_right_right = manage (new Button); + summary_arrows_right_right->add (*manage (new Arrow (ARROW_RIGHT, SHADOW_NONE))); + summary_arrows_right_right->signal_clicked().connect (sigc::mem_fun (*this, &Editor::horizontal_scroll_right)); + VBox* summary_arrows_right = manage (new VBox); + summary_arrows_right->pack_start (*summary_arrows_right_left); + summary_arrows_right->pack_start (*summary_arrows_right_right); + + Frame* summary_frame = manage (new Frame); + summary_frame->set_shadow_type (Gtk::SHADOW_ETCHED_IN); + summary_frame->add (*_summary); + summary_frame->show (); + + HBox* summary_hbox = manage (new HBox); + summary_hbox->pack_start (*summary_arrows_left, false, false); + summary_hbox->pack_start (*summary_frame, true, true); + summary_hbox->pack_start (*summary_arrows_right, false, false); + + editor_summary_pane->pack2(*summary_hbox); edit_pane.pack1 (*editor_summary_pane, true, true); edit_pane.pack2 (the_notebook, false, true); - edit_pane.signal_size_allocate().connect (bind (mem_fun(*this, &Editor::pane_allocation_handler), static_cast (&edit_pane))); + edit_pane.signal_size_allocate().connect (sigc::bind (sigc::mem_fun(*this, &Editor::pane_allocation_handler), static_cast (&edit_pane))); top_hbox.pack_start (toolbar_frame, false, true); @@ -616,9 +625,9 @@ Editor::Editor () set_state (*node, Stateful::loading_state_version); _playlist_selector = new PlaylistSelector(); - _playlist_selector->signal_delete_event().connect (bind (sigc::ptr_fun (just_hide_it), static_cast (_playlist_selector))); + _playlist_selector->signal_delete_event().connect (sigc::bind (sigc::ptr_fun (just_hide_it), static_cast (_playlist_selector))); - RegionView::RegionViewGoingAway.connect (mem_fun(*this, &Editor::catch_vanishing_regionview)); + RegionView::RegionViewGoingAway.connect (*this, boost::bind (&Editor::catch_vanishing_regionview, this, _1)); /* nudge stuff */ @@ -663,18 +672,18 @@ Editor::Editor () add (vpacker); add_events (Gdk::KEY_PRESS_MASK|Gdk::KEY_RELEASE_MASK); - signal_configure_event().connect (mem_fun (*ARDOUR_UI::instance(), &ARDOUR_UI::configure_handler)); - signal_delete_event().connect (mem_fun (*ARDOUR_UI::instance(), &ARDOUR_UI::exit_on_main_window_close)); + signal_configure_event().connect (sigc::mem_fun (*ARDOUR_UI::instance(), &ARDOUR_UI::configure_handler)); + signal_delete_event().connect (sigc::mem_fun (*ARDOUR_UI::instance(), &ARDOUR_UI::exit_on_main_window_close)); /* allow external control surfaces/protocols to do various things */ - ControlProtocol::ZoomToSession.connect (mem_fun (*this, &Editor::temporal_zoom_session)); - ControlProtocol::ZoomIn.connect (bind (mem_fun (*this, &Editor::temporal_zoom_step), false)); - ControlProtocol::ZoomOut.connect (bind (mem_fun (*this, &Editor::temporal_zoom_step), true)); - ControlProtocol::ScrollTimeline.connect (mem_fun (*this, &Editor::control_scroll)); - BasicUI::AccessAction.connect (mem_fun (*this, &Editor::access_action)); + ControlProtocol::ZoomToSession.connect (*this, boost::bind (&Editor::temporal_zoom_session, this)); + ControlProtocol::ZoomIn.connect (*this, boost::bind (&Editor::temporal_zoom_step, this, false)); + ControlProtocol::ZoomOut.connect (*this, boost::bind (&Editor::temporal_zoom_step, this, true)); + ControlProtocol::ScrollTimeline.connect (*this, boost::bind (&Editor::control_scroll, this, _1)); + BasicUI::AccessAction.connect (*this, boost::bind (&Editor::access_action, this, _1, _2)); - Config->ParameterChanged.connect (mem_fun (*this, &Editor::parameter_changed)); + Config->ParameterChanged.connect (*this, boost::bind (&Editor::parameter_changed, this, _1)); _last_normalization_value = 0; @@ -795,38 +804,17 @@ Editor::instant_save () return; } - if (session) { - session->add_instant_xml(get_state()); + if (_session) { + _session->add_instant_xml(get_state()); } else { Config->add_instant_xml(get_state()); } } -void -Editor::edit_point_clock_changed() -{ - if (_dragging_edit_point) { - return; - } - - if (selection->markers.empty()) { - return; - } - - bool ignored; - Location* loc = find_location_from_marker (selection->markers.front(), ignored); - - if (!loc) { - return; - } - - loc->move_to (edit_point_clock.current_time()); -} - void Editor::zoom_adjustment_changed () { - if (session == 0) { + if (_session == 0) { return; } @@ -835,8 +823,8 @@ Editor::zoom_adjustment_changed () if (fpu < 1.0) { fpu = 1.0; zoom_range_clock.set ((nframes64_t) floor (fpu * _canvas_width)); - } else if (fpu > session->current_end_frame() / _canvas_width) { - fpu = session->current_end_frame() / _canvas_width; + } else if (fpu > _session->current_end_frame() / _canvas_width) { + fpu = _session->current_end_frame() / _canvas_width; zoom_range_clock.set ((nframes64_t) floor (fpu * _canvas_width)); } @@ -846,9 +834,9 @@ Editor::zoom_adjustment_changed () void Editor::control_scroll (float fraction) { - ENSURE_GUI_THREAD(bind (mem_fun (*this, &Editor::control_scroll), fraction)); + ENSURE_GUI_THREAD (*this, &Editor::control_scroll, fraction) - if (!session) { + if (!_session) { return; } @@ -866,7 +854,7 @@ Editor::control_scroll (float fraction) */ if (!_control_scroll_target) { - _control_scroll_target = session->transport_frame(); + _control_scroll_target = _session->transport_frame(); _dragging_playhead = true; } @@ -902,13 +890,13 @@ Editor::control_scroll (float fraction) /* add the next timeout */ - control_scroll_connection = Glib::signal_timeout().connect (bind (mem_fun (*this, &Editor::deferred_control_scroll), *_control_scroll_target), 250); + control_scroll_connection = Glib::signal_timeout().connect (sigc::bind (sigc::mem_fun (*this, &Editor::deferred_control_scroll), *_control_scroll_target), 250); } bool Editor::deferred_control_scroll (nframes64_t /*target*/) { - session->request_locate (*_control_scroll_target, session->transport_rolling()); + _session->request_locate (*_control_scroll_target, _session->transport_rolling()); // reset for next stream _control_scroll_target = boost::none; _dragging_playhead = false; @@ -918,11 +906,11 @@ Editor::deferred_control_scroll (nframes64_t /*target*/) void Editor::access_action (std::string action_group, std::string action_item) { - if (!session) { + if (!_session) { return; } - ENSURE_GUI_THREAD (bind (mem_fun (*this, &Editor::access_action), action_group, action_item)); + ENSURE_GUI_THREAD (*this, &Editor::access_action, action_group, action_item) RefPtr act; act = ActionManager::get_action( action_group.c_str(), action_item.c_str() ); @@ -945,7 +933,7 @@ void Editor::start_scrolling () { scroll_connection = ARDOUR_UI::instance()->SuperRapidScreenUpdate.connect - (mem_fun(*this, &Editor::update_current_screen)); + (sigc::mem_fun(*this, &Editor::update_current_screen)); } @@ -958,9 +946,9 @@ Editor::stop_scrolling () void Editor::map_position_change (nframes64_t frame) { - ENSURE_GUI_THREAD (bind (mem_fun(*this, &Editor::map_position_change), frame)); + ENSURE_GUI_THREAD (*this, &Editor::map_position_change, frame) - if (session == 0 || !_follow_playhead) { + if (_session == 0 || !_follow_playhead) { return; } @@ -998,12 +986,12 @@ Editor::center_screen_internal (nframes64_t frame, float page) void Editor::handle_new_duration () { - if (!session) { + if (!_session) { return; } - ENSURE_GUI_THREAD (mem_fun (*this, &Editor::handle_new_duration)); - nframes64_t new_end = session->current_end_frame() + (nframes64_t) floorf (current_page_frames() * 0.10f); + ENSURE_GUI_THREAD (*this, &Editor::handle_new_duration) + nframes64_t new_end = _session->current_end_frame() + (nframes64_t) floorf (current_page_frames() * 0.10f); horizontal_adjustment.set_upper (new_end / frames_per_unit); horizontal_adjustment.set_page_size (current_page_frames()/frames_per_unit); @@ -1014,28 +1002,20 @@ Editor::handle_new_duration () //cerr << "Editor::handle_new_duration () called ha v:l:u:ps:lcf = " << horizontal_adjustment.get_value() << ":" << horizontal_adjustment.get_lower() << ":" << horizontal_adjustment.get_upper() << ":" << horizontal_adjustment.get_page_size() << ":" << endl;//DEBUG } -void -Editor::update_title_s (const string & snap_name) -{ - ENSURE_GUI_THREAD(bind (mem_fun(*this, &Editor::update_title_s), snap_name)); - - update_title (); -} - void Editor::update_title () { - ENSURE_GUI_THREAD (mem_fun(*this, &Editor::update_title)); + ENSURE_GUI_THREAD (*this, &Editor::update_title) - if (session) { - bool dirty = session->dirty(); + if (_session) { + bool dirty = _session->dirty(); string session_name; - if (session->snap_name() != session->name()) { - session_name = session->snap_name(); + if (_session->snap_name() != _session->name()) { + session_name = _session->snap_name(); } else { - session_name = session->name(); + session_name = _session->name(); } if (dirty) { @@ -1049,9 +1029,36 @@ Editor::update_title () } void -Editor::connect_to_session (Session *t) +Editor::set_session (Session *t) { - session = t; + SessionHandlePtr::set_session (t); + + if (!_session) { + return; + } + + zoom_range_clock.set_session (_session); + _playlist_selector->set_session (_session); + nudge_clock.set_session (_session); + _summary->set_session (_session); + _group_tabs->set_session (_session); + _route_groups->set_session (_session); + _regions->set_session (_session); + _snapshots->set_session (_session); + _routes->set_session (_session); + _locations->set_session (_session); + + if (rhythm_ferret) { + rhythm_ferret->set_session (_session); + } + + if (analysis_window) { + analysis_window->set_session (_session); + } + + if (sfbrowser) { + sfbrowser->set_session (_session); + } compute_fixed_ruler_scale (); @@ -1064,111 +1071,92 @@ Editor::connect_to_session (Session *t) /* catch up with the playhead */ - session->request_locate (playhead_cursor->current_frame); + _session->request_locate (playhead_cursor->current_frame); update_title (); - session->GoingAway.connect (mem_fun(*this, &Editor::session_going_away)); - session->history().Changed.connect (mem_fun (*this, &Editor::history_changed)); + _session->history().Changed.connect (_session_connections, boost::bind (&Editor::history_changed, this)); /* These signals can all be emitted by a non-GUI thread. Therefore the handlers for them must not attempt to directly interact with the GUI, but use Gtkmm2ext::UI::instance()->call_slot(); */ - session_connections.push_back (session->TransportStateChange.connect (mem_fun(*this, &Editor::map_transport_state))); - session_connections.push_back (session->PositionChanged.connect (mem_fun(*this, &Editor::map_position_change))); - session_connections.push_back (session->RouteAdded.connect (mem_fun(*this, &Editor::handle_new_route))); - session_connections.push_back (session->DurationChanged.connect (mem_fun(*this, &Editor::handle_new_duration))); - session_connections.push_back (session->NamedSelectionAdded.connect (mem_fun(*this, &Editor::handle_new_named_selection))); - session_connections.push_back (session->NamedSelectionRemoved.connect (mem_fun(*this, &Editor::handle_new_named_selection))); - session_connections.push_back (session->DirtyChanged.connect (mem_fun(*this, &Editor::update_title))); - session_connections.push_back (session->StateSaved.connect (mem_fun(*this, &Editor::update_title_s))); - session_connections.push_back (session->AskAboutPlaylistDeletion.connect (mem_fun(*this, &Editor::playlist_deletion_dialog))); + _session->TransportStateChange.connect (_session_connections, boost::bind (&Editor::map_transport_state, this)); + _session->PositionChanged.connect (_session_connections, boost::bind (&Editor::map_position_change, this, _1)); + _session->RouteAdded.connect (_session_connections, boost::bind (&Editor::handle_new_route, this, _1)); + _session->DurationChanged.connect (_session_connections, boost::bind (&Editor::handle_new_duration, this)); + _session->DirtyChanged.connect (_session_connections, boost::bind (&Editor::update_title, this)); + _session->StateSaved.connect (_session_connections, boost::bind (&Editor::update_title, this)); + _session->AskAboutPlaylistDeletion.connect (_session_connections, boost::bind (&Editor::playlist_deletion_dialog, this, _1)); + _session->TimecodeOffsetChanged.connect (_session_connections, boost::bind (&Editor::update_just_timecode, this)); + _session->tempo_map().StateChanged.connect (_session_connections, boost::bind (&Editor::tempo_map_changed, this, _1)); + _session->Located.connect (_session_connections, boost::bind (&Editor::located, this)); + _session->config.ParameterChanged.connect (_session_connections, boost::bind (&Editor::parameter_changed, this, _1)); - session_connections.push_back (session->TimecodeOffsetChanged.connect (mem_fun(*this, &Editor::update_just_timecode))); - - session_connections.push_back (session->tempo_map().StateChanged.connect (mem_fun(*this, &Editor::tempo_map_changed))); - - session_connections.push_back (session->Located.connect (mem_fun (*this, &Editor::located))); - session_connections.push_back (session->config.ParameterChanged.connect (mem_fun (*this, &Editor::parameter_changed))); - - edit_point_clock.set_mode(AudioClock::BBT); - edit_point_clock.set_session (session); - zoom_range_clock.set_session (session); - _playlist_selector->set_session (session); - nudge_clock.set_session (session); if (Profile->get_sae()) { BBT_Time bbt; bbt.bars = 0; bbt.beats = 0; bbt.ticks = 120; - nframes_t pos = session->tempo_map().bbt_duration_at (0, bbt, 1); + nframes_t pos = _session->tempo_map().bbt_duration_at (0, bbt, 1); nudge_clock.set_mode(AudioClock::BBT); nudge_clock.set (pos, true, 0, AudioClock::BBT); } else { - nudge_clock.set (session->frame_rate() * 5, true, 0, AudioClock::Timecode); // default of 5 seconds + nudge_clock.set (_session->frame_rate() * 5, true, 0, AudioClock::Timecode); // default of 5 seconds } playhead_cursor->canvas_item.show (); - if (rhythm_ferret) { - rhythm_ferret->set_session (session); - } - - if (analysis_window != 0) - analysis_window->set_session (session); - - Location* loc = session->locations()->auto_loop_location(); + Location* loc = _session->locations()->auto_loop_location(); if (loc == 0) { - loc = new Location (0, session->current_end_frame(), _("Loop"),(Location::Flags) (Location::IsAutoLoop | Location::IsHidden)); + loc = new Location (0, _session->current_end_frame(), _("Loop"),(Location::Flags) (Location::IsAutoLoop | Location::IsHidden)); if (loc->start() == loc->end()) { loc->set_end (loc->start() + 1); } - session->locations()->add (loc, false); - session->set_auto_loop_location (loc); + _session->locations()->add (loc, false); + _session->set_auto_loop_location (loc); } else { // force name loc->set_name (_("Loop")); } - loc = session->locations()->auto_punch_location(); + loc = _session->locations()->auto_punch_location(); if (loc == 0) { - loc = new Location (0, session->current_end_frame(), _("Punch"), (Location::Flags) (Location::IsAutoPunch | Location::IsHidden)); + loc = new Location (0, _session->current_end_frame(), _("Punch"), (Location::Flags) (Location::IsAutoPunch | Location::IsHidden)); if (loc->start() == loc->end()) { loc->set_end (loc->start() + 1); } - session->locations()->add (loc, false); - session->set_auto_punch_location (loc); + _session->locations()->add (loc, false); + _session->set_auto_punch_location (loc); } else { // force name loc->set_name (_("Punch")); } - Config->map_parameters (mem_fun (*this, &Editor::parameter_changed)); - session->config.map_parameters (mem_fun (*this, &Editor::parameter_changed)); + boost::function pc (boost::bind (&Editor::parameter_changed, this, _1)); + Config->map_parameters (pc); + _session->config.map_parameters (pc); - session->StateSaved.connect (mem_fun(*this, &Editor::session_state_saved)); refresh_location_display (); - session->locations()->added.connect (mem_fun(*this, &Editor::add_new_location)); - session->locations()->removed.connect (mem_fun(*this, &Editor::location_gone)); - session->locations()->changed.connect (mem_fun(*this, &Editor::refresh_location_display)); - session->locations()->StateChanged.connect (mem_fun(*this, &Editor::refresh_location_display_s)); - session->locations()->end_location()->changed.connect (mem_fun(*this, &Editor::end_location_changed)); - if (sfbrowser) { - sfbrowser->set_session (session); - } + /* static signal - no need to drop connection when session is deleted (XXX or we are?)*/ - handle_new_duration (); + _session->StateSaved.connect (*this, boost::bind (&Editor::session_state_saved, this, _1)); - redisplay_named_selections (); + _session->locations()->added.connect (_session_connections, sigc::mem_fun(*this, &Editor::add_new_location)); + _session->locations()->removed.connect (_session_connections, sigc::mem_fun(*this, &Editor::location_gone)); + _session->locations()->changed.connect (_session_connections, sigc::mem_fun(*this, &Editor::refresh_location_display)); + _session->locations()->StateChanged.connect (_session_connections, sigc::mem_fun(*this, &Editor::refresh_location_display_s)); + _session->locations()->end_location()->changed.connect (_session_connections, sigc::mem_fun(*this, &Editor::end_location_changed)); + + handle_new_duration (); restore_ruler_visibility (); //tempo_map_changed (Change (0)); - session->tempo_map().apply_with_metrics (*this, &Editor::draw_metric_marks); + _session->tempo_map().apply_with_metrics (*this, &Editor::draw_metric_marks); for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) { (static_cast(*i))->set_samples_per_unit (frames_per_unit); @@ -1189,14 +1177,7 @@ Editor::connect_to_session (Session *t) } /* register for undo history */ - session->register_with_memento_command_factory(_id, this); - - _summary->connect_to_session (session); - _group_tabs->connect_to_session (session); - _route_groups->connect_to_session (session); - _regions->connect_to_session (session); - _snapshots->connect_to_session (session); - _routes->connect_to_session (session); + _session->register_with_memento_command_factory(_id, this); start_updating (); } @@ -1290,22 +1271,22 @@ Editor::popup_fade_context_menu (int button, int32_t time, ArdourCanvas::Item* i case FadeInItem: case FadeInHandleItem: if (arv->audio_region()->fade_in_active()) { - items.push_back (MenuElem (_("Deactivate"), bind (mem_fun (*this, &Editor::set_fade_in_active), false))); + items.push_back (MenuElem (_("Deactivate"), sigc::bind (sigc::mem_fun (*this, &Editor::set_fade_in_active), false))); } else { - items.push_back (MenuElem (_("Activate"), bind (mem_fun (*this, &Editor::set_fade_in_active), true))); + items.push_back (MenuElem (_("Activate"), sigc::bind (sigc::mem_fun (*this, &Editor::set_fade_in_active), true))); } items.push_back (SeparatorElem()); if (Profile->get_sae()) { - items.push_back (MenuElem (_("Linear"), bind (mem_fun (*this, &Editor::set_fade_in_shape), AudioRegion::Linear))); - items.push_back (MenuElem (_("Slowest"), bind (mem_fun (*this, &Editor::set_fade_in_shape), AudioRegion::Fast))); + items.push_back (MenuElem (_("Linear"), sigc::bind (sigc::mem_fun (*this, &Editor::set_fade_in_shape), AudioRegion::Linear))); + items.push_back (MenuElem (_("Slowest"), sigc::bind (sigc::mem_fun (*this, &Editor::set_fade_in_shape), AudioRegion::Fast))); } else { - items.push_back (MenuElem (_("Linear"), bind (mem_fun (*this, &Editor::set_fade_in_shape), AudioRegion::Linear))); - items.push_back (MenuElem (_("Slowest"), bind (mem_fun (*this, &Editor::set_fade_in_shape), AudioRegion::Fast))); - items.push_back (MenuElem (_("Slow"), bind (mem_fun (*this, &Editor::set_fade_in_shape), AudioRegion::LogB))); - items.push_back (MenuElem (_("Fast"), bind (mem_fun (*this, &Editor::set_fade_in_shape), AudioRegion::LogA))); - items.push_back (MenuElem (_("Fastest"), bind (mem_fun (*this, &Editor::set_fade_in_shape), AudioRegion::Slow))); + items.push_back (MenuElem (_("Linear"), sigc::bind (sigc::mem_fun (*this, &Editor::set_fade_in_shape), AudioRegion::Linear))); + items.push_back (MenuElem (_("Slowest"), sigc::bind (sigc::mem_fun (*this, &Editor::set_fade_in_shape), AudioRegion::Fast))); + items.push_back (MenuElem (_("Slow"), sigc::bind (sigc::mem_fun (*this, &Editor::set_fade_in_shape), AudioRegion::LogB))); + items.push_back (MenuElem (_("Fast"), sigc::bind (sigc::mem_fun (*this, &Editor::set_fade_in_shape), AudioRegion::LogA))); + items.push_back (MenuElem (_("Fastest"), sigc::bind (sigc::mem_fun (*this, &Editor::set_fade_in_shape), AudioRegion::Slow))); } break; @@ -1313,22 +1294,22 @@ Editor::popup_fade_context_menu (int button, int32_t time, ArdourCanvas::Item* i case FadeOutItem: case FadeOutHandleItem: if (arv->audio_region()->fade_out_active()) { - items.push_back (MenuElem (_("Deactivate"), bind (mem_fun (*this, &Editor::set_fade_out_active), false))); + items.push_back (MenuElem (_("Deactivate"), sigc::bind (sigc::mem_fun (*this, &Editor::set_fade_out_active), false))); } else { - items.push_back (MenuElem (_("Activate"), bind (mem_fun (*this, &Editor::set_fade_out_active), true))); + items.push_back (MenuElem (_("Activate"), sigc::bind (sigc::mem_fun (*this, &Editor::set_fade_out_active), true))); } items.push_back (SeparatorElem()); if (Profile->get_sae()) { - items.push_back (MenuElem (_("Linear"), bind (mem_fun (*this, &Editor::set_fade_out_shape), AudioRegion::Linear))); - items.push_back (MenuElem (_("Slowest"), bind (mem_fun (*this, &Editor::set_fade_out_shape), AudioRegion::Slow))); + items.push_back (MenuElem (_("Linear"), sigc::bind (sigc::mem_fun (*this, &Editor::set_fade_out_shape), AudioRegion::Linear))); + items.push_back (MenuElem (_("Slowest"), sigc::bind (sigc::mem_fun (*this, &Editor::set_fade_out_shape), AudioRegion::Slow))); } else { - items.push_back (MenuElem (_("Linear"), bind (mem_fun (*this, &Editor::set_fade_out_shape), AudioRegion::Linear))); - items.push_back (MenuElem (_("Slowest"), bind (mem_fun (*this, &Editor::set_fade_out_shape), AudioRegion::Slow))); - items.push_back (MenuElem (_("Slow"), bind (mem_fun (*this, &Editor::set_fade_out_shape), AudioRegion::LogA))); - items.push_back (MenuElem (_("Fast"), bind (mem_fun (*this, &Editor::set_fade_out_shape), AudioRegion::LogB))); - items.push_back (MenuElem (_("Fastest"), bind (mem_fun (*this, &Editor::set_fade_out_shape), AudioRegion::Fast))); + items.push_back (MenuElem (_("Linear"), sigc::bind (sigc::mem_fun (*this, &Editor::set_fade_out_shape), AudioRegion::Linear))); + items.push_back (MenuElem (_("Slowest"), sigc::bind (sigc::mem_fun (*this, &Editor::set_fade_out_shape), AudioRegion::Slow))); + items.push_back (MenuElem (_("Slow"), sigc::bind (sigc::mem_fun (*this, &Editor::set_fade_out_shape), AudioRegion::LogA))); + items.push_back (MenuElem (_("Fast"), sigc::bind (sigc::mem_fun (*this, &Editor::set_fade_out_shape), AudioRegion::LogB))); + items.push_back (MenuElem (_("Fastest"), sigc::bind (sigc::mem_fun (*this, &Editor::set_fade_out_shape), AudioRegion::Fast))); } break; @@ -1441,15 +1422,15 @@ Editor::popup_track_context_menu (int button, int32_t time, ItemType item_type, switch (clicked_routeview->audio_track()->freeze_state()) { case AudioTrack::NoFreeze: - edit_items.push_back (MenuElem (_("Freeze"), mem_fun(*this, &Editor::freeze_route))); + edit_items.push_back (MenuElem (_("Freeze"), sigc::mem_fun(*this, &Editor::freeze_route))); break; case AudioTrack::Frozen: - edit_items.push_back (MenuElem (_("Unfreeze"), mem_fun(*this, &Editor::unfreeze_route))); + edit_items.push_back (MenuElem (_("Unfreeze"), sigc::mem_fun(*this, &Editor::unfreeze_route))); break; case AudioTrack::UnFrozen: - edit_items.push_back (MenuElem (_("Freeze"), mem_fun(*this, &Editor::freeze_route))); + edit_items.push_back (MenuElem (_("Freeze"), sigc::mem_fun(*this, &Editor::freeze_route))); break; } @@ -1576,8 +1557,8 @@ Editor::analyze_region_selection() if (analysis_window == 0) { analysis_window = new AnalysisWindow(); - if (session != 0) - analysis_window->set_session(session); + if (_session != 0) + analysis_window->set_session(_session); analysis_window->show_all(); } @@ -1594,8 +1575,8 @@ Editor::analyze_range_selection() if (analysis_window == 0) { analysis_window = new AnalysisWindow(); - if (session != 0) - analysis_window->set_session(session); + if (_session != 0) + analysis_window->set_session(_session); analysis_window->show_all(); } @@ -1638,8 +1619,8 @@ Editor::add_crossfade_context_items (AudioStreamView* /*view*/, boost::shared_pt str = _("Unmute"); } - items.push_back (MenuElem (str, bind (mem_fun(*this, &Editor::toggle_xfade_active), boost::weak_ptr (xfade)))); - items.push_back (MenuElem (_("Edit"), bind (mem_fun(*this, &Editor::edit_xfade), boost::weak_ptr (xfade)))); + items.push_back (MenuElem (str, sigc::bind (sigc::mem_fun(*this, &Editor::toggle_xfade_active), boost::weak_ptr (xfade)))); + items.push_back (MenuElem (_("Edit"), sigc::bind (sigc::mem_fun(*this, &Editor::edit_xfade), boost::weak_ptr (xfade)))); if (xfade->can_follow_overlap()) { @@ -1649,7 +1630,7 @@ Editor::add_crossfade_context_items (AudioStreamView* /*view*/, boost::shared_pt str = _("Convert to full"); } - items.push_back (MenuElem (str, bind (mem_fun(*this, &Editor::toggle_xfade_length), xfade))); + items.push_back (MenuElem (str, sigc::bind (sigc::mem_fun(*this, &Editor::toggle_xfade_length), xfade))); } if (many) { @@ -1701,32 +1682,32 @@ Editor::add_region_context_items (StreamView* sv, boost::shared_ptr regi */ region_menu->signal_map_event().connect ( - bind (mem_fun(*this, &Editor::set_selected_regionview_from_map_event), sv, boost::weak_ptr(region))); + sigc::bind (sigc::mem_fun(*this, &Editor::set_selected_regionview_from_map_event), sv, boost::weak_ptr(region))); - items.push_back (MenuElem (_("Rename"), mem_fun(*this, &Editor::rename_region))); + items.push_back (MenuElem (_("Rename"), sigc::mem_fun(*this, &Editor::rename_region))); if (mr && internal_editing()) { - items.push_back (MenuElem (_("List editor..."), mem_fun(*this, &Editor::show_midi_list_editor))); + items.push_back (MenuElem (_("List editor..."), sigc::mem_fun(*this, &Editor::show_midi_list_editor))); } else { - items.push_back (MenuElem (_("Region editor"), mem_fun(*this, &Editor::edit_region))); + items.push_back (MenuElem (_("Region editor"), sigc::mem_fun(*this, &Editor::edit_region))); } } - items.push_back (MenuElem (_("Raise to top layer"), mem_fun(*this, &Editor::raise_region_to_top))); - items.push_back (MenuElem (_("Lower to bottom layer"), mem_fun (*this, &Editor::lower_region_to_bottom))); + items.push_back (MenuElem (_("Raise to top layer"), sigc::mem_fun(*this, &Editor::raise_region_to_top))); + items.push_back (MenuElem (_("Lower to bottom layer"), sigc::mem_fun (*this, &Editor::lower_region_to_bottom))); items.push_back (SeparatorElem()); - items.push_back (MenuElem (_("Define sync point"), mem_fun(*this, &Editor::set_region_sync_from_edit_point))); + items.push_back (MenuElem (_("Define sync point"), sigc::mem_fun(*this, &Editor::set_region_sync_from_edit_point))); if (_edit_point == EditAtMouse) { items.back ().set_sensitive (false); } - items.push_back (MenuElem (_("Remove sync point"), mem_fun(*this, &Editor::remove_region_sync))); + items.push_back (MenuElem (_("Remove sync point"), sigc::mem_fun(*this, &Editor::remove_region_sync))); items.push_back (SeparatorElem()); - items.push_back (MenuElem (_("Audition"), mem_fun(*this, &Editor::play_selected_region))); - items.push_back (MenuElem (_("Export"), mem_fun(*this, &Editor::export_region))); - items.push_back (MenuElem (_("Bounce"), mem_fun(*this, &Editor::bounce_region_selection))); + items.push_back (MenuElem (_("Audition"), sigc::mem_fun(*this, &Editor::play_selected_region))); + items.push_back (MenuElem (_("Export"), sigc::mem_fun(*this, &Editor::export_region))); + items.push_back (MenuElem (_("Bounce"), sigc::mem_fun(*this, &Editor::bounce_region_selection))); if (ar) { - items.push_back (MenuElem (_("Spectral Analysis"), mem_fun(*this, &Editor::analyze_region_selection))); + items.push_back (MenuElem (_("Spectral Analysis"), sigc::mem_fun(*this, &Editor::analyze_region_selection))); } items.push_back (SeparatorElem()); @@ -1745,7 +1726,7 @@ Editor::add_region_context_items (StreamView* sv, boost::shared_ptr regi if (region_to_check->locked()) { region_lock_item->set_active(); } - region_lock_item->signal_activate().connect (mem_fun(*this, &Editor::toggle_region_lock)); + region_lock_item->signal_activate().connect (sigc::mem_fun(*this, &Editor::toggle_region_lock)); items.push_back (CheckMenuElem (_("Glue to Bars&Beats"))); CheckMenuItem* bbt_glue_item = static_cast(&items.back()); @@ -1759,11 +1740,11 @@ Editor::add_region_context_items (StreamView* sv, boost::shared_ptr regi break; } - bbt_glue_item->signal_activate().connect (bind (mem_fun (*this, &Editor::set_region_lock_style), Region::MusicTime)); + bbt_glue_item->signal_activate().connect (sigc::bind (sigc::mem_fun (*this, &Editor::set_region_lock_style), Region::MusicTime)); items.push_back (CheckMenuElem (_("Mute"))); CheckMenuItem* region_mute_item = static_cast(&items.back()); - fooc = region_mute_item->signal_activate().connect (mem_fun(*this, &Editor::toggle_region_mute)); + fooc = region_mute_item->signal_activate().connect (sigc::mem_fun(*this, &Editor::toggle_region_mute)); if (region_to_check->muted()) { fooc.block (true); region_mute_item->set_active(); @@ -1773,7 +1754,7 @@ Editor::add_region_context_items (StreamView* sv, boost::shared_ptr regi if (!Profile->get_sae()) { items.push_back (CheckMenuElem (_("Opaque"))); CheckMenuItem* region_opaque_item = static_cast(&items.back()); - fooc = region_opaque_item->signal_activate().connect (mem_fun(*this, &Editor::toggle_region_opaque)); + fooc = region_opaque_item->signal_activate().connect (sigc::mem_fun(*this, &Editor::toggle_region_opaque)); if (region_to_check->opaque()) { fooc.block (true); region_opaque_item->set_active(); @@ -1781,7 +1762,7 @@ Editor::add_region_context_items (StreamView* sv, boost::shared_ptr regi } } - items.push_back (CheckMenuElem (_("Original position"), mem_fun(*this, &Editor::naturalize))); + items.push_back (CheckMenuElem (_("Original position"), sigc::mem_fun(*this, &Editor::naturalize))); if (region_to_check->at_natural_position()) { items.back().set_sensitive (false); } @@ -1794,11 +1775,11 @@ Editor::add_region_context_items (StreamView* sv, boost::shared_ptr regi AudioRegionView* arv = dynamic_cast(rv); if (!Profile->get_sae()) { - items.push_back (MenuElem (_("Reset Envelope"), mem_fun(*this, &Editor::reset_region_gain_envelopes))); + items.push_back (MenuElem (_("Reset Envelope"), sigc::mem_fun(*this, &Editor::reset_region_gain_envelopes))); items.push_back (CheckMenuElem (_("Envelope Visible"))); CheckMenuItem* region_envelope_visible_item = static_cast (&items.back()); - fooc = region_envelope_visible_item->signal_activate().connect (mem_fun(*this, &Editor::toggle_gain_envelope_visibility)); + fooc = region_envelope_visible_item->signal_activate().connect (sigc::mem_fun(*this, &Editor::toggle_gain_envelope_visibility)); if (arv->envelope_visible()) { fooc.block (true); region_envelope_visible_item->set_active (true); @@ -1807,7 +1788,7 @@ Editor::add_region_context_items (StreamView* sv, boost::shared_ptr regi items.push_back (CheckMenuElem (_("Envelope Active"))); CheckMenuItem* region_envelope_active_item = static_cast (&items.back()); - fooc = region_envelope_active_item->signal_activate().connect (mem_fun(*this, &Editor::toggle_gain_envelope_active)); + fooc = region_envelope_active_item->signal_activate().connect (sigc::mem_fun(*this, &Editor::toggle_gain_envelope_active)); if (ar->envelope_active()) { fooc.block (true); @@ -1818,29 +1799,29 @@ Editor::add_region_context_items (StreamView* sv, boost::shared_ptr regi items.push_back (SeparatorElem()); } - items.push_back (MenuElem (_("Normalize"), mem_fun(*this, &Editor::normalize_region))); + items.push_back (MenuElem (_("Normalize"), sigc::mem_fun(*this, &Editor::normalize_region))); if (ar->scale_amplitude() != 1) { - items.push_back (MenuElem (_("Reset Gain"), mem_fun(*this, &Editor::reset_region_scale_amplitude))); + items.push_back (MenuElem (_("Reset Gain"), sigc::mem_fun(*this, &Editor::reset_region_scale_amplitude))); } } else if (mr) { - items.push_back (MenuElem (_("Quantize"), mem_fun(*this, &Editor::quantize_region))); + items.push_back (MenuElem (_("Quantize"), sigc::mem_fun(*this, &Editor::quantize_region))); items.push_back (SeparatorElem()); } - items.push_back (MenuElem (_("Strip Silence..."), mem_fun (*this, &Editor::strip_region_silence))); - items.push_back (MenuElem (_("Reverse"), mem_fun(*this, &Editor::reverse_region))); + items.push_back (MenuElem (_("Strip Silence..."), sigc::mem_fun (*this, &Editor::strip_region_silence))); + items.push_back (MenuElem (_("Reverse"), sigc::mem_fun(*this, &Editor::reverse_region))); items.push_back (SeparatorElem()); /* range related stuff */ - items.push_back (MenuElem (_("Add Single Range"), mem_fun (*this, &Editor::add_location_from_audio_region))); - items.push_back (MenuElem (_("Add Range Markers"), mem_fun (*this, &Editor::add_locations_from_audio_region))); + items.push_back (MenuElem (_("Add Single Range"), sigc::mem_fun (*this, &Editor::add_location_from_audio_region))); + items.push_back (MenuElem (_("Add Range Markers"), sigc::mem_fun (*this, &Editor::add_locations_from_audio_region))); if (selection->regions.size() < 2) { items.back().set_sensitive (false); } - items.push_back (MenuElem (_("Set Range Selection"), mem_fun (*this, &Editor::set_selection_from_region))); + items.push_back (MenuElem (_("Set Range Selection"), sigc::mem_fun (*this, &Editor::set_selection_from_region))); items.push_back (SeparatorElem()); /* Nudge region */ @@ -1849,10 +1830,10 @@ Editor::add_region_context_items (StreamView* sv, boost::shared_ptr regi MenuList& nudge_items = nudge_menu->items(); nudge_menu->set_name ("ArdourContextMenu"); - nudge_items.push_back (MenuElem (_("Nudge fwd"), (bind (mem_fun(*this, &Editor::nudge_forward), false, false)))); - nudge_items.push_back (MenuElem (_("Nudge bwd"), (bind (mem_fun(*this, &Editor::nudge_backward), false, false)))); - nudge_items.push_back (MenuElem (_("Nudge fwd by capture offset"), (mem_fun(*this, &Editor::nudge_forward_capture_offset)))); - nudge_items.push_back (MenuElem (_("Nudge bwd by capture offset"), (mem_fun(*this, &Editor::nudge_backward_capture_offset)))); + nudge_items.push_back (MenuElem (_("Nudge fwd"), (sigc::bind (sigc::mem_fun(*this, &Editor::nudge_forward), false, false)))); + nudge_items.push_back (MenuElem (_("Nudge bwd"), (sigc::bind (sigc::mem_fun(*this, &Editor::nudge_backward), false, false)))); + nudge_items.push_back (MenuElem (_("Nudge fwd by capture offset"), (sigc::mem_fun(*this, &Editor::nudge_forward_capture_offset)))); + nudge_items.push_back (MenuElem (_("Nudge bwd by capture offset"), (sigc::mem_fun(*this, &Editor::nudge_backward_capture_offset)))); items.push_back (MenuElem (_("Nudge"), *nudge_menu)); items.push_back (SeparatorElem()); @@ -1861,37 +1842,37 @@ Editor::add_region_context_items (StreamView* sv, boost::shared_ptr regi MenuList& trim_items = trim_menu->items(); trim_menu->set_name ("ArdourContextMenu"); - trim_items.push_back (MenuElem (_("Start to edit point"), mem_fun(*this, &Editor::trim_region_from_edit_point))); + trim_items.push_back (MenuElem (_("Start to edit point"), sigc::mem_fun(*this, &Editor::trim_region_from_edit_point))); foo_item = &trim_items.back(); if (_edit_point == EditAtMouse) { foo_item->set_sensitive (false); } - trim_items.push_back (MenuElem (_("Edit point to end"), mem_fun(*this, &Editor::trim_region_to_edit_point))); + trim_items.push_back (MenuElem (_("Edit point to end"), sigc::mem_fun(*this, &Editor::trim_region_to_edit_point))); foo_item = &trim_items.back(); if (_edit_point == EditAtMouse) { foo_item->set_sensitive (false); } - trim_items.push_back (MenuElem (_("Trim To Loop"), mem_fun(*this, &Editor::trim_region_to_loop))); - trim_items.push_back (MenuElem (_("Trim To Punch"), mem_fun(*this, &Editor::trim_region_to_punch))); + trim_items.push_back (MenuElem (_("Trim To Loop"), sigc::mem_fun(*this, &Editor::trim_region_to_loop))); + trim_items.push_back (MenuElem (_("Trim To Punch"), sigc::mem_fun(*this, &Editor::trim_region_to_punch))); items.push_back (MenuElem (_("Trim"), *trim_menu)); items.push_back (SeparatorElem()); - items.push_back (MenuElem (_("Split"), (mem_fun(*this, &Editor::split)))); + items.push_back (MenuElem (_("Split"), (sigc::mem_fun(*this, &Editor::split)))); region_edit_menu_split_item = &items.back(); if (_edit_point == EditAtMouse) { region_edit_menu_split_item->set_sensitive (false); } - items.push_back (MenuElem (_("Make mono regions"), (mem_fun(*this, &Editor::split_multichannel_region)))); + items.push_back (MenuElem (_("Make mono regions"), (sigc::mem_fun(*this, &Editor::split_multichannel_region)))); region_edit_menu_split_multichannel_item = &items.back(); - items.push_back (MenuElem (_("Duplicate"), (bind (mem_fun(*this, &Editor::duplicate_dialog), false)))); - items.push_back (MenuElem (_("Multi-Duplicate"), (bind (mem_fun(*this, &Editor::duplicate_dialog), true)))); - items.push_back (MenuElem (_("Fill Track"), (mem_fun(*this, &Editor::region_fill_track)))); + items.push_back (MenuElem (_("Duplicate"), (sigc::bind (sigc::mem_fun(*this, &Editor::duplicate_dialog), false)))); + items.push_back (MenuElem (_("Multi-Duplicate"), (sigc::bind (sigc::mem_fun(*this, &Editor::duplicate_dialog), true)))); + items.push_back (MenuElem (_("Fill Track"), (sigc::mem_fun(*this, &Editor::region_fill_track)))); items.push_back (SeparatorElem()); - items.push_back (MenuElem (_("Remove"), mem_fun(*this, &Editor::remove_selected_regions))); + items.push_back (MenuElem (_("Remove"), sigc::mem_fun(*this, &Editor::remove_selected_regions))); /* OK, stick the region submenu at the top of the list, and then add the standard items. @@ -1921,44 +1902,43 @@ Editor::add_selection_context_items (Menu_Helpers::MenuList& edit_items) { using namespace Menu_Helpers; - edit_items.push_back (MenuElem (_("Play Range"), mem_fun(*this, &Editor::play_selection))); - edit_items.push_back (MenuElem (_("Loop Range"), bind (mem_fun(*this, &Editor::set_loop_from_selection), true))); + edit_items.push_back (MenuElem (_("Play Range"), sigc::mem_fun(*this, &Editor::play_selection))); + edit_items.push_back (MenuElem (_("Loop Range"), sigc::bind (sigc::mem_fun(*this, &Editor::set_loop_from_selection), true))); edit_items.push_back (SeparatorElem()); - edit_items.push_back (MenuElem (_("Spectral Analysis"), mem_fun(*this, &Editor::analyze_range_selection))); + edit_items.push_back (MenuElem (_("Spectral Analysis"), sigc::mem_fun(*this, &Editor::analyze_range_selection))); if (!selection->regions.empty()) { edit_items.push_back (SeparatorElem()); - edit_items.push_back (MenuElem (_("Extend Range to End of Region"), bind (mem_fun(*this, &Editor::extend_selection_to_end_of_region), false))); - edit_items.push_back (MenuElem (_("Extend Range to Start of Region"), bind (mem_fun(*this, &Editor::extend_selection_to_start_of_region), false))); + edit_items.push_back (MenuElem (_("Extend Range to End of Region"), sigc::bind (sigc::mem_fun(*this, &Editor::extend_selection_to_end_of_region), false))); + edit_items.push_back (MenuElem (_("Extend Range to Start of Region"), sigc::bind (sigc::mem_fun(*this, &Editor::extend_selection_to_start_of_region), false))); } edit_items.push_back (SeparatorElem()); - edit_items.push_back (MenuElem (_("Silence Range"), mem_fun(*this, &Editor::separate_region_from_selection))); - edit_items.push_back (MenuElem (_("Convert to Region in Region List"), mem_fun(*this, &Editor::new_region_from_selection))); + edit_items.push_back (MenuElem (_("Silence Range"), sigc::mem_fun(*this, &Editor::separate_region_from_selection))); + edit_items.push_back (MenuElem (_("Convert to Region in Region List"), sigc::mem_fun(*this, &Editor::new_region_from_selection))); edit_items.push_back (SeparatorElem()); - edit_items.push_back (MenuElem (_("Select All in Range"), mem_fun(*this, &Editor::select_all_selectables_using_time_selection))); + edit_items.push_back (MenuElem (_("Select All in Range"), sigc::mem_fun(*this, &Editor::select_all_selectables_using_time_selection))); edit_items.push_back (SeparatorElem()); - edit_items.push_back (MenuElem (_("Set Loop from Range"), bind (mem_fun(*this, &Editor::set_loop_from_selection), false))); - edit_items.push_back (MenuElem (_("Set Punch from Range"), mem_fun(*this, &Editor::set_punch_from_selection))); + edit_items.push_back (MenuElem (_("Set Loop from Range"), sigc::bind (sigc::mem_fun(*this, &Editor::set_loop_from_selection), false))); + edit_items.push_back (MenuElem (_("Set Punch from Range"), sigc::mem_fun(*this, &Editor::set_punch_from_selection))); edit_items.push_back (SeparatorElem()); - edit_items.push_back (MenuElem (_("Add Range Markers"), mem_fun (*this, &Editor::add_location_from_selection))); + edit_items.push_back (MenuElem (_("Add Range Markers"), sigc::mem_fun (*this, &Editor::add_location_from_selection))); edit_items.push_back (SeparatorElem()); - edit_items.push_back (MenuElem (_("Crop Region to Range"), mem_fun(*this, &Editor::crop_region_to_selection))); - edit_items.push_back (MenuElem (_("Fill Range with Region"), mem_fun(*this, &Editor::region_fill_selection))); - edit_items.push_back (MenuElem (_("Duplicate Range"), bind (mem_fun(*this, &Editor::duplicate_dialog), false))); - edit_items.push_back (MenuElem (_("Create Chunk from Range"), mem_fun(*this, &Editor::create_named_selection))); + edit_items.push_back (MenuElem (_("Crop Region to Range"), sigc::mem_fun(*this, &Editor::crop_region_to_selection))); + edit_items.push_back (MenuElem (_("Fill Range with Region"), sigc::mem_fun(*this, &Editor::region_fill_selection))); + edit_items.push_back (MenuElem (_("Duplicate Range"), sigc::bind (sigc::mem_fun(*this, &Editor::duplicate_dialog), false))); edit_items.push_back (SeparatorElem()); - edit_items.push_back (MenuElem (_("Consolidate Range"), bind (mem_fun(*this, &Editor::bounce_range_selection), true, false))); - edit_items.push_back (MenuElem (_("Consolidate Range With Processing"), bind (mem_fun(*this, &Editor::bounce_range_selection), true, true))); - edit_items.push_back (MenuElem (_("Bounce Range to Region List"), bind (mem_fun(*this, &Editor::bounce_range_selection), false, false))); - edit_items.push_back (MenuElem (_("Bounce Range to Region List With Processing"), bind (mem_fun(*this, &Editor::bounce_range_selection), false, true))); - edit_items.push_back (MenuElem (_("Export Range"), mem_fun(*this, &Editor::export_range))); + edit_items.push_back (MenuElem (_("Consolidate Range"), sigc::bind (sigc::mem_fun(*this, &Editor::bounce_range_selection), true, false))); + edit_items.push_back (MenuElem (_("Consolidate Range With Processing"), sigc::bind (sigc::mem_fun(*this, &Editor::bounce_range_selection), true, true))); + edit_items.push_back (MenuElem (_("Bounce Range to Region List"), sigc::bind (sigc::mem_fun(*this, &Editor::bounce_range_selection), false, false))); + edit_items.push_back (MenuElem (_("Bounce Range to Region List With Processing"), sigc::bind (sigc::mem_fun(*this, &Editor::bounce_range_selection), false, true))); + edit_items.push_back (MenuElem (_("Export Range"), sigc::mem_fun(*this, &Editor::export_range))); } @@ -1973,11 +1953,11 @@ Editor::add_dstream_context_items (Menu_Helpers::MenuList& edit_items) MenuList& play_items = play_menu->items(); play_menu->set_name ("ArdourContextMenu"); - play_items.push_back (MenuElem (_("Play from edit point"), mem_fun(*this, &Editor::play_from_edit_point))); - play_items.push_back (MenuElem (_("Play from start"), mem_fun(*this, &Editor::play_from_start))); - play_items.push_back (MenuElem (_("Play region"), mem_fun(*this, &Editor::play_selected_region))); + play_items.push_back (MenuElem (_("Play from edit point"), sigc::mem_fun(*this, &Editor::play_from_edit_point))); + play_items.push_back (MenuElem (_("Play from start"), sigc::mem_fun(*this, &Editor::play_from_start))); + play_items.push_back (MenuElem (_("Play region"), sigc::mem_fun(*this, &Editor::play_selected_region))); play_items.push_back (SeparatorElem()); - play_items.push_back (MenuElem (_("Loop Region"), mem_fun(*this, &Editor::loop_selected_region))); + play_items.push_back (MenuElem (_("Loop Region"), sigc::mem_fun(*this, &Editor::loop_selected_region))); edit_items.push_back (MenuElem (_("Play"), *play_menu)); @@ -1987,21 +1967,21 @@ Editor::add_dstream_context_items (Menu_Helpers::MenuList& edit_items) MenuList& select_items = select_menu->items(); select_menu->set_name ("ArdourContextMenu"); - select_items.push_back (MenuElem (_("Select All in track"), bind (mem_fun(*this, &Editor::select_all_in_track), Selection::Set))); - select_items.push_back (MenuElem (_("Select All"), bind (mem_fun(*this, &Editor::select_all), Selection::Set))); - select_items.push_back (MenuElem (_("Invert selection in track"), mem_fun(*this, &Editor::invert_selection_in_track))); - select_items.push_back (MenuElem (_("Invert selection"), mem_fun(*this, &Editor::invert_selection))); + select_items.push_back (MenuElem (_("Select All in track"), sigc::bind (sigc::mem_fun(*this, &Editor::select_all_in_track), Selection::Set))); + select_items.push_back (MenuElem (_("Select All"), sigc::bind (sigc::mem_fun(*this, &Editor::select_all), Selection::Set))); + select_items.push_back (MenuElem (_("Invert selection in track"), sigc::mem_fun(*this, &Editor::invert_selection_in_track))); + select_items.push_back (MenuElem (_("Invert selection"), sigc::mem_fun(*this, &Editor::invert_selection))); select_items.push_back (SeparatorElem()); - select_items.push_back (MenuElem (_("Set range to loop range"), mem_fun(*this, &Editor::set_selection_from_loop))); - select_items.push_back (MenuElem (_("Set range to punch range"), mem_fun(*this, &Editor::set_selection_from_punch))); + select_items.push_back (MenuElem (_("Set range to loop range"), sigc::mem_fun(*this, &Editor::set_selection_from_loop))); + select_items.push_back (MenuElem (_("Set range to punch range"), sigc::mem_fun(*this, &Editor::set_selection_from_punch))); select_items.push_back (SeparatorElem()); - select_items.push_back (MenuElem (_("Select All After Edit Point"), bind (mem_fun(*this, &Editor::select_all_selectables_using_edit), true))); - select_items.push_back (MenuElem (_("Select All Before Edit Point"), bind (mem_fun(*this, &Editor::select_all_selectables_using_edit), false))); - select_items.push_back (MenuElem (_("Select All After Playhead"), bind (mem_fun(*this, &Editor::select_all_selectables_using_cursor), playhead_cursor, true))); - select_items.push_back (MenuElem (_("Select All Before Playhead"), bind (mem_fun(*this, &Editor::select_all_selectables_using_cursor), playhead_cursor, false))); - select_items.push_back (MenuElem (_("Select All Between Playhead & Edit Point"), bind (mem_fun(*this, &Editor::select_all_selectables_between), false))); - select_items.push_back (MenuElem (_("Select All Within Playhead & Edit Point"), bind (mem_fun(*this, &Editor::select_all_selectables_between), true))); - select_items.push_back (MenuElem (_("Select Range Between Playhead & Edit Point"), mem_fun(*this, &Editor::select_range_between))); + select_items.push_back (MenuElem (_("Select All After Edit Point"), sigc::bind (sigc::mem_fun(*this, &Editor::select_all_selectables_using_edit), true))); + select_items.push_back (MenuElem (_("Select All Before Edit Point"), sigc::bind (sigc::mem_fun(*this, &Editor::select_all_selectables_using_edit), false))); + select_items.push_back (MenuElem (_("Select All After Playhead"), sigc::bind (sigc::mem_fun(*this, &Editor::select_all_selectables_using_cursor), playhead_cursor, true))); + select_items.push_back (MenuElem (_("Select All Before Playhead"), sigc::bind (sigc::mem_fun(*this, &Editor::select_all_selectables_using_cursor), playhead_cursor, false))); + select_items.push_back (MenuElem (_("Select All Between Playhead & Edit Point"), sigc::bind (sigc::mem_fun(*this, &Editor::select_all_selectables_between), false))); + select_items.push_back (MenuElem (_("Select All Within Playhead & Edit Point"), sigc::bind (sigc::mem_fun(*this, &Editor::select_all_selectables_between), true))); + select_items.push_back (MenuElem (_("Select Range Between Playhead & Edit Point"), sigc::mem_fun(*this, &Editor::select_range_between))); edit_items.push_back (MenuElem (_("Select"), *select_menu)); @@ -2011,26 +1991,24 @@ Editor::add_dstream_context_items (Menu_Helpers::MenuList& edit_items) MenuList& cutnpaste_items = cutnpaste_menu->items(); cutnpaste_menu->set_name ("ArdourContextMenu"); - cutnpaste_items.push_back (MenuElem (_("Cut"), mem_fun(*this, &Editor::cut))); - cutnpaste_items.push_back (MenuElem (_("Copy"), mem_fun(*this, &Editor::copy))); - cutnpaste_items.push_back (MenuElem (_("Paste"), bind (mem_fun(*this, &Editor::paste), 1.0f))); + cutnpaste_items.push_back (MenuElem (_("Cut"), sigc::mem_fun(*this, &Editor::cut))); + cutnpaste_items.push_back (MenuElem (_("Copy"), sigc::mem_fun(*this, &Editor::copy))); + cutnpaste_items.push_back (MenuElem (_("Paste"), sigc::bind (sigc::mem_fun(*this, &Editor::paste), 1.0f))); cutnpaste_items.push_back (SeparatorElem()); - cutnpaste_items.push_back (MenuElem (_("Align"), bind (mem_fun(*this, &Editor::align), ARDOUR::SyncPoint))); - cutnpaste_items.push_back (MenuElem (_("Align Relative"), bind (mem_fun(*this, &Editor::align_relative), ARDOUR::SyncPoint))); + cutnpaste_items.push_back (MenuElem (_("Align"), sigc::bind (sigc::mem_fun(*this, &Editor::align), ARDOUR::SyncPoint))); + cutnpaste_items.push_back (MenuElem (_("Align Relative"), sigc::bind (sigc::mem_fun(*this, &Editor::align_relative), ARDOUR::SyncPoint))); cutnpaste_items.push_back (SeparatorElem()); - cutnpaste_items.push_back (MenuElem (_("Insert chunk"), bind (mem_fun(*this, &Editor::paste_named_selection), 1.0f))); - edit_items.push_back (MenuElem (_("Edit"), *cutnpaste_menu)); /* Adding new material */ edit_items.push_back (SeparatorElem()); - edit_items.push_back (MenuElem (_("Insert Selected Region"), bind (mem_fun(*this, &Editor::insert_region_list_selection), 1.0f))); - edit_items.push_back (MenuElem (_("Insert Existing Media"), bind (mem_fun(*this, &Editor::add_external_audio_action), ImportToTrack))); + edit_items.push_back (MenuElem (_("Insert Selected Region"), sigc::bind (sigc::mem_fun(*this, &Editor::insert_region_list_selection), 1.0f))); + edit_items.push_back (MenuElem (_("Insert Existing Media"), sigc::bind (sigc::mem_fun(*this, &Editor::add_external_audio_action), ImportToTrack))); /* Nudge track */ @@ -2039,10 +2017,10 @@ Editor::add_dstream_context_items (Menu_Helpers::MenuList& edit_items) nudge_menu->set_name ("ArdourContextMenu"); edit_items.push_back (SeparatorElem()); - nudge_items.push_back (MenuElem (_("Nudge entire track fwd"), (bind (mem_fun(*this, &Editor::nudge_track), false, true)))); - nudge_items.push_back (MenuElem (_("Nudge track after edit point fwd"), (bind (mem_fun(*this, &Editor::nudge_track), true, true)))); - nudge_items.push_back (MenuElem (_("Nudge entire track bwd"), (bind (mem_fun(*this, &Editor::nudge_track), false, false)))); - nudge_items.push_back (MenuElem (_("Nudge track after edit point bwd"), (bind (mem_fun(*this, &Editor::nudge_track), true, false)))); + nudge_items.push_back (MenuElem (_("Nudge entire track fwd"), (sigc::bind (sigc::mem_fun(*this, &Editor::nudge_track), false, true)))); + nudge_items.push_back (MenuElem (_("Nudge track after edit point fwd"), (sigc::bind (sigc::mem_fun(*this, &Editor::nudge_track), true, true)))); + nudge_items.push_back (MenuElem (_("Nudge entire track bwd"), (sigc::bind (sigc::mem_fun(*this, &Editor::nudge_track), false, false)))); + nudge_items.push_back (MenuElem (_("Nudge track after edit point bwd"), (sigc::bind (sigc::mem_fun(*this, &Editor::nudge_track), true, false)))); edit_items.push_back (MenuElem (_("Nudge"), *nudge_menu)); } @@ -2058,8 +2036,8 @@ Editor::add_bus_context_items (Menu_Helpers::MenuList& edit_items) MenuList& play_items = play_menu->items(); play_menu->set_name ("ArdourContextMenu"); - play_items.push_back (MenuElem (_("Play from edit point"), mem_fun(*this, &Editor::play_from_edit_point))); - play_items.push_back (MenuElem (_("Play from start"), mem_fun(*this, &Editor::play_from_start))); + play_items.push_back (MenuElem (_("Play from edit point"), sigc::mem_fun(*this, &Editor::play_from_edit_point))); + play_items.push_back (MenuElem (_("Play from start"), sigc::mem_fun(*this, &Editor::play_from_start))); edit_items.push_back (MenuElem (_("Play"), *play_menu)); /* Selection */ @@ -2068,15 +2046,15 @@ Editor::add_bus_context_items (Menu_Helpers::MenuList& edit_items) MenuList& select_items = select_menu->items(); select_menu->set_name ("ArdourContextMenu"); - select_items.push_back (MenuElem (_("Select All in track"), bind (mem_fun(*this, &Editor::select_all_in_track), Selection::Set))); - select_items.push_back (MenuElem (_("Select All"), bind (mem_fun(*this, &Editor::select_all), Selection::Set))); - select_items.push_back (MenuElem (_("Invert selection in track"), mem_fun(*this, &Editor::invert_selection_in_track))); - select_items.push_back (MenuElem (_("Invert selection"), mem_fun(*this, &Editor::invert_selection))); + select_items.push_back (MenuElem (_("Select All in track"), sigc::bind (sigc::mem_fun(*this, &Editor::select_all_in_track), Selection::Set))); + select_items.push_back (MenuElem (_("Select All"), sigc::bind (sigc::mem_fun(*this, &Editor::select_all), Selection::Set))); + select_items.push_back (MenuElem (_("Invert selection in track"), sigc::mem_fun(*this, &Editor::invert_selection_in_track))); + select_items.push_back (MenuElem (_("Invert selection"), sigc::mem_fun(*this, &Editor::invert_selection))); select_items.push_back (SeparatorElem()); - select_items.push_back (MenuElem (_("Select all after edit point"), bind (mem_fun(*this, &Editor::select_all_selectables_using_edit), true))); - select_items.push_back (MenuElem (_("Select all before edit point"), bind (mem_fun(*this, &Editor::select_all_selectables_using_edit), false))); - select_items.push_back (MenuElem (_("Select all after playhead"), bind (mem_fun(*this, &Editor::select_all_selectables_using_cursor), playhead_cursor, true))); - select_items.push_back (MenuElem (_("Select all before playhead"), bind (mem_fun(*this, &Editor::select_all_selectables_using_cursor), playhead_cursor, false))); + select_items.push_back (MenuElem (_("Select all after edit point"), sigc::bind (sigc::mem_fun(*this, &Editor::select_all_selectables_using_edit), true))); + select_items.push_back (MenuElem (_("Select all before edit point"), sigc::bind (sigc::mem_fun(*this, &Editor::select_all_selectables_using_edit), false))); + select_items.push_back (MenuElem (_("Select all after playhead"), sigc::bind (sigc::mem_fun(*this, &Editor::select_all_selectables_using_cursor), playhead_cursor, true))); + select_items.push_back (MenuElem (_("Select all before playhead"), sigc::bind (sigc::mem_fun(*this, &Editor::select_all_selectables_using_cursor), playhead_cursor, false))); edit_items.push_back (MenuElem (_("Select"), *select_menu)); @@ -2086,19 +2064,19 @@ Editor::add_bus_context_items (Menu_Helpers::MenuList& edit_items) MenuList& cutnpaste_items = cutnpaste_menu->items(); cutnpaste_menu->set_name ("ArdourContextMenu"); - cutnpaste_items.push_back (MenuElem (_("Cut"), mem_fun(*this, &Editor::cut))); - cutnpaste_items.push_back (MenuElem (_("Copy"), mem_fun(*this, &Editor::copy))); - cutnpaste_items.push_back (MenuElem (_("Paste"), bind (mem_fun(*this, &Editor::paste), 1.0f))); + cutnpaste_items.push_back (MenuElem (_("Cut"), sigc::mem_fun(*this, &Editor::cut))); + cutnpaste_items.push_back (MenuElem (_("Copy"), sigc::mem_fun(*this, &Editor::copy))); + cutnpaste_items.push_back (MenuElem (_("Paste"), sigc::bind (sigc::mem_fun(*this, &Editor::paste), 1.0f))); Menu *nudge_menu = manage (new Menu()); MenuList& nudge_items = nudge_menu->items(); nudge_menu->set_name ("ArdourContextMenu"); edit_items.push_back (SeparatorElem()); - nudge_items.push_back (MenuElem (_("Nudge entire track fwd"), (bind (mem_fun(*this, &Editor::nudge_track), false, true)))); - nudge_items.push_back (MenuElem (_("Nudge track after edit point fwd"), (bind (mem_fun(*this, &Editor::nudge_track), true, true)))); - nudge_items.push_back (MenuElem (_("Nudge entire track bwd"), (bind (mem_fun(*this, &Editor::nudge_track), false, false)))); - nudge_items.push_back (MenuElem (_("Nudge track after edit point bwd"), (bind (mem_fun(*this, &Editor::nudge_track), true, false)))); + nudge_items.push_back (MenuElem (_("Nudge entire track fwd"), (sigc::bind (sigc::mem_fun(*this, &Editor::nudge_track), false, true)))); + nudge_items.push_back (MenuElem (_("Nudge track after edit point fwd"), (sigc::bind (sigc::mem_fun(*this, &Editor::nudge_track), true, true)))); + nudge_items.push_back (MenuElem (_("Nudge entire track bwd"), (sigc::bind (sigc::mem_fun(*this, &Editor::nudge_track), false, false)))); + nudge_items.push_back (MenuElem (_("Nudge track after edit point bwd"), (sigc::bind (sigc::mem_fun(*this, &Editor::nudge_track), true, false)))); edit_items.push_back (MenuElem (_("Nudge"), *nudge_menu)); } @@ -2188,26 +2166,6 @@ Editor::set_edit_point_preference (EditPoint ep, bool force) return; } - switch (zoom_focus) { - case ZoomFocusMouse: - case ZoomFocusPlayhead: - case ZoomFocusEdit: - switch (_edit_point) { - case EditAtMouse: - set_zoom_focus (ZoomFocusMouse); - break; - case EditAtPlayhead: - set_zoom_focus (ZoomFocusPlayhead); - break; - case EditAtSelectedMarker: - set_zoom_focus (ZoomFocusEdit); - break; - } - break; - default: - break; - } - const char* action=NULL; switch (_edit_point) { @@ -2306,21 +2264,13 @@ Editor::set_state (const XMLNode& node, int /*version*/) set_default_size (g.base_width, g.base_height); move (x, y); - if (session && (prop = node.property ("playhead"))) { + if (_session && (prop = node.property ("playhead"))) { nframes64_t pos = atol (prop->value().c_str()); playhead_cursor->set_position (pos); } else { playhead_cursor->set_position (0); - - /* reset_x_origin() doesn't work right here, since the old - position may be zero already, and it does nothing in such - circumstances. - */ - - leftmost_frame = 0; - horizontal_adjustment.set_value (0); } - + if ((prop = node.property ("mixer-width"))) { editor_mixer_strip_width = Width (string_2_enum (prop->value(), editor_mixer_strip_width)); } @@ -2350,6 +2300,15 @@ Editor::set_state (const XMLNode& node, int /*version*/) set_mouse_mode (MouseObject, true); } + if ((prop = node.property ("left-frame")) != 0){ + nframes64_t pos; + if (sscanf (prop->value().c_str(), "%" PRId64, &pos) == 1) { + reset_x_origin (pos); + /* this hack prevents the initial call to update_current_screen() from doing re-centering on the playhead */ + last_update_frame = pos; + } + } + if ((prop = node.property ("internal-edit"))) { bool yn = string_is_affirmative (prop->value()); RefPtr act = ActionManager::get_action (X_("MouseMode"), X_("toggle-internal-edit")); @@ -2497,6 +2456,8 @@ Editor::get_state () snprintf (buf, sizeof (buf), "%" PRIi64, playhead_cursor->current_frame); node->add_property ("playhead", buf); + snprintf (buf, sizeof (buf), "%" PRIi64, leftmost_frame); + node->add_property ("left-frame", buf); node->add_property ("show-waveforms-recording", _show_waveforms_recording ? "yes" : "no"); node->add_property ("show-measures", _show_measures ? "yes" : "no"); @@ -2550,7 +2511,7 @@ Editor::trackview_by_y_position (double y) void Editor::snap_to_with_modifier (nframes64_t& start, GdkEvent const * event, int32_t direction, bool for_mark) { - if (!session) { + if (!_session) { return; } @@ -2568,7 +2529,7 @@ Editor::snap_to_with_modifier (nframes64_t& start, GdkEvent const * event, int32 void Editor::snap_to (nframes64_t& start, int32_t direction, bool for_mark) { - if (!session || _snap_mode == SnapOff) { + if (!_session || _snap_mode == SnapOff) { return; } @@ -2578,24 +2539,24 @@ Editor::snap_to (nframes64_t& start, int32_t direction, bool for_mark) void Editor::timecode_snap_to_internal (nframes64_t& start, int32_t direction, bool /*for_mark*/) { - const nframes64_t one_timecode_second = (nframes64_t)(rint(session->timecode_frames_per_second()) * session->frames_per_timecode_frame()); - nframes64_t one_timecode_minute = (nframes64_t)(rint(session->timecode_frames_per_second()) * session->frames_per_timecode_frame() * 60); + const nframes64_t one_timecode_second = (nframes64_t)(rint(_session->timecode_frames_per_second()) * _session->frames_per_timecode_frame()); + nframes64_t one_timecode_minute = (nframes64_t)(rint(_session->timecode_frames_per_second()) * _session->frames_per_timecode_frame() * 60); switch (_snap_type) { case SnapToTimecodeFrame: - if (((direction == 0) && (fmod((double)start, (double)session->frames_per_timecode_frame()) > (session->frames_per_timecode_frame() / 2))) || (direction > 0)) { - start = (nframes64_t) (ceil ((double) start / session->frames_per_timecode_frame()) * session->frames_per_timecode_frame()); + if (((direction == 0) && (fmod((double)start, (double)_session->frames_per_timecode_frame()) > (_session->frames_per_timecode_frame() / 2))) || (direction > 0)) { + start = (nframes64_t) (ceil ((double) start / _session->frames_per_timecode_frame()) * _session->frames_per_timecode_frame()); } else { - start = (nframes64_t) (floor ((double) start / session->frames_per_timecode_frame()) * session->frames_per_timecode_frame()); + start = (nframes64_t) (floor ((double) start / _session->frames_per_timecode_frame()) * _session->frames_per_timecode_frame()); } break; case SnapToTimecodeSeconds: - if (session->timecode_offset_negative()) + if (_session->timecode_offset_negative()) { - start += session->timecode_offset (); + start += _session->timecode_offset (); } else { - start -= session->timecode_offset (); + start -= _session->timecode_offset (); } if (((direction == 0) && (start % one_timecode_second > one_timecode_second / 2)) || direction > 0) { start = (nframes64_t) ceil ((double) start / one_timecode_second) * one_timecode_second; @@ -2603,31 +2564,31 @@ Editor::timecode_snap_to_internal (nframes64_t& start, int32_t direction, bool / start = (nframes64_t) floor ((double) start / one_timecode_second) * one_timecode_second; } - if (session->timecode_offset_negative()) + if (_session->timecode_offset_negative()) { - start -= session->timecode_offset (); + start -= _session->timecode_offset (); } else { - start += session->timecode_offset (); + start += _session->timecode_offset (); } break; case SnapToTimecodeMinutes: - if (session->timecode_offset_negative()) + if (_session->timecode_offset_negative()) { - start += session->timecode_offset (); + start += _session->timecode_offset (); } else { - start -= session->timecode_offset (); + start -= _session->timecode_offset (); } if (((direction == 0) && (start % one_timecode_minute > one_timecode_minute / 2)) || direction > 0) { start = (nframes64_t) ceil ((double) start / one_timecode_minute) * one_timecode_minute; } else { start = (nframes64_t) floor ((double) start / one_timecode_minute) * one_timecode_minute; } - if (session->timecode_offset_negative()) + if (_session->timecode_offset_negative()) { - start -= session->timecode_offset (); + start -= _session->timecode_offset (); } else { - start += session->timecode_offset (); + start += _session->timecode_offset (); } break; default: @@ -2639,8 +2600,8 @@ Editor::timecode_snap_to_internal (nframes64_t& start, int32_t direction, bool / void Editor::snap_to_internal (nframes64_t& start, int32_t direction, bool for_mark) { - const nframes64_t one_second = session->frame_rate(); - const nframes64_t one_minute = session->frame_rate() * 60; + const nframes64_t one_second = _session->frame_rate(); + const nframes64_t one_minute = _session->frame_rate() * 60; nframes64_t presnap = start; nframes64_t before; nframes64_t after; @@ -2676,31 +2637,31 @@ Editor::snap_to_internal (nframes64_t& start, int32_t direction, bool for_mark) break; case SnapToBar: - start = session->tempo_map().round_to_bar (start, direction); + start = _session->tempo_map().round_to_bar (start, direction); break; case SnapToBeat: - start = session->tempo_map().round_to_beat (start, direction); + start = _session->tempo_map().round_to_beat (start, direction); break; case SnapToAThirtysecondBeat: - start = session->tempo_map().round_to_beat_subdivision (start, 32, direction); + start = _session->tempo_map().round_to_beat_subdivision (start, 32, direction); break; case SnapToASixteenthBeat: - start = session->tempo_map().round_to_beat_subdivision (start, 16, direction); + start = _session->tempo_map().round_to_beat_subdivision (start, 16, direction); break; case SnapToAEighthBeat: - start = session->tempo_map().round_to_beat_subdivision (start, 8, direction); + start = _session->tempo_map().round_to_beat_subdivision (start, 8, direction); break; case SnapToAQuarterBeat: - start = session->tempo_map().round_to_beat_subdivision (start, 4, direction); + start = _session->tempo_map().round_to_beat_subdivision (start, 4, direction); break; case SnapToAThirdBeat: - start = session->tempo_map().round_to_beat_subdivision (start, 3, direction); + start = _session->tempo_map().round_to_beat_subdivision (start, 3, direction); break; case SnapToMark: @@ -2708,7 +2669,7 @@ Editor::snap_to_internal (nframes64_t& start, int32_t direction, bool for_mark) return; } - session->locations()->marks_either_side (start, before, after); + _session->locations()->marks_either_side (start, before, after); if (before == max_frames) { start = after; @@ -2823,26 +2784,26 @@ Editor::setup_toolbar () edit_mode_selector.set_name ("EditModeSelector"); set_popdown_strings (edit_mode_selector, edit_mode_strings, true); - edit_mode_selector.signal_changed().connect (mem_fun(*this, &Editor::edit_mode_selection_done)); + edit_mode_selector.signal_changed().connect (sigc::mem_fun(*this, &Editor::edit_mode_selection_done)); mode_box->pack_start(edit_mode_selector); mode_box->pack_start(mouse_mode_button_box); mouse_mode_tearoff = manage (new TearOff (*mode_box)); mouse_mode_tearoff->set_name ("MouseModeBase"); - mouse_mode_tearoff->tearoff_window().signal_key_press_event().connect (bind (sigc::ptr_fun (relay_key_press), &mouse_mode_tearoff->tearoff_window()), false); + mouse_mode_tearoff->tearoff_window().signal_key_press_event().connect (sigc::bind (sigc::ptr_fun (relay_key_press), &mouse_mode_tearoff->tearoff_window()), false); if (Profile->get_sae()) { mouse_mode_tearoff->set_can_be_torn_off (false); } - mouse_mode_tearoff->Detach.connect (bind (mem_fun(*this, &Editor::detach_tearoff), static_cast(&toolbar_hbox), + mouse_mode_tearoff->Detach.connect (sigc::bind (sigc::mem_fun(*this, &Editor::detach_tearoff), static_cast(&toolbar_hbox), &mouse_mode_tearoff->tearoff_window())); - mouse_mode_tearoff->Attach.connect (bind (mem_fun(*this, &Editor::reattach_tearoff), static_cast (&toolbar_hbox), + mouse_mode_tearoff->Attach.connect (sigc::bind (sigc::mem_fun(*this, &Editor::reattach_tearoff), static_cast (&toolbar_hbox), &mouse_mode_tearoff->tearoff_window(), 1)); - mouse_mode_tearoff->Hidden.connect (bind (mem_fun(*this, &Editor::detach_tearoff), static_cast(&toolbar_hbox), + mouse_mode_tearoff->Hidden.connect (sigc::bind (sigc::mem_fun(*this, &Editor::detach_tearoff), static_cast(&toolbar_hbox), &mouse_mode_tearoff->tearoff_window())); - mouse_mode_tearoff->Visible.connect (bind (mem_fun(*this, &Editor::reattach_tearoff), static_cast (&toolbar_hbox), + mouse_mode_tearoff->Visible.connect (sigc::bind (sigc::mem_fun(*this, &Editor::reattach_tearoff), static_cast (&toolbar_hbox), &mouse_mode_tearoff->tearoff_window(), 1)); mouse_move_button.set_mode (false); @@ -2875,23 +2836,23 @@ Editor::setup_toolbar () zoom_box.set_border_width (0); zoom_in_button.set_name ("EditorTimeButton"); - zoom_in_button.add (*(manage (new Image (::get_icon("zoom_in"))))); - zoom_in_button.signal_clicked().connect (bind (mem_fun(*this, &Editor::temporal_zoom_step), false)); + zoom_in_button.set_image (*(manage (new Image (Stock::ZOOM_IN, Gtk::ICON_SIZE_BUTTON)))); + zoom_in_button.signal_clicked().connect (sigc::bind (sigc::mem_fun(*this, &Editor::temporal_zoom_step), false)); ARDOUR_UI::instance()->tooltips().set_tip (zoom_in_button, _("Zoom In")); zoom_out_button.set_name ("EditorTimeButton"); - zoom_out_button.add (*(manage (new Image (::get_icon("zoom_out"))))); - zoom_out_button.signal_clicked().connect (bind (mem_fun(*this, &Editor::temporal_zoom_step), true)); + zoom_out_button.set_image (*(manage (new Image (Stock::ZOOM_OUT, Gtk::ICON_SIZE_BUTTON)))); + zoom_out_button.signal_clicked().connect (sigc::bind (sigc::mem_fun(*this, &Editor::temporal_zoom_step), true)); ARDOUR_UI::instance()->tooltips().set_tip (zoom_out_button, _("Zoom Out")); zoom_out_full_button.set_name ("EditorTimeButton"); - zoom_out_full_button.add (*(manage (new Image (::get_icon("zoom_full"))))); - zoom_out_full_button.signal_clicked().connect (mem_fun(*this, &Editor::temporal_zoom_session)); + zoom_out_full_button.set_image (*(manage (new Image (Stock::ZOOM_100, Gtk::ICON_SIZE_BUTTON)))); + zoom_out_full_button.signal_clicked().connect (sigc::mem_fun(*this, &Editor::temporal_zoom_session)); ARDOUR_UI::instance()->tooltips().set_tip (zoom_out_full_button, _("Zoom to Session")); zoom_focus_selector.set_name ("ZoomFocusSelector"); set_popdown_strings (zoom_focus_selector, zoom_focus_strings, true); - zoom_focus_selector.signal_changed().connect (mem_fun(*this, &Editor::zoom_focus_selection_done)); + zoom_focus_selector.signal_changed().connect (sigc::mem_fun(*this, &Editor::zoom_focus_selection_done)); ARDOUR_UI::instance()->tooltips().set_tip (zoom_focus_selector, _("Zoom focus")); zoom_box.pack_start (zoom_out_button, false, false); @@ -2902,13 +2863,13 @@ Editor::setup_toolbar () tav_expand_button.set_name ("TrackHeightButton"); tav_expand_button.set_size_request(-1,20); tav_expand_button.add (*(manage (new Image (::get_icon("tav_exp"))))); - tav_expand_button.signal_clicked().connect (bind (mem_fun(*this, &Editor::tav_zoom_step), true)); + tav_expand_button.signal_clicked().connect (sigc::bind (sigc::mem_fun(*this, &Editor::tav_zoom_step), true)); ARDOUR_UI::instance()->tooltips().set_tip (tav_expand_button, _("Expand Tracks")); tav_shrink_button.set_name ("TrackHeightButton"); tav_shrink_button.set_size_request(-1,20); tav_shrink_button.add (*(manage (new Image (::get_icon("tav_shrink"))))); - tav_shrink_button.signal_clicked().connect (bind (mem_fun(*this, &Editor::tav_zoom_step), false)); + tav_shrink_button.signal_clicked().connect (sigc::bind (sigc::mem_fun(*this, &Editor::tav_zoom_step), false)); ARDOUR_UI::instance()->tooltips().set_tip (tav_shrink_button, _("Shrink Tracks")); track_zoom_box.set_spacing (1); @@ -2928,20 +2889,19 @@ Editor::setup_toolbar () snap_type_selector.set_name ("SnapTypeSelector"); set_popdown_strings (snap_type_selector, snap_type_strings, true); - snap_type_selector.signal_changed().connect (mem_fun(*this, &Editor::snap_type_selection_done)); + snap_type_selector.signal_changed().connect (sigc::mem_fun(*this, &Editor::snap_type_selection_done)); ARDOUR_UI::instance()->tooltips().set_tip (snap_type_selector, _("Snap/Grid Units")); snap_mode_selector.set_name ("SnapModeSelector"); set_popdown_strings (snap_mode_selector, snap_mode_strings, true); - snap_mode_selector.signal_changed().connect (mem_fun(*this, &Editor::snap_mode_selection_done)); + snap_mode_selector.signal_changed().connect (sigc::mem_fun(*this, &Editor::snap_mode_selection_done)); ARDOUR_UI::instance()->tooltips().set_tip (snap_mode_selector, _("Snap/Grid Mode")); edit_point_selector.set_name ("EditPointSelector"); set_popdown_strings (edit_point_selector, edit_point_strings, true); - edit_point_selector.signal_changed().connect (mem_fun(*this, &Editor::edit_point_selection_done)); + edit_point_selector.signal_changed().connect (sigc::mem_fun(*this, &Editor::edit_point_selection_done)); ARDOUR_UI::instance()->tooltips().set_tip (edit_point_selector, _("Edit point")); - snap_box.pack_start (edit_point_clock, false, false); snap_box.pack_start (snap_mode_selector, false, false); snap_box.pack_start (snap_type_selector, false, false); snap_box.pack_start (edit_point_selector, false, false); @@ -2952,8 +2912,8 @@ Editor::setup_toolbar () nudge_box->set_spacing(1); nudge_box->set_border_width (2); - nudge_forward_button.signal_button_release_event().connect (mem_fun(*this, &Editor::nudge_forward_release), false); - nudge_backward_button.signal_button_release_event().connect (mem_fun(*this, &Editor::nudge_backward_release), false); + nudge_forward_button.signal_button_release_event().connect (sigc::mem_fun(*this, &Editor::nudge_forward_release), false); + nudge_backward_button.signal_button_release_event().connect (sigc::mem_fun(*this, &Editor::nudge_backward_release), false); nudge_box->pack_start (nudge_backward_button, false, false); nudge_box->pack_start (nudge_forward_button, false, false); @@ -2967,19 +2927,19 @@ Editor::setup_toolbar () tools_tearoff = manage (new TearOff (*hbox)); tools_tearoff->set_name ("MouseModeBase"); - tools_tearoff->tearoff_window().signal_key_press_event().connect (bind (sigc::ptr_fun (relay_key_press), &tools_tearoff->tearoff_window()), false); + tools_tearoff->tearoff_window().signal_key_press_event().connect (sigc::bind (sigc::ptr_fun (relay_key_press), &tools_tearoff->tearoff_window()), false); if (Profile->get_sae()) { tools_tearoff->set_can_be_torn_off (false); } - tools_tearoff->Detach.connect (bind (mem_fun(*this, &Editor::detach_tearoff), static_cast(&toolbar_hbox), + tools_tearoff->Detach.connect (sigc::bind (sigc::mem_fun(*this, &Editor::detach_tearoff), static_cast(&toolbar_hbox), &tools_tearoff->tearoff_window())); - tools_tearoff->Attach.connect (bind (mem_fun(*this, &Editor::reattach_tearoff), static_cast (&toolbar_hbox), + tools_tearoff->Attach.connect (sigc::bind (sigc::mem_fun(*this, &Editor::reattach_tearoff), static_cast (&toolbar_hbox), &tools_tearoff->tearoff_window(), 0)); - tools_tearoff->Hidden.connect (bind (mem_fun(*this, &Editor::detach_tearoff), static_cast(&toolbar_hbox), + tools_tearoff->Hidden.connect (sigc::bind (sigc::mem_fun(*this, &Editor::detach_tearoff), static_cast(&toolbar_hbox), &tools_tearoff->tearoff_window())); - tools_tearoff->Visible.connect (bind (mem_fun(*this, &Editor::reattach_tearoff), static_cast (&toolbar_hbox), + tools_tearoff->Visible.connect (sigc::bind (sigc::mem_fun(*this, &Editor::reattach_tearoff), static_cast (&toolbar_hbox), &tools_tearoff->tearoff_window(), 0)); toolbar_hbox.set_spacing (10); @@ -3007,8 +2967,8 @@ Editor::midi_panic () { cerr << "MIDI panic\n"; - if (session) { - session->midi_panic(); + if (_session) { + _session->midi_panic(); } } @@ -3044,7 +3004,7 @@ Editor::convert_drop_to_paths ( guint /*info*/, guint /*time*/) { - if (session == 0) { + if (_session == 0) { return -1; } @@ -3154,9 +3114,9 @@ Editor::new_tempo_section () void Editor::map_transport_state () { - ENSURE_GUI_THREAD (mem_fun(*this, &Editor::map_transport_state)); + ENSURE_GUI_THREAD (*this, &Editor::map_transport_state) - if (session->transport_stopped()) { + if (_session->transport_stopped()) { have_pending_keyboard_selection = false; } @@ -3175,40 +3135,20 @@ Editor::State::~State () delete selection; } -void -Editor::store_state (State& state) const -{ - *state.selection = *selection; -} - -void -Editor::restore_state (State *state) -{ - if (*selection == *state->selection) { - return; - } - - *selection = *state->selection; - time_selection_changed (); - region_selection_changed (); - - /* XXX other selection change handlers? */ -} - void Editor::begin_reversible_command (string name) { - if (session) { + if (_session) { before = &get_state(); - session->begin_reversible_command (name); + _session->begin_reversible_command (name); } } void Editor::commit_reversible_command () { - if (session) { - session->commit_reversible_command (new MementoCommand(*this, before, &get_state())); + if (_session) { + _session->commit_reversible_command (new MementoCommand(*this, before, &get_state())); } } @@ -3241,20 +3181,20 @@ Editor::history_changed () { string label; - if (undo_action && session) { - if (session->undo_depth() == 0) { + if (undo_action && _session) { + if (_session->undo_depth() == 0) { label = _("Undo"); } else { - label = string_compose(_("Undo (%1)"), session->next_undo()); + label = string_compose(_("Undo (%1)"), _session->next_undo()); } undo_action->property_label() = label; } - if (redo_action && session) { - if (session->redo_depth() == 0) { + if (redo_action && _session) { + if (_session->redo_depth() == 0) { label = _("Redo"); } else { - label = string_compose(_("Redo (%1)"), session->next_redo()); + label = string_compose(_("Redo (%1)"), _session->next_redo()); } redo_action->property_label() = label; } @@ -3299,7 +3239,7 @@ Editor::duplicate_dialog (bool with_dialog) */ hbox.pack_start (spinner, PACK_EXPAND_PADDING, 12); - spinner.signal_activate().connect (sigc::bind (mem_fun (win, &ArdourDialog::response), RESPONSE_ACCEPT)); + spinner.signal_activate().connect (sigc::bind (sigc::mem_fun (win, &ArdourDialog::response), RESPONSE_ACCEPT)); spinner.grab_focus(); hbox.show (); @@ -3379,13 +3319,6 @@ Editor::show_verbose_canvas_cursor_with (const string & txt) track_canvas->get_pointer (x, y); track_canvas->window_to_world (x, y, wx, wy); - /* move it away from the mouse pointer to avoid an - infinite loop of enter/leave events. - */ - - wx += 20; - wy += 20; - /* don't get too close to the edge */ verbose_canvas_cursor->property_x() = clamp_verbose_cursor_x (wx); verbose_canvas_cursor->property_y() = clamp_verbose_cursor_y (wy); @@ -3437,7 +3370,7 @@ Editor::cycle_edit_mode () void Editor::edit_mode_selection_done () { - if (session == 0) { + if (_session == 0) { return; } @@ -3579,16 +3512,12 @@ Editor::zoom_focus_selection_done () focus_type = ZoomFocusRight; } else if (choice == _("Center")) { focus_type = ZoomFocusCenter; - } else if (choice == _("Play")) { + } else if (choice == _("Playhead")) { focus_type = ZoomFocusPlayhead; - } else if (choice == _("Edit")) { - focus_type = ZoomFocusEdit; - } else if (choice == _("Active Mark")) { - focus_type = ZoomFocusEdit; - } else if (choice == _("Active Mark")) { - focus_type = ZoomFocusEdit; - } else { + } else if (choice == _("Mouse")) { focus_type = ZoomFocusMouse; + } else if (choice == _("Edit point")) { + focus_type = ZoomFocusEdit; } RefPtr ract = zoom_focus_action (focus_type); @@ -3619,43 +3548,6 @@ Editor::mouse_select_button_release (GdkEventButton* ev) return true; } -Editor::TrackViewList * -Editor::get_valid_views (TimeAxisView* track, RouteGroup* group) -{ - TrackViewList::iterator i; - - TrackViewList* v = new TrackViewList; - - if (track == 0 && group == 0) { - - /* all views */ - - for (i = track_views.begin(); i != track_views.end (); ++i) { - v->push_back (*i); - } - - } else if ((track != 0 && group == 0) || (track != 0 && group != 0 && !group->active_property (RouteGroup::Select))) { - - /* just the view for this track - */ - - v->push_back (track); - - } else { - - /* views for all tracks in the route group */ - - for (i = track_views.begin(); i != track_views.end (); ++i) { - - if (group == 0 || ((*i)->route_group() == group && group->active_property (RouteGroup::Select))) { - v->push_back (*i); - } - } - } - - return v; -} - void Editor::set_zoom_focus (ZoomFocus f) { @@ -3819,7 +3711,7 @@ Editor::edit_xfade (boost::weak_ptr wxfade) return; } - CrossfadeEditor cew (*session, xfade, xfade->fade_in().get_min_y(), 1.0); + CrossfadeEditor cew (_session, xfade, xfade->fade_in().get_min_y(), 1.0); ensure_float (cew); @@ -3871,8 +3763,8 @@ Editor::get_grid_type_as_beats (bool& success, nframes64_t position) break; case SnapToBar: - if (session) { - return session->tempo_map().meter_at (position).beats_per_bar(); + if (_session) { + return _session->tempo_map().meter_at (position).beats_per_bar(); } break; @@ -3908,7 +3800,7 @@ Editor::get_nudge_distance (nframes64_t pos, nframes64_t& next) void Editor::end_location_changed (Location* location) { - ENSURE_GUI_THREAD (bind (mem_fun(*this, &Editor::end_location_changed), location)); + ENSURE_GUI_THREAD (*this, &Editor::end_location_changed, location) //reset_scrolling_region (); nframes64_t session_span = location->start() + (nframes64_t) floorf (current_page_frames() * 0.10f); horizontal_adjustment.set_upper (session_span / frames_per_unit); @@ -3983,8 +3875,8 @@ Editor::finish_cleanup () Location* Editor::transport_loop_location() { - if (session) { - return session->locations()->auto_loop_location(); + if (_session) { + return _session->locations()->auto_loop_location(); } else { return 0; } @@ -3993,8 +3885,8 @@ Editor::transport_loop_location() Location* Editor::transport_punch_location() { - if (session) { - return session->locations()->auto_punch_location(); + if (_session) { + return _session->locations()->auto_punch_location(); } else { return 0; } @@ -4003,6 +3895,10 @@ Editor::transport_punch_location() bool Editor::control_layout_scroll (GdkEventScroll* ev) { + if (Keyboard::some_magic_widget_has_focus()) { + return false; + } + switch (ev->direction) { case GDK_SCROLL_UP: scroll_tracks_up_line (); @@ -4024,7 +3920,7 @@ Editor::control_layout_scroll (GdkEventScroll* ev) void Editor::session_state_saved (string snap_name) { - ENSURE_GUI_THREAD (bind (mem_fun(*this, &Editor::session_state_saved), snap_name)); + ENSURE_GUI_THREAD (*this, &Editor::session_state_saved, snap_name) _snapshots->redisplay (); } @@ -4081,8 +3977,8 @@ Editor::new_playlists (TimeAxisView* v) { begin_reversible_command (_("new playlists")); vector > playlists; - session->get_playlists(playlists); - mapover_tracks (bind (mem_fun (*this, &Editor::mapped_use_new_playlist), playlists), v, RouteGroup::Edit); + _session->playlists->get (playlists); + mapover_tracks (sigc::bind (sigc::mem_fun (*this, &Editor::mapped_use_new_playlist), playlists), v, RouteGroup::Edit); commit_reversible_command (); } @@ -4097,8 +3993,8 @@ Editor::copy_playlists (TimeAxisView* v) { begin_reversible_command (_("copy playlists")); vector > playlists; - session->get_playlists(playlists); - mapover_tracks (bind (mem_fun (*this, &Editor::mapped_use_copy_playlist), playlists), v, RouteGroup::Edit); + _session->playlists->get (playlists); + mapover_tracks (sigc::bind (sigc::mem_fun (*this, &Editor::mapped_use_copy_playlist), playlists), v, RouteGroup::Edit); commit_reversible_command (); } @@ -4112,8 +4008,8 @@ Editor::clear_playlists (TimeAxisView* v) { begin_reversible_command (_("clear playlists")); vector > playlists; - session->get_playlists(playlists); - mapover_tracks (mem_fun (*this, &Editor::mapped_clear_playlist), v, RouteGroup::Edit); + _session->playlists->get (playlists); + mapover_tracks (sigc::mem_fun (*this, &Editor::mapped_clear_playlist), v, RouteGroup::Edit); commit_reversible_command (); } @@ -4310,14 +4206,8 @@ Editor::post_zoom () } if (mouse_mode == MouseRange && selection->time.start () != selection->time.end_frame ()) { - if (!selection->tracks.empty()) { - for (TrackSelection::iterator i = selection->tracks.begin(); i != selection->tracks.end(); ++i) { - (*i)->reshow_selection (selection->time); - } - } else { - for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) { - (*i)->reshow_selection (selection->time); - } + for (TrackViewList::iterator i = selection->tracks.begin(); i != selection->tracks.end(); ++i) { + (*i)->reshow_selection (selection->time); } } @@ -4325,10 +4215,8 @@ Editor::post_zoom () ZoomChanged (); /* EMIT_SIGNAL */ - reset_hscrollbar_stepping (); - - if (session) { - cef = session->current_end_frame() + (current_page_frames() / 10);// Add a little extra so we can see the end marker + if (_session) { + cef = _session->current_end_frame() + (current_page_frames() / 10);// Add a little extra so we can see the end marker } horizontal_adjustment.set_upper (cef / frames_per_unit); @@ -4353,7 +4241,7 @@ Editor::queue_visual_change (nframes64_t where) can reach. */ - if (where > session->current_end_frame()) { + if (_session && (where > _session->current_end_frame())) { horizontal_adjustment.set_upper ((where + current_page_frames()) / frames_per_unit); } @@ -4369,7 +4257,6 @@ Editor::queue_visual_change (double fpu) pending_visual_change.frames_per_unit = fpu; ensure_visual_change_idle_handler (); - } void @@ -4401,9 +4288,7 @@ Editor::idle_visual_changer () VisualChange::Type p = pending_visual_change.pending; pending_visual_change.pending = (VisualChange::Type) 0; -#ifdef FIX_THIS_FOR_V3 double last_time_origin = horizontal_adjustment.get_value(); -#endif if (p & VisualChange::ZoomLevel) { set_frames_per_unit (pending_visual_change.frames_per_unit); @@ -4423,20 +4308,19 @@ Editor::idle_visual_changer () nframes64_t csf=0, cef=0; nframes64_t current_time_origin = (nframes64_t) floor (horizontal_adjustment.get_value() * frames_per_unit); - if (session) { - csf = session->current_start_frame(); - cef = session->current_end_frame(); + if (_session) { + csf = _session->current_start_frame(); + cef = _session->current_end_frame(); } /* if we seek beyond the current end of the canvas, move the end */ -#ifdef FIX_THIS_FOR_V3 + if (last_time_origin == horizontal_adjustment.get_value() ) { /* changed signal not emitted */ update_fixed_rulers (); redisplay_tempo (true); } -#endif if (current_time_origin != pending_visual_change.time_origin) { cef += current_page_frames() / 10; // Add a little extra so we can see the end marker @@ -4449,7 +4333,7 @@ Editor::idle_visual_changer () _summary->set_overlays_dirty (); - //cerr << "Editor::idle_visual_changer () called ha v:l:u:ps:fpu = " << horizontal_adjustment.get_value() << ":" << horizontal_adjustment.get_lower() << ":" << horizontal_adjustment.get_upper() << ":" << horizontal_adjustment.get_page_size() << ":" << frames_per_unit << endl;//DEBUG + // cerr << "Editor::idle_visual_changer () called ha v:l:u:ps:fpu = " << horizontal_adjustment.get_value() << ":" << horizontal_adjustment.get_lower() << ":" << horizontal_adjustment.get_upper() << ":" << horizontal_adjustment.get_page_size() << ":" << frames_per_unit << endl;//DEBUG pending_visual_change.idle_handler_id = -1; return 0; /* this is always a one-shot call */ } @@ -4461,7 +4345,7 @@ struct EditorOrderTimeAxisSorter { }; void -Editor::sort_track_selection (TrackSelection* sel) +Editor::sort_track_selection (TrackViewList* sel) { EditorOrderTimeAxisSorter cmp; @@ -4489,7 +4373,7 @@ Editor::get_preferred_edit_position (bool ignore_playhead) switch (ep) { case EditAtPlayhead: - where = session->audible_frame(); + where = _session->audible_frame(); break; case EditAtSelectedMarker: @@ -4523,7 +4407,7 @@ Editor::get_preferred_edit_position (bool ignore_playhead) void Editor::set_loop_range (nframes64_t start, nframes64_t end, string cmd) { - if (!session) return; + if (!_session) return; begin_reversible_command (cmd); @@ -4531,17 +4415,17 @@ Editor::set_loop_range (nframes64_t start, nframes64_t end, string cmd) if ((tll = transport_loop_location()) == 0) { Location* loc = new Location (start, end, _("Loop"), Location::IsAutoLoop); - XMLNode &before = session->locations()->get_state(); - session->locations()->add (loc, true); - session->set_auto_loop_location (loc); - XMLNode &after = session->locations()->get_state(); - session->add_command (new MementoCommand(*(session->locations()), &before, &after)); + XMLNode &before = _session->locations()->get_state(); + _session->locations()->add (loc, true); + _session->set_auto_loop_location (loc); + XMLNode &after = _session->locations()->get_state(); + _session->add_command (new MementoCommand(*(_session->locations()), &before, &after)); } else { XMLNode &before = tll->get_state(); tll->set_hidden (false, this); tll->set (start, end); XMLNode &after = tll->get_state(); - session->add_command (new MementoCommand(*tll, &before, &after)); + _session->add_command (new MementoCommand(*tll, &before, &after)); } commit_reversible_command (); @@ -4550,7 +4434,7 @@ Editor::set_loop_range (nframes64_t start, nframes64_t end, string cmd) void Editor::set_punch_range (nframes64_t start, nframes64_t end, string cmd) { - if (!session) return; + if (!_session) return; begin_reversible_command (cmd); @@ -4558,18 +4442,18 @@ Editor::set_punch_range (nframes64_t start, nframes64_t end, string cmd) if ((tpl = transport_punch_location()) == 0) { Location* loc = new Location (start, end, _("Loop"), Location::IsAutoPunch); - XMLNode &before = session->locations()->get_state(); - session->locations()->add (loc, true); - session->set_auto_loop_location (loc); - XMLNode &after = session->locations()->get_state(); - session->add_command (new MementoCommand(*(session->locations()), &before, &after)); + XMLNode &before = _session->locations()->get_state(); + _session->locations()->add (loc, true); + _session->set_auto_loop_location (loc); + XMLNode &after = _session->locations()->get_state(); + _session->add_command (new MementoCommand(*(_session->locations()), &before, &after)); } else { XMLNode &before = tpl->get_state(); tpl->set_hidden (false, this); tpl->set (start, end); XMLNode &after = tpl->get_state(); - session->add_command (new MementoCommand(*tpl, &before, &after)); + _session->add_command (new MementoCommand(*tpl, &before, &after)); } commit_reversible_command (); @@ -4581,9 +4465,9 @@ Editor::set_punch_range (nframes64_t start, nframes64_t end, string cmd) * @param ts Tracks to look on; if this is empty, all tracks are examined. */ void -Editor::get_regions_at (RegionSelection& rs, nframes64_t where, const TrackSelection& ts) const +Editor::get_regions_at (RegionSelection& rs, nframes64_t where, const TrackViewList& ts) const { - const TrackSelection* tracks; + const TrackViewList* tracks; if (ts.empty()) { tracks = &track_views; @@ -4591,7 +4475,7 @@ Editor::get_regions_at (RegionSelection& rs, nframes64_t where, const TrackSelec tracks = &ts; } - for (TrackSelection::const_iterator t = tracks->begin(); t != tracks->end(); ++t) { + for (TrackViewList::const_iterator t = tracks->begin(); t != tracks->end(); ++t) { RouteTimeAxisView* rtv = dynamic_cast(*t); if (rtv) { boost::shared_ptr ds; @@ -4616,9 +4500,9 @@ Editor::get_regions_at (RegionSelection& rs, nframes64_t where, const TrackSelec } void -Editor::get_regions_after (RegionSelection& rs, nframes64_t where, const TrackSelection& ts) const +Editor::get_regions_after (RegionSelection& rs, nframes64_t where, const TrackViewList& ts) const { - const TrackSelection* tracks; + const TrackViewList* tracks; if (ts.empty()) { tracks = &track_views; @@ -4626,7 +4510,7 @@ Editor::get_regions_after (RegionSelection& rs, nframes64_t where, const TrackSe tracks = &ts; } - for (TrackSelection::const_iterator t = tracks->begin(); t != tracks->end(); ++t) { + for (TrackViewList::const_iterator t = tracks->begin(); t != tracks->end(); ++t) { RouteTimeAxisView* rtv = dynamic_cast(*t); if (rtv) { boost::shared_ptr ds; @@ -4673,22 +4557,25 @@ Editor::get_regions_for_action (RegionSelection& rs, bool allow_entered, bool al if (allow_edit_position) { - TrackSelection tracks = selection->tracks; + TrackViewList tracks = selection->tracks; /* tracks is currently the set of selected tracks; add any other tracks that * have regions that are in the same edit-activated route group as one of * our regions */ for (RegionSelection::iterator i = rs.begin (); i != rs.end(); ++i) { - RouteGroup* g = (*i)->get_time_axis_view().route_group (); - if (g && g->active_property (RouteGroup::Edit)) { - tracks.add (axis_views_from_routes (g->route_list())); - } + RouteGroup* g = (*i)->get_time_axis_view().route_group (); + if (g && g->active_property (RouteGroup::Edit)) { + tracks.add (axis_views_from_routes (g->route_list())); + } + } - /* now find regions that are at the edit position on those tracks */ - nframes64_t const where = get_preferred_edit_position (); - get_regions_at (rs, where, tracks); + if (!tracks.empty()) { + /* now find regions that are at the edit position on those tracks */ + nframes64_t const where = get_preferred_edit_position (); + get_regions_at (rs, where, tracks); + } } } @@ -4732,26 +4619,16 @@ Editor::show_rhythm_ferret () rhythm_ferret = new RhythmFerret(*this); } - rhythm_ferret->set_session (session); + rhythm_ferret->set_session (_session); rhythm_ferret->show (); rhythm_ferret->present (); } -void -Editor::show_bundle_manager () -{ - if (_bundle_manager == 0) { - _bundle_manager = new BundleManager (*session); - } - - _bundle_manager->show (); -} - void Editor::show_global_port_matrix (ARDOUR::DataType t) { if (_global_port_matrix[t] == 0) { - _global_port_matrix[t] = new GlobalPortMatrixWindow (*session, t); + _global_port_matrix[t] = new GlobalPortMatrixWindow (_session, t); } _global_port_matrix[t]->show (); @@ -4809,7 +4686,7 @@ Editor::add_to_idle_resize (TimeAxisView* view, int32_t h) min_resulting = min (min_resulting, int32_t (_pending_resize_view->current_height()) + _pending_resize_amount); if (selection->tracks.contains (_pending_resize_view)) { - for (TrackSelection::iterator i = selection->tracks.begin(); i != selection->tracks.end(); ++i) { + for (TrackViewList::iterator i = selection->tracks.begin(); i != selection->tracks.end(); ++i) { min_resulting = min (min_resulting, int32_t ((*i)->current_height()) + _pending_resize_amount); } } @@ -4833,7 +4710,7 @@ Editor::idle_resize () if (dynamic_cast (_pending_resize_view) == 0 && selection->tracks.contains (_pending_resize_view)) { - for (TrackSelection::iterator i = selection->tracks.begin(); i != selection->tracks.end(); ++i) { + for (TrackViewList::iterator i = selection->tracks.begin(); i != selection->tracks.end(); ++i) { if (*i != _pending_resize_view) { (*i)->idle_resize ((*i)->current_height() + _pending_resize_amount); } @@ -4850,7 +4727,7 @@ Editor::idle_resize () void Editor::located () { - ENSURE_GUI_THREAD (mem_fun (*this, &Editor::located)); + ENSURE_GUI_THREAD (*this, &Editor::located) _pending_locate_request = false; } @@ -4868,12 +4745,12 @@ Editor::streamview_height_changed () } TimeAxisView* -Editor::axis_view_from_route (Route* r) const +Editor::axis_view_from_route (boost::shared_ptr r) const { TrackViewList::const_iterator j = track_views.begin (); while (j != track_views.end()) { RouteTimeAxisView* rtv = dynamic_cast (*j); - if (rtv && rtv->route().get() == r) { + if (rtv && rtv->route() == r) { return rtv; } ++j; @@ -4883,12 +4760,12 @@ Editor::axis_view_from_route (Route* r) const } -TrackSelection -Editor::axis_views_from_routes (list r) const +TrackViewList +Editor::axis_views_from_routes (boost::shared_ptr r) const { - TrackSelection t; + TrackViewList t; - for (list::const_iterator i = r.begin(); i != r.end(); ++i) { + for (RouteList::const_iterator i = r->begin(); i != r->end(); ++i) { TimeAxisView* tv = axis_view_from_route (*i); if (tv) { t.push_back (tv); @@ -4902,7 +4779,7 @@ Editor::axis_views_from_routes (list r) const void Editor::handle_new_route (RouteList& routes) { - ENSURE_GUI_THREAD (bind (mem_fun (*this, &Editor::handle_new_route), routes)); + ENSURE_GUI_THREAD (*this, &Editor::handle_new_route, routes) RouteTimeAxisView *rtv; list new_views; @@ -4917,9 +4794,9 @@ Editor::handle_new_route (RouteList& routes) DataType dt = route->input()->default_type(); if (dt == ARDOUR::DataType::AUDIO) { - rtv = new AudioTimeAxisView (*this, *session, route, *track_canvas); + rtv = new AudioTimeAxisView (*this, _session, route, *track_canvas); } else if (dt == ARDOUR::DataType::MIDI) { - rtv = new MidiTimeAxisView (*this, *session, route, *track_canvas); + rtv = new MidiTimeAxisView (*this, _session, route, *track_canvas); } else { throw unknown_type(); } @@ -4929,10 +4806,10 @@ Editor::handle_new_route (RouteList& routes) rtv->effective_gain_display (); - rtv->view()->RegionViewAdded.connect (mem_fun (*this, &Editor::region_view_added)); - rtv->view()->HeightChanged.connect (mem_fun (*this, &Editor::streamview_height_changed)); + rtv->view()->RegionViewAdded.connect (sigc::mem_fun (*this, &Editor::region_view_added)); + rtv->view()->HeightChanged.connect (sigc::mem_fun (*this, &Editor::streamview_height_changed)); - rtv->GoingAway.connect (bind (mem_fun(*this, &Editor::remove_route), rtv)); + rtv->GoingAway.connect (*this, boost::bind (&Editor::remove_route, this, rtv)); } _routes->routes_added (new_views); @@ -4949,7 +4826,7 @@ Editor::handle_new_route (RouteList& routes) void Editor::remove_route (TimeAxisView *tv) { - ENSURE_GUI_THREAD(bind (mem_fun(*this, &Editor::remove_route), tv)); + ENSURE_GUI_THREAD (*this, &Editor::remove_route, tv) TrackViewList::iterator i; @@ -5008,7 +4885,7 @@ Editor::hide_track_in_display (TimeAxisView& tv, bool /*temponly*/) bool Editor::sync_track_view_list_and_routes () { - track_views = TrackSelection (_routes->views ()); + track_views = TrackViewList (_routes->views ()); _summary->set_dirty (); _group_tabs->set_dirty (); @@ -5043,7 +4920,7 @@ Editor::get_route_view_by_id (PBD::ID& id) void Editor::fit_route_group (RouteGroup *g) { - TrackSelection ts = axis_views_from_routes (g->route_list ()); + TrackViewList ts = axis_views_from_routes (g->route_list ()); fit_tracks (ts); } @@ -5053,18 +4930,18 @@ Editor::consider_auditioning (boost::shared_ptr region) boost::shared_ptr r = boost::dynamic_pointer_cast (region); if (r == 0) { - session->cancel_audition (); + _session->cancel_audition (); return; } - if (session->is_auditioning()) { - session->cancel_audition (); + if (_session->is_auditioning()) { + _session->cancel_audition (); if (r == last_audition_region) { return; } } - session->audition_region (r); + _session->audition_region (r); last_audition_region = r; } @@ -5078,25 +4955,25 @@ Editor::hide_a_region (boost::shared_ptr r) void Editor::remove_a_region (boost::shared_ptr r) { - session->remove_region_from_region_list (r); + _session->remove_region_from_region_list (r); } void Editor::audition_region_from_region_list () { - _regions->selection_mapover (mem_fun (*this, &Editor::consider_auditioning)); + _regions->selection_mapover (sigc::mem_fun (*this, &Editor::consider_auditioning)); } void Editor::hide_region_from_region_list () { - _regions->selection_mapover (mem_fun (*this, &Editor::hide_a_region)); + _regions->selection_mapover (sigc::mem_fun (*this, &Editor::hide_a_region)); } void Editor::start_step_editing () { - step_edit_connection = Glib::signal_timeout().connect (mem_fun (*this, &Editor::check_step_edit), 20); + step_edit_connection = Glib::signal_timeout().connect (sigc::mem_fun (*this, &Editor::check_step_edit), 20); } void @@ -5117,3 +4994,20 @@ Editor::check_step_edit () return true; // do it again, till we stop } + +void +Editor::horizontal_scroll_left () +{ + double x = leftmost_position() - current_page_frames() / 5; + if (x < 0) { + x = 0; + } + + reset_x_origin (x); +} + +void +Editor::horizontal_scroll_right () +{ + reset_x_origin (leftmost_position() + current_page_frames() / 5); +}