Only show user-presets in favorite sidebar
[ardour.git] / gtk2_ardour / editor_ops.cc
index 3e757297a93eefa1929905deec8b67dfa60de00e..7a528929a8143453a4b759e6cee6f71d6c30ce3f 100644 (file)
 #include "ardour/legatize.h"
 #include "ardour/region_factory.h"
 #include "ardour/reverse.h"
+#include "ardour/selection.h"
 #include "ardour/session.h"
 #include "ardour/session_playlists.h"
 #include "ardour/strip_silence.h"
 #include "ardour/transient_detector.h"
+#include "ardour/transport_master_manager.h"
 #include "ardour/transpose.h"
 #include "ardour/vca_manager.h"
 
 #include "transpose_dialog.h"
 #include "transform_dialog.h"
 #include "ui_config.h"
+#include "utils.h"
 #include "vca_time_axis.h"
 
 #include "pbd/i18n.h"
@@ -730,6 +733,7 @@ Editor::build_region_boundary_cache ()
 
        /* if no snap selections are set, boundary cache should be left empty */
        if ( interesting_points.empty() ) {
+               _region_boundary_cache_dirty = false;
                return;
        }
 
@@ -753,7 +757,7 @@ Editor::build_region_boundary_cache ()
        if (ARDOUR_UI::instance()->video_timeline) {
                region_boundary_cache.push_back (ARDOUR_UI::instance()->video_timeline->get_video_start_offset());
        }
-       
+
        std::pair<samplepos_t, samplepos_t> ext = session_gui_extents (false);
        samplepos_t session_end = ext.second;
 
@@ -2593,7 +2597,7 @@ Editor::transition_to_rolling (bool fwd)
        }
 
        if (_session->config.get_external_sync()) {
-               switch (Config->get_sync_source()) {
+               switch (TransportMasterManager::instance().current()->type()) {
                case Engine:
                        break;
                default:
@@ -6422,79 +6426,13 @@ Editor::split_region ()
 void
 Editor::select_next_stripable (bool routes_only)
 {
-       if (selection->tracks.empty()) {
-               selection->set (track_views.front());
-               return;
-       }
-
-       TimeAxisView* current = selection->tracks.front();
-
-       bool valid;
-       do {
-               for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) {
-
-                       if (*i == current) {
-                               ++i;
-                               if (i != track_views.end()) {
-                                       current = (*i);
-                               } else {
-                                       current = (*(track_views.begin()));
-                                       //selection->set (*(track_views.begin()));
-                               }
-                               break;
-                       }
-               }
-
-               if (routes_only) {
-                       RouteUI* rui = dynamic_cast<RouteUI *>(current);
-                       valid = rui && rui->route()->active();
-               } else {
-                       valid = 0 != current->stripable ().get();
-               }
-
-       } while (current->hidden() || !valid);
-
-       selection->set (current);
-
-       ensure_time_axis_view_is_visible (*current, false);
+       _session->selection().select_next_stripable (false, routes_only);
 }
 
 void
 Editor::select_prev_stripable (bool routes_only)
 {
-       if (selection->tracks.empty()) {
-               selection->set (track_views.front());
-               return;
-       }
-
-       TimeAxisView* current = selection->tracks.front();
-
-       bool valid;
-       do {
-               for (TrackViewList::reverse_iterator i = track_views.rbegin(); i != track_views.rend(); ++i) {
-
-                       if (*i == current) {
-                               ++i;
-                               if (i != track_views.rend()) {
-                                       current = (*i);
-                               } else {
-                                       current = *(track_views.rbegin());
-                               }
-                               break;
-                       }
-               }
-               if (routes_only) {
-                       RouteUI* rui = dynamic_cast<RouteUI *>(current);
-                       valid = rui && rui->route()->active();
-               } else {
-                       valid = 0 != current->stripable ().get();
-               }
-
-       } while (current->hidden() || !valid);
-
-       selection->set (current);
-
-       ensure_time_axis_view_is_visible (*current, false);
+       _session->selection().select_prev_stripable (false, routes_only);
 }
 
 void
@@ -7366,15 +7304,15 @@ Editor::playhead_forward_to_grid ()
                        _session->request_locate (0);
                }
        } else {
-               
+
                if (pos.sample < max_samplepos - 1) {
                        pos.sample += 2;
-                       snap_to_internal (pos, RoundUpAlways, SnapToGrid_Scaled, true);
+                       pos = snap_to_grid (pos, RoundUpAlways, SnapToGrid_Scaled);
                        _session->request_locate (pos.sample);
                }
        }
 
-       
+
        /* keep PH visible in window */
        if (pos.sample > (_leftmost_sample + current_page_samples() *0.9)) {
                reset_x_origin (pos.sample - (current_page_samples()*0.9));
@@ -7399,23 +7337,23 @@ Editor::playhead_backward_to_grid ()
                        _session->request_locate (0);
                }
        } else {
-               
+
                if (pos.sample > 2) {
                        pos.sample -= 2;
-                       snap_to_internal (pos, RoundDownAlways, SnapToGrid_Scaled, true);
+                       pos = snap_to_grid (pos, RoundDownAlways, SnapToGrid_Scaled);
                }
 
                //handle the case where we are rolling, and we're less than one-half second past the mark, we want to go to the prior mark...
                //also see:  jump_backward_to_mark
                if (_session->transport_rolling()) {
                        if ((playhead_cursor->current_sample() - pos.sample) < _session->sample_rate()/2) {
-                               snap_to_internal (pos, RoundDownAlways, SnapToGrid_Scaled, true);
+                               pos = snap_to_grid (pos, RoundDownAlways, SnapToGrid_Scaled);
                        }
                }
 
                _session->request_locate (pos.sample, _session->transport_rolling());
        }
-       
+
        /* keep PH visible in window */
        if (pos.sample < (_leftmost_sample + current_page_samples() *0.1)) {
                reset_x_origin (pos.sample - (current_page_samples()*0.1));
@@ -7483,6 +7421,10 @@ Editor::_remove_tracks ()
                return;
        }
 
+       if (!ARDOUR_UI_UTILS::engine_is_running ()) {
+               return;
+       }
+
        vector<string> choices;
        string prompt;
        int ntracks = 0;