remove obsolete jack includes in libardour
[ardour.git] / gtk2_ardour / editor_ops.cc
index 37ffcb83d4b9089ec7c18b260f1e710760b1443f..b3b6b0bb452305f22c06fa68d47e7e452659ab07 100644 (file)
@@ -47,6 +47,7 @@
 #include "ardour/midi_track.h"
 #include "ardour/operations.h"
 #include "ardour/playlist_factory.h"
+#include "ardour/profile.h"
 #include "ardour/quantize.h"
 #include "ardour/region_factory.h"
 #include "ardour/reverse.h"
@@ -136,7 +137,7 @@ Editor::split_regions_at (framepos_t where, RegionSelection& regions)
 
        RegionSelection pre_selected_regions = selection->regions;
        bool working_on_selection = !pre_selected_regions.empty();
-       
+
        list<boost::shared_ptr<Playlist> > used_playlists;
        list<RouteTimeAxisView*> used_trackviews;
 
@@ -236,14 +237,15 @@ Editor::split_regions_at (framepos_t where, RegionSelection& regions)
                EditorThaw(); /* Emit Signal */
        }
 
-       //IFF we were working on selected regions, try to reinstate the other region selections that existed before the freeze/thaw.
-       _ignore_follow_edits = true;  //a split will change the region selection in mysterious ways;  its not practical or wanted to follow this edit
-       if( working_on_selection ) {
-               selection->add ( pre_selected_regions );
-               selection->add (latest_regionviews);  //these are the new regions created after the split
+       if (ARDOUR::Profile->get_mixbus()) {
+               //IFF we were working on selected regions, try to reinstate the other region selections that existed before the freeze/thaw.
+               _ignore_follow_edits = true;  //a split will change the region selection in mysterious ways;  its not practical or wanted to follow this edit
+               if( working_on_selection ) {
+                       selection->add ( pre_selected_regions );
+                       selection->add (latest_regionviews);  //these are the new regions created after the split
+               }
+               _ignore_follow_edits = false;
        }
-       _ignore_follow_edits = false;
-
 }
 
 /** Move one extreme of the current range selection.  If more than one range is selected,
@@ -1638,14 +1640,14 @@ Editor::calc_extra_zoom_edges(framepos_t &start, framepos_t &end)
        */
 
        GdkScreen* screen = gdk_screen_get_default ();
-       gint pixwidth = gdk_screen_get_width (screen);
-       gint mmwidth = gdk_screen_get_width_mm (screen);
-       double pix_per_mm = (double) pixwidth/ (double) mmwidth;
-       double one_centimeter_in_pixels = pix_per_mm * 10.0;
+       const gint pixwidth = gdk_screen_get_width (screen);
+       const gint mmwidth = gdk_screen_get_width_mm (screen);
+       const double pix_per_mm = (double) pixwidth/ (double) mmwidth;
+       const double one_centimeter_in_pixels = pix_per_mm * 10.0;
 
-       framepos_t range = end - start;
-       double new_fpp = (double) range / (double) _visible_canvas_width;
-       framepos_t extra_samples = (framepos_t) floor (one_centimeter_in_pixels * new_fpp);
+       const framepos_t range = end - start;
+       const framecnt_t new_fpp = (framecnt_t) ceil ((double) range / (double) _visible_canvas_width);
+       const framepos_t extra_samples = (framepos_t) floor (one_centimeter_in_pixels * new_fpp);
 
        if (start > extra_samples) {
                start -= extra_samples;
@@ -1660,7 +1662,6 @@ Editor::calc_extra_zoom_edges(framepos_t &start, framepos_t &end)
        }
 }
 
-
 void
 Editor::temporal_zoom_region (bool both_axes)
 {
@@ -1691,7 +1692,7 @@ Editor::temporal_zoom_region (bool both_axes)
                return;
        }
 
-       calc_extra_zoom_edges(start, end);
+       calc_extra_zoom_edges (start, end);
 
        /* if we're zooming on both axes we need to save track heights etc.
         */
@@ -1752,7 +1753,7 @@ Editor::temporal_zoom_selection (bool both_axes)
                        fit_selected_tracks();
 
        } else {
-               temporal_zoom_region(both_axes);
+               temporal_zoom_region (both_axes);
        }
 
 
@@ -1767,6 +1768,18 @@ Editor::temporal_zoom_session ()
                framecnt_t start = _session->current_start_frame();
                framecnt_t end = _session->current_end_frame();
 
+               if (_session->actively_recording () ) {
+                       framepos_t cur = playhead_cursor->current_frame ();
+                       if (cur > end) {
+                               /* recording beyond the end marker; zoom out
+                                * by 5 seconds more so that if 'follow
+                                * playhead' is active we don't immediately
+                                * scroll.
+                                */
+                               end = cur + _session->frame_rate() * 5;
+                       }
+               }
+
                if ((start == 0 && end == 0) || end < start) {
                        return;
                }
@@ -1788,9 +1801,9 @@ Editor::temporal_zoom_by_frame (framepos_t start, framepos_t end)
 
        framepos_t range = end - start;
 
-       double const new_fpp = (double) range / (double) _visible_canvas_width;
-
-       framepos_t new_page = (framepos_t) floor (_visible_canvas_width * new_fpp);
+       const framecnt_t new_fpp = (framecnt_t) ceil ((double) range / (double) _visible_canvas_width);
+       
+       framepos_t new_page = range;
        framepos_t middle = (framepos_t) floor ((double) start + ((double) range / 2.0f));
        framepos_t new_leftmost = (framepos_t) floor ((double) middle - ((double) new_page / 2.0f));
 
@@ -2107,15 +2120,7 @@ Editor::clear_ranges ()
                _session->begin_reversible_command (_("clear ranges"));
                XMLNode &before = _session->locations()->get_state();
 
-               Location * looploc = _session->locations()->auto_loop_location();
-               Location * punchloc = _session->locations()->auto_punch_location();
-               Location * sessionloc = _session->locations()->session_range_location();
-
                _session->locations()->clear_ranges ();
-               // re-add these
-               if (looploc) _session->locations()->add (looploc);
-               if (punchloc) _session->locations()->add (punchloc);
-               if (sessionloc) _session->locations()->add (sessionloc);
 
                XMLNode &after = _session->locations()->get_state();
                _session->add_command(new MementoCommand<Locations>(*(_session->locations()), &before, &after));
@@ -2358,8 +2363,8 @@ Editor::loop_location (Location& location)
                tll->set (location.start(), location.end());
 
                // enable looping, reposition and start rolling
-               _session->request_play_loop (true);
                _session->request_locate (tll->start(), true);
+               _session->request_play_loop (true);
        }
 }
 
@@ -5713,8 +5718,8 @@ Editor::set_loop_from_selection (bool play)
        set_loop_range (start, end,  _("set loop range from selection"));
 
        if (play) {
-               _session->request_play_loop (true);
                _session->request_locate (start, true);
+               _session->request_play_loop (true);
        }
 }
 
@@ -5735,8 +5740,8 @@ Editor::set_loop_from_edit_range (bool play)
        set_loop_range (start, end,  _("set loop range from edit range"));
 
        if (play) {
-               _session->request_play_loop (true);
                _session->request_locate (start, true);
+               _session->request_play_loop (true);
        }
 }
 
@@ -5764,8 +5769,8 @@ Editor::set_loop_from_region (bool play)
        set_loop_range (start, end, _("set loop range from region"));
 
        if (play) {
-               _session->request_play_loop (true);
                _session->request_locate (start, true);
+               _session->request_play_loop (true);
        }
 }
 
@@ -6561,6 +6566,7 @@ edit your ardour.rc file to set the\n\
                return;
        }
 
+       // XXX should be using gettext plural forms, maybe?
        if (ntracks > 1) {
                trackstr = _("tracks");
        } else {
@@ -6587,7 +6593,7 @@ edit your ardour.rc file to set the\n\
                }
        } else if (nbusses) {
                prompt  = string_compose (_("Do you really want to remove %1 %2?\n\n"
-                                           "This action cannot be undon, and the session file will be overwritten"),
+                                           "This action cannot be undone, and the session file will be overwritten"),
                                          nbusses, busstr);
        }
 
@@ -6613,6 +6619,7 @@ edit your ardour.rc file to set the\n\
 
        {
                Session::StateProtector sp (_session);
+               DisplaySuspender ds;
                for (vector<boost::shared_ptr<Route> >::iterator x = routes.begin(); x != routes.end(); ++x) {
                        _session->remove_route (*x);
                }
@@ -7074,7 +7081,7 @@ Editor::lock ()
 
                ArdourButton* b = manage (new ArdourButton);
                b->set_name ("lock button");
-               b->set_markup (string_compose ("<span size=\"large\" weight=\"bold\">%1</span>", _("Click to unlock")));
+               b->set_text (_("Click to unlock"));
                b->signal_clicked.connect (sigc::mem_fun (*this, &Editor::unlock));
                lock_dialog->get_vbox()->pack_start (*b);