Add reset region gain action for selected regions
[ardour.git] / gtk2_ardour / editor_ops.cc
index 67f90fd43ddf446268925ecc2065dee9c7fa16e1..2b8a5fd018d0ddeac39d5abc9fd0cee4098e1ca1 100644 (file)
@@ -5217,6 +5217,38 @@ Editor::adjust_region_gain (bool up)
        }
 }
 
+void
+Editor::reset_region_gain ()
+{
+       RegionSelection rs = get_regions_from_selection_and_entered ();
+
+       if (!_session || rs.empty()) {
+               return;
+       }
+
+       bool in_command = false;
+
+       for (RegionSelection::iterator r = rs.begin(); r != rs.end(); ++r) {
+               AudioRegionView* const arv = dynamic_cast<AudioRegionView*>(*r);
+               if (!arv) {
+                       continue;
+               }
+
+               arv->region()->clear_changes ();
+
+               arv->audio_region()->set_scale_amplitude (1.0f);
+
+               if (!in_command) {
+                               begin_reversible_command ("reset region gain");
+                               in_command = true;
+               }
+               _session->add_command (new StatefulDiffCommand (arv->region()));
+       }
+
+       if (in_command) {
+               commit_reversible_command ();
+       }
+}
 
 void
 Editor::reverse_region ()
@@ -7485,6 +7517,11 @@ Editor::insert_time (
                        (*i)->clear_changes ();
                        (*i)->clear_owned_changes ();
 
+                       if (!in_command) {
+                               begin_reversible_command (_("insert time"));
+                               in_command = true;
+                       }
+
                        if (opt == SplitIntersected) {
                                /* non musical split */
                                (*i)->split (MusicFrame (pos, 0));
@@ -7492,10 +7529,6 @@ Editor::insert_time (
 
                        (*i)->shift (pos, frames, (opt == MoveIntersected), ignore_music_glue);
 
-                       if (!in_command) {
-                               begin_reversible_command (_("insert time"));
-                               in_command = true;
-                       }
                        vector<Command*> cmds;
                        (*i)->rdiff (cmds);
                        _session->add_commands (cmds);