"sequence regions" operation (remove space between selected regions) added, c/o Thoma...
authorPaul Davis <paul@linuxaudiosystems.com>
Tue, 29 Apr 2014 04:11:05 +0000 (00:11 -0400)
committerPaul Davis <paul@linuxaudiosystems.com>
Tue, 29 Apr 2014 04:11:05 +0000 (00:11 -0400)
gtk2_ardour/ardour.menus.in
gtk2_ardour/editor.h
gtk2_ardour/editor_actions.cc
gtk2_ardour/editor_ops.cc

index 6c5e08c8f8dc02c3dd2e19ae05885bb71285a325..6d08937cf05547e162e8360fd2425ddb9d693012 100644 (file)
         <menuitem action='nudge-backward'/>
         <menuitem action='nudge-forward-by-capture-offset'/>
         <menuitem action='nudge-backward-by-capture-offset'/>
+       <menuitem action='sequence-regions'/>
       </menu>
       <menu action='RegionMenuTrim'>
         <menuitem action='trim-front'/>
       <menuitem action='nudge-backward'/>
       <menuitem action='nudge-forward-by-capture-offset'/>
       <menuitem action='nudge-backward-by-capture-offset'/>
+      <menuitem action='sequence-regions'/>
     </menu>
     <menu action='RegionMenuTrim'>
       <menuitem action='trim-front'/>
index f3f6bfeee71f82c23f3a4bb9dd79b7e70b33e818..1398936979151d3a31207efad60c46b3e081e805 100644 (file)
@@ -319,6 +319,8 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
        void nudge_forward_capture_offset ();
        void nudge_backward_capture_offset ();
 
+       void sequence_regions ();
+
        /* playhead/screen stuff */
 
        void set_stationary_playhead (bool yn);
index 674952781d2d1472758703dd74cc2829852d0b33..48d56193a62226d7df4468ff197f7a95777c5a24 100644 (file)
@@ -1897,6 +1897,8 @@ Editor::register_region_actions ()
        reg_sens (_region_actions, "nudge-forward", _("Nudge Later"), sigc::bind (sigc::mem_fun (*this, &Editor::nudge_forward), false, false));
        reg_sens (_region_actions, "nudge-backward", _("Nudge Earlier"), sigc::bind (sigc::mem_fun (*this, &Editor::nudge_backward), false, false));
 
+       reg_sens (_region_actions, "sequence-regions", _("Sequence Regions"), sigc::mem_fun (*this, &Editor::sequence_regions));
+
        reg_sens (
                _region_actions,
                "nudge-forward-by-capture-offset",
index f7dc46659a11de94952b07b213a81f8af348b71c..08d6297faae3162c388f7a76b9cf411307d224b1 100644 (file)
@@ -512,6 +512,60 @@ Editor::nudge_backward_capture_offset ()
        commit_reversible_command ();
 }
 
+struct RegionSelectionPositionSorter {
+        bool operator() (RegionView* a, RegionView* b) {
+                return a->region()->position() < b->region()->position();
+        }
+};
+
+void
+Editor::sequence_regions ()
+{
+       framepos_t r_end;
+       framepos_t r_end_prev;
+
+       int iCount=0;
+
+       if (!_session) {
+               return;
+       }
+
+       RegionSelection rs = get_regions_from_selection_and_entered ();
+       rs.sort(RegionSelectionPositionSorter());
+
+       if (!rs.empty()) {
+
+               begin_reversible_command (_("sequence regions"));
+               for (RegionSelection::iterator i = rs.begin(); i != rs.end(); ++i) {
+                       boost::shared_ptr<Region> r ((*i)->region());
+
+                       r->clear_changes();
+
+                       if(r->locked())
+                       {
+                               continue;
+                       }
+                       if(r->position_locked())
+                       {
+                               continue;
+                       }
+                       if(iCount>0)
+                       {
+                               r_end_prev=r_end;
+                               r->set_position(r_end_prev);
+                       }
+
+                       _session->add_command (new StatefulDiffCommand (r));
+
+                       r_end=r->position() + r->length();
+
+                       iCount++;
+               }
+               commit_reversible_command ();
+       } 
+} 
+
+
 /* DISPLAY MOTION */
 
 void